summaryrefslogtreecommitdiff
path: root/i386
diff options
context:
space:
mode:
authorThomas Schwinge <tschwinge@gnu.org>2006-10-03 14:57:50 +0000
committerThomas Schwinge <tschwinge@gnu.org>2009-06-18 00:26:41 +0200
commitf53df62268d63a84c5763ce37a4cac267add57a8 (patch)
tree101f94768343c7c73a0295c09e0fd2d96a563ccc /i386
parent974a9c45937557cf35a67bf347bbae658e1aa8e7 (diff)
2006-10-03 Thomas Schwinge <tschwinge@gnu.org>
[task #5941 --- ``Linker script for GNU Mach''] * Makefile.in (kernel.o): Remove `$(systype)-objfiles-prepend' hackery. * i386/Makefile.in (sysdep.a): Likewise. * i386/Makerules.in: Likewise. (LDFLAGS-kernel): Point to the linker script. * i386/i386at/boothdr.S (_start): Don't put into `.text', but into `.text.start' instead. * i386/ldscript: Change to put `.text' at 0x100000 and put `.text.start' first into `.text'.
Diffstat (limited to 'i386')
-rw-r--r--i386/Makefile.in4
-rw-r--r--i386/Makerules.in8
-rw-r--r--i386/i386at/boothdr.S7
-rw-r--r--i386/ldscript6
4 files changed, 14 insertions, 11 deletions
diff --git a/i386/Makefile.in b/i386/Makefile.in
index 6fcd5c3..dc5c661 100644
--- a/i386/Makefile.in
+++ b/i386/Makefile.in
@@ -134,11 +134,9 @@ boothdr.o: i386asm.h
all: sysdep.a
$(MAKE) -C linux $@
-# `$($(systype)-objfiles-prepend)' are special, but are nevertheless
-# created for the target `sysdep.a'.
sysdep.a: $(objfiles) linux/linux.o
rm -f $@
- $(AR) cr $@ $(filter-out $($(systype)-objfiles-prepend),$^)
+ $(AR) cr $@ $^
$(RANLIB) $@
check:
diff --git a/i386/Makerules.in b/i386/Makerules.in
index ef04948..9f09bcc 100644
--- a/i386/Makerules.in
+++ b/i386/Makerules.in
@@ -33,12 +33,8 @@ DEFINES += -DCONTINUATIONS -D__ELF__ -Di386 $(DEFS-$(systype))
# The system specific ones always override the generic ones.
INCLUDES += -I$(abs_top_srcdir)/$(systype)/bogus
-# Arrange for a suitable load address.
-LDFLAGS-kernel += -Ttext 100000
-
-# `boothdr.o' has to be at the beginning of the kernel image.
-$(systype)-objfiles-prepend = boothdr.o
-
+# i386 specific linker script.
+LDFLAGS-kernel += -T $(abs_top_srcdir)/$(systype)/ldscript
#
# Autoconf support
diff --git a/i386/i386at/boothdr.S b/i386/i386at/boothdr.S
index de80753..125eece 100644
--- a/i386/i386at/boothdr.S
+++ b/i386/i386at/boothdr.S
@@ -3,8 +3,11 @@
#include "i386asm.h"
- .text
-
+ /*
+ * This section will be put first into .text. See also i386/ldscript.
+ */
+ .section .text.start,"ax"
+
/* We should never be entered this way. */
.globl start,_start
start:
diff --git a/i386/ldscript b/i386/ldscript
index 0680714..19a5c76 100644
--- a/i386/ldscript
+++ b/i386/ldscript
@@ -46,8 +46,14 @@ SECTIONS
KEEP (*(.init))
} =0x90909090
.plt : { *(.plt) }
+ /*
+ * _start needs to be at 0x100000, so that's where .text will be begin
+ * and .text.start will be first in there. See also i386/i386at/boothdr.S.
+ */
+ . = 0x100000;
.text :
{
+ *(.text.start)
*(.text .stub .text.* .gnu.linkonce.t.*)
KEEP (*(.text.*personality*))
/* .gnu.warning sections are handled specially by elf32.em. */