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.

¿Cómo asignar secciones LTO a secciones de salida en el enlazador GCC (Arm)?

Tengo un archivo de vinculación que uso como entrada para Gnu Arm Embedded Toolchain. Entre otras cosas, contiene una sección de salida como esta:

.text:
{
  . = ALIGN(4);
  *(.text*)
  *(.rodata*)
} > FLASH

, donde FLASH es un bloque de MEMORIA.

Mi problema es que, cuando compilo un archivo C++ con LTO (optimización de tiempo de vinculación), parte de mi código se coloca en secciones que no son “.texto” en los archivos de objeto resultantes. Estas secciones parecen tener un nombre consistente:

.gnu.lto<something>

Como resultado, no se colocan en mi sección de salida .text.

¿Cómo puedo asignar secciones de entrada LTO a mi sección de salida .text?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para mapear las secciones de entrada LTO en la sección de salida .text en su archivo de enlace, puede agregar las siguientes líneas a su script de enlace:

    . = ALIGN(4);
    .text :
    {
      *(.text*)
      *(.rodata*)
      *(.gnu.lto*)
    } > FLASH
    

    Estas líneas asegurarán que todas las secciones de entrada con .text o .rodata en el nombre, así como las secciones con el prefijo .gnu.lto, se colocarán en la sección de salida .text en el bloque de memoria FLASH.

    Tenga en cuenta que esto puede resultar en un tamaño de código más grande, ya que algunas secciones generadas por LTO pueden no estar optimizadas para el tamaño. También puede ser necesario ajustar otras secciones en su archivo de enlace para acomodar el tamaño de código más grande.

Comments are closed.