Não consigo construir o stlink 1.6.1 com o compilador GCC 11. Fedora GNU / Linux Rawhide.
Os erros são:
/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);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Por favor me ajude a corrigir isso.
Pode ser STLINK_SERIAL_MAX_SIZE
define deve ser definido como 28
?
Você pode corrigir src/st-util/gdb-server.c
:
static char serialnumber[28] = {0};
para
static char serialnumber[STLINK_SERIAL_MAX_SIZE] = {0};
Eu prefiro ver a correção no upstream.
@Vascom eu também. Mas para consertá-lo no upstream, você precisa verificar o funcionamento dele.
ps Você criou uma descrição do problema que não está de acordo com um modelo. @ Nightwalker-87 pode excluí-lo. Veja # 906
Sim, funciona.
O modelo não se preocupa com problemas de compilação.
O modelo deve ser usado e preenchido com conteúdo que também inclui uma descrição. Portanto, considere isso na próxima vez.
Você pode corrigir
src/st-util/gdb-server.c
:static char serialnumber[28] = {0};
para
static char serialnumber[STLINK_SERIAL_MAX_SIZE] = {0};
Quase sugeri isso (originalmente encontrei o problema ao testar o gcc-11 com o Fedora). Minha preocupação com isso era este loop em gdb-server.c:
para (size_t k = 0; j> = 0 && k <sizeof (número de série); ++ k, j - = 2) {
buffer char [3] = {0};
memcpy (buffer, defenderg + j, 2);
número de série [comprimento - k] = (uint8_t) strtol (buffer, NULL, 16);
Que seria afetado pela alteração do tamanho do "número de série". Sem saber a intenção ou o código em geral, não me senti confortável em recomendar a alteração do tamanho do "número de série".
E para dar às pessoas um pouco de história. O gcc-11 adicionou diagnósticos para detectar acessos fora dos limites para argumentos de array. Em termos mais simples, se uma função declara um argumento como um array com um comprimento fixo, então o GCC assume que o array inteiro pode ser referenciado.
stlink_open_usb declara seu terceiro argumento como uma matriz de caracteres de 64 bytes, mas "número de série" tem apenas 28 bytes e o GCC avisa naturalmente porque pensa que há um potencial fora dos limites do argumento "número de série" de stlink_open_usb.