Procházet zdrojové kódy

ppc: cleanup unsupported ppc64 code

Remove ppc64 bits and bytes, as we don't support ppc64 and
it makes the code more readable without the dead code.
Waldemar Brodkorb před 8 roky
rodič
revize
c0f118c886

+ 0 - 14
libc/sysdeps/linux/powerpc/README.bits

@@ -1,14 +0,0 @@
-
-include/bits is mostly the same as glibc-2.2.4.  The glibc-2.2.4
-versions can be accessed with the tag glibc224.
-
-Major differences:
-
-  - termios.h is from the Linux kernel, not glibc, because glibc has
-    a very strange legacy conversion layer, which we ignore.
-
-  - syscall.h is deleted; instead, sysnum.h is autogenerated in uClibc
-
-  - syscalls.h is added.
-
-

+ 0 - 252
libc/sysdeps/linux/powerpc/bits/atomic.h

@@ -1,247 +1,3 @@
-/* Atomic operations.  PowerPC Common version.
-   Copyright (C) 2003, 2004 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003.
-
-   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, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <bits/wordsize.h>
-
-#if __WORDSIZE == 64
-/* Atomic operations.  PowerPC64 version.
-   Copyright (C) 2003, 2004 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003.
-
-   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, see
-   <http://www.gnu.org/licenses/>.  */
-
-/* The 32-bit exchange_bool is different on powerpc64 because the subf
-   does signed 64-bit arthmatic while the lwarx is 32-bit unsigned
-   (a load word and zero (high 32) form) load.
-   In powerpc64 register values are 64-bit by default,  including oldval.
-   The value in old val unknown sign extension, lwarx loads the 32-bit
-   value as unsigned.  So we explicitly clear the high 32 bits in oldval.  */
-# define __arch_compare_and_exchange_bool_32_acq(mem, newval, oldval) \
-({									      \
-  unsigned int __tmp, __tmp2;						      \
-  __asm__ __volatile__ ("   clrldi  %1,%1,32\n"				      \
-		    "1:	lwarx	%0,0,%2\n"				      \
-		    "	subf.	%0,%1,%0\n"				      \
-		    "	bne	2f\n"					      \
-		    "	stwcx.	%4,0,%2\n"				      \
-		    "	bne-	1b\n"					      \
-		    "2:	" __ARCH_ACQ_INSTR				      \
-		    : "=&r" (__tmp), "=r" (__tmp2)			      \
-		    : "b" (mem), "1" (oldval), "r" (newval)		      \
-		    : "cr0", "memory");					      \
-  __tmp != 0;								      \
-})
-
-# define __arch_compare_and_exchange_bool_32_rel(mem, newval, oldval) \
-({									      \
-  unsigned int __tmp, __tmp2;						      \
-  __asm__ __volatile__ (__ARCH_REL_INSTR "\n"				      \
-		    "   clrldi  %1,%1,32\n"				      \
-		    "1:	lwarx	%0,0,%2\n"				      \
-		    "	subf.	%0,%1,%0\n"				      \
-		    "	bne	2f\n"					      \
-		    "	stwcx.	%4,0,%2\n"				      \
-		    "	bne-	1b\n"					      \
-		    "2:	"						      \
-		    : "=&r" (__tmp), "=r" (__tmp2)			      \
-		    : "b" (mem), "1" (oldval), "r" (newval)		      \
-		    : "cr0", "memory");					      \
-  __tmp != 0;								      \
-})
-
-/*
- * Only powerpc64 processors support Load doubleword and reserve index (ldarx)
- * and Store doubleword conditional indexed (stdcx) instructions.  So here
- * we define the 64-bit forms.
- */
-# define __arch_compare_and_exchange_bool_64_acq(mem, newval, oldval) \
-({									      \
-  unsigned long	__tmp;							      \
-  __asm__ __volatile__ (							      \
-		    "1:	ldarx	%0,0,%1\n"				      \
-		    "	subf.	%0,%2,%0\n"				      \
-		    "	bne	2f\n"					      \
-		    "	stdcx.	%3,0,%1\n"				      \
-		    "	bne-	1b\n"					      \
-		    "2:	" __ARCH_ACQ_INSTR				      \
-		    : "=&r" (__tmp)					      \
-		    : "b" (mem), "r" (oldval), "r" (newval)		      \
-		    : "cr0", "memory");					      \
-  __tmp != 0;								      \
-})
-
-# define __arch_compare_and_exchange_bool_64_rel(mem, newval, oldval) \
-({									      \
-  unsigned long	__tmp;							      \
-  __asm__ __volatile__ (__ARCH_REL_INSTR "\n"				      \
-		    "1:	ldarx	%0,0,%1\n"				      \
-		    "	subf.	%0,%2,%0\n"				      \
-		    "	bne	2f\n"					      \
-		    "	stdcx.	%3,0,%1\n"				      \
-		    "	bne-	1b\n"					      \
-		    "2:	"						      \
-		    : "=&r" (__tmp)					      \
-		    : "b" (mem), "r" (oldval), "r" (newval)		      \
-		    : "cr0", "memory");					      \
-  __tmp != 0;								      \
-})
-
-#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
-  ({									      \
-      __typeof (*(mem)) __tmp;						      \
-      __typeof (mem)  __memp = (mem);					      \
-      __asm__ __volatile__ (						      \
-		        "1:	ldarx	%0,0,%1\n"			      \
-		        "	cmpd	%0,%2\n"			      \
-		        "	bne	2f\n"				      \
-		        "	stdcx.	%3,0,%1\n"			      \
-		        "	bne-	1b\n"				      \
-		        "2:	" __ARCH_ACQ_INSTR			      \
-		        : "=&r" (__tmp)					      \
-		        : "b" (__memp), "r" (oldval), "r" (newval)	      \
-		        : "cr0", "memory");				      \
-      __tmp;								      \
-  })
-
-#define __arch_compare_and_exchange_val_64_rel(mem, newval, oldval) \
-  ({									      \
-      __typeof (*(mem)) __tmp;						      \
-      __typeof (mem)  __memp = (mem);					      \
-      __asm__ __volatile__ (__ARCH_REL_INSTR "\n"				      \
-		        "1:	ldarx	%0,0,%1\n"			      \
-		        "	cmpd	%0,%2\n"			      \
-		        "	bne	2f\n"				      \
-		        "	stdcx.	%3,0,%1\n"			      \
-		        "	bne-	1b\n"				      \
-		        "2:	"					      \
-		        : "=&r" (__tmp)					      \
-		        : "b" (__memp), "r" (oldval), "r" (newval)	      \
-		        : "cr0", "memory");				      \
-      __tmp;								      \
-  })
-
-# define __arch_atomic_exchange_64_acq(mem, value) \
-    ({									      \
-      __typeof (*mem) __val;						      \
-      __asm__ __volatile__ (__ARCH_REL_INSTR "\n"				      \
-			"1:	ldarx	%0,0,%2\n"			      \
-			"	stdcx.	%3,0,%2\n"			      \
-			"	bne-	1b\n"				      \
-		  " " __ARCH_ACQ_INSTR					      \
-			: "=&r" (__val), "=m" (*mem)			      \
-			: "b" (mem), "r" (value), "m" (*mem)		      \
-			: "cr0", "memory");				      \
-      __val;								      \
-    })
-
-# define __arch_atomic_exchange_64_rel(mem, value) \
-    ({									      \
-      __typeof (*mem) __val;						      \
-      __asm__ __volatile__ (__ARCH_REL_INSTR "\n"				      \
-			"1:	ldarx	%0,0,%2\n"			      \
-			"	stdcx.	%3,0,%2\n"			      \
-			"	bne-	1b"				      \
-			: "=&r" (__val), "=m" (*mem)			      \
-			: "b" (mem), "r" (value), "m" (*mem)		      \
-			: "cr0", "memory");				      \
-      __val;								      \
-    })
-
-# define __arch_atomic_exchange_and_add_64(mem, value) \
-    ({									      \
-      __typeof (*mem) __val, __tmp;					      \
-      __asm__ __volatile__ ("1:	ldarx	%0,0,%3\n"			      \
-			"	add	%1,%0,%4\n"			      \
-			"	stdcx.	%1,0,%3\n"			      \
-			"	bne-	1b"				      \
-			: "=&b" (__val), "=&r" (__tmp), "=m" (*mem)	      \
-			: "b" (mem), "r" (value), "m" (*mem)		      \
-			: "cr0", "memory");				      \
-      __val;								      \
-    })
-
-# define __arch_atomic_increment_val_64(mem) \
-    ({									      \
-      __typeof (*(mem)) __val;						      \
-      __asm__ __volatile__ ("1:	ldarx	%0,0,%2\n"			      \
-			"	addi	%0,%0,1\n"			      \
-			"	stdcx.	%0,0,%2\n"			      \
-			"	bne-	1b"				      \
-			: "=&b" (__val), "=m" (*mem)			      \
-			: "b" (mem), "m" (*mem)				      \
-			: "cr0", "memory");				      \
-      __val;								      \
-    })
-
-# define __arch_atomic_decrement_val_64(mem) \
-    ({									      \
-      __typeof (*(mem)) __val;						      \
-      __asm__ __volatile__ ("1:	ldarx	%0,0,%2\n"			      \
-			"	subi	%0,%0,1\n"			      \
-			"	stdcx.	%0,0,%2\n"			      \
-			"	bne-	1b"				      \
-			: "=&b" (__val), "=m" (*mem)			      \
-			: "b" (mem), "m" (*mem)				      \
-			: "cr0", "memory");				      \
-      __val;								      \
-    })
-
-# define __arch_atomic_decrement_if_positive_64(mem) \
-  ({ int __val, __tmp;							      \
-     __asm__ __volatile__ ("1:	ldarx	%0,0,%3\n"			      \
-		       "	cmpdi	0,%0,0\n"			      \
-		       "	addi	%1,%0,-1\n"			      \
-		       "	ble	2f\n"				      \
-		       "	stdcx.	%1,0,%3\n"			      \
-		       "	bne-	1b\n"				      \
-		       "2:	" __ARCH_ACQ_INSTR			      \
-		       : "=&b" (__val), "=&r" (__tmp), "=m" (*mem)	      \
-		       : "b" (mem), "m" (*mem)				      \
-		       : "cr0", "memory");				      \
-     __val;								      \
-  })
-
-/*
- * All powerpc64 processors support the new "light weight"  sync (lwsync).
- */
-# define atomic_read_barrier()	__asm__ ("lwsync" ::: "memory")
-/*
- * "light weight" sync can also be used for the release barrier.
- */
-# ifndef UP
-#  define __ARCH_REL_INSTR	"lwsync"
-# endif
-
-#else
 /* Atomic operations.  PowerPC32 version.
 /* Atomic operations.  PowerPC32 version.
    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    This file is part of the GNU C Library.
@@ -261,12 +17,6 @@
    License along with the GNU C Library; if not, see
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
    <http://www.gnu.org/licenses/>.  */
 
 
