[gPXE-devel] [PATCH 02/33] [linux] Add linux platform skeleton

Piotr Jaroszyński p.jaroszynski at gmail.com
Sun Aug 15 18:59:07 EDT 2010


Add makefiles, ld scripts and default config for linux platform for both
i386 and x86_64.

Signed-off-by: Piotr Jaroszyński <p.jaroszynski at gmail.com>
---
 src/arch/i386/Makefile.linux      |    6 ++
 src/arch/i386/scripts/linux.lds   |  101 +++++++++++++++++++++++++++++++++++++
 src/arch/x86/Makefile             |    7 ++-
 src/arch/x86/Makefile.linux       |    8 +++
 src/arch/x86_64/Makefile.linux    |    6 ++
 src/arch/x86_64/scripts/linux.lds |  101 +++++++++++++++++++++++++++++++++++++
 src/config/defaults/linux.h       |   12 ++++
 7 files changed, 239 insertions(+), 2 deletions(-)
 create mode 100644 src/arch/i386/Makefile.linux
 create mode 100644 src/arch/i386/scripts/linux.lds
 create mode 100644 src/arch/x86/Makefile.linux
 create mode 100644 src/arch/x86_64/Makefile.linux
 create mode 100644 src/arch/x86_64/scripts/linux.lds
 create mode 100644 src/config/defaults/linux.h

diff --git a/src/arch/i386/Makefile.linux b/src/arch/i386/Makefile.linux
new file mode 100644
index 0000000..46328c8
--- /dev/null
+++ b/src/arch/i386/Makefile.linux
@@ -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
index 0000000..94b7b90
--- /dev/null
+++ b/src/arch/i386/scripts/linux.lds
@@ -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)
+	}
+}
diff --git a/src/arch/x86/Makefile b/src/arch/x86/Makefile
index f5f67ac..e5b6517 100644
--- a/src/arch/x86/Makefile
+++ b/src/arch/x86/Makefile
@@ -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
index 0000000..c3471dd
--- /dev/null
+++ b/src/arch/x86/Makefile.linux
@@ -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
index 0000000..154f9d4
--- /dev/null
+++ b/src/arch/x86_64/Makefile.linux
@@ -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
index 0000000..34eb356
--- /dev/null
+++ b/src/arch/x86_64/scripts/linux.lds
@@ -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
index 0000000..fbb2c17
--- /dev/null
+++ b/src/config/defaults/linux.h
@@ -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 */
-- 
1.7.1



More information about the gPXE-devel mailing list