From e84db1121b206736eb2958322abd0830b068132d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Piotr=20Jaroszy=C5=84ski?=
Date: Thu, 8 Apr 2010 01:25:38 +0200
Subject: [PATCH] [linux] Add linux platform skeleton
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Add makefiles, ld scripts and default config for linux platform for
both i386 and x86_64.
Signed-off-by: Piotr JaroszyĆski
Signed-off-by: Michael Brown
---
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 000000000..46328c83b
--- /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 000000000..94b7b900e
--- /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 f5f67ac78..e5b651732 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 000000000..c3471dd75
--- /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 000000000..154f9d40d
--- /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 000000000..34eb3561b
--- /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 000000000..fbb2c17b9
--- /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 */