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.

¿GCC __attribute__((used)) vs. declaración KEEP en archivo de enlace?

Usando “GNU Arm Embedded Toolchain”, parece que necesito tener ambas declaraciones en mi archivo .c:

attribute ((section(“nombre_sección”),used))

y esta declaración en mi archivo .ld:

KEEP(nombresección)

para que esa sección en particular no sea eliminada por la recolección de basura del enlazador (–gc-sections).

¿Alguien puede explicar por qué o guiarme a algún documento que mencione esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Según la documentación de GCC, la directiva __attribute__ ((section("nombre_sección"), used)) ubica el código o los datos asociados en la sección nombrada y asegura que el compilador genere una referencia a esa sección, incluso si el código o los datos no son referenciados de otra forma.

    Por otro lado, el comando de script de enlazador KEEP(nombredelasección) indica al enlazador que mantenga la sección nombrada, incluso si parece no ser utilizada.

    Si se utiliza la opción de enlazador --gc-sections, es posible que el enlazador elimine las secciones de código y datos no utilizadas para reducir el tamaño del ejecutable final. Sin embargo, si se desea asegurar que una sección específica no sea eliminada por el enlazador, es necesario utilizar tanto la directiva __attribute__ ((section("nombre_sección"), used)) como el comando de script de enlazador KEEP(nombredelasección).

    Puede encontrar más información sobre estas opciones de GCC y enlazador en la documentación de GCC y en la documentación de script de enlazador, respectivamente.

Comments are closed.