-/*
- * The 32-bit exchange_bool is different on powerpc64 because the subf
- * does signed 64-bit arthmatic while the lwarx is 32-bit unsigned
- * (a load word and zero (high 32) form).  So powerpc64 has a slightly
- * different version in sysdeps/powerpc/powerpc64/bits/atomic.h.
- */
 # define __arch_compare_and_exchange_bool_32_acq(mem, newval, oldval)         \
 # define __arch_compare_and_exchange_bool_32_acq(mem, newval, oldval)         \
 ({									      \
 ({									      \
   unsigned int __tmp;							      \
   unsigned int __tmp;							      \
@@ -355,8 +105,6 @@
 # define atomic_read_barrier()	__asm__ ("sync" ::: "memory")
 # define atomic_read_barrier()	__asm__ ("sync" ::: "memory")
 #endif
 #endif
 
 
-#endif
-
 #include <stdint.h>
 #include <stdint.h>
 
 
 typedef int32_t atomic32_t;
 typedef int32_t atomic32_t;

+ 0 - 76
libc/sysdeps/linux/powerpc/bits/mathinline.h

@@ -57,30 +57,12 @@
 
 
 # endif /* __GNUC_PREREQ (2,97) */
 # endif /* __GNUC_PREREQ (2,97) */
 
 
-/* The gcc, version 2.7 or below, has problems with all this inlining
-   code.  So disable it for this version of the compiler.  */
-# if __GNUC_PREREQ (2, 8)
-/* Test for negative number.  Used in the signbit() macro.  */
-__MATH_INLINE int
-__NTH (__signbitf (float __x))
-{
-  __extension__ union { float __f; int __i; } __u = { __f: __x };
-  return __u.__i < 0;
-}
-__MATH_INLINE int
-__NTH (__signbit (double __x))
-{
-  __extension__ union { double __d; int __i[2]; } __u = { __d: __x };
-  return __u.__i[0] < 0;
-}
-# endif
 #endif /* __USE_ISOC99 */
 #endif /* __USE_ISOC99 */
 
 
 #if !defined __NO_MATH_INLINES && defined __OPTIMIZE__
 #if !defined __NO_MATH_INLINES && defined __OPTIMIZE__
 
 
 #ifdef __USE_ISOC99
 #ifdef __USE_ISOC99
 
 
-# ifndef __powerpc64__
 __MATH_INLINE long int lrint (double __x) __THROW;
 __MATH_INLINE long int lrint (double __x) __THROW;
 __MATH_INLINE long int
 __MATH_INLINE long int
 __NTH (lrint (double __x))
 __NTH (lrint (double __x))
@@ -104,7 +86,6 @@ __NTH (lrintf (float __x))
   __asm__ ("fctiw %0,%1" : "=f"(__u.__d) : "f"(__x));
   __asm__ ("fctiw %0,%1" : "=f"(__u.__d) : "f"(__x));
   return __u.__ll[1];
   return __u.__ll[1];
 }
 }
-# endif
 
 
 __MATH_INLINE double fdim (double __x, double __y) __THROW;
 __MATH_INLINE double fdim (double __x, double __y) __THROW;
 __MATH_INLINE double
 __MATH_INLINE double
@@ -123,62 +104,5 @@ __NTH (fdimf (float __x, float __y))
 #endif /* __USE_ISOC99 */
 #endif /* __USE_ISOC99 */
 #endif /* !__NO_MATH_INLINES && __OPTIMIZE__ */
 #endif /* !__NO_MATH_INLINES && __OPTIMIZE__ */
 
 
-/* This code is used internally in the GNU libc.  */
-#if 0 /*def __LIBC_INTERNAL_MATH_INLINES*/
-
-#include <sysdep.h>
-#include <ldsodefs.h>
-#include <dl-procinfo.h>
-
-# if __WORDSIZE == 64 || defined _ARCH_PWR4
-#  define __CPU_HAS_FSQRT 1
-# else
-#  define __CPU_HAS_FSQRT ((GLRO(dl_hwcap) & PPC_FEATURE_64) != 0)
-# endif
-
-extern double __slow_ieee754_sqrt (double);
-__MATH_INLINE double
-__NTH (__ieee754_sqrt (double __x))
-{
-  double __z;
-
-  /* If the CPU is 64-bit we can use the optional FP instructions.  */
-  if (__CPU_HAS_FSQRT)
-  {
-    /* Volatile is required to prevent the compiler from moving the
-       fsqrt instruction above the branch.  */
-     __asm__ __volatile__ (
-	"	fsqrt	%0,%1\n"
-		: "=f" (__z)
-		: "f" (__x));
-  }
-  else
-     __z = __slow_ieee754_sqrt(__x);
-
-  return __z;
-}
-
-extern float __slow_ieee754_sqrtf (float);
-__MATH_INLINE float
-__NTH (__ieee754_sqrtf (float __x))
-{
-  float __z;
-
-  /* If the CPU is 64-bit we can use the optional FP instructions.  */
-  if (__CPU_HAS_FSQRT)
-  {
-    /* Volatile is required to prevent the compiler from moving the
-       fsqrts instruction above the branch.  */
-     __asm__ __volatile__ (
-	"	fsqrts	%0,%1\n"
-		: "=f" (__z)
-		: "f" (__x));
-  }
-  else
-     __z = __slow_ieee754_sqrtf(__x);
-
-  return __z;
-}
-#endif /* __LIBC_INTERNAL_MATH_INLINES */
 #endif /* __GNUC__ && !_SOFT_FLOAT */
 #endif /* __GNUC__ && !_SOFT_FLOAT */
 
 

+ 1 - 6
libc/sysdeps/linux/powerpc/bits/setjmp.h

@@ -29,8 +29,6 @@
    assembler easier. Naturally, user code should not depend on
    assembler easier. Naturally, user code should not depend on
    either representation. */
    either representation. */
 
 
-#include <bits/wordsize.h>
-
 /* The current powerpc 32-bit Altivec ABI specifies for SVR4 ABI and EABI
 /* The current powerpc 32-bit Altivec ABI specifies for SVR4 ABI and EABI
    the vrsave must be at byte 248 & v20 at byte 256.  So we must pad this
    the vrsave must be at byte 248 & v20 at byte 256.  So we must pad this
    correctly on 32 bit.  It also insists that vecregs are only gauranteed
    correctly on 32 bit.  It also insists that vecregs are only gauranteed
@@ -38,12 +36,9 @@
    We have to version the code because members like  int __mask_was_saved
    We have to version the code because members like  int __mask_was_saved
    in the jmp_buf will move as jmp_buf is now larger than 248 bytes.  We
    in the jmp_buf will move as jmp_buf is now larger than 248 bytes.  We
    cannot keep the altivec jmp_buf backward compatible with the jmp_buf.  */
    cannot keep the altivec jmp_buf backward compatible with the jmp_buf.  */
-#if __WORDSIZE == 64
-typedef long int __jmp_buf[64] __attribute__ ((__aligned__ (16)));
-#else
+
 /* The alignment is not essential, i.e.the buffer can be copied to a 4 byte
 /* The alignment is not essential, i.e.the buffer can be copied to a 4 byte
    aligned buffer as per the ABI it is just added for performance reasons.  */
    aligned buffer as per the ABI it is just added for performance reasons.  */
 typedef long int __jmp_buf[64 + (12 * 4)] __attribute__ ((__aligned__ (16)));
 typedef long int __jmp_buf[64 + (12 * 4)] __attribute__ ((__aligned__ (16)));
-#endif
 
 
 #endif  /* bits/setjmp.h */
 #endif  /* bits/setjmp.h */

+ 1 - 107
libc/sysdeps/linux/powerpc/bits/stat.h

@@ -20,27 +20,18 @@
 # error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
 # error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
 #endif
 #endif
 
 
-#include <bits/wordsize.h>
-
 /* Versions of the `struct stat' data structure.  */
 /* Versions of the `struct stat' data structure.  */
 #define _STAT_VER_LINUX_OLD	1
 #define _STAT_VER_LINUX_OLD	1
 #define _STAT_VER_KERNEL	1
 #define _STAT_VER_KERNEL	1
 #define _STAT_VER_SVR4		2
 #define _STAT_VER_SVR4		2
 #define _STAT_VER_LINUX	  3
 #define _STAT_VER_LINUX	  3
-#if __WORDSIZE == 32
-# define _STAT_VER		_STAT_VER_LINUX
-#else
-# define _STAT_VER		_STAT_VER_KERNEL
-#endif
+#define _STAT_VER		_STAT_VER_LINUX
 
 
 /* Versions of the `xmknod' interface.  */
 /* Versions of the `xmknod' interface.  */
 #define _MKNOD_VER_LINUX	1
 #define _MKNOD_VER_LINUX	1
 #define _MKNOD_VER_SVR4		2
 #define _MKNOD_VER_SVR4		2
 #define _MKNOD_VER		_MKNOD_VER_LINUX /* The bits defined below.  */
 #define _MKNOD_VER		_MKNOD_VER_LINUX /* The bits defined below.  */
 
 
-
-#if __WORDSIZE == 32
-
 struct stat
 struct stat
   {
   {
     __dev_t st_dev;			/* Device.  */
     __dev_t st_dev;			/* Device.  */
@@ -134,103 +125,6 @@ struct stat64
   };
   };
 # endif /* __USE_LARGEFILE64 */
 # endif /* __USE_LARGEFILE64 */
 
 
-#else /* __WORDSIZE == 32 */
-
-struct stat
-  {
-    __dev_t st_dev;			/* Device.  */
-# ifndef __USE_FILE_OFFSET64
-    __ino_t st_ino;			/* File serial number.	*/
-# else
-    __ino64_t st_ino;			/* File serial number.	*/
-# endif
-    __nlink_t st_nlink;			/* Link count.  */
-    __mode_t st_mode;			/* File mode.  */
-    __uid_t st_uid;			/* User ID of the file's owner.	*/
-    __gid_t st_gid;			/* Group ID of the file's group.*/
-    int __pad2;
-    __dev_t st_rdev;			/* Device number, if device.  */
-# ifndef __USE_FILE_OFFSET64
-    __off_t st_size;			/* Size of file, in bytes.  */
-# else
-    __off64_t st_size;			/* Size of file, in bytes.  */
-# endif
-    __blksize_t st_blksize;		/* Optimal block size for I/O.  */
-
-# ifndef __USE_FILE_OFFSET64
-    __blkcnt_t st_blocks;		/* Number 512-byte blocks allocated. */
-# else
-    __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
-# endif
-#ifdef __USE_MISC
-    /* Nanosecond resolution timestamps are stored in a format
-       equivalent to 'struct timespec'.  This is the type used
-       whenever possible but the Unix namespace rules do not allow the
-       identifier 'timespec' to appear in the <sys/stat.h> header.
-       Therefore we have to handle the use of this header in strictly
-       standard-compliant sources special.  */
-    struct timespec st_atim;		/* Time of last access.  */
-    struct timespec st_mtim;		/* Time of last modification.  */
-    struct timespec st_ctim;		/* Time of last status change.  */
-# define st_atime st_atim.tv_sec	/* Backward compatibility.  */
-# define st_mtime st_mtim.tv_sec
-# define st_ctime st_ctim.tv_sec
-#else
-    __time_t st_atime;			/* Time of last access.  */
-    unsigned long int st_atimensec;	/* Nscecs of last access.  */
-    __time_t st_mtime;			/* Time of last modification.  */
-    unsigned long int st_mtimensec;	/* Nsecs of last modification.  */
-    __time_t st_ctime;			/* Time of last status change.  */
-    unsigned long int st_ctimensec;	/* Nsecs of last status change.  */
-#endif
-    unsigned long int __unused4;
-    unsigned long int __unused5;
-    unsigned long int __unused6;
-  };
-
-# ifdef __USE_LARGEFILE64
-struct stat64
-  {
-    __dev_t st_dev;			/* Device.  */
-    __ino64_t st_ino;			/* File serial number.	*/
-    __nlink_t st_nlink;			/* Link count.  */
-    __mode_t st_mode;			/* File mode.  */
-    __uid_t st_uid;			/* User ID of the file's owner.	*/
-    __gid_t st_gid;			/* Group ID of the file's group.*/
-    int __pad2;
-    __dev_t st_rdev;			/* Device number, if device.  */
-    __off64_t st_size;			/* Size of file, in bytes.  */
-    __blksize_t st_blksize;		/* Optimal block size for I/O.  */
-    __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
-#ifdef __USE_MISC
-    /* Nanosecond resolution timestamps are stored in a format
-       equivalent to 'struct timespec'.  This is the type used
-       whenever possible but the Unix namespace rules do not allow the
-       identifier 'timespec' to appear in the <sys/stat.h> header.
-       Therefore we have to handle the use of this header in strictly
-       standard-compliant sources special.  */
-    struct timespec st_atim;		/* Time of last access.  */
-    struct timespec st_mtim;		/* Time of last modification.  */
-    struct timespec st_ctim;		/* Time of last status change.  */
-# define st_atime st_atim.tv_sec	/* Backward compatibility.  */
-# define st_mtime st_mtim.tv_sec
-# define st_ctime st_ctim.tv_sec
-#else
-    __time_t st_atime;			/* Time of last access.  */
-    unsigned long int st_atimensec;	/* Nscecs of last access.  */
-    __time_t st_mtime;			/* Time of last modification.  */
-    unsigned long int st_mtimensec;	/* Nsecs of last modification.  */
-    __time_t st_ctime;			/* Time of last status change.  */
-    unsigned long int st_ctimensec;	/* Nsecs of last status change.  */
-#endif
-    unsigned long int __unused4;
-    unsigned long int __unused5;
-    unsigned long int __unused6;
-  };
-# endif /* __USE_LARGEFILE64 */
-#endif
-
-
 /* Tell code we have these members.  */
 /* Tell code we have these members.  */
 #define	_STATBUF_ST_BLKSIZE
 #define	_STATBUF_ST_BLKSIZE
 #define _STATBUF_ST_RDEV
 #define _STATBUF_ST_RDEV

+ 1 - 6
libc/sysdeps/linux/powerpc/bits/wordsize.h

@@ -1,11 +1,6 @@
 /* Determine the wordsize from the preprocessor defines.  */
 /* Determine the wordsize from the preprocessor defines.  */
 
 
-#if defined __powerpc64__
-# define __WORDSIZE	64
-# define __WORDSIZE_TIME64_COMPAT32	1
-#else
-# define __WORDSIZE	32
-#endif
+#define __WORDSIZE	32
 
 
 #if !defined __NO_LONG_DOUBLE_MATH && !defined __LONG_DOUBLE_MATH_OPTIONAL
 #if !defined __NO_LONG_DOUBLE_MATH && !defined __LONG_DOUBLE_MATH_OPTIONAL
 
 

+ 6 - 19
libc/sysdeps/linux/powerpc/jmpbuf-offsets.h

@@ -16,25 +16,12 @@
    License along with the GNU C Library; if not, see
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
    <http://www.gnu.org/licenses/>.  */
 
 
-#include <bits/wordsize.h>
-
 #define JB_GPR1   0  /* Also known as the stack pointer */
 #define JB_GPR1   0  /* Also known as the stack pointer */
 #define JB_GPR2   1
 #define JB_GPR2   1
 #define JB_LR     2  /* The address we will return to */
 #define JB_LR     2  /* The address we will return to */
-#if __WORDSIZE == 64
-# define JB_GPRS   3  /* GPRs 14 through 31 are saved, 18*2 words total.  */
-# define JB_CR     21 /* Condition code registers with the VRSAVE at */
-                       /* offset 172 (low half of the double word.  */
-# define JB_FPRS   22 /* FPRs 14 through 31 are saved, 18*2 words total.  */
-# define JB_SIZE   (64 * 8) /* As per PPC64-VMX ABI.  */
-# define JB_VRSAVE 21 /* VRSAVE shares a double word with the CR at offset */
-                       /* 168 (high half of the double word).  */
-# define JB_VRS    40 /* VRs 20 through 31 are saved, 12*4 words total.  */
-#else
-# define JB_GPRS   3  /* GPRs 14 through 31 are saved, 18 in total.  */
-# define JB_CR     21 /* Condition code registers.  */
-# define JB_FPRS   22 /* FPRs 14 through 31 are saved, 18*2 words total.  */
-# define JB_SIZE   ((64 + (12 * 4)) * 4)
-# define JB_VRSAVE 62
-# define JB_VRS    64
-#endif
+#define JB_GPRS   3  /* GPRs 14 through 31 are saved, 18 in total.  */
+#define JB_CR     21 /* Condition code registers.  */
+#define JB_FPRS   22 /* FPRs 14 through 31 are saved, 18*2 words total.  */
+#define JB_SIZE   ((64 + (12 * 4)) * 4)
+#define JB_VRSAVE 62
+#define JB_VRS    64

+ 0 - 151
libc/sysdeps/linux/powerpc/powerpc32/sysdep.h

@@ -1,151 +0,0 @@
-/* Assembly macros for 32-bit PowerPC.
-   Copyright (C) 1999, 2001, 2002, 2003, 2006 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 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, see
-   <http://www.gnu.org/licenses/>.  */
-
-#ifdef __ASSEMBLER__
-
-#ifdef __ELF__
-
-/* If compiled for profiling, call `_mcount' at the start of each
-   function.  */
-#ifdef	PROF
-/* The mcount code relies on a the return address being on the stack
-   to locate our caller and so it can restore it; so store one just
-   for its benefit.  */
-# define CALL_MCOUNT							      \
-  mflr  r0;								      \
-  stw   r0,4(r1);							      \
-  cfi_offset (lr, 4);	       						      \
-  bl    JUMPTARGET(_mcount);
-#else  /* PROF */
-# define CALL_MCOUNT		/* Do nothing.  */
-#endif /* PROF */
-
-#define	ENTRY(name)							      \
-  .globl C_SYMBOL_NAME(name);				      \
-  ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function)			      \
-  .align ALIGNARG(2);							      \
-  C_LABEL(name)								      \
-  cfi_startproc;							      \
-  CALL_MCOUNT
-
-#define EALIGN_W_0  /* No words to insert.  */
-#define EALIGN_W_1  nop
-#define EALIGN_W_2  nop;nop
-#define EALIGN_W_3  nop;nop;nop
-#define EALIGN_W_4  EALIGN_W_3;nop
-#define EALIGN_W_5  EALIGN_W_4;nop
-#define EALIGN_W_6  EALIGN_W_5;nop
-#define EALIGN_W_7  EALIGN_W_6;nop
-
-/* EALIGN is like ENTRY, but does alignment to 'words'*4 bytes
-   past a 2^align boundary.  */
-#ifdef PROF
-# define EALIGN(name, alignt, words)					      \
-  .globl C_SYMBOL_NAME(name);				      \
-  ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function)			      \
-  .align ALIGNARG(2);							      \
-  C_LABEL(name)								      \
-  cfi_startproc;							      \
-  CALL_MCOUNT								      \
-  b 0f;									      \
-  .align ALIGNARG(alignt);						      \
-  EALIGN_W_##words;							      \
-  0:
-#else /* PROF */
-# define EALIGN(name, alignt, words)					      \
-  .globl C_SYMBOL_NAME(name);				      \
-  ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function)			      \
-  .align ALIGNARG(alignt);						      \
-  EALIGN_W_##words;							      \
-  C_LABEL(name)								      \
-  cfi_startproc;
-#endif
-
-#undef	END
-#define END(name)							      \
-  cfi_endproc;								      \
-  ASM_SIZE_DIRECTIVE(name)
-
-#define DO_CALL(syscall)				      		      \
-    li 0,syscall;						              \
-    sc
-
-#undef JUMPTARGET
-#ifdef PIC
-# define JUMPTARGET(name) name##@plt
-#else
-# define JUMPTARGET(name) name
-#endif
-
-#if defined SHARED && defined DO_VERSIONING && defined PIC \
-    && !defined NO_HIDDEN
-# undef HIDDEN_JUMPTARGET
-# define HIDDEN_JUMPTARGET(name) __GI_##name##@local
-#endif
-
-#define PSEUDO(name, syscall_name, args)				      \
-  .section ".text";							      \
-  ENTRY (name)								      \
-    DO_CALL (SYS_ify (syscall_name));
-
-#define PSEUDO_RET							      \
-    bnslr+;								      \
-    b __syscall_error@local
-#define ret PSEUDO_RET
-
-#undef	PSEUDO_END
-#define	PSEUDO_END(name)						      \
-  END (name)
-
-#define PSEUDO_NOERRNO(name, syscall_name, args)			      \
-  .section ".text";							      \
-  ENTRY (name)								      \
-    DO_CALL (SYS_ify (syscall_name));
-
-#define PSEUDO_RET_NOERRNO						      \
-    blr
-#define ret_NOERRNO PSEUDO_RET_NOERRNO
-
-#undef	PSEUDO_END_NOERRNO
-#define	PSEUDO_END_NOERRNO(name)					      \
-  END (name)
-
-#define PSEUDO_ERRVAL(name, syscall_name, args)				      \
-  .section ".text";							      \
-  ENTRY (name)								      \
-    DO_CALL (SYS_ify (syscall_name));
-
-#define PSEUDO_RET_ERRVAL						      \
-    blr
-#undef ret_ERRVAL
-#define ret_ERRVAL PSEUDO_RET_ERRVAL
-
-#undef	PSEUDO_END_ERRVAL
-#define	PSEUDO_END_ERRVAL(name)						      \
-  END (name)
-
-/* Local labels stripped out by the linker.  */
-#undef L
-#define L(x) .L##x
-
-/* Label in text section.  */
-#define C_TEXT(name) name
-
-#endif /* __ELF__ */
-
-#endif	/* __ASSEMBLER__ */

