]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[linux] Centralise the linker script for Linux binaries
authorMichael Brown <mcb30@ipxe.org>
Sun, 22 Jan 2023 12:05:14 +0000 (12:05 +0000)
committerMichael Brown <mcb30@ipxe.org>
Sun, 22 Jan 2023 12:38:03 +0000 (12:38 +0000)
Reduce duplication between i386 and x86_64 by providing a single
shared linker script that both architectures can include.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/Makefile.linux
src/arch/i386/Makefile.linux
src/arch/x86_64/Makefile.linux
src/arch/x86_64/scripts/linux.lds [deleted file]
src/scripts/linux.lds [moved from src/arch/i386/scripts/linux.lds with 91% similarity]

index 85d9c64385e0face7e28087ebc981f5dd7f9f5ed..b278c8c0d940ed757127a67ae2aba55e6279759a 100644 (file)
@@ -8,6 +8,10 @@ SYMBOL_PREFIX  = _ipxe__
 #
 CFLAGS         += -UNVALGRIND
 
+# The Linux linker script
+#
+LDSCRIPT       = scripts/linux.lds
+
 # Use a two-stage link
 #
 LDFLAGS                += -r -d
index fe4229e947f120a46bdc84b42a1184a70da6e56e..5992b06287fd215727a96c1bf9a9363044d03a18 100644 (file)
@@ -1,8 +1,8 @@
 # -*- makefile -*- : Force emacs to use Makefile mode
 
-# Linker script
+# Starting virtual address
 #
-LDSCRIPT = arch/i386/scripts/linux.lds
+LDFLAGS += -Ttext=0x08048000
 
 # Compiler flags for building host API wrapper
 #
index c41ee49df2b3c34fcf7ac13ad309d24bbe5c4165..3372d70b018ef169d3a9a6d3730933d15cc591d8 100644 (file)
@@ -1,8 +1,8 @@
 # -*- makefile -*- : Force emacs to use Makefile mode
 
-# Linker script
+# Starting virtual address
 #
-LDSCRIPT = arch/x86_64/scripts/linux.lds
+LDFLAGS += -Ttext=0x400000
 
 # Include generic Linux Makefile
 #
diff --git a/src/arch/x86_64/scripts/linux.lds b/src/arch/x86_64/scripts/linux.lds
deleted file mode 100644 (file)
index a093787..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/* -*- sh -*- */
-
-/*
- * Linker script for x86_64 Linux images
- *
- */
-
-OUTPUT_FORMAT ( "elf64-x86-64", "elf64-x86-64", "elf64-x86-64" )
-OUTPUT_ARCH ( i386:x86-64 )
-
-SECTIONS {
-       _max_align = 32;
-
-       . = 0x400000;
-
-       /*
-        * 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
-        *
-        * Adjust the address for the data segment.  We want to adjust up to
-        * the same address within the page on the next page up.
-        */
-
-       . = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1));
-       . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
-       .data : {
-               _data = .;
-               *(.data)
-               *(.data.*)
-               KEEP(*(SORT(.tbl.*)))
-               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.*)
-               *(.rel)
-               *(.rel.*)
-               *(.discard)
-               *(.discard.*)
-               *(.sbat)
-               *(.sbat.*)
-       }
-}
similarity index 91%
rename from src/arch/i386/scripts/linux.lds
rename to src/scripts/linux.lds
index 8c3a7b0baaefde3d424b58a18aa4e10d12e95bd5..afc0128f8e4682218287346072b9a0ee29bef331 100644 (file)
@@ -1,18 +1,13 @@
 /* -*- sh -*- */
 
 /*
- * Linker script for i386 Linux images
+ * Linker script for Linux images
  *
  */
 
-OUTPUT_FORMAT ( "elf32-i386", "elf32-i386", "elf32-i386" )
-OUTPUT_ARCH ( i386 )
-
 SECTIONS {
        _max_align = 32;
 
-       . = 0x08048000;
-
        /*
         * The text section
         *