Stlink: فشل التجميع مع GCC 11

تم إنشاؤها على ٩ ديسمبر ٢٠٢٠  ·  7تعليقات  ·  مصدر: stlink-org/stlink

لا يمكنني بناء stlink 1.6.1 مع مترجم GCC 11. Fedora GNU / Linux Rawhide.
الأخطاء هي:

/builddir/build/BUILD/stlink-1.6.1/src/st-util/gdb-server.c:90:22: error: 'stlink_open_usb' accessing 64 bytes in a region of size 28 [-Werror=stringop-overflow=]
   90 |                 sl = stlink_open_usb(st->logging_level, st->reset, serialnumber, 0);
      |                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/builddir/build/BUILD/stlink-1.6.1/src/st-util/gdb-server.c: In function 'serve':
/builddir/build/BUILD/stlink-1.6.1/src/st-util/gdb-server.c:90:22: note: referencing argument 3 of type 'char *'
In file included from /builddir/build/BUILD/stlink-1.6.1/include/stlink.h:297,
                 from /builddir/build/BUILD/stlink-1.6.1/src/st-util/gdb-server.c:27:
/builddir/build/BUILD/stlink-1.6.1/src/usb.h:71:15: note: in a call to function 'stlink_open_usb'
   71 |     stlink_t *stlink_open_usb(enum ugly_loglevel verbose, int reset, char serial[STLINK_SERIAL_MAX_SIZE], int freq);
      |               ^~~~~~~~~~~~~~~
In function 'do_connect',
    inlined from 'do_connect' at /builddir/build/BUILD/stlink-1.6.1/src/st-util/gdb-server.c:87:18,
    inlined from 'main' at /builddir/build/BUILD/stlink-1.6.1/src/st-util/gdb-server.c:212:10:
/builddir/build/BUILD/stlink-1.6.1/src/st-util/gdb-server.c:90:22: error: 'stlink_open_usb' accessing 64 bytes in a region of size 28 [-Werror=stringop-overflow=]
   90 |                 sl = stlink_open_usb(st->logging_level, st->reset, serialnumber, 0);
      |                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

الرجاء مساعدتي في تصحيحها.

bucompilation buneeds-fix olinux staturesolved

ال 7 كومينتر

قد يكون STLINK_SERIAL_MAX_SIZE يجب تعيين التعريف إلى 28 ؟

يمكنك إصلاح src/st-util/gdb-server.c :

static char serialnumber[28] = {0};

ل

static char serialnumber[STLINK_SERIAL_MAX_SIZE] = {0};

أنا أفضل رؤية الإصلاح في المنبع.

تضمين التغريدة ولكن لإصلاحه في المنبع ، تحتاج إلى التحقق من أعماله.

ملاحظة لقد أنشأت وصفًا للمشكلة لا يتوافق مع أحد النماذج. @ Nightwalker-87 قد تحذفها. انظر # 906

نعم إنه يعمل.

القالب لا يهتم بتجميع المشاكل.

من المفترض أن يتم استخدام النموذج وتعبئته بالمحتوى الذي يتضمن أيضًا وصفًا. لذا يرجى النظر في هذا في المرة القادمة.

يمكنك إصلاح src/st-util/gdb-server.c :

static char serialnumber[28] = {0};

ل

static char serialnumber[STLINK_SERIAL_MAX_SIZE] = {0};

لقد اقترحت تقريبًا (لقد وجدت في الأصل مشكلة اختبار مجلس التعاون الخليجي 11 مع Fedora). كان اهتمامي بهذا هو هذه الحلقة في gdb-server.c:
لـ (size_t k = 0؛ j> = 0 && k <sizeof (الرقم التسلسلي) ؛ ++ k، j - = 2) {
مخزن حرف [3] = {0} ؛
memcpy (المخزن المؤقت ، optarg + j ، 2) ؛
الرقم التسلسلي [الطول - ك] = (uint8_t) strtol (المخزن المؤقت ، NULL ، 16) ؛

والتي ستتأثر بتغيير حجم "الرقم التسلسلي". بدون معرفة القصد أو الرمز بشكل عام ، لم أشعر بالراحة في التوصية بتغيير حجم "الرقم التسلسلي".

ولإعطاء الناس القليل من الخلفية. أضاف مجلس التعاون الخليجي 11 تشخيصات لاكتشاف عمليات الوصول خارج الحدود لوسائط الصفيف. بعبارات أبسط ، إذا كانت الدالة تعلن عن وسيطة كمصفوفة بطول ثابت ، فإن GCC تفترض إمكانية الإشارة إلى المصفوفة بأكملها.

يعلن stlink_open_usb وسيطته الثالثة كمصفوفة حرف 64 بايت ، ومع ذلك فإن "الرقم التسلسلي" يبلغ 28 بايت فقط وتحذر GCC بطبيعة الحال لأنها تعتقد أن هناك احتمالًا خارج نطاق وسيطة "الرقم التسلسلي" بواسطة stlink_open_usb.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات