* 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>
* 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.

View File

@ -1,5 +1,5 @@
/* 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.
The GNU C Library is free software; you can redistribute it and/or
@ -24,25 +24,25 @@
.comm __curbrk,4,4
.section ".text"
ENTRY(__brk)
stwu %r1,-16(%r1)
stw %r3,8(%r1)
stwu r1,-16(r1)
stw r3,8(r1)
DO_CALL(SYS_ify(brk))
lwz %r6,8(%r1)
lwz r6,8(r1)
#ifdef PIC
mflr %r4
mflr r4
bl _GLOBAL_OFFSET_TABLE_@local-4
mflr %r5
lwz %r5,__curbrk@got(%r5)
mtlr %r4
stw %r3,0(%r5)
mflr r5
lwz r5,__curbrk@got(r5)
mtlr r4
stw r3,0(r5)
#else
stw %r3,__curbrk@sdarel(%r13)
stw r3,__curbrk@sdarel(r13)
#endif
cmplw %r6,%r3
addi %r1,%r1,16
li %r3,0
cmplw r6,r3
addi r1,r1,16
li r3,0
blelr+
li %r3,ENOMEM
li r3,ENOMEM
b JUMPTARGET(__syscall_error)
END (__brk)

View File

@ -1,5 +1,5 @@
/* 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.
The GNU C Library is free software; you can redistribute it and/or
@ -29,58 +29,58 @@
ENTRY(__clone)
/* Check for child_stack == NULL || fn == NULL. */
cmpwi %cr0,%r4,0
cmpwi %cr1,%r3,0
cmpwi cr0,r4,0
cmpwi cr1,r3,0
cror cr0*4+eq,cr1*4+eq,cr0*4+eq
beq- %cr0,L(badargs)
beq- cr0,L(badargs)
/* Set up stack frame for parent. */
stwu %r1,-32(%r1)
stmw %r29,16(%r1)
stwu r1,-32(r1)
stmw r29,16(r1)
/* Set up stack frame for child. */
clrrwi %r4,%r4,4
li %r0,0
stwu %r0,-16(%r4)
clrrwi r4,r4,4
li r0,0
stwu r0,-16(r4)
/* Save fn, args, stack across syscall. */
mr %r29,%r3 /* Function in r29. */
mr %r30,%r4 /* Stack pointer in r30. */
mr %r31,%r6 /* Argument in r31. */
mr r29,r3 /* Function in r29. */
mr r30,r4 /* Stack pointer in r30. */
mr r31,r6 /* Argument in r31. */
/* 'flags' argument is first parameter to clone syscall. (The other
argument is the stack pointer, already in r4.) */
mr %r3,%r5
mr r3,r5
/* Do the call. */
DO_CALL(SYS_ify(clone))
/* Check for child process. */
cmpwi %cr1,%r3,0
cmpwi cr1,r3,0
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
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
just after it is created (in the previous three instructions). */
mr %r1,%r30
mr r1,r30
/* Call procedure. */
mtctr %r29
mr %r3,%r31
mtctr r29
mr r3,r31
bctrl
/* Call _exit with result from procedure. */
b JUMPTARGET(_exit)
L(parent):
/* Parent. Restore registers & return. */
lmw %r29,16(%r1)
addi %r1,%r1,32
lmw r29,16(r1)
addi r1,r1,32
bnslr+
b JUMPTARGET(__syscall_error)
L(badargs):
li %r3,EINVAL
li r3,EINVAL
b JUMPTARGET(__syscall_error)
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.
The GNU C Library is free software; you can redistribute it and/or
@ -47,38 +47,38 @@
.text
ENTRY(__socket)
stwu %r1,-48(%r1)
stwu r1,-48(r1)
#if NARGS >= 1
stw %r3,stackblock(%r1)
stw r3,stackblock(r1)
#endif
#if NARGS >= 2
stw %r4,4+stackblock(%r1)
stw r4,4+stackblock(r1)
#endif
#if NARGS >= 3
stw %r5,8+stackblock(%r1)
stw r5,8+stackblock(r1)
#endif
#if NARGS >= 4
stw %r6,12+stackblock(%r1)
stw r6,12+stackblock(r1)
#endif
#if NARGS >= 5
stw %r7,16+stackblock(%r1)
stw r7,16+stackblock(r1)
#endif
#if NARGS >= 6
stw %r8,20+stackblock(%r1)
stw r8,20+stackblock(r1)
#endif
#if NARGS >= 7
stw %r9,24+stackblock(%r1)
stw r9,24+stackblock(r1)
#endif
#if NARGS >= 8
stw %r10,28+stackblock(%r1)
stw r10,28+stackblock(r1)
#endif
#if NARGS >= 9
#error too many arguments!
#endif
li %r3,P(SOCKOP_,socket)
addi %r4,%r1,stackblock
li r3,P(SOCKOP_,socket)
addi r4,r1,stackblock
DO_CALL(SYS_ify(socketcall))
addi %r1,%r1,48
addi r1,r1,48
PSEUDO_RET
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.
The GNU C Library is free software; you can redistribute it and/or
@ -19,12 +19,12 @@
#include <sysdep.h>
ENTRY (syscall)
mr %r0,%r3
mr %r3,%r4
mr %r4,%r5
mr %r5,%r6
mr %r6,%r7
mr %r7,%r8
mr r0,r3
mr r3,r4
mr r4,r5
mr r5,r6
mr r6,r7
mr r7,r8
sc
PSEUDO_RET
PSEUDO_END (syscall)