summaryrefslogtreecommitdiffstats
path: root/src/arch/i386/core/etherboot.lds
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/i386/core/etherboot.lds')
-rw-r--r--src/arch/i386/core/etherboot.lds90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/arch/i386/core/etherboot.lds b/src/arch/i386/core/etherboot.lds
new file mode 100644
index 000000000..6f4063293
--- /dev/null
+++ b/src/arch/i386/core/etherboot.lds
@@ -0,0 +1,90 @@
+OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
+OUTPUT_ARCH(i386)
+
+ENTRY(_text)
+SECTIONS {
+ . = ALIGN(16);
+ /* Start address of Etherboot in the virtual address space */
+ _virt_start = 0;
+ _text = . ;
+ .text.nocompress : {
+ *(.text*.nocompress)
+ . = ALIGN(16);
+ } = 0x9090
+
+ .text16 : {
+ _text16 = .;
+ *(.text16)
+ *(.text16.*)
+ _etext16 = . ;
+ }
+ .text.compress : {
+ *(.text)
+ *(.text.*)
+ } = 0x9090
+ .rodata : {
+ . = ALIGN(4);
+ *(.rodata)
+ *(.rodata.*)
+ }
+ . = ALIGN(4);
+ .drivers.pci : {
+ pci_drivers = . ;
+ *(.drivers.pci);
+ pci_drivers_end = . ;
+ }
+ . = ALIGN(4);
+ .drivers.isa : {
+ isa_drivers = . ;
+ *(.drivers.isa);
+ isa_drivers_end = .;
+ }
+ _etext = . ;
+ _data = . ;
+ .data : {
+ *(.data)
+ *(.data.*)
+ }
+ _edata = . ;
+ _uncompressed_verbatim_end = . ;
+ . = ALIGN(16);
+ .bss.preserve : {
+ *(.bss.preserve)
+ *(.bss.preserve.*)
+ }
+ _bss = . ;
+ .bss : {
+ *(.bss)
+ *(.bss.*)
+ }
+ . = ALIGN(16);
+ _ebss = .;
+ _stack = . ;
+ .stack : {
+ _stack_start = . ;
+ *(.stack)
+ *(.stack.*)
+ _stack_end = . ;
+ }
+ _bss_size = _ebss - _bss;
+ _stack_offset = _stack - _text ;
+ _stack_offset_pgh = _stack_offset / 16 ;
+ _stack_size = _stack_end - _stack_start ;
+ . = ALIGN(16);
+ _end = . ;
+
+ /DISCARD/ : {
+ *(.comment)
+ *(.note)
+ }
+
+ /* PXE-specific symbol calculations. The results of these are
+ * needed in romprefix.S, which is why they must be calculated
+ * here.
+ */
+ _pxe_stack_size = _pxe_stack_t_size
+ + _pxe_callback_interface_size
+ + _rm_callback_interface_size
+ + _e820mangler_size + 15 ;
+
+}