about summary refs log tree commit diff
path: root/src/internal
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/internal
parent7669d1e334e6b96455eece78da43bf830b93d697 (diff)
downloadmusl-1c8eb8bad791fe9d01d0d4ab77882db634fa933d.tar.gz
musl-1c8eb8bad791fe9d01d0d4ab77882db634fa933d.tar.xz
musl-1c8eb8bad791fe9d01d0d4ab77882db634fa933d.zip
PPC port cleaned up, static linking works well now.
Diffstat (limited to 'src/internal')
-rw-r--r--src/internal/powerpc/syscall.s18
-rw-r--r--src/internal/ppc/syscall.S24
2 files changed, 18 insertions, 24 deletions
diff --git a/src/internal/powerpc/syscall.s b/src/internal/powerpc/syscall.s
new file mode 100644
index 00000000..bca620db
--- /dev/null
+++ b/src/internal/powerpc/syscall.s
@@ -0,0 +1,18 @@
+	.global __syscall
+	.type   __syscall,@function
+__syscall:
+	mr      0, 3                  # Save the system call number
+	mr      3, 4                  # Shift the arguments: arg1
+	mr      4, 5                  # arg2
+	mr      5, 6                  # arg3
+	mr      6, 7                  # arg4
+	mr      7, 8                  # arg5
+	mr      8, 9                  # arg6
+	sc
+	bnslr+ # return if not summary overflow
+	#else error:
+	# return negated value.
+	neg 3, 3
+	blr
+	.end    __syscall
+	.size   __syscall, .-__syscall
diff --git a/src/internal/ppc/syscall.S b/src/internal/ppc/syscall.S
deleted file mode 100644
index e56abc6f..00000000
--- a/src/internal/ppc/syscall.S
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <bits/asm.h>
-        .global __syscall
-        .type   __syscall,@function
-__syscall:
-        mflr    r0
-        stw     r0, -4(r1)              // Save the return address.
-        mr      r0, r3                  // Save the system call number
-        mr      r3, r4                  // Shift the arguments: arg1
-        mr      r4, r5                  // arg2
-        mr      r5, r6                  // arg3
-        mr      r6, r7                  // arg4
-        mr      r7, r8                  // arg5
-        mr      r8, r9                  // arg6
-        sc
-        mfcr    r0                      // Check for an error
-        rlwinm  r4, r0, r0, 3, 3        // by checking for bit 28.
-        cmplwi  r0, r4, 0               // It is an error if non-zero.
-        beq     r0, 1f                  // Jump if not an error.
-        neg     r3, r3                  // Negate the error number.
-1:      lwz     r0, -4(r1)              // Restore the return address.
-        mtlr    r0
-	blr
-        .end    __syscall
-        .size   __syscall, .-__syscall