summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Reinauer <stepan@coresystems.de>2009-05-30 15:12:33 +0000
committerStefan Reinauer <stepan@openbios.org>2009-05-30 15:12:33 +0000
commit608762793a4e6f1a4152858dfeb372dc4c3f10a0 (patch)
treeb2a68db74db74a9ad3af9c1f711d64dac4efdf71
parent41216225a1b19e91af3e205666a61117d9496de3 (diff)
Many Kudos go to Segher Boessenkool and Patrick Georgi for figuring this one
out. Fix the libgcc dependency on abort() due to nested functions. Signed-off-by: Stefan Reinauer <stepan@coresystems.de> Acked-by: Stefan Reinauer <stepan@coresystems.de> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@4326 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
-rw-r--r--src/arch/ppc/lib/Config.lb2
-rw-r--r--src/arch/ppc/lib/abort.c32
-rw-r--r--src/config/Config.lb2
3 files changed, 35 insertions, 1 deletions
diff --git a/src/arch/ppc/lib/Config.lb b/src/arch/ppc/lib/Config.lb
index b174032b8e..f5bce95a5e 100644
--- a/src/arch/ppc/lib/Config.lb
+++ b/src/arch/ppc/lib/Config.lb
@@ -8,6 +8,7 @@ object ppc.o
object timebase.S
object floats.S
object div64.S
+object abort.o
initobject pci_dev.o
initobject printk_init.o
initobject timebase.S
@@ -15,3 +16,4 @@ initobject timer.o
initobject floats.S
initobject div64.S
initobject ppc.o
+initobject abort.o
diff --git a/src/arch/ppc/lib/abort.c b/src/arch/ppc/lib/abort.c
new file mode 100644
index 0000000000..4fd3f0aa94
--- /dev/null
+++ b/src/arch/ppc/lib/abort.c
@@ -0,0 +1,32 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2009 coresystems GmbH
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/* gcc produces calls to an abort function in their trampoline code on powerpc
+ * 32bit platforms.
+ * This trampoline code is emitted for example in nested functions.
+ */
+
+void abort(void)
+{
+ /* We would want to call die() here, but it might not be available at
+ * this point, so for now we have to die silently.
+ */
+ for (;;) ;
+}
+
diff --git a/src/config/Config.lb b/src/config/Config.lb
index ae01383030..2a30a91ef9 100644
--- a/src/config/Config.lb
+++ b/src/config/Config.lb
@@ -47,7 +47,7 @@ end
makerule coreboot_ram.o
depends "src/arch/$(ARCH)/lib/c_start.o $(DRIVER) coreboot.a $(LIBGCC_FILE_NAME)"
- action "$(CC) $(DISTRO_LFLAGS) -nostdlib -r -o $@ $^"
+ action "$(CC) $(DISTRO_LFLAGS) -nostdlib -r -o $@ src/arch/$(ARCH)/lib/c_start.o $(DRIVER) -Wl,-\( coreboot.a $(LIBGCC_FILE_NAME) -Wl,-\)"
end
makerule coreboot_ram