summaryrefslogtreecommitdiffstats
path: root/src/scripts
diff options
context:
space:
mode:
authorMichael Brown2016-03-12 22:47:13 +0100
committerMichael Brown2016-03-12 22:47:13 +0100
commita8037ee131a9501ddfc89ce157e3718b1a3b86a7 (patch)
tree918210dd467c16d5778a9ebd229d5060957a3ce5 /src/scripts
parent[tg3] Remove x86-specific inline assembly (diff)
downloadipxe-a8037ee131a9501ddfc89ce157e3718b1a3b86a7.tar.gz
ipxe-a8037ee131a9501ddfc89ce157e3718b1a3b86a7.tar.xz
ipxe-a8037ee131a9501ddfc89ce157e3718b1a3b86a7.zip
[efi] Centralise architecture-independent EFI Makefile and linker script
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/scripts')
-rw-r--r--src/scripts/efi.lds110
1 files changed, 110 insertions, 0 deletions
diff --git a/src/scripts/efi.lds b/src/scripts/efi.lds
new file mode 100644
index 00000000..f1049f24
--- /dev/null
+++ b/src/scripts/efi.lds
@@ -0,0 +1,110 @@
+/* -*- sh -*- */
+
+/*
+ * Linker script for EFI images
+ *
+ */
+
+SECTIONS {
+
+ /* The file starts at a virtual address of zero, and sections are
+ * contiguous. Each section is aligned to at least _max_align,
+ * which defaults to 32. Load addresses are equal to virtual
+ * addresses.
+ */
+
+ _max_align = 32;
+
+ /* Allow plenty of space for file headers */
+ . = 0x1000;
+
+ /*
+ * The text section
+ *
+ */
+
+ . = ALIGN ( _max_align );
+ .text : {
+ _text = .;
+ *(.text)
+ *(.text.*)
+ _etext = .;
+ }
+
+ /*
+ * The rodata section
+ *
+ */
+
+ . = ALIGN ( _max_align );
+ .rodata : {
+ _rodata = .;
+ *(.rodata)
+ *(.rodata.*)
+ _erodata = .;
+ }
+
+ /*
+ * The data section
+ *
+ */
+
+ . = ALIGN ( _max_align );
+ .data : {
+ _data = .;
+ *(.data)
+ *(.data.*)
+ KEEP(*(SORT(.tbl.*))) /* Various tables. See include/tables.h */
+ KEEP(*(.provided))
+ KEEP(*(.provided.*))
+ _edata = .;
+ }
+
+ /*
+ * The bss section
+ *
+ */
+
+ . = ALIGN ( _max_align );
+ .bss : {
+ _bss = .;
+ *(.bss)
+ *(.bss.*)
+ *(COMMON)
+ _ebss = .;
+ }
+
+ /*
+ * Weak symbols that need zero values if not otherwise defined
+ *
+ */
+
+ .weak 0x0 : {
+ _weak = .;
+ *(.weak)
+ *(.weak.*)
+ _eweak = .;
+ }
+ _assert = ASSERT ( ( _weak == _eweak ), ".weak is non-zero length" );
+
+ /*
+ * Dispose of the comment and note sections to make the link map
+ * easier to read
+ *
+ */
+
+ /DISCARD/ : {
+ *(.comment)
+ *(.comment.*)
+ *(.note)
+ *(.note.*)
+ *(.eh_frame)
+ *(.eh_frame.*)
+ *(.rel)
+ *(.rel.*)
+ *(.einfo)
+ *(.einfo.*)
+ *(.discard)
+ *(.discard.*)
+ }
+}