Stlink: Kompilasi dengan GCC 11 gagal

Dibuat pada 9 Des 2020  ·  7Komentar  ·  Sumber: stlink-org/stlink

Saya tidak dapat membangun stlink 1.6.1 dengan kompiler GCC 11. Fedora GNU / Linux Rawhide.
Kesalahannya adalah:

/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);
      |                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Tolong bantu saya memperbaikinya.

bucompilation buneeds-fix olinux staturesolved

Semua 7 komentar

Mungkin STLINK_SERIAL_MAX_SIZE define harus disetel ke 28 ?

Anda dapat memperbaiki src/st-util/gdb-server.c :

static char serialnumber[28] = {0};

untuk

static char serialnumber[STLINK_SERIAL_MAX_SIZE] = {0};

Saya lebih suka lihat perbaikan di hulu.

@Vascom saya juga. Tetapi untuk memperbaikinya di hulu, Anda perlu memeriksa pekerjaannya.

ps Anda telah membuat deskripsi masalah yang tidak sesuai dengan template. @ Nightwalker-87 dapat menghapusnya. Lihat # 906

Ya, itu berhasil.

Template tidak peduli dengan masalah kompilasi.

Template dimaksudkan untuk digunakan dan diisi dengan konten yang juga menyertakan deskripsi. Jadi tolong pertimbangkan ini lain kali.

Anda dapat memperbaiki src/st-util/gdb-server.c :

static char serialnumber[28] = {0};

untuk

static char serialnumber[STLINK_SERIAL_MAX_SIZE] = {0};

Saya hampir menyarankan itu (saya awalnya menemukan masalah saat menguji gcc-11 dengan Fedora). Perhatian saya dengan itu adalah loop ini di gdb-server.c:
untuk (size_t k = 0; j> = 0 && k <sizeof (serialnumber); ++ k, j - = 2) {
penyangga karakter [3] = {0};
memcpy (buffer, optarg + j, 2);
nomor seri [panjang - k] = (uint8_t) strtol (buffer, NULL, 16);

Yang akan terpengaruh dengan mengubah ukuran "serialnumber". Tanpa mengetahui maksud atau kode secara umum saya tidak merasa nyaman merekomendasikan mengubah ukuran "serialnumber".

Dan untuk memberikan sedikit latar belakang kepada orang-orang. gcc-11 telah menambahkan diagnostik untuk mendeteksi akses di luar batas untuk argumen array. Sederhananya, jika suatu fungsi mendeklarasikan argumen sebagai array dengan panjang tetap, GCC menganggap seluruh array berpotensi dapat direferensikan.

stlink_open_usb mendeklarasikan argumen ketiganya sebagai array karakter 64 byte, namun "serialnumber" hanya 28 byte dan GCC secara alami memperingatkan karena mengira ada potensi out-of-bounds dari argumen "serialnumber" oleh stlink_open_usb.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat