summaryrefslogtreecommitdiff
path: root/src/ldso
diff options
context:
space:
mode:
authorrofl0r <retnyg@gmx.net>2012-11-09 23:36:55 +0100
committerrofl0r <retnyg@gmx.net>2012-11-13 19:12:25 +0100
commit1c8eb8bad791fe9d01d0d4ab77882db634fa933d (patch)
treed3faf83663c1383f7ea16a0e6c68b3e2f4cc968a /src/ldso
parent7669d1e334e6b96455eece78da43bf830b93d697 (diff)
downloadmusl-1c8eb8bad791fe9d01d0d4ab77882db634fa933d.tar.gz
PPC port cleaned up, static linking works well now.
Diffstat (limited to 'src/ldso')
-rw-r--r--src/ldso/powerpc/dlsym.s (renamed from src/ldso/ppc/dlsym.S)3
-rw-r--r--src/ldso/powerpc/start.s23
-rw-r--r--src/ldso/ppc/start.S22
3 files changed, 24 insertions, 24 deletions
diff --git a/src/ldso/ppc/dlsym.S b/src/ldso/powerpc/dlsym.s
index e36de10b..20796176 100644
--- a/src/ldso/ppc/dlsym.S
+++ b/src/ldso/powerpc/dlsym.s
@@ -1,9 +1,8 @@
-#include <bits/asm.h>
.text
.global dlsym
.type dlsym,@function
dlsym:
- mflr r5 // The return address is arg3.
+ mflr 5 # The return address is arg3.
b __dlsym
.end dlsym
.size dlsym, .-dlsym
diff --git a/src/ldso/powerpc/start.s b/src/ldso/powerpc/start.s
new file mode 100644
index 00000000..d2060e3d
--- /dev/null
+++ b/src/ldso/powerpc/start.s
@@ -0,0 +1,23 @@
+# FIXME : does not work, the small data array needs to be relocated.
+# see elfspec_ppc.pdf, page 76-84
+ .global _start
+ .type _start,@function
+_start:
+ mr 9, 1 # Save the original stack pointer.
+ clrrwi 1, 1, 4 # Align the stack to 16 bytes.
+ lis 13, _SDA_BASE_@ha # r13 points to the small data area.
+ addi 13, 13, _SDA_BASE_@l
+ li 0, 0 # Zero the frame pointer.
+ lwz 3, 0(9) # and argc...
+ addi 4, 9, 4 # and argv ...
+ mtlr 0 # Clear the link register.
+ # Go to the musl dynamic linker entry point.
+ bl __dynlink
+ cmpi 4, 0, 3, 1 # Check for a 1.
+ bne 4, . # Stay here
+ mtlr 3 # Set the link address...
+ li 3, 0
+ blr # and go.
+ .end _start
+ .size _start, .-_start
+
diff --git a/src/ldso/ppc/start.S b/src/ldso/ppc/start.S
deleted file mode 100644
index f3419824..00000000
--- a/src/ldso/ppc/start.S
+++ /dev/null
@@ -1,22 +0,0 @@
-#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
-