+ 0 - 243
libc/sysdeps/linux/powerpc/powerpc64/sysdep.h

@@ -1,243 +0,0 @@
-/* Assembly macros for 64-bit PowerPC.
-   Copyright (C) 2002, 2003, 2004, 2006 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 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, see
-   <http://www.gnu.org/licenses/>.  */
-
-#ifdef __ELF__
-
-#ifdef __ASSEMBLER__
-
-/* Support macros for CALL_MCOUNT.  */
-	.macro SAVE_ARG NARG
-	.if \NARG
-	SAVE_ARG \NARG-1
-	std	2+\NARG,-72+8*(\NARG)(1)
-	.endif
-	.endm
-
-	.macro REST_ARG NARG
-	.if \NARG
-	REST_ARG \NARG-1
-	ld	2+\NARG,40+8*(\NARG)(1)
-	.endif
-	.endm
-
-/* If compiled for profiling, call `_mcount' at the start of each function.
-   see ppc-mcount.S for more details.  */
-	.macro CALL_MCOUNT NARG
-#ifdef	PROF
-	mflr	r0
-	SAVE_ARG \NARG
-	std	r0,16(r1)
-	stdu	r1,-112(r1)
-	bl	JUMPTARGET (_mcount)
-	ld	r0,128(r1)
-	REST_ARG \NARG
-	addi	r1,r1,112
-	mtlr	r0
-#endif
-	.endm
-
-#ifdef USE_PPC64_OVERLAPPING_OPD
-# define OPD_ENT(name)	.quad BODY_LABEL (name), .TOC.@tocbase
-#else
-# define OPD_ENT(name)	.quad BODY_LABEL (name), .TOC.@tocbase, 0
-#endif
-
-#define ENTRY_1(name)	\
-	.section	".text";		\
-	.type BODY_LABEL(name),@function;	\
-	.globl name;				\
-	.section ".opd","aw";			\
-	.align 3;				\
-name##: OPD_ENT (name);				\
-	.previous;
-
-# define DOT_LABEL(X) X
-# define BODY_LABEL(X) .LY##X
-# define ENTRY_2(name)	\
-	.type name,@function;			\
-	ENTRY_1(name)
-# define END_2(name)	\
-	.size name,.-BODY_LABEL(name);		\
-	.size BODY_LABEL(name),.-BODY_LABEL(name);
-
-#define ENTRY(name)	\
-	ENTRY_2(name)				\
-	.align ALIGNARG(2);			\
-BODY_LABEL(name):				\
-	cfi_startproc;
-
-#define EALIGN_W_0  /* No words to insert.  */
-#define EALIGN_W_1  nop
-#define EALIGN_W_2  nop;nop
-#define EALIGN_W_3  nop;nop;nop
-#define EALIGN_W_4  EALIGN_W_3;nop
-#define EALIGN_W_5  EALIGN_W_4;nop
-#define EALIGN_W_6  EALIGN_W_5;nop
-#define EALIGN_W_7  EALIGN_W_6;nop
-
-/* EALIGN is like ENTRY, but does alignment to 'words'*4 bytes
-   past a 2^alignt boundary.  */
-#define EALIGN(name, alignt, words) \
-	ENTRY_2(name)				\
-	.align ALIGNARG(alignt);		\
-	EALIGN_W_##words;			\
-BODY_LABEL(name):				\
-	cfi_startproc;
-
-/* Local labels stripped out by the linker.  */
-#undef L
-#define L(x) .L##x
-
-#define tostring(s) #s
-#define stringify(s) tostring(s)
-#define XGLUE(a,b) a##b
-#define GLUE(a,b) XGLUE(a,b)
-#define LT_LABEL(name) GLUE(.LT,name)
-#define LT_LABELSUFFIX(name,suffix) GLUE(GLUE(.LT,name),suffix)
-
-/* Support Traceback tables */
-#define TB_ASM			0x000c000000000000
-#define TB_GLOBALLINK		0x0000800000000000
-#define TB_IS_EPROL		0x0000400000000000
-#define TB_HAS_TBOFF		0x0000200000000000
-#define TB_INT_PROC		0x0000100000000000
-#define TB_HAS_CTL		0x0000080000000000
-#define TB_TOCLESS		0x0000040000000000
-#define TB_FP_PRESENT		0x0000020000000000
-#define TB_LOG_ABORT		0x0000010000000000
-#define TB_INT_HANDL		0x0000008000000000
-#define TB_NAME_PRESENT		0x0000004000000000
-#define TB_USES_ALLOCA		0x0000002000000000
-#define TB_SAVES_CR		0x0000000200000000
-#define TB_SAVES_LR		0x0000000100000000
-#define TB_STORES_BC		0x0000000080000000
-#define TB_FIXUP		0x0000000040000000
-#define TB_FP_SAVED(fprs)	(((fprs) & 0x3f) << 24)
-#define TB_GPR_SAVED(gprs)	(((fprs) & 0x3f) << 16)
-#define TB_FIXEDPARMS(parms)	(((parms) & 0xff) << 8)
-#define TB_FLOATPARMS(parms)	(((parms) & 0x7f) << 1)
-#define TB_PARMSONSTK		0x0000000000000001
-
-#define PPC_HIGHER(v) 		(((v) >> 32) & 0xffff)
-#define TB_DEFAULT		TB_ASM | TB_HAS_TBOFF | TB_NAME_PRESENT
-
-#define TRACEBACK(name) \
-LT_LABEL(name): ; \
-	.long	0 ; \
-	.quad	TB_DEFAULT ; \
-	.long	LT_LABEL(name)-BODY_LABEL(name) ; \
-	.short	LT_LABELSUFFIX(name,_name_end)-LT_LABELSUFFIX(name,_name_start) ; \
-LT_LABELSUFFIX(name,_name_start): ;\
-	.ascii	stringify(name) ; \
-LT_LABELSUFFIX(name,_name_end): ; \
-	.align	2 ;
-
-#define TRACEBACK_MASK(name,mask) \
-LT_LABEL(name): ; \
-	.long	0 ; \
-	.quad	TB_DEFAULT | mask ; \
-	.long	LT_LABEL(name)-BODY_LABEL(name) ; \
-	.short	LT_LABELSUFFIX(name,_name_end)-LT_LABELSUFFIX(name,_name_start) ; \
-LT_LABELSUFFIX(name,_name_start): ;\
-	.ascii	stringify(name) ; \
-LT_LABELSUFFIX(name,_name_end): ; \
-	.align	2 ;
-
-/* END generates Traceback tables */
-#undef	END
-#define END(name) \
-  cfi_endproc;			\
-  TRACEBACK(name)		\
-  END_2(name)
-
-/* This form supports more informative traceback tables */
-#define END_GEN_TB(name,mask)	\
-  cfi_endproc;			\
-  TRACEBACK_MASK(name,mask)	\
-  END_2(name)
-
-#define DO_CALL(syscall) \
-    li 0,syscall; \
-    sc
-
-/* ppc64 is always PIC */
-#undef JUMPTARGET
-#define JUMPTARGET(name) DOT_LABEL(name)
-
-#define PSEUDO(name, syscall_name, args) \
-  .section ".text";	\
-  ENTRY (name) \
-  DO_CALL (SYS_ify (syscall_name));
-
-#define PSEUDO_RET \
-    bnslr+; \
-    b JUMPTARGET(__syscall_error)
-
-#define ret PSEUDO_RET
-
-#undef	PSEUDO_END
-#define	PSEUDO_END(name) \
-  END (name)
-
-#define PSEUDO_NOERRNO(name, syscall_name, args) \
-  .section ".text";	\
-  ENTRY (name) \
-  DO_CALL (SYS_ify (syscall_name));
-
-#define PSEUDO_RET_NOERRNO \
-    blr
-
-#define ret_NOERRNO PSEUDO_RET_NOERRNO
-
-#undef	PSEUDO_END_NOERRNO
-#define	PSEUDO_END_NOERRNO(name) \
-  END (name)
-
-#define PSEUDO_ERRVAL(name, syscall_name, args) \
-  .section ".text";	\
-  ENTRY (name) \
-  DO_CALL (SYS_ify (syscall_name));
-
-#define PSEUDO_RET_ERRVAL \
-    blr
-
-#undef ret_ERRVAL
-#define ret_ERRVAL PSEUDO_RET_ERRVAL
-
-#undef	PSEUDO_END_ERRVAL
-#define	PSEUDO_END_ERRVAL(name) \
-  END (name)
-
-#else /* !__ASSEMBLER__ */
-
-#ifdef USE_PPC64_OVERLAPPING_OPD
-# define OPD_ENT(name)	".quad " BODY_PREFIX #name ", .TOC.@tocbase;"
-#else
-# define OPD_ENT(name)	".quad " BODY_PREFIX #name ", .TOC.@tocbase, 0;"
-#endif
-
-# define DOT_PREFIX ""
-# define BODY_PREFIX ".LY"
-# define ENTRY_2(name) ".type " #name ",@function;"
-# define END_2(name)	\
-	".size " #name ",.-" BODY_PREFIX #name ";\n"			\
-	".size " BODY_PREFIX #name ",.-" BODY_PREFIX #name ";"
-
-#endif	/* __ASSEMBLER__ */
-
-#endif /* __ELF__ */

