Update.
authorUlrich Drepper <drepper@redhat.com>
Wed, 10 Mar 2004 23:14:28 +0000 (23:14 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 10 Mar 2004 23:14:28 +0000 (23:14 +0000)
2004-03-10  Ulrich Drepper  <drepper@redhat.com>

* posix/getopt.c (_): Don't define here for glibc.

ChangeLog
nptl/ChangeLog
nptl/sysdeps/powerpc/tcb-offsets.sym
nptl/sysdeps/unix/sysv/linux/ia64/pt-vfork.S
nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/pt-vfork.S [moved from nptl/sysdeps/unix/sysv/linux/powerpc/pt-vfork.S with 82% similarity]
nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S [new file with mode: 0644]
nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/pt-vfork.S [new file with mode: 0644]
nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/vfork.S [new file with mode: 0644]
posix/getopt.c

index e073766..e3b02c1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2004-03-10  Ulrich Drepper  <drepper@redhat.com>
+
+       * posix/getopt.c (_): Don't define here for glibc.
+
 2004-03-10  Jakub Jelinek  <jakub@redhat.com>
 
        * include/libc-symbols.h [__ASSEMBLY__] (compat_text_section,
index 94d2273..436a263 100644 (file)
@@ -1,5 +1,15 @@
 2004-03-10  Jakub Jelinek  <jakub@redhat.com>
 
+       * sysdeps/unix/sysv/linux/powerpc/pt-vfork.S: Remove.
+       * sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S: New file.
+       * sysdeps/unix/sysv/linux/powerpc/powerpc32/pt-vfork.S: New file.
+       * sysdeps/unix/sysv/linux/powerpc/powerpc64/vfork.S: New file.
+       * sysdeps/unix/sysv/linux/powerpc/powerpc64/pt-vfork.S: New file.
+       * sysdeps/powerpc/tcb-offsets.sym: Add PID.
+
+       * sysdeps/unix/sysv/linux/ia64/pt-vfork.S (__vfork): Don't use
+       a local register for saving old PID.  Negate PID in parent upon exit.
+
        * sysdeps/unix/sysv/linux/s390/s390-32/pt-vfork.S: Include
        tcb-offsets.h.
        (__vfork): Negate PID if non-zero and set to INT_MIN if zero
index d6b7560..fddd466 100644 (file)
@@ -11,3 +11,4 @@
 #if TLS_MULTIPLE_THREADS_IN_TCB
 MULTIPLE_THREADS_OFFSET                thread_offsetof (header.multiple_threads)
 #endif
+PID                            thread_offsetof (pid)
index f59227c..49398d5 100644 (file)
 ENTRY(__vfork)
        .prologue       // work around a GAS bug which triggers if
        .body           // first .prologue is not at the beginning of proc.
-       alloc r2=ar.pfs,0,1,2,0
+       alloc r2=ar.pfs,0,0,2,0
        adds r14=PID,r13
        ;; 
-       ld4 loc0=[r14]
+       ld4 r16=[r14]
        ;;
-       sub r15=0,loc0
+       sub r15=0,r16
        mov out0=CLONE_VM+CLONE_VFORK+SIGCHLD
        mov out1=0              /* Standard sp value.                   */
        ;;
        st4 [r14]=r15
        DO_CALL (SYS_ify (clone))
        cmp.eq p0,p7=0,r8
-       cmp.eq p6,p0=-1,r10
        adds r14=PID,r13
        ;;
-(p7)   st4 [r14]=loc0
+(p7)   ld4 r16=[r14]
+       cmp.eq p6,p0=-1,r10
+       ;;
+(p7)   sub r15=0,r16
+       ;;
+(p7)   st4 [r14]=r15
 (p6)   br.cond.spnt.few __syscall_error
        ret
 PSEUDO_END(__vfork)
@@ -1,5 +1,6 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
+   Contributed by Jakub Jelinek <jakub@redhat.com>, 2004.
 
    The GNU C Library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
@@ -20,6 +21,7 @@
 #define _ERRNO_H       1
 #include <bits/errno.h>
 #include <kernel-features.h>
+#include <tcb-offsets.h>
 
 /* Clone the calling process, but without copying the whole address space.
    The calling process is suspended until the new process exits or is
    and the process ID of the new process to the old process.  */
 
 ENTRY (__vfork)
-       DO_CALL (SYS_ify (vfork));
+       lwz     0,PID(2)
+       neg     0,0
+       stw     0,PID(2)
+
+       DO_CALL (SYS_ify (vfork))
+
+       cmpwi   1,3,0
+       beqlr-  1
+
+       lwz     0,PID(2)
+       neg     0,0
+       stw     0,PID(2)
+
        PSEUDO_RET
 
 PSEUDO_END (__vfork)
diff --git a/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S b/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S
new file mode 100644 (file)
index 0000000..6b15567
--- /dev/null
@@ -0,0 +1,57 @@
+/* Copyright (C) 2004 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Jakub Jelinek <jakub@redhat.com>, 2004.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <sysdep-cancel.h>
+#define _ERRNO_H       1
+#include <bits/errno.h>
+#include <kernel-features.h>
+#include <tcb-offsets.h>
+
+/* Clone the calling process, but without copying the whole address space.
+   The calling process is suspended until the new process exits or is
+   replaced by a call to `execve'.  Return -1 for errors, 0 to the new process,
+   and the process ID of the new process to the old process.  */
+
+ENTRY (__vfork)
+       lwz     0,PID(2)
+       cmpwi   0,0,0
+       neg     0,0
+       bne-    0,1f
+       lis     0,0x8000
+1:     stw     0,PID(2)
+
+       DO_CALL (SYS_ify (vfork))
+
+       cmpwi   1,3,0
+       beqlr-  1
+
+       lwz     0,PID(2)
+       /* Cannot use clrlwi. here, because cr0 needs to be preserved
+          until PSEUDO_RET.  */
+       clrlwi  4,0,1
+       cmpwi   1,4,0
+       beq-    1,1f
+       neg     4,0
+1:     stw     4,PID(2)
+
+       PSEUDO_RET
+
+PSEUDO_END (__vfork)
+
+weak_alias (__vfork, vfork)
diff --git a/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/pt-vfork.S b/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/pt-vfork.S
new file mode 100644 (file)
index 0000000..ec7a2a1
--- /dev/null
@@ -0,0 +1,49 @@
+/* Copyright (C) 2004 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Jakub Jelinek <jakub@redhat.com>, 2004.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <sysdep-cancel.h>
+#define _ERRNO_H       1
+#include <bits/errno.h>
+#include <kernel-features.h>
+#include <tcb-offsets.h>
+
+/* Clone the calling process, but without copying the whole address space.
+   The calling process is suspended until the new process exits or is
+   replaced by a call to `execve'.  Return -1 for errors, 0 to the new process,
+   and the process ID of the new process to the old process.  */
+
+ENTRY (__vfork)
+       lwz     0,PID(13)
+       neg     0,0
+       stw     0,PID(13)
+
+       DO_CALL (SYS_ify (vfork))
+
+       cmpwi   1,3,0
+       beqlr-  1
+
+       lwz     0,PID(13)
+       neg     0,0
+       stw     0,PID(13)
+
+       PSEUDO_RET
+
+PSEUDO_END (__vfork)
+
+weak_alias (__vfork, vfork)
diff --git a/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/vfork.S b/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/vfork.S
new file mode 100644 (file)
index 0000000..4820eca
--- /dev/null
@@ -0,0 +1,55 @@
+/* Copyright (C) 2004 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Jakub Jelinek <jakub@redhat.com>, 2004.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <sysdep-cancel.h>
+#define _ERRNO_H       1
+#include <bits/errno.h>
+#include <kernel-features.h>
+#include <tcb-offsets.h>
+
+/* Clone the calling process, but without copying the whole address space.
+   The calling process is suspended until the new process exits or is
+   replaced by a call to `execve'.  Return -1 for errors, 0 to the new process,
+   and the process ID of the new process to the old process.  */
+
+ENTRY (__vfork)
+       lwz     0,PID(13)
+       cmpwi   0,0,0
+       neg     0,0
+       bne-    0,1f
+       lis     0,0x8000
+1:     stw     0,PID(13)
+
+       DO_CALL (SYS_ify (vfork))
+
+       cmpwi   1,3,0
+       beqlr-  1
+
+       lwz     0,PID(13)
+       clrlwi  4,0,1
+       cmpwi   1,4,0
+       beq-    1,1f
+       neg     4,0
+1:     stw     4,PID(13)
+
+       PSEUDO_RET
+
+PSEUDO_END (__vfork)
+
+weak_alias (__vfork, vfork)
index 4c383a4..9ad13a4 100644 (file)
@@ -71,8 +71,8 @@
 # include <libintl.h>
 #else
 # include "gettext.h"
+# define _(msgid) gettext (msgid)
 #endif
-#define _(msgid) gettext (msgid)
 
 #if defined _LIBC && defined USE_IN_LIBIO
 # include <wchar.h>