]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[linux] Add linux platform skeleton
authorPiotr Jaroszyński <p.jaroszynski@gmail.com>
Wed, 7 Apr 2010 23:25:38 +0000 (01:25 +0200)
committerMichael Brown <mcb30@ipxe.org>
Thu, 19 Aug 2010 11:25:06 +0000 (12:25 +0100)
Add makefiles, ld scripts and default config for linux platform for
both i386 and x86_64.

Signed-off-by: Piotr Jaroszyński <p.jaroszynski@gmail.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/i386/Makefile.linux [new file with mode: 0644]
src/arch/i386/scripts/linux.lds [new file with mode: 0644]
src/arch/x86/Makefile
src/arch/x86/Makefile.linux [new file with mode: 0644]
src/arch/x86_64/Makefile.linux [new file with mode: 0644]
src/arch/x86_64/scripts/linux.lds [new file with mode: 0644]
src/config/defaults/linux.h [new file with mode: 0644]

diff --git a/src/arch/i386/Makefile.linux b/src/arch/i386/Makefile.linux
new file mode 100644 (file)
index 0000000..46328c8
--- /dev/null
@@ -0,0 +1,6 @@
+LDSCRIPT = arch/i386/scripts/linux.lds
+
+SRCDIRS += arch/i386/core/linux
+
+MAKEDEPS += arch/x86/Makefile.linux
+include arch/x86/Makefile.linux
diff --git a/src/arch/i386/scripts/linux.lds b/src/arch/i386/scripts/linux.lds
new file mode 100644 (file)
index 0000000..94b7b90
--- /dev/null
@@ -0,0 +1,101 @@
+/* -*- sh -*- */
+
+/*
+ * Linker script for i386 Linux images
+ *
+ */
+
+OUTPUT_FORMAT ( "elf32-i386", "elf32-i386", "elf32-i386" )
+OUTPUT_ARCH ( i386 )
+
+ENTRY ( _start )
+
+SECTIONS {
+       _max_align = 32;
+
+       . = 0x08048000;
+
+       /*
+        * 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.*)
+               *(SORT(.tbl.*))         /* Various tables.  See include/tables.h */
+               _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)
+               _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.*)
+               *(.discard)
+       }
+}
index f5f67ac783356bf88c9623ebfc89304b629bfa44..e5b6517329140e3d471af80297d2267a3b391cdf 100644 (file)
@@ -5,5 +5,8 @@ INCDIRS         += arch/x86/include
 # x86-specific directories containing source files
 #
 SRCDIRS                += arch/x86/core
-SRCDIRS        += arch/x86/interface/efi
-SRCDIRS        += arch/x86/prefix
+SRCDIRS                += arch/x86/interface/efi
+SRCDIRS                += arch/x86/prefix
+
+# breaks building some of the linux-related objects
+CFLAGS         += -Ulinux
diff --git a/src/arch/x86/Makefile.linux b/src/arch/x86/Makefile.linux
new file mode 100644 (file)
index 0000000..c3471dd
--- /dev/null
@@ -0,0 +1,8 @@
+MEDIA = linux
+
+INCDIRS += arch/x86/include/linux
+SRCDIRS += arch/x86/core/linux
+
+$(BIN)/%.linux : $(BIN)/%.linux.tmp
+       $(QM)$(ECHO) "  [FINISH] $@"
+       $(Q)cp -p $< $@
diff --git a/src/arch/x86_64/Makefile.linux b/src/arch/x86_64/Makefile.linux
new file mode 100644 (file)
index 0000000..154f9d4
--- /dev/null
@@ -0,0 +1,6 @@
+LDSCRIPT = arch/x86_64/scripts/linux.lds
+
+SRCDIRS += arch/x86_64/core/linux
+
+MAKEDEPS += arch/x86/Makefile.linux
+include arch/x86/Makefile.linux
diff --git a/src/arch/x86_64/scripts/linux.lds b/src/arch/x86_64/scripts/linux.lds
new file mode 100644 (file)
index 0000000..34eb356
--- /dev/null
@@ -0,0 +1,101 @@
+/* -*- sh -*- */
+
+/*
+ * Linker script for x86_64 Linux images
+ *
+ */
+
+OUTPUT_FORMAT ( "elf64-x86-64", "elf64-x86-64", "elf64-x86-64" )
+OUTPUT_ARCH ( i386:x86-64 )
+
+ENTRY ( _start )
+
+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
+        *
+        */
+
+       . = ALIGN ( _max_align );
+       .data : {
+               _data = .;
+               *(.data)
+               *(.data.*)
+               *(SORT(.tbl.*))         /* Various tables.  See include/tables.h */
+               _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)
+               _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.*)
+               *(.discard)
+       }
+}
diff --git a/src/config/defaults/linux.h b/src/config/defaults/linux.h
new file mode 100644 (file)
index 0000000..fbb2c17
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef CONFIG_DEFAULTS_LINUX_H
+#define CONFIG_DEFAULTS_LINUX_H
+
+/** @file
+ *
+ * Configuration defaults for linux
+ *
+ */
+
+#define IMAGE_SCRIPT
+
+#endif /* CONFIG_DEFAULTS_LINUX_H */