diff options
Diffstat (limited to 'x86_64/ldscript')
-rw-r--r-- | x86_64/ldscript | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/x86_64/ldscript b/x86_64/ldscript index 375e8104..de99795e 100644 --- a/x86_64/ldscript +++ b/x86_64/ldscript @@ -2,7 +2,7 @@ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) -ENTRY(_start) +ENTRY(boot_start) SECTIONS { /* @@ -11,22 +11,30 @@ SECTIONS * be first in there. See also `i386/i386at/boothdr.S' and * `gnumach_LINKFLAGS' in `i386/Makefrag.am'. */ - . = _START; - .text : - AT (_START_MAP) + + . = _START_MAP; + .boot : + { + *(.boot.text) + *(.boot.data) + } =0x90909090 + + . += KERNEL_MAP_BASE; + _start = .; + .text : AT(((ADDR(.text)) - KERNEL_MAP_BASE)) { - *(.text.start) + *(.text*) *(.text .stub .text.* .gnu.linkonce.t.*) *(.text.unlikely .text.*_unlikely) KEEP (*(.text.*personality*)) /* .gnu.warning sections are handled specially by elf32.em. */ *(.gnu.warning) } =0x90909090 - .init : + .init : AT(((ADDR(.init)) - KERNEL_MAP_BASE)) { KEEP (*(.init)) } =0x90909090 - .fini : + .fini : AT(((ADDR(.fini)) - KERNEL_MAP_BASE)) { KEEP (*(.fini)) } =0x90909090 @@ -69,7 +77,7 @@ SECTIONS PROVIDE_HIDDEN (__rela_iplt_end = .); } .plt : { *(.plt) *(.iplt) } - .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } + .rodata : AT(((ADDR(.rodata)) - KERNEL_MAP_BASE)) { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } @@ -139,7 +147,7 @@ SECTIONS .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (24, .); .got.plt : { *(.got.plt) *(.igot.plt) } - .data : + .data : AT(((ADDR(.data)) - KERNEL_MAP_BASE)) { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) @@ -147,7 +155,7 @@ SECTIONS .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); __bss_start = .; - .bss : + .bss : AT(((ADDR(.bss)) - KERNEL_MAP_BASE)) { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) |