#include "ldscript.inc" ENTRY(_start) /*PHDRS { data PT_LOAD; #ifdef IMAGE_MODE mods PT_LOAD; #endif }*/ SECTIONS { #define LOAD_OFFSET (0x0) #ifdef JAILHOUSE #define LOAD_OFFSET (0xf0000) . = 0; /* 16-bit sections */ .jh-startup : { *(.jh.startup) } . = 0xfff0; .jh-boot : { *(.jh.boot) . = ALIGN(16); } #endif #ifdef ARCH_amd64 . = LINKADDR + SIZEOF_HEADERS; #else . = LINKADDR; #endif PROVIDE (ImageBase = LINKADDR); /*.hash : AT (ADDR(.hash) - LOAD_OFFSET) { *(.hash) } : data */ /* this MUST come first! */ /* Merge .text, .rodata, and .data in one segment to save space */ /* provide at least 1K space for PE header in case of EFI */ /* NOTE: the .hash section is not used for EFI, so we declare * this as free space for PE too */ /* FXIME: should make this depending on EFI */ /*. = (. < (0x400 + LINKADDR)) ? (LINKADDR + 0x400) : .;*/ .text : AT (ADDR(.text) - LOAD_OFFSET) { *(.init) *(.text .text.* .gnu.linkonce.t*) *(.rodata*) } /*: data*/ .dynsym : AT (ADDR(.dynsym) - LOAD_OFFSET) { *(.dynsym) } /*: data*/ .dynstr : AT (ADDR(.dynstr) - LOAD_OFFSET) { *(.dynstr) } /*: data*/ .reloc : AT (ADDR(.reloc) - LOAD_OFFSET) { *(.reloc) } /*: data*/ .rel.dyn : AT (ADDR(.rel.dyn) - LOAD_OFFSET) { *(.rel.*) *(.rel.module_info) } /*: data*/ .data : AT (ADDR(.data) - LOAD_OFFSET) { . = ALIGN(8); *(.data) *(.data.*) *(.plt) *(.got.plt) *(.got) CTORS PLATFORMS } /*: data*/ .data.module_info : AT (ADDR(.data.module_info) - LOAD_OFFSET) { . = ALIGN(16); _module_info_start = .; *(.module_info .module_info.*) _module_info_end = .; } /*: data*/ .dynamic : AT (ADDR(.dynamic) - LOAD_OFFSET) { *(.dynamic) } /*: data*/ .rela.dyn : AT (ADDR(.rela.dyn) - LOAD_OFFSET) { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) *(.rela.module*) *(.rela.init_array) } /*: data*/ .rela.plt : AT (ADDR(.rela.plt) - LOAD_OFFSET) { *(.rela.plt) *(.rela.iplt) } /*: data*/ _edata = .; PROVIDE (edata = .); . = ALIGN(4096); __bss_start = .; .bss : AT (ADDR(.bss) - LOAD_OFFSET) { *(.bss) *(.bss.*) *(COMMON) *(.dynbss) *(.bss_memmap) } /*: data*/ _end = . ; PROVIDE (end = .); . = ALIGN(4096); /* Only move modules to modaddr if bootstrap is being loaded by an elf * loader, and we do not need to copy images around at runtime (e.g. with * compression) */ #ifdef IMAGE_MODE #if defined(PLACE_MODULES_AT_MODADDR) && !defined(SINGLE_SECTION) . = RAM_BASE + MODADDR; #endif _module_data_start = .; .module_data : AT (ADDR(.module_data) - LOAD_OFFSET) { *(EXCLUDE_FILE (*mod00.bin *mod01.bin *mod02.bin) .module_data) *(.module_data) } /*: mods*/ _module_data_end = .; #endif /DISCARD/ : { *(.rela.reloc) *(.note.GNU-stack) *(.jcr) *(.interp) *(.comment) *(.note) *(.eh_frame) *(.stab) *(.stabstr) *(.fini) } }