summaryrefslogtreecommitdiff
path: root/src/ldso
diff options
context:
space:
mode:
authorRichard Pennington <rich@pennware.com>2012-11-09 23:32:57 +0100
committerrofl0r <retnyg@gmx.net>2012-11-13 18:15:10 +0100
commit7669d1e334e6b96455eece78da43bf830b93d697 (patch)
tree6649acfaa61ec6780498b55fa8015ca4f7a6cdae /src/ldso
parent1e717ea3d2a864e00e507f1a70a892c551955f1b (diff)
downloadmusl-7669d1e334e6b96455eece78da43bf830b93d697.tar.gz
musl-7669d1e334e6b96455eece78da43bf830b93d697.tar.bz2
musl-7669d1e334e6b96455eece78da43bf830b93d697.tar.xz
musl-7669d1e334e6b96455eece78da43bf830b93d697.zip
import preliminary ppc work by rdp.
Diffstat (limited to 'src/ldso')
-rw-r--r--src/ldso/ppc/dlsym.S9
-rw-r--r--src/ldso/ppc/start.S22
2 files changed, 31 insertions, 0 deletions
diff --git a/src/ldso/ppc/dlsym.S b/src/ldso/ppc/dlsym.S
new file mode 100644
index 00000000..e36de10b
--- /dev/null
+++ b/src/ldso/ppc/dlsym.S
@@ -0,0 +1,9 @@
+#include <bits/asm.h>
+ .text
+ .global dlsym
+ .type dlsym,@function
+dlsym:
+ mflr r5 // The return address is arg3.
+ b __dlsym
+ .end dlsym
+ .size dlsym, .-dlsym
diff --git a/src/ldso/ppc/start.S b/src/ldso/ppc/start.S
new file mode 100644
index 00000000..f3419824
--- /dev/null
+++ b/src/ldso/ppc/start.S
@@ -0,0 +1,22 @@
+#include <bits/asm.h>
+ .global _start
+ .type _start,@function
+_start:
+ mr r9, r1 // Save the original stack pointer.
+ clrrwi r1, r1, 4 // Align the stack to 16 bytes.
+ lis r13, _SDA_BASE_@ha // r13 points to the small data area.
+ addi r13, r13, _SDA_BASE_@l //
+ li r0, 0 // Zero the frame pointer.
+ lwz r3, 0(r9) // and argc...
+ addi r4, r9, 4 // and argv ...
+ mtlr r0 // Clear the link register.
+ // Go to the musl dynamic linker entry point.
+ bl __dynlink
+ cmpi r4, 0, r3, 1 // Check for a 1.
+ bne r4, . // Stay here
+ mtlr r3 // Set the link address...
+ li r3, 0
+ blr // and go.
+ .end _start
+ .size _start, .-_start
+