summaryrefslogtreecommitdiff
path: root/ldso/ldso/sh/boot1_arch.h
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2002-08-08 14:35:49 +0000
committerEric Andersen <andersen@codepoet.org>2002-08-08 14:35:49 +0000
commit9cba52f0aedbb95671e8a14e3fd5ff98381ff2b0 (patch)
treedd82b29998103d7d8ba34351e6fc3a12dc0ed7ac /ldso/ldso/sh/boot1_arch.h
parent4c69b9f793fc1eae9190d8ba26dba25db616272f (diff)
Patch from Stefan Allius and Edie C. Dost to add SuperH
shared library support. This also adds some cleaner error handling, which I (Erik) then ported over to x86 and arm. In addition Stefan added the following fixes: - in hash.c was the lvalue handling of global library functions wrong. To fix this I had to change the prototype of _dl_find_hash. (==> TIS and ELF spec. Vers. 1.2) - in ldso.c was the order of the .init sections calls wrong. Before we call the initialization code of a library we have to check that all dependend libraries are already initialized. This can easily made by calling it in the revers loading order. For this I added a previous pointer chain. - in ldso.c the ELF magics wasn't checked fo PPC, MIPS and SH architecture
Diffstat (limited to 'ldso/ldso/sh/boot1_arch.h')
-rw-r--r--ldso/ldso/sh/boot1_arch.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/ldso/ldso/sh/boot1_arch.h b/ldso/ldso/sh/boot1_arch.h
new file mode 100644
index 000000000..798121dc0
--- /dev/null
+++ b/ldso/ldso/sh/boot1_arch.h
@@ -0,0 +1,23 @@
+/* Any assmbly language/system dependent hacks needed to setup boot1.c so it
+ * will work as expected and cope with whatever platform specific wierdness is
+ * needed for this architecture. */
+
+asm("\
+ .text
+ .globl _dl_boot
+_dl_boot:
+ mov r15, r4
+ mov.l .L_dl_boot2, r1
+ mova .L_dl_boot2, r0
+ add r1, r0
+ jsr @r0
+ add #4, r4
+ jmp @r0
+ mov #0, r4 /* call _start with arg == 0 */
+.L_dl_boot2:\n\
+ .long _dl_boot2-.\n\
+ .previous\n\
+");
+
+#define _dl_boot _dl_boot2
+#define LD_BOOT(X) static void * __attribute__ ((unused)) _dl_boot (X)