2012-06-28 9 views
10

Mam następujący skrypt linkera:Jak umieścić 2 sekcje w segmencie 1 (przy użyciu skryptów 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) 
    } 
} 

Kiedy skompilować mój program dwóch sekcji (Exec i dane) są w różnych segmentach obciążeniem. Chcę umieścić dwie sekcje (.arora_data_free_space i .arora_exec_free_space) w jednym segmencie ładowania . Czy można to zrobić za pomocą skryptów linkerów? Jak mogę to zrobić? Dzięki.

Odpowiedz

3

Oczywiście - wystarczy użyć PHDRS. Przykład tego linku jest dokładnie tym, co chcesz zrobić, jak sądzę. Oto przykład (nie przetestowany) zrobiony ze skryptu linkera:

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

Kiedy używam PHDRS, pozostałe segmenty ELF są usuwane. Szukam sposobu na umieszczenie tych sekcji w jednym segmencie i zachowanie reszty elfów bez żadnych zmian. – Jah

+0

Czy przeczytałeś link? "Łącznik utworzy domyślne nagłówki programu, ale w niektórych przypadkach może być konieczne dokładniejsze określenie nagłówków programu, możesz użyć do tego celu komendy PHDRS." Gdy łącznik zobaczy polecenie PHDRS w skrypcie linkera, nie utworzy żadnych nagłówków programów innych niż określone. " Jeśli chcesz pozostawić pozostałe tak, jak są, wystarczy dołączyć je do swojego PHDRS. –

Powiązane problemy