+ 0 - 78
libc/sysdeps/linux/powerpc/sys/ucontext.h

@@ -25,8 +25,6 @@
    included in <signal.h>.  */
    included in <signal.h>.  */
 #include <bits/sigcontext.h>
 #include <bits/sigcontext.h>
 
 
-#if __WORDSIZE == 32
-
 /* Number of general registers.  */
 /* Number of general registers.  */
 # define NGREG	48
 # define NGREG	48
 
 
@@ -59,84 +57,12 @@ typedef struct
 	vrregset_t vrregs __attribute__((__aligned__(16)));
 	vrregset_t vrregs __attribute__((__aligned__(16)));
 } mcontext_t;
 } mcontext_t;
 
 
-#else
-
-/* For 64-bit kernels with Altivec support, a machine context is exactly
- * a sigcontext.  For older kernel (without Altivec) the sigcontext matches
- * the mcontext upto but not including the v_regs field.  For kernels that
- * don't AT_HWCAP or return AT_HWCAP without PPC_FEATURE_HAS_ALTIVEC the
- * v_regs field may not exit and should not be referenced.  The v_regd field
- * can be refernced safely only after verifying that PPC_FEATURE_HAS_ALTIVEC
- * is set in AT_HWCAP.  */
-
-/* Number of general registers.  */
-# define NGREG	48	/* includes r0-r31, nip, msr, lr, etc.   */
-# define NFPREG	33	/* includes fp0-fp31 &fpscr.  */
-# define NVRREG	34	/* includes v0-v31, vscr, & vrsave in split vectors */
-
-typedef unsigned long gregset_t[NGREG];
-typedef double fpregset_t[NFPREG];
-
-/* Container for Altivec/VMX Vector Status and Control Register.  Only 32-bits
-   but can only be copied to/from a 128-bit vector register.  So we allocated
-   a whole quadword speedup save/restore.  */
-typedef struct _libc_vscr
-{
-	unsigned int __pad[3];
-	unsigned int vscr_word;
-} vscr_t;
-
-/* Container for Altivec/VMX registers and status.
-   Must to be aligned on a 16-byte boundary. */
-typedef struct _libc_vrstate
-{
-	unsigned int	vrregs[32][4];
-	vscr_t		vscr;
-	unsigned int	vrsave;
-	unsigned int	__pad[3];
-} vrregset_t  __attribute__((__aligned__(16)));
-
-typedef struct {
-	unsigned long	__unused[4];
-	int		signal;
-	int		__pad0;
-	unsigned long	handler;
-	unsigned long	oldmask;
-	struct pt_regs	*regs;
-	gregset_t	gp_regs;
-	fpregset_t	fp_regs;
-/*
- * To maintain compatibility with current implementations the sigcontext is
- * extended by appending a pointer (v_regs) to a quadword type (elf_vrreg_t)
- * followed by an unstructured (vmx_reserve) field of 69 doublewords.  This
- * allows the array of vector registers to be quadword aligned independent of
- * the alignment of the containing sigcontext or ucontext. It is the
- * responsibility of the code setting the sigcontext to set this pointer to
- * either NULL (if this processor does not support the VMX feature) or the
- * address of the first quadword within the allocated (vmx_reserve) area.
- *
- * The pointer (v_regs) of vector type (elf_vrreg_t) is essentually
- * an array of 34 quadword entries.  The entries with
- * indexes 0-31 contain the corresponding vector registers.  The entry with
- * index 32 contains the vscr as the last word (offset 12) within the
- * quadword.  This allows the vscr to be stored as either a quadword (since
- * it must be copied via a vector register to/from storage) or as a word.
- * The entry with index 33 contains the vrsave as the first word (offset 0)
- * within the quadword.
- */
-	vrregset_t	*v_regs;
-	long		vmx_reserve[NVRREG+NVRREG+1];
-} mcontext_t;
-
-#endif
-
 /* Userlevel context.  */
 /* Userlevel context.  */
 typedef struct ucontext
 typedef struct ucontext
   {
   {
     unsigned long int uc_flags;
     unsigned long int uc_flags;
     struct ucontext *uc_link;
     struct ucontext *uc_link;
     stack_t uc_stack;
     stack_t uc_stack;
-#if __WORDSIZE == 32
     /*
     /*
      * These fields are set up this way to maximize source and
      * These fields are set up this way to maximize source and
      * binary compatibility with code written for the old
      * binary compatibility with code written for the old
@@ -167,10 +93,6 @@ typedef struct ucontext
     } uc_mcontext;
     } uc_mcontext;
     sigset_t    uc_sigmask;
     sigset_t    uc_sigmask;
     char uc_reg_space[sizeof(mcontext_t) + 12];  /* last for extensibility */
     char uc_reg_space[sizeof(mcontext_t) + 12];  /* last for extensibility */
-#else /* 64-bit */
-    sigset_t    uc_sigmask;
-    mcontext_t  uc_mcontext;  /* last for extensibility */
-#endif
   } ucontext_t;
   } ucontext_t;
 
 
 #endif /* sys/ucontext.h */
 #endif /* sys/ucontext.h */

