This is the mail archive of the libc-alpha@sources.redhat.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] PowerPC64 port part 6 of 7


PowerPC64 part 6 of 7 follows:

2002-07-29  Steven Munroe  <sjmunroe@us.ibm.com>
	* shlib-versions: Set libpthread version to 2.2.5 for powerpc64.
	* Versions.def: Add GLIBC_2.2.5 to libpthread list.  Otherwise 
	ABI_libpthread_GLIBC_2_2_5 is not defined in abi.versions.h.  This caused
	the SHLIB_COMPAT macro to incorrectly include code obsoleted before 2.2.5.
	* sysdeps/powerpc/pt-machine.h: moved to...
	* sysdeps/powerpc/ppc32/pt-machine.h: ...here
	* sysdeps/powerpc/ppc64/pt-machine.h: New file. Implement
	64-bit __compare_and_swap, THREAD_SELF via r13, and FLOATING_STACKS.
	Separate powerpc into powerpc/ppc32 and powerpc/ppc64.

>>>>>>>> ppc64-linuxthreads-addppc64-20020815.patch
diff -rc2PN -x *.orig libc23-cvstip-20020815/Versions.def libc23/Versions.def
*** libc23-cvstip-20020815/Versions.def	Thu Jul 11 11:29:54 2002
--- libc23/Versions.def	Thu Aug 15 16:54:50 2002
***************
*** 68,71 ****
--- 68,73 ----
    GLIBC_2.2
    GLIBC_2.2.3
+   GLIBC_2.2.4
+   GLIBC_2.2.5
    GLIBC_2.2.6
    GLIBC_PRIVATE
diff -rc2PN -x *.orig libc23-cvstip-20020815/linuxthreads/shlib-versions libc23/linuxthreads/shlib-versions
*** libc23-cvstip-20020815/linuxthreads/shlib-versions	Thu Sep 20 01:35:08 2001
--- libc23/linuxthreads/shlib-versions	Thu Aug 15 16:54:50 2002
***************
*** 8,10 ****
--- 8,11 ----
  cris-.*-linux.*		libpthread=0		GLIBC_2.2
  x86_64-.*-linux.*	libpthread=0		GLIBC_2.2.5
+ powerpc64-.*-linux.*	libpthread=0		GLIBC_2.2.5
  .*-.*-linux.*		libpthread=0
