2012-06-28 7 views
10

ho il seguente script del linker:Come mettere 2 sezioni in 1 segmento (Utilizzo degli script LD)

SECTIONS { 

    .arora_exec_free_space 4399531 : 
    { 
     *(.text) 
     *(.rodata) 
     *(.data.rel.ro.local) 
    } 
    .arora_data_free_space (ADDR(.arora_exec_free_space) + SIZEOF(.arora_exec_free_space)) : AT (7592352) 
    { 
     *(.data) 
     *(.bss) 
     *(.got) 
    } 
} 

Quando compilo il mio programma le due sezioni (exec e dati) sono in diversi segmenti di carico. Voglio mettere le due sezioni (.arora_data_free_space e .arora_exec_free_space) in un segmento LOAD . C'è un modo per farlo usando gli script di linker? Come posso farlo? Grazie.

risposta

3

Certo, devi solo usare PHDRS. L'esempio al link è praticamente esattamente quello che vuoi fare, penso. Ecco un esempio (non verificato) creato dallo script del linker:

PHDRS 
{ 
    mysegment PT_LOAD; 
} 

SECTIONS 
{ 
    .arora_exec_free_space 4399531 : 
    { 
        *(.text) 
        *(.rodata) 
        *(.data.rel.ro.local) 
    } :mysegment 

    .arora_data_free_space (ADDR(.arora_exec_free_space) + SIZEOF(.arora_exec_free_space)) : AT (7592352) 
    { 
        *(.data) 
        *(.bss) 
        *(.got) 
    } :mysegment 
} 
+0

Quando si utilizza PHDRS, il resto dei segmenti ELF viene eliminato. Sto cercando un modo per mettere queste sezioni in un segemnt e mantenere il resto dell'elfo senza alcun cambiamento. – Jah

+0

Hai letto il link? "Per impostazione predefinita, il linker creerà intestazioni di programma ragionevoli, tuttavia in alcuni casi potrebbe essere necessario specificare le intestazioni del programma in modo più preciso, a tale scopo è possibile utilizzare il comando PHDRS Quando il linker visualizza il comando PHDRS nello script del linker, non creerà alcun header di programma diverso da quelli specificati. " Se vuoi lasciare gli altri come sono, devi solo includerli nel tuo PHDRS. –

Problemi correlati