Stlink: Error al construir desde la rama de desarrollo, problemas de cpuid

Creado en 20 abr. 2020  ·  7Comentarios  ·  Fuente: stlink-org/stlink

Intento compilar el compromiso c7874f805c63c60285f2b190f6589da8ae5e47fa
Y falló con estos errores:

/builddir/build/BUILD/stlink-org-stlink-c7874f8/tests/usb.c: In function 'main':
/builddir/build/BUILD/stlink-org-stlink-c7874f8/tests/usb.c:34:9: error: 'cpuid.revision' may be used uninitialized in this func
tion [-Werror=maybe-uninitialized]
   34 |         printf("cpuid:part = %#x, rev = %#x\n", cpuid.part, cpuid.revision);
      |         ^
/builddir/build/BUILD/stlink-org-stlink-c7874f8/tests/usb.c:31:27: note: 'cpuid.revision' was declared here
   31 |         cortex_m3_cpuid_t cpuid;
      |                           ^
/builddir/build/BUILD/stlink-org-stlink-c7874f8/tests/usb.c:34:9: error: 'cpuid.part' may be used uninitialized in this function [-Werror=maybe-uninitialized]
   34 |         printf("cpuid:part = %#x, rev = %#x\n", cpuid.part, cpuid.revision);
      |         ^
/builddir/build/BUILD/stlink-org-stlink-c7874f8/tests/usb.c:31:27: note: 'cpuid.part' was declared here
   31 |         cortex_m3_cpuid_t cpuid;
      |                           ^
/builddir/build/BUILD/stlink-org-stlink-c7874f8/tests/usb.c:33:9: error: 'cpuid.variant' may be used uninitialized in this function [-Werror=maybe-uninitialized]
   33 |         printf("cpuid:impl_id = %0#x, variant = %#x\n", cpuid.implementer_id, cpuid.variant);
      |         ^
/builddir/build/BUILD/stlink-org-stlink-c7874f8/tests/usb.c:31:27: note: 'cpuid.variant' was declared here
   31 |         cortex_m3_cpuid_t cpuid;
      |                           ^
/builddir/build/BUILD/stlink-org-stlink-c7874f8/tests/usb.c:33:9: error: 'cpuid.implementer_id' may be used uninitialized in this function [-Werror=maybe-uninitialized]
   33 |         printf("cpuid:impl_id = %0#x, variant = %#x\n", cpuid.implementer_id, cpuid.variant);
      |         ^
/builddir/build/BUILD/stlink-org-stlink-c7874f8/tests/usb.c:31:27: note: 'cpuid.implementer_id' was declared here
   31 |         cortex_m3_cpuid_t cpuid;
      |                           ^
lto1: all warnings being treated as errors

¿Cómo se puede arreglar?

bucompilation bufixed errocompilation olinux staturesolved

Todos 7 comentarios

En macOS, el código se construye bien.

En src/common.c

int stlink_cpu_id(stlink_t *sl, cortex_m3_cpuid_t *cpuid) {
    uint32_t raw;

    if (stlink_read_debug32(sl, STLINK_REG_CM3_CPUID, &raw))
        return -1;

    cpuid->implementer_id = (raw >> 24) & 0x7f;
    cpuid->variant = (raw >> 20) & 0xf;
    cpuid->part = (raw >> 4) & 0xfff;
    cpuid->revision = raw & 0xf;
    return 0;
}

Parece que cpuid.part y cpuid.revision se inicializan aquí. ¿Quizás un compilador se porta mal?

    if (stlink_read_debug32(sl, STLINK_REG_CM3_CPUID, &raw))
        return -1;

En este caso cpuid. * Permanece sin inicializar.

En Ubuntu también se compiló con éxito. La cpuid variable puede usar uninited en el caso de un registro de lectura de error.

--- a / tests / usb.c
+++ b / tests / usb.c
@@ -29,7 +29,11 @@ int main (int ac, char ** av) {
printf ("- core_id:% # x \ n", sl-> core_id);

     cortex_m3_cpuid_t cpuid;

- stlink_cpu_id (sl, & cpuid);
+ if (stlink_cpu_id (sl y cpuid))
+ {
+ printf ("chip desconocido \ n");
+ memset (& cpuid, 0, tamaño de (cortex_m3_cpuid_t))
+}
printf ("cpuid: impl_id =% 0 # x, variant =% # x \ n", cpuid.implementer_id, cpuid.variant);
printf ("cpuid: parte =% # x, rev =% # x \ n", cpuid.part, cpuid.revision);

Creo que se puede solucionar agregando una verificación de valor de retorno en stlink_cpu_id e inicializando esos valores a cero. Voy a darle una oportunidad.

Tengo -Werror=maybe-uninitialized porque durante la configuración:

-- Performing Test C_SUPPORTS_WMAYBE_UNINITIALIZED
-- Performing Test C_SUPPORTS_WMAYBE_UNINITIALIZED - Success

@Vascom ¿ Puedes probar mi rama https://github.com/chenguokai/stlink/tree/issue937 ?
Si funciona, subiré un PR.

@Vascom ¿ Puedes probar mi rama https://github.com/chenguokai/stlink/tree/issue937 ?
Si funciona, subiré un PR.

Si, funciona.

¿Fue útil esta página
0 / 5 - 0 calificaciones