es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El compilador da error de segmentación cuando se agrega un printf (gcc 10.2 aarch64_none-elf- de arm).

Sé que esto no es adecuado para una pregunta en Stack Overflow, pero…
Esta es una función en scripts/dtc/libfdt/fdt_ro.c de u-boot v2021.10.

const void *fdt_getprop_namelen(const void *fdt, int nodeoffset,
const char *name, int namelen, int *lenp)
{
int poffset;
const struct fdt_property *prop;

printf("uuu0 nodeoffset = 0x%x, name = %s, namelen = %d\n", nodeoffset, name, namelen);
prop = fdt_get_property_namelen_(fdt, nodeoffset, name, namelen, lenp,
                 &poffset);
//printf("uuu1 prop = 0x%lx, *lenp = 0x%x, poffset = 0x%x\n", prop, *lenp, poffset);
if (!prop)
    return NULL;

/* Handle realignment */
if (fdt_chk_version() && fdt_version(fdt) < 0x10 &&
    (poffset + sizeof(*prop)) % 8 && fdt32_to_cpu(prop->len) >= 8)
    return prop->data + 4;
return prop->data;

}

Cuando compilo el programa, si descomento el segundo printf, el compilador falla con un segfault.
No tengo idea. ¿Es un problema puramente del compilador (creo que al menos no debería fallar)? ¿O puede estar relacionado con un error en otro código por mi parte? ¿Existe algún método para conocer la causa del segfault? (probablemente no).

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Es posible que descomentar la segunda declaración printf esté causando un fallo de segmentación debido a problemas de alineación de memoria. La declaración condicional en el código sugiere que puede haber una necesidad de realinear la memoria antes de acceder a los datos de la propiedad, y descomentar la segunda declaración printf puede estar provocando que el programa intente acceder a una ubicación de memoria incorrectamente alineada.

    Para investigar la causa del fallo de segmentación, puede ser útil utilizar herramientas de depuración como gdb para examinar el uso de la memoria del programa e identificar el origen del problema. También puede ser útil revisar el resto del código fuente para asegurarse de que no haya problemas de gestión de memoria u otros errores que puedan estar causando el fallo de segmentación.

Comments are closed.