mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-22 10:50:07 +00:00
Update.
* 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:
parent
38a29b57af
commit
acf47bbeeb
@ -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.
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user