+ 93 - 11
libc/sysdeps/linux/powerpc/sysdep.h

@@ -16,6 +16,7 @@
    <http://www.gnu.org/licenses/>.  */
    <http://www.gnu.org/licenses/>.  */
 
 
 #include <common/sysdep.h>
 #include <common/sysdep.h>
+#include <sys/syscall.h>
 
 
 /* 
 /* 
  * Powerpc Feature masks for the Aux Vector Hardware Capabilities (AT_HWCAP). 
  * Powerpc Feature masks for the Aux Vector Hardware Capabilities (AT_HWCAP). 
@@ -169,9 +170,6 @@
 
 
 #define VRSAVE	256
 #define VRSAVE	256
 
 
-
-#ifdef __ELF__
-
 /* This seems to always be the case on PPC.  */
 /* This seems to always be the case on PPC.  */
 #define ALIGNARG(log2) log2
 #define ALIGNARG(log2) log2
 /* For ELF we need the `.type' directive to make shared libs work right.  */
 /* For ELF we need the `.type' directive to make shared libs work right.  */
@@ -182,14 +180,98 @@
 #undef	NO_UNDERSCORES
 #undef	NO_UNDERSCORES
 #define NO_UNDERSCORES
 #define NO_UNDERSCORES
 
 
-#endif /* __ELF__ */
+#define	ENTRY(name)							      \
+  .globl C_SYMBOL_NAME(name);				      \
+  ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function)			      \
+  .align ALIGNARG(2);							      \
+  C_LABEL(name)								      \
+  cfi_startproc;							      \
 
 
-# include <sys/syscall.h>
-# if defined(__powerpc64__)
-#  include "powerpc64/sysdep.h"
-# else
-#  include "powerpc32/sysdep.h"
-# endif
+#define EALIGN_W_0  /* No words to insert.  */
+#define EALIGN_W_1  nop
+#define EALIGN_W_2  nop;nop
+#define EALIGN_W_3  nop;nop;nop
+#define EALIGN_W_4  EALIGN_W_3;nop
+#define EALIGN_W_5  EALIGN_W_4;nop
+#define EALIGN_W_6  EALIGN_W_5;nop
+#define EALIGN_W_7  EALIGN_W_6;nop
 
 
-#endif	/* __ASSEMBLER__ */
+#define EALIGN(name, alignt, words)					      \
+  .globl C_SYMBOL_NAME(name);				      \
+  ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function)			      \
+  .align ALIGNARG(alignt);						      \
+  EALIGN_W_##words;							      \
+  C_LABEL(name)								      \
+  cfi_startproc;
+
+#undef	END
+#define END(name)							      \
+  cfi_endproc;								      \
+  ASM_SIZE_DIRECTIVE(name)
+
+#define DO_CALL(syscall)				      		      \
+    li 0,syscall;						              \
+    sc
+
+#undef JUMPTARGET
+#ifdef PIC
+# define JUMPTARGET(name) name##@plt
+#else
+# define JUMPTARGET(name) name
+#endif
+
+#if defined SHARED && defined DO_VERSIONING && defined PIC \
+    && !defined NO_HIDDEN
+# undef HIDDEN_JUMPTARGET
+# define HIDDEN_JUMPTARGET(name) __GI_##name##@local
+#endif
+
+#define PSEUDO(name, syscall_name, args)				      \
+  .section ".text";							      \
+  ENTRY (name)								      \
+    DO_CALL (SYS_ify (syscall_name));
+
+#define PSEUDO_RET							      \
+    bnslr+;								      \
+    b __syscall_error@local
+#define ret PSEUDO_RET
+
+#undef	PSEUDO_END
+#define	PSEUDO_END(name)						      \
+  END (name)
 
 
+#define PSEUDO_NOERRNO(name, syscall_name, args)			      \
+  .section ".text";							      \
+  ENTRY (name)								      \
+    DO_CALL (SYS_ify (syscall_name));
+
+#define PSEUDO_RET_NOERRNO						      \
+    blr
+#define ret_NOERRNO PSEUDO_RET_NOERRNO
+
+#undef	PSEUDO_END_NOERRNO
+#define	PSEUDO_END_NOERRNO(name)					      \
+  END (name)
+
+#define PSEUDO_ERRVAL(name, syscall_name, args)				      \
+  .section ".text";							      \
+  ENTRY (name)								      \
+    DO_CALL (SYS_ify (syscall_name));
+
+#define PSEUDO_RET_ERRVAL						      \
+    blr
+#undef ret_ERRVAL
+#define ret_ERRVAL PSEUDO_RET_ERRVAL
+
+#undef	PSEUDO_END_ERRVAL
+#define	PSEUDO_END_ERRVAL(name)						      \
+  END (name)
+
+/* Local labels stripped out by the linker.  */
+#undef L
+#define L(x) .L##x
+
+/* Label in text section.  */
+#define C_TEXT(name) name
+
+#endif	/* __ASSEMBLER__ */