123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- From: Sylvain Gault <sylvain.gault at gmail.com>
- For the compression / decompression to succeed, the sections layout must
- be the same between the virtual memory and load memory. The section
- alignment was kept in sync by introducing aligment that should be
- greater or equal to the actual section alignment.
- This patch compute the load memory addresses of the sections so that
- the layout is the same as the virtual memory addresses.
- Signed-off-by: Sylvain Gault <sylvain.gault at gmail.com>
- ---
- core/i386/syslinux.ld | 63 ++++++++++---------------------------------------
- core/x86_64/syslinux.ld | 63 ++++++++++---------------------------------------
- 2 files changed, 24 insertions(+), 102 deletions(-)
- diff --git a/core/i386/syslinux.ld b/core/i386/syslinux.ld
- index 7390451..92b75b1 100644
- --- a/core/i386/syslinux.ld
- +++ b/core/i386/syslinux.ld
- @@ -255,10 +255,9 @@ SECTIONS
- . = 0x100000;
-
- __pm_code_start = .;
- + __vma_to_lma = __pm_code_lma - __pm_code_start;
-
- - __text_vma = .;
- - __text_lma = __pm_code_lma;
- - .text : AT(__text_lma) {
- + .text : AT(ADDR(.text) + __vma_to_lma) {
- FILL(0x90909090)
- __text_start = .;
- *(.text)
- @@ -266,106 +265,68 @@ SECTIONS
- __text_end = .;
- }
-
- - . = ALIGN(32);
- -
- - __rodata_vma = .;
- - __rodata_lma = __rodata_vma + __text_lma - __text_vma;
- - .rodata : AT(__rodata_lma) {
- + .rodata : AT(ADDR(.rodata) + __vma_to_lma) {
- __rodata_start = .;
- *(.rodata)
- *(.rodata.*)
- __rodata_end = .;
- }
-
- - . = ALIGN(4);
- -
- - __ctors_vma = .;
- - __ctors_lma = __ctors_vma + __text_lma - __text_vma;
- - .ctors : AT(__ctors_lma) {
- + .ctors : AT(ADDR(.ctors) + __vma_to_lma) {
- __ctors_start = .;
- KEEP (*(SORT(.ctors.*)))
- KEEP (*(.ctors))
- __ctors_end = .;
- }
-
- - __dtors_vma = .;
- - __dtors_lma = __dtors_vma + __text_lma - __text_vma;
- - .dtors : AT(__dtors_lma) {
- + .dtors : AT(ADDR(.dtors) + __vma_to_lma) {
- __dtors_start = .;
- KEEP (*(SORT(.dtors.*)))
- KEEP (*(.dtors))
- __dtors_end = .;
- }
-
- - . = ALIGN(4);
- -
- - __dynsym_vma = .;
- - __dynsym_lma = __dynsym_vma + __text_lma - __text_vma;
- - .dynsym : AT(__dynsym_lma) {
- + .dynsym : AT(ADDR(.dynsym) + __vma_to_lma) {
- __dynsym_start = .;
- *(.dynsym)
- __dynsym_end = .;
- }
- __dynsym_len = __dynsym_end - __dynsym_start;
-
- - . = ALIGN(4);
- -
- - __dynstr_vma = .;
- - __dynstr_lma = __dynstr_vma + __text_lma - __text_vma;
- - .dynstr : AT(__dynstr_lma) {
- + .dynstr : AT(ADDR(.dynstr) + __vma_to_lma) {
- __dynstr_start = .;
- *(.dynstr)
- __dynstr_end = .;
- }
- __dynstr_len = __dynstr_end - __dynstr_start;
-
- - . = ALIGN(4);
- -
- - __gnu_hash_vma = .;
- - __gnu_hash_lma = __gnu_hash_vma + __text_lma - __text_vma;
- - .gnu.hash : AT(__gnu_hash_lma) {
- + .gnu.hash : AT(ADDR(.gnu.hash) + __vma_to_lma) {
- __gnu_hash_start = .;
- *(.gnu.hash)
- __gnu_hash_end = .;
- }
-
-
- - . = ALIGN(4);
- -
- - __dynlink_vma = .;
- - __dynlink_lma = __dynlink_vma + __text_lma - __text_vma;
- - .dynlink : AT(__dynlink_lma) {
- + .dynlink : AT(ADDR(.dynlink) + __vma_to_lma) {
- __dynlink_start = .;
- *(.dynlink)
- __dynlink_end = .;
- }
-
- - . = ALIGN(4);
- -
- - __got_vma = .;
- - __got_lma = __got_vma + __text_lma - __text_vma;
- - .got : AT(__got_lma) {
- + .got : AT(ADDR(.got) + __vma_to_lma) {
- __got_start = .;
- KEEP (*(.got.plt))
- KEEP (*(.got))
- __got_end = .;
- }
-
- - . = ALIGN(4);
- -
- - __dynamic_vma = .;
- - __dynamic_lma = __dynamic_vma + __text_lma - __text_vma;
- - .dynamic : AT(__dynamic_lma) {
- + .dynamic : AT(ADDR(.dynamic) + __vma_to_lma) {
- __dynamic_start = .;
- *(.dynamic)
- __dynamic_end = .;
- }
-
- - . = ALIGN(32);
- -
- - __data_vma = .;
- - __data_lma = __data_vma + __text_lma - __text_vma;
- - .data : AT(__data_lma) {
- + .data : AT(ADDR(.data) + __vma_to_lma) {
- __data_start = .;
- *(.data)
- *(.data.*)
- diff --git a/core/x86_64/syslinux.ld b/core/x86_64/syslinux.ld
- index bf815c4..70c6e00 100644
- --- a/core/x86_64/syslinux.ld
- +++ b/core/x86_64/syslinux.ld
- @@ -255,10 +255,9 @@ SECTIONS
- . = 0x100000;
-
- __pm_code_start = .;
- + __vma_to_lma = __pm_code_lma - __pm_code_start;
-
- - __text_vma = .;
- - __text_lma = __pm_code_lma;
- - .text : AT(__text_lma) {
- + .text : AT(ADDR(.text) + __vma_to_lma) {
- FILL(0x90909090)
- __text_start = .;
- *(.text)
- @@ -266,106 +265,68 @@ SECTIONS
- __text_end = .;
- }
-
- - . = ALIGN(32);
- -
- - __rodata_vma = .;
- - __rodata_lma = __rodata_vma + __text_lma - __text_vma;
- - .rodata : AT(__rodata_lma) {
- + .rodata : AT(ADDR(.rodata) + __vma_to_lma) {
- __rodata_start = .;
- *(.rodata)
- *(.rodata.*)
- __rodata_end = .;
- }
-
- - . = ALIGN(4);
- -
- - __ctors_vma = .;
- - __ctors_lma = __ctors_vma + __text_lma - __text_vma;
- - .ctors : AT(__ctors_lma) {
- + .ctors : AT(ADDR(.ctors) + __vma_to_lma) {
- __ctors_start = .;
- KEEP (*(SORT(.ctors.*)))
- KEEP (*(.ctors))
- __ctors_end = .;
- }
-
- - __dtors_vma = .;
- - __dtors_lma = __dtors_vma + __text_lma - __text_vma;
- - .dtors : AT(__dtors_lma) {
- + .dtors : AT(ADDR(.dtors) + __vma_to_lma) {
- __dtors_start = .;
- KEEP (*(SORT(.dtors.*)))
- KEEP (*(.dtors))
- __dtors_end = .;
- }
-
- - . = ALIGN(4);
- -
- - __dynsym_vma = .;
- - __dynsym_lma = __dynsym_vma + __text_lma - __text_vma;
- - .dynsym : AT(__dynsym_lma) {
- + .dynsym : AT(ADDR(.dynsym) + __vma_to_lma) {
- __dynsym_start = .;
- *(.dynsym)
- __dynsym_end = .;
- }
- __dynsym_len = __dynsym_end - __dynsym_start;
-
- - . = ALIGN(4);
- -
- - __dynstr_vma = .;
- - __dynstr_lma = __dynstr_vma + __text_lma - __text_vma;
- - .dynstr : AT(__dynstr_lma) {
- + .dynstr : AT(ADDR(.dynstr) + __vma_to_lma) {
- __dynstr_start = .;
- *(.dynstr)
- __dynstr_end = .;
- }
- __dynstr_len = __dynstr_end - __dynstr_start;
-
- - . = ALIGN(4);
- -
- - __gnu_hash_vma = .;
- - __gnu_hash_lma = __gnu_hash_vma + __text_lma - __text_vma;
- - .gnu.hash : AT(__gnu_hash_lma) {
- + .gnu.hash : AT(ADDR(.gnu.hash) + __vma_to_lma) {
- __gnu_hash_start = .;
- *(.gnu.hash)
- __gnu_hash_end = .;
- }
-
-
- - . = ALIGN(4);
- -
- - __dynlink_vma = .;
- - __dynlink_lma = __dynlink_vma + __text_lma - __text_vma;
- - .dynlink : AT(__dynlink_lma) {
- + .dynlink : AT(ADDR(.dynlink) + __vma_to_lma) {
- __dynlink_start = .;
- *(.dynlink)
- __dynlink_end = .;
- }
-
- - . = ALIGN(4);
- -
- - __got_vma = .;
- - __got_lma = __got_vma + __text_lma - __text_vma;
- - .got : AT(__got_lma) {
- + .got : AT(ADDR(.got) + __vma_to_lma) {
- __got_start = .;
- KEEP (*(.got.plt))
- KEEP (*(.got))
- __got_end = .;
- }
-
- - . = ALIGN(4);
- -
- - __dynamic_vma = .;
- - __dynamic_lma = __dynamic_vma + __text_lma - __text_vma;
- - .dynamic : AT(__dynamic_lma) {
- + .dynamic : AT(ADDR(.dynamic) + __vma_to_lma) {
- __dynamic_start = .;
- *(.dynamic)
- __dynamic_end = .;
- }
-
- - . = ALIGN(32);
- -
- - __data_vma = .;
- - __data_lma = __data_vma + __text_lma - __text_vma;
- - .data : AT(__data_lma) {
- + .data : AT(ADDR(.data) + __vma_to_lma) {
- __data_start = .;
- *(.data)
- *(.data.*)
- --
- 2.5.3
|