* sysdeps/unix/sysv/linux/powerpc/socket.S: Adjust asm syntax.
	* sysdeps/unix/sysv/linux/powerpc/clone.S: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/syscall.S: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/brk.S: Likewise.
This commit is contained in:
Ulrich Drepper 1999-10-11 23:36:50 +00:00
parent 38a29b57af
commit acf47bbeeb
5 changed files with 59 additions and 56 deletions

View File

@ -1,6 +1,9 @@
1999-10-11 Ulrich Drepper <drepper@cygnus.com> 1999-10-11 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/powerpc/brk.S: Adjust asm syntax. * sysdeps/unix/sysv/linux/powerpc/socket.S: Adjust asm syntax.
* sysdeps/unix/sysv/linux/powerpc/clone.S: Likewise.
* sysdeps/unix/sysv/linux/powerpc/syscall.S: Likewise.
* sysdeps/unix/sysv/linux/powerpc/brk.S: Likewise.
* sysdeps/powerpc/Makefile [math] (libm-support): Remove t_sqrt. * sysdeps/powerpc/Makefile [math] (libm-support): Remove t_sqrt.

View File

@ -1,5 +1,5 @@
/* brk system call for Linux/ppc. /* brk system call for Linux/ppc.
Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. Copyright (C) 1995, 1996, 1997, 1999 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -24,25 +24,25 @@
.comm __curbrk,4,4 .comm __curbrk,4,4
.section ".text" .section ".text"
ENTRY(__brk) ENTRY(__brk)
stwu %r1,-16(%r1) stwu r1,-16(r1)
stw %r3,8(%r1) stw r3,8(r1)
DO_CALL(SYS_ify(brk)) DO_CALL(SYS_ify(brk))
lwz %r6,8(%r1) lwz r6,8(r1)
#ifdef PIC #ifdef PIC
mflr %r4 mflr r4
bl _GLOBAL_OFFSET_TABLE_@local-4 bl _GLOBAL_OFFSET_TABLE_@local-4
mflr %r5 mflr r5
lwz %r5,__curbrk@got(%r5) lwz r5,__curbrk@got(r5)
mtlr %r4 mtlr r4
stw %r3,0(%r5) stw r3,0(r5)
#else #else
stw %r3,__curbrk@sdarel(%r13) stw r3,__curbrk@sdarel(r13)
#endif #endif
cmplw %r6,%r3 cmplw r6,r3
addi %r1,%r1,16 addi r1,r1,16
li %r3,0 li r3,0
blelr+ blelr+
li %r3,ENOMEM li r3,ENOMEM
b JUMPTARGET(__syscall_error) b JUMPTARGET(__syscall_error)
END (__brk) END (__brk)

View File

@ -1,5 +1,5 @@
/* Wrapper around clone system call. /* Wrapper around clone system call.
Copyright (C) 1997, 1998 Free Software Foundation, Inc. Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -29,58 +29,58 @@
ENTRY(__clone) ENTRY(__clone)
/* Check for child_stack == NULL || fn == NULL. */ /* Check for child_stack == NULL || fn == NULL. */
cmpwi %cr0,%r4,0 cmpwi cr0,r4,0
cmpwi %cr1,%r3,0 cmpwi cr1,r3,0
cror cr0*4+eq,cr1*4+eq,cr0*4+eq cror cr0*4+eq,cr1*4+eq,cr0*4+eq
beq- %cr0,L(badargs) beq- cr0,L(badargs)
/* Set up stack frame for parent. */ /* Set up stack frame for parent. */
stwu %r1,-32(%r1) stwu r1,-32(r1)
stmw %r29,16(%r1) stmw r29,16(r1)
/* Set up stack frame for child. */ /* Set up stack frame for child. */
clrrwi %r4,%r4,4 clrrwi r4,r4,4
li %r0,0 li r0,0
stwu %r0,-16(%r4) stwu r0,-16(r4)
/* Save fn, args, stack across syscall. */ /* Save fn, args, stack across syscall. */
mr %r29,%r3 /* Function in r29. */ mr r29,r3 /* Function in r29. */
mr %r30,%r4 /* Stack pointer in r30. */ mr r30,r4 /* Stack pointer in r30. */
mr %r31,%r6 /* Argument in r31. */ mr r31,r6 /* Argument in r31. */
/* 'flags' argument is first parameter to clone syscall. (The other /* 'flags' argument is first parameter to clone syscall. (The other
argument is the stack pointer, already in r4.) */ argument is the stack pointer, already in r4.) */
mr %r3,%r5 mr r3,r5
/* Do the call. */ /* Do the call. */
DO_CALL(SYS_ify(clone)) DO_CALL(SYS_ify(clone))
/* Check for child process. */ /* Check for child process. */
cmpwi %cr1,%r3,0 cmpwi cr1,r3,0
crandc cr1*4+eq,cr1*4+eq,cr0*4+so crandc cr1*4+eq,cr1*4+eq,cr0*4+so
bne- %cr1,L(parent) /* The '-' is to minimise the race. */ bne- cr1,L(parent) /* The '-' is to minimise the race. */
/* On at least mklinux DR3a5, clone() doesn't actually change /* On at least mklinux DR3a5, clone() doesn't actually change
the stack pointer. I'm pretty sure this is a bug, because the stack pointer. I'm pretty sure this is a bug, because
it adds a race condition if a signal is sent to a thread it adds a race condition if a signal is sent to a thread
just after it is created (in the previous three instructions). */ just after it is created (in the previous three instructions). */
mr %r1,%r30 mr r1,r30
/* Call procedure. */ /* Call procedure. */
mtctr %r29 mtctr r29
mr %r3,%r31 mr r3,r31
bctrl bctrl
/* Call _exit with result from procedure. */ /* Call _exit with result from procedure. */
b JUMPTARGET(_exit) b JUMPTARGET(_exit)
L(parent): L(parent):
/* Parent. Restore registers & return. */ /* Parent. Restore registers & return. */
lmw %r29,16(%r1) lmw r29,16(r1)
addi %r1,%r1,32 addi r1,r1,32
bnslr+ bnslr+
b JUMPTARGET(__syscall_error) b JUMPTARGET(__syscall_error)
L(badargs): L(badargs):
li %r3,EINVAL li r3,EINVAL
b JUMPTARGET(__syscall_error) b JUMPTARGET(__syscall_error)
END (__clone) END (__clone)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. /* Copyright (C) 1995, 1996, 1997, 1999 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -47,38 +47,38 @@
.text .text
ENTRY(__socket) ENTRY(__socket)
stwu %r1,-48(%r1) stwu r1,-48(r1)
#if NARGS >= 1 #if NARGS >= 1
stw %r3,stackblock(%r1) stw r3,stackblock(r1)
#endif #endif
#if NARGS >= 2 #if NARGS >= 2
stw %r4,4+stackblock(%r1) stw r4,4+stackblock(r1)
#endif #endif
#if NARGS >= 3 #if NARGS >= 3
stw %r5,8+stackblock(%r1) stw r5,8+stackblock(r1)
#endif #endif
#if NARGS >= 4 #if NARGS >= 4
stw %r6,12+stackblock(%r1) stw r6,12+stackblock(r1)
#endif #endif
#if NARGS >= 5 #if NARGS >= 5
stw %r7,16+stackblock(%r1) stw r7,16+stackblock(r1)
#endif #endif
#if NARGS >= 6 #if NARGS >= 6
stw %r8,20+stackblock(%r1) stw r8,20+stackblock(r1)
#endif #endif
#if NARGS >= 7 #if NARGS >= 7
stw %r9,24+stackblock(%r1) stw r9,24+stackblock(r1)
#endif #endif
#if NARGS >= 8 #if NARGS >= 8
stw %r10,28+stackblock(%r1) stw r10,28+stackblock(r1)
#endif #endif
#if NARGS >= 9 #if NARGS >= 9
#error too many arguments! #error too many arguments!
#endif #endif
li %r3,P(SOCKOP_,socket) li r3,P(SOCKOP_,socket)
addi %r4,%r1,stackblock addi r4,r1,stackblock
DO_CALL(SYS_ify(socketcall)) DO_CALL(SYS_ify(socketcall))
addi %r1,%r1,48 addi r1,r1,48
PSEUDO_RET PSEUDO_RET
PSEUDO_END (__socket) PSEUDO_END (__socket)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1992, 1997 Free Software Foundation, Inc. /* Copyright (C) 1991, 1992, 1997, 1999 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -19,12 +19,12 @@
#include <sysdep.h> #include <sysdep.h>
ENTRY (syscall) ENTRY (syscall)
mr %r0,%r3 mr r0,r3
mr %r3,%r4 mr r3,r4
mr %r4,%r5 mr r4,r5
mr %r5,%r6 mr r5,r6
mr %r6,%r7 mr r6,r7
mr %r7,%r8 mr r7,r8
sc sc
PSEUDO_RET PSEUDO_RET
PSEUDO_END (syscall) PSEUDO_END (syscall)