diff -rc2PN -x *.orig libc23-cvstip-20020815/linuxthreads/sysdeps/powerpc/ppc32/pt-machine.h libc23/linuxthreads/sysdeps/powerpc/ppc32/pt-machine.h
*** libc23-cvstip-20020815/linuxthreads/sysdeps/powerpc/ppc32/pt-machine.h	Wed Dec 31 18:00:00 1969
--- libc23/linuxthreads/sysdeps/powerpc/ppc32/pt-machine.h	Thu Aug 15 16:54:50 2002
***************
*** 0 ****
--- 1,93 ----
+ /* Machine-dependent pthreads configuration and inline functions.
+    powerpc version.
+    Copyright (C) 1996, 1997, 1998, 2000, 2001, 2002 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
+    modify it under the terms of the GNU Library General Public License as
+    published by the Free Software Foundation; either version 2 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
+    Library General Public License for more details.
+ 
+    You should have received a copy of the GNU Library General Public
+    License along with the GNU C Library; see the file COPYING.LIB.  If
+    not, write to the Free Software Foundation, Inc.,
+    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+ 
+ /* These routines are from Appendix G of the 'PowerPC 601 RISC Microprocessor
+    User's Manual', by IBM and Motorola.  */
+ 
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H   1
+ 
+ #ifndef PT_EI
+ # define PT_EI extern inline
+ #endif
+ 
+ extern long int testandset (int *spinlock);
+ extern int __compare_and_swap (long int *p, long int oldval, long int newval);
+ 
+ /* For multiprocessor systems, we want to ensure all memory accesses
+    are completed before we reset a lock.  On other systems, we still
+    need to make sure that the compiler has flushed everything to memory.  */
+ #define MEMORY_BARRIER() __asm__ __volatile__ ("sync" : : : "memory")
+ 
+ /* Get some notion of the current stack.  Need not be exactly the top
+    of the stack, just something somewhere in the current frame.  */
+ #define CURRENT_STACK_FRAME  stack_pointer
+ register char * stack_pointer __asm__ ("r1");
+ 
+ /* Compare-and-swap for semaphores. */
+ /* note that test-and-set(x) is the same as !compare-and-swap(x, 0, 1) */
+ 
+ #define HAS_COMPARE_AND_SWAP_WITH_RELEASE_SEMANTICS
+ #define IMPLEMENT_TAS_WITH_CAS
+ 
+ PT_EI int
+ __compare_and_swap (long int *p, long int oldval, long int newval)
+ {
+   int ret;
+ 
+   __asm__ __volatile__ (
+ 	   "0:    lwarx %0,0,%1 ;"
+ 	   "      xor. %0,%3,%0;"
+ 	   "      bne 1f;"
+ 	   "      stwcx. %2,0,%1;"
+ 	   "      bne- 0b;"
+ 	   "1:    "
+ 	: "=&r"(ret)
+ 	: "r"(p), "r"(newval), "r"(oldval)
+ 	: "cr0", "memory");
+   /* This version of __compare_and_swap is to be used when acquiring
+      a lock, so we don't need to worry about whether other memory
+      operations have completed, but we do need to be sure that any loads
+      after this point really occur after we have acquired the lock.  */
+   __asm__ __volatile__ ("isync" : : : "memory");
+   return ret == 0;
+ }
+ 
+ PT_EI int
+ __compare_and_swap_with_release_semantics (long int *p,
+ 					   long int oldval, long int newval)
+ {
+   int ret;
+ 
+   MEMORY_BARRIER ();
+   __asm__ __volatile__ (
+ 	   "0:    lwarx %0,0,%1 ;"
+ 	   "      xor. %0,%3,%0;"
+ 	   "      bne 1f;"
+ 	   "      stwcx. %2,0,%1;"
+ 	   "      bne- 0b;"
+ 	   "1:    "
+ 	: "=&r"(ret)
+ 	: "r"(p), "r"(newval), "r"(oldval)
+ 	: "cr0", "memory");
+   return ret == 0;
+ }
+ 
+ #endif /* pt-machine.h */
diff -rc2PN -x *.orig libc23-cvstip-20020815/linuxthreads/sysdeps/powerpc/ppc64/pt-machine.h libc23/linuxthreads/sysdeps/powerpc/ppc64/pt-machine.h
*** libc23-cvstip-20020815/linuxthreads/sysdeps/powerpc/ppc64/pt-machine.h	Wed Dec 31 18:00:00 1969
--- libc23/linuxthreads/sysdeps/powerpc/ppc64/pt-machine.h	Thu Aug 15 16:54:50 2002
***************
*** 0 ****
--- 1,129 ----
+ /* Machine-dependent pthreads configuration and inline functions.
+    powerpc version.
+    Copyright (C) 1996, 1997, 1998, 2000, 2001, 2002 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
+    modify it under the terms of the GNU Library General Public License as
+    published by the Free Software Foundation; either version 2 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
+    Library General Public License for more details.
+ 
+    You should have received a copy of the GNU Library General Public
+    License along with the GNU C Library; see the file COPYING.LIB.  If
+    not, write to the Free Software Foundation, Inc.,
+    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+ 
+ /* These routines are from Appendix G of the 'PowerPC 601 RISC Microprocessor
+    User's Manual', by IBM and Motorola.  */
+ 
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H   1
+ 
+ #ifndef PT_EI
+ # define PT_EI extern inline
+ #endif
+ 
+ extern long int testandset (int *spinlock);
+ extern int __compare_and_swap (long int *p, long int oldval, long int newval);
+ 
+ /* For multiprocessor systems, we want to ensure all memory accesses
+    are completed before we reset a lock.  On other systems, we still
+    need to make sure that the compiler has flushed everything to memory.  */
+ #define MEMORY_BARRIER() __asm__ __volatile__ ("sync" : : : "memory")
+ 
+ /* We want the OS to assign stack addresses.  */
+ #define FLOATING_STACKS 1
+ 
+ /* Maximum size of the stack if the rlimit is unlimited.  */
+ #define ARCH_STACK_MAX_SIZE     16*1024*1024
+ 
+ /* Get some notion of the current stack.  Need not be exactly the top
+    of the stack, just something somewhere in the current frame.  */
+ #define CURRENT_STACK_FRAME  stack_pointer
+ register char * stack_pointer __asm__ ("r1");
+ 
+ /* Register r13 (tp) is reserved by the ABI as "thread pointer". */
+ struct _pthread_descr_struct;
+ register struct _pthread_descr_struct *__thread_self __asm__("r13");
+ 
+ /* Return the thread descriptor for the current thread.  */
+ #define THREAD_SELF  __thread_self
+ 
+ /* Initialize the thread-unique value.  */
+ #define INIT_THREAD_SELF(descr, nr)  (__thread_self = (descr))
+ 
+ /* Compare-and-swap for semaphores. */
+ /* note that test-and-set(x) is the same as !compare-and-swap(x, 0, 1) */
+   
+ #define HAS_COMPARE_AND_SWAP
+ #define HAS_COMPARE_AND_SWAP_WITH_RELEASE_SEMANTICS
+ 
+ PT_EI int
+ __compare_and_swap (long int *p, long int oldval, long int newval)
+ {
+   long int ret;
+   
+   __asm__ __volatile__ (
+ 	   "0:    ldarx %0,0,%1 ;"
+ 	   "      xor. %0,%3,%0;"
+ 	   "      bne 1f;"
+ 	   "      stdcx. %2,0,%1;"
+ 	   "      bne- 0b;"
+ 	   "1:    "
+ 	: "=&r"(ret)
+ 	: "r"(p), "r"(newval), "r"(oldval)
+ 	: "cr0", "memory");
+   /* This version of __compare_and_swap is to be used when acquiring
+      a lock, so we don't need to worry about whether other memory
+      operations have completed, but we do need to be sure that any loads
+      after this point really occur after we have acquired the lock.  */
+   __asm__ __volatile__ ("isync" : : : "memory");
+   return (int)(ret == 0);
+ }
+ 
+ PT_EI int
+ __compare_and_swap_with_release_semantics (long int *p,
+ 					   long int oldval, long int newval)
+ {
+   long int ret;
+ 
+   MEMORY_BARRIER ();
+   __asm__ __volatile__ (
+ 	   "0:    ldarx %0,0,%1 ;"
+ 	   "      xor. %0,%3,%0;"
+ 	   "      bne 1f;"
+ 	   "      stdcx. %2,0,%1;"
+ 	   "      bne- 0b;"
+ 	   "1:    "
+ 	: "=&r"(ret)
+ 	: "r"(p), "r"(newval), "r"(oldval)
+ 	: "cr0", "memory");
+   return (int)(ret == 0);
+ }
+ 
+ PT_EI long int
+ testandset (int *p)
+ {
+   long int ret, val = 1;
+ 
+   MEMORY_BARRIER ();
+   __asm__ __volatile__ (
+ 	   "0:    lwarx %0,0,%1 ;"
+ 	   "      cmpwi  0,%0,0;"
+ 	   "      bne 1f;"
+ 	   "      stwcx. %2,0,%1;"
+ 	   "      bne- 0b;"
+ 	   "1:    "
+ 	: "=&r"(ret)
+ 	: "r"(p), "r" (val)
+ 	: "cr0", "memory");
+   MEMORY_BARRIER ();
+   return ret != 0;
+ }
+ 
+ #endif /* pt-machine.h */
diff -rc2PN -x *.orig libc23-cvstip-20020815/linuxthreads/sysdeps/powerpc/pt-machine.h libc23/linuxthreads/sysdeps/powerpc/pt-machine.h
*** libc23-cvstip-20020815/linuxthreads/sysdeps/powerpc/pt-machine.h	Fri Apr  5 22:05:16 2002
--- libc23/linuxthreads/sysdeps/powerpc/pt-machine.h	Wed Dec 31 18:00:00 1969
***************
*** 1,93 ****
- /* Machine-dependent pthreads configuration and inline functions.
-    powerpc version.
-    Copyright (C) 1996, 1997, 1998, 2000, 2001, 2002 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
-    modify it under the terms of the GNU Library General Public License as
-    published by the Free Software Foundation; either version 2 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
-    Library General Public License for more details.
- 
-    You should have received a copy of the GNU Library General Public
-    License along with the GNU C Library; see the file COPYING.LIB.  If
-    not, write to the Free Software Foundation, Inc.,
-    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
- 
- /* These routines are from Appendix G of the 'PowerPC 601 RISC Microprocessor
-    User's Manual', by IBM and Motorola.  */
- 
- #ifndef _PT_MACHINE_H
- #define _PT_MACHINE_H   1
- 
- #ifndef PT_EI
- # define PT_EI extern inline
- #endif
- 
- extern long int testandset (int *spinlock);
- extern int __compare_and_swap (long int *p, long int oldval, long int newval);
- 
- /* For multiprocessor systems, we want to ensure all memory accesses
-    are completed before we reset a lock.  On other systems, we still
-    need to make sure that the compiler has flushed everything to memory.  */
- #define MEMORY_BARRIER() __asm__ __volatile__ ("sync" : : : "memory")
- 
- /* Get some notion of the current stack.  Need not be exactly the top
-    of the stack, just something somewhere in the current frame.  */
- #define CURRENT_STACK_FRAME  stack_pointer
- register char * stack_pointer __asm__ ("r1");
- 
- /* Compare-and-swap for semaphores. */
- /* note that test-and-set(x) is the same as !compare-and-swap(x, 0, 1) */
- 
- #define HAS_COMPARE_AND_SWAP_WITH_RELEASE_SEMANTICS
- #define IMPLEMENT_TAS_WITH_CAS
- 
- PT_EI int
- __compare_and_swap (long int *p, long int oldval, long int newval)
- {
-   int ret;
- 
-   __asm__ __volatile__ (
- 	   "0:    lwarx %0,0,%1 ;"
- 	   "      xor. %0,%3,%0;"
- 	   "      bne 1f;"
- 	   "      stwcx. %2,0,%1;"
- 	   "      bne- 0b;"
- 	   "1:    "
- 	: "=&r"(ret)
- 	: "r"(p), "r"(newval), "r"(oldval)
- 	: "cr0", "memory");
-   /* This version of __compare_and_swap is to be used when acquiring
-      a lock, so we don't need to worry about whether other memory
-      operations have completed, but we do need to be sure that any loads
-      after this point really occur after we have acquired the lock.  */
-   __asm__ __volatile__ ("isync" : : : "memory");
-   return ret == 0;
- }
- 
- PT_EI int
- __compare_and_swap_with_release_semantics (long int *p,
- 					   long int oldval, long int newval)
- {
-   int ret;
- 
-   MEMORY_BARRIER ();
-   __asm__ __volatile__ (
- 	   "0:    lwarx %0,0,%1 ;"
- 	   "      xor. %0,%3,%0;"
- 	   "      bne 1f;"
- 	   "      stwcx. %2,0,%1;"
- 	   "      bne- 0b;"
- 	   "1:    "
- 	: "=&r"(ret)
- 	: "r"(p), "r"(newval), "r"(oldval)
- 	: "cr0", "memory");
-   return ret == 0;
- }
- 
- #endif /* pt-machine.h */
--- 0 ----

<<<<<<<< ppc64-linuxthreads-addppc64-20020815.patch


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]