aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/powerpc
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2002-09-17 23:50:03 +0000
committerRoland McGrath <roland@gnu.org>2002-09-17 23:50:03 +0000
commitcfc91acd418d2ea62a4520b42406a16ef07257c3 (patch)
treec7d291182781c1534a03528b33d417983b8d2e54 /sysdeps/powerpc
parent81cb0d8214c425e356c3f79b4b024caab36540b8 (diff)
downloadglibc-cfc91acd418d2ea62a4520b42406a16ef07257c3.tar.xz
glibc-cfc91acd418d2ea62a4520b42406a16ef07257c3.zip
2002-09-17 Steven Munroe <sjmunroe@us.ibm.com>
Ported to PowerPC64 running Linux. * sysdeps/powerpc/powerpc64/Dist: New file. * sysdeps/powerpc/powerpc64/Implies: New file. * sysdeps/powerpc/powerpc64/Makefile: New file. * sysdeps/powerpc/powerpc64/__longjmp.S: New file. * sysdeps/powerpc/powerpc64/atomicity.h: New file. * sysdeps/powerpc/powerpc64/backtrace.c: New file. * sysdeps/powerpc/powerpc64/bp-asm.h: New file. * sysdeps/powerpc/powerpc64/bsd-_setjmp.S: New file. * sysdeps/powerpc/powerpc64/bsd-setjmp.S: New file. * sysdeps/powerpc/powerpc64/dl-dtprocnum.h: New file. * sysdeps/powerpc/powerpc64/dl-lookupcfg.h: New file. * sysdeps/powerpc/powerpc64/dl-machine.c: New file. * sysdeps/powerpc/powerpc64/dl-machine.h: New file. * sysdeps/powerpc/powerpc64/memset.S: New file. * sysdeps/powerpc/powerpc64/ppc-mcount.S: New file. * sysdeps/powerpc/powerpc64/register-dump.h: New file. * sysdeps/powerpc/powerpc64/setjmp.S: New file. * sysdeps/powerpc/powerpc64/stpcpy.S: New file. * sysdeps/powerpc/powerpc64/strchr.S: New file. * sysdeps/powerpc/powerpc64/strcmp.S: New file. * sysdeps/powerpc/powerpc64/strcpy.S: New file. * sysdeps/powerpc/powerpc64/strlen.S: New file. * sysdeps/powerpc/powerpc64/elf/bzero.S: New file. * sysdeps/powerpc/powerpc64/elf/start.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: New file. * sysdeps/powerpc/powerpc64/fpu/s_copysignf.S: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions: New File. * sysdeps/unix/sysv/linux/powerpc/powerpc64/brk.S: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/glob64.c: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/socket.S: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/syscalls.list: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h: New file.
Diffstat (limited to 'sysdeps/powerpc')
-rw-r--r--sysdeps/powerpc/powerpc64/Dist4
-rw-r--r--sysdeps/powerpc/powerpc64/Implies1
-rw-r--r--sysdeps/powerpc/powerpc64/Makefile23
-rw-r--r--sysdeps/powerpc/powerpc64/__longjmp.S74
-rw-r--r--sysdeps/powerpc/powerpc64/atomicity.h132
-rw-r--r--sysdeps/powerpc/powerpc64/backtrace.c69
-rw-r--r--sysdeps/powerpc/powerpc64/bp-asm.h115
-rw-r--r--sysdeps/powerpc/powerpc64/bsd-_setjmp.S21
-rw-r--r--sysdeps/powerpc/powerpc64/bsd-setjmp.S21
-rw-r--r--sysdeps/powerpc/powerpc64/dl-dtprocnum.h22
-rw-r--r--sysdeps/powerpc/powerpc64/dl-lookupcfg.h22
-rw-r--r--sysdeps/powerpc/powerpc64/dl-machine.c50
-rw-r--r--sysdeps/powerpc/powerpc64/dl-machine.h750
-rw-r--r--sysdeps/powerpc/powerpc64/elf/bzero.S21
-rw-r--r--sysdeps/powerpc/powerpc64/elf/start.S66
-rw-r--r--sysdeps/powerpc/powerpc64/fpu/s_copysign.S50
-rw-r--r--sysdeps/powerpc/powerpc64/fpu/s_copysignf.S1
-rw-r--r--sysdeps/powerpc/powerpc64/memset.S296
-rw-r--r--sysdeps/powerpc/powerpc64/ppc-mcount.S43
-rw-r--r--sysdeps/powerpc/powerpc64/register-dump.h125
-rw-r--r--sysdeps/powerpc/powerpc64/setjmp.S87
-rw-r--r--sysdeps/powerpc/powerpc64/stpcpy.S121
-rw-r--r--sysdeps/powerpc/powerpc64/strchr.S130
-rw-r--r--sysdeps/powerpc/powerpc64/strcmp.S133
-rw-r--r--sysdeps/powerpc/powerpc64/strcpy.S120
-rw-r--r--sysdeps/powerpc/powerpc64/strlen.S163
26 files changed, 2660 insertions, 0 deletions
diff --git a/sysdeps/powerpc/powerpc64/Dist b/sysdeps/powerpc/powerpc64/Dist
new file mode 100644
index 0000000000..bbadfef3b8
--- /dev/null
+++ b/sysdeps/powerpc/powerpc64/Dist
@@ -0,0 +1,4 @@
+dl-machine.c
+ppc-mcount.S
+elf/entry.h
+bp-asm.h
diff --git a/sysdeps/powerpc/powerpc64/Implies b/sysdeps/powerpc/powerpc64/Implies
new file mode 100644
index 0000000000..a8cae95f9d
--- /dev/null
+++ b/sysdeps/powerpc/powerpc64/Implies
@@ -0,0 +1 @@
+wordsize-64
diff --git a/sysdeps/powerpc/powerpc64/Makefile b/sysdeps/powerpc/powerpc64/Makefile
new file mode 100644
index 0000000000..ff6819a63f
--- /dev/null
+++ b/sysdeps/powerpc/powerpc64/Makefile
@@ -0,0 +1,23 @@
+# Powerpc64 specific build options.
+# this is ./sysdeps/powerpc/powerpc64/Makefile
+
++cflags += -Wa,-mppc64 -mpowerpc64
+asm-CPPFLAGS += -Wa,-mppc64
+
+# On PPC64, -fpic is the default so we don't need to specify it.
+# Also early compilers would issue a warning if -fpic was specified.
+# Each TOC entry takes 8 bytes and the TOC holds up to 2^16 bytes,
+# or 8192 entries. If the TOC fills up try -minimal-toc.
+
+ifeq ($(subdir),csu)
+ifneq ($(elf),no)
+# The initfini generation code doesn't work in the presence of -g1 or
+# higher, so we use -g0.
+CFLAGS-initfini.s = -g0 -O1
+endif
+endif
+
+ifeq ($(subdir),elf)
+# help gcc inline asm code from dl-machine.h
++cflags += --param max-inline-insns=2000
+endif
diff --git a/sysdeps/powerpc/powerpc64/__longjmp.S b/sysdeps/powerpc/powerpc64/__longjmp.S
new file mode 100644
index 0000000000..e4152126b1
--- /dev/null
+++ b/sysdeps/powerpc/powerpc64/__longjmp.S
@@ -0,0 +1,74 @@
+/* longjmp for PowerPC64.
+ Copyright (C) 1995, 1996, 1997, 1999, 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 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.h>
+#define _ASM
+#define _SETJMP_H
+#include <bits/setjmp.h>
+#include <bp-sym.h>
+#include <bp-asm.h>
+
+ENTRY (BP_SYM (__longjmp))
+ CHECK_BOUNDS_BOTH_WIDE_LIT (r3, r8, r9, JB_SIZE)
+ ld r1,(JB_GPR1*8)(r3)
+ ld r2,(JB_GPR2*8)(r3)
+ ld r0,(JB_LR*8)(r3)
+ ld r14,((JB_GPRS+0)*8)(r3)
+ lfd fp14,((JB_FPRS+0)*8)(r3)
+ ld r15,((JB_GPRS+1)*8)(r3)
+ lfd fp15,((JB_FPRS+1)*8)(r3)
+ ld r16,((JB_GPRS+2)*8)(r3)
+ lfd fp16,((JB_FPRS+2)*8)(r3)
+ ld r17,((JB_GPRS+3)*8)(r3)
+ lfd fp17,((JB_FPRS+3)*8)(r3)
+ ld r18,((JB_GPRS+4)*8)(r3)
+ lfd fp18,((JB_FPRS+4)*8)(r3)
+ ld r19,((JB_GPRS+5)*8)(r3)
+ lfd fp19,((JB_FPRS+5)*8)(r3)
+ ld r20,((JB_GPRS+6)*8)(r3)
+ lfd fp20,((JB_FPRS+6)*8)(r3)
+ mtlr r0
+ ld r21,((JB_GPRS+7)*8)(r3)
+ lfd fp21,((JB_FPRS+7)*8)(r3)
+ ld r22,((JB_GPRS+8)*8)(r3)
+ lfd fp22,((JB_FPRS+8)*8)(r3)
+ ld r0,(JB_CR*8)(r3)
+ ld r23,((JB_GPRS+9)*8)(r3)
+ lfd fp23,((JB_FPRS+9)*8)(r3)
+ ld r24,((JB_GPRS+10)*8)(r3)
+ lfd fp24,((JB_FPRS+10)*8)(r3)
+ ld r25,((JB_GPRS+11)*8)(r3)
+ lfd fp25,((JB_FPRS+11)*8)(r3)
+ mtcrf 0xFF,r0
+ ld r26,((JB_GPRS+12)*8)(r3)
+ lfd fp26,((JB_FPRS+12)*8)(r3)
+ ld r27,((JB_GPRS+13)*8)(r3)
+ lfd fp27,((JB_FPRS+13)*8)(r3)
+ ld r28,((JB_GPRS+14)*8)(r3)
+ lfd fp28,((JB_FPRS+14)*8)(r3)
+ ld r29,((JB_GPRS+15)*8)(r3)
+ lfd fp29,((JB_FPRS+15)*8)(r3)
+ ld r30,((JB_GPRS+16)*8)(r3)
+ lfd fp30,((JB_FPRS+16)*8)(r3)
+ ld r31,((JB_GPRS+17)*8)(r3)
+ lfd fp31,((JB_FPRS+17)*8)(r3)
+ mr r3,r4
+ blr
+END (BP_SYM (__longjmp))
diff --git a/sysdeps/powerpc/powerpc64/atomicity.h b/sysdeps/powerpc/powerpc64/atomicity.h
new file mode 100644
index 0000000000..b9d0de0ac5
--- /dev/null
+++ b/sysdeps/powerpc/powerpc64/atomicity.h
@@ -0,0 +1,132 @@
+/* Low-level functions for atomic operations. PowerPC64 version.
+ Copyright (C) 1997, 1998, 1999, 2000, 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. */
+
+#ifndef _ATOMICITY_H
+#define _ATOMICITY_H 1
+
+#include <inttypes.h>
+
+#if BROKEN_PPC_ASM_CR0
+# define __ATOMICITY_INLINE /* nothing */
+#else
+# define __ATOMICITY_INLINE inline
+#endif
+
+static __ATOMICITY_INLINE int
+__attribute__ ((unused))
+exchange_and_add (volatile uint32_t *mem, int val)
+{
+ int tmp, result;
+ __asm__ ("\n\
+0: lwarx %0,0,%2 \n\
+ add%I3 %1,%0,%3 \n\
+ stwcx. %1,0,%2 \n\
+ bne- 0b \n\
+" : "=&b"(result), "=&r"(tmp) : "r" (mem), "Ir"(val) : "cr0", "memory");
+ return result;
+}
+
+static __ATOMICITY_INLINE void
+__attribute__ ((unused))
+atomic_add_long (volatile long *mem, int val)
+{
+ int tmp;
+ __asm__ ("\n\
+0: ldarx %0,0,%1 \n\
+ add%I2 %0,%0,%2 \n\
+ stdcx. %0,0,%1 \n\
+ bne- 0b \n\
+" : "=&b"(tmp) : "r" (mem), "Ir"(val) : "cr0", "memory");
+}
+
+
+static __ATOMICITY_INLINE int
+__attribute__ ((unused))
+exchange_and_add_long (volatile long *mem, int val)
+{
+ int tmp, result;
+ __asm__ ("\n\
+0: ldarx %0,0,%2 \n\
+ add%I3 %1,%0,%3 \n\
+ stdcx. %1,0,%2 \n\
+ bne- 0b \n\
+" : "=&b"(result), "=&r"(tmp) : "r" (mem), "Ir"(val) : "cr0", "memory");
+ return result;
+}
+
+static __ATOMICITY_INLINE void
+__attribute__ ((unused))
+atomic_add (volatile uint32_t *mem, int val)
+{
+ int tmp;
+ __asm__ ("\n\
+0: lwarx %0,0,%1 \n\
+ add%I2 %0,%0,%2 \n\
+ stwcx. %0,0,%1 \n\
+ bne- 0b \n\
+" : "=&b"(tmp) : "r" (mem), "Ir"(val) : "cr0", "memory");
+}
+
+static __ATOMICITY_INLINE int
+__attribute__ ((unused))
+compare_and_swap (volatile long int *p, long int oldval, long int newval)
+{
+ int result;
+ __asm__ ("\n\
+0: ldarx %0,0,%1 \n\
+ sub%I2c. %0,%0,%2 \n\
+ cntlzw %0,%0 \n\
+ bne- 1f \n\
+ stdcx. %3,0,%1 \n\
+ bne- 0b \n\
+1: \n\
+" : "=&b"(result) : "r"(p), "Ir"(oldval), "r"(newval) : "cr0", "memory");
+ return result >> 5;
+}
+
+static __ATOMICITY_INLINE long int
+__attribute__ ((unused))
+always_swap (volatile long int *p, long int newval)
+{
+ long int result;
+ __asm__ ("\n\
+0: ldarx %0,0,%1 \n\
+ stdcx. %2,0,%1 \n\
+ bne- 0b \n\
+" : "=&r"(result) : "r"(p), "r"(newval) : "cr0", "memory");
+ return result;
+}
+
+static __ATOMICITY_INLINE int
+__attribute__ ((unused))
+test_and_set (volatile long int *p, long int newval)
+{
+ int result;
+ __asm__ ("\n\
+0: ldarx %0,0,%1 \n\
+ cmpdi %0,0 \n\
+ bne- 1f \n\
+ stdcx. %2,0,%1 \n\
+ bne- 0b \n\
+1: \n\
+" : "=&r"(result) : "r"(p), "r"(newval) : "cr0", "memory");
+ return result;
+}
+
+#endif /* atomicity.h */
diff --git a/sysdeps/powerpc/powerpc64/backtrace.c b/sysdeps/powerpc/powerpc64/backtrace.c
new file mode 100644
index 0000000000..8669b6a689
--- /dev/null
+++ b/sysdeps/powerpc/powerpc64/backtrace.c
@@ -0,0 +1,69 @@
+/* Return backtrace of current program state.
+ Copyright (C) 1998, 2000, 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. */
+
+#include <execinfo.h>
+#include <stddef.h>
+#include <bp-checks.h>
+
+/* This is the stack layout we see with every stack frame.
+ Note that every routine is required by the ABI to lay out the stack
+ like this.
+
+ +----------------+ +-----------------+
+ %r1 -> | %r1 last frame--------> | %r1 last frame--->... --> NULL
+ | | | |
+ | cr save | | cr save |
+ | | | |
+ | (unused) | | return address |
+ +----------------+ +-----------------+
+*/
+struct layout
+{
+ struct layout *__unbounded next;
+ long condition_register;
+ void *__unbounded return_address;
+};
+
+int
+__backtrace (void **array, int size)
+{
+ struct layout *current;
+ int count;
+
+ /* Force gcc to spill LR. */
+ asm volatile ("" : "=l"(current));
+
+ /* Get the address on top-of-stack. */
+ asm volatile ("ld %0,0(1)" : "=r"(current));
+ current = BOUNDED_1 (current);
+
+ for ( count = 0;
+ current != NULL && count < size;
+ current = BOUNDED_1 (current->next), count++)
+ array[count] = current->return_address;
+
+ /* It's possible the second-last stack frame can't return
+ (that is, it's __libc_start_main), in which case
+ the CRT startup code will have set its LR to 'NULL'. */
+ if (count > 0 && array[count-1] == NULL)
+ count--;
+
+ return count;
+}
+weak_alias (__backtrace, backtrace)
diff --git a/sysdeps/powerpc/powerpc64/bp-asm.h b/sysdeps/powerpc/powerpc64/bp-asm.h
new file mode 100644
index 0000000000..ee99e3044b
--- /dev/null
+++ b/sysdeps/powerpc/powerpc64/bp-asm.h
@@ -0,0 +1,115 @@
+/* Bounded-pointer definitions for PowerPC64 assembler.
+ Copyright (C) 2000, 2002 Free Software Foundation, Inc.
+ Contributed by Greg McGary <greg@mcgary.org>
+
+ This file is part of the GNU C Library. Its master source is NOT part of
+ the C library, however. The master source lives in the GNU MP 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. */
+
+#if __BOUNDED_POINTERS__
+
+/* Byte offsets of BP components. */
+# define oVALUE 0
+# define oLOW 4
+# define oHIGH 8
+
+/* Don't check bounds, just convert the BP register to its simple
+ pointer value. */
+
+# define DISCARD_BOUNDS(rBP) \
+ ld rBP, oVALUE(rBP)
+
+/* Check low bound, with the side effect that the BP register is converted
+ its simple pointer value. Move the high bound into a register for
+ later use. */
+
+# define CHECK_BOUNDS_LOW(rBP, rLOW, rHIGH) \
+ ld rHIGH, oHIGH(rBP); \
+ ld rLOW, oLOW(rBP); \
+ ld rBP, oVALUE(rBP); \
+ tdllt rBP, rLOW
+
+/* Check the high bound, which is in a register, using the given
+ conditional trap instruction. */
+
+# define CHECK_BOUNDS_HIGH(rVALUE, rHIGH, TWLcc) \
+ TWLcc rVALUE, rHIGH
+
+/* Check the high bound, which is stored at the return-value's high
+ bound slot, using the given conditional trap instruction. */
+
+# define CHECK_BOUNDS_HIGH_RTN(rVALUE, rHIGH, TWLcc) \
+ ld rHIGH, oHIGH(rRTN); \
+ TWLcc rVALUE, rHIGH
+
+/* Check both bounds, with the side effect that the BP register is
+ converted to its simple pointer value. */
+
+# define CHECK_BOUNDS_BOTH(rBP, rLOW, rHIGH) \
+ CHECK_BOUNDS_LOW(rBP, rLOW, rHIGH); \
+ tdlge rBP, rHIGH
+
+/* Check bounds on a memory region of given length, with the side
+ effect that the BP register is converted to its simple pointer
+ value. */
+
+# define CHECK_BOUNDS_BOTH_WIDE(rBP, rLOW, rHIGH, rLENGTH) \
+ CHECK_BOUNDS_LOW (rBP, rLOW, rHIGH); \
+ sub rHIGH, rHIGH, rLENGTH; \
+ tdlgt rBP, rHIGH
+
+# define CHECK_BOUNDS_BOTH_WIDE_LIT(rBP, rLOW, rHIGH, LENGTH) \
+ CHECK_BOUNDS_LOW (rBP, rLOW, rHIGH); \
+ subi rHIGH, rHIGH, LENGTH; \
+ tdlgt rBP, rHIGH
+
+/* Store a pointer value register into the return-value's pointer
+ value slot. */
+
+# define STORE_RETURN_VALUE(rVALUE) \
+ std rVALUE, oVALUE(rRTN)
+
+/* Store a low and high bounds into the return-value's pointer bounds
+ slots. */
+
+# define STORE_RETURN_BOUNDS(rLOW, rHIGH) \
+ std rLOW, oLOW(rRTN); \
+ std rHIGH, oHIGH(rRTN)
+
+/* Stuff zero value/low/high into the BP addressed by rRTN. */
+
+# define RETURN_NULL_BOUNDED_POINTER \
+ li r4, 0; \
+ STORE_RETURN_VALUE (r4); \
+ STORE_RETURN_BOUNDS (r4, r4)
+
+#else
+
+# define DISCARD_BOUNDS(rBP)
+# define CHECK_BOUNDS_LOW(rBP, rLOW, rHIGH)
+# define CHECK_BOUNDS_HIGH(rVALUE, rHIGH, TWLcc)
+# define CHECK_BOUNDS_HIGH_RTN(rVALUE, rHIGH, TWLcc)
+# define CHECK_BOUNDS_BOTH(rBP, rLOW, rHIGH)
+# define CHECK_BOUNDS_BOTH_WIDE(rBP, rLOW, rHIGH, rLENGTH)
+# define CHECK_BOUNDS_BOTH_WIDE_LIT(rBP, rLOW, rHIGH, LENGTH)
+# define STORE_RETURN_VALUE(rVALUE)
+# define STORE_RETURN_BOUNDS(rLOW, rHIGH)
+
+# define RETURN_NULL_BOUNDED_POINTER li rRTN, 0
+
+#endif
+
diff --git a/sysdeps/powerpc/powerpc64/bsd-_setjmp.S b/sysdeps/powerpc/powerpc64/bsd-_setjmp.S
new file mode 100644
index 0000000000..994f82f851
--- /dev/null
+++ b/sysdeps/powerpc/powerpc64/bsd-_setjmp.S
@@ -0,0 +1,21 @@
+/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. PowerPC64 version.
+ Copyright (C) 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 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