Remove powerpc64 bounded-pointers code.

This commit is contained in:
Joseph Myers 2013-03-06 00:10:21 +00:00
parent cdcf361fda
commit 2d67d91ac0
38 changed files with 265 additions and 500 deletions

146
ChangeLog
View File

@ -1,3 +1,149 @@
2013-03-06 Joseph Myers <joseph@codesourcery.com>
[BZ #13550]
* sysdeps/generic/bp-sym.h: Remove file.
* sysdeps/powerpc/powerpc64/bp-asm.h: Likewise.
* sysdeps/powerpc/powerpc64/__longjmp-common.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__longjmp): Don't use BP_SYM.
* sysdeps/powerpc/powerpc64/a2/memcpy.S: Don't include <bp-sym.h>
and <bp-asm.h>.
(memcpy): Don't use BP_SYM.
* sysdeps/powerpc/powerpc64/cell/memcpy.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(memcpy): Don't use BP_SYM.
* sysdeps/powerpc/powerpc64/memcpy.S: Don't include <bp-sym.h> and
<bp-asm.h>.
(memcpy): Don't use BP_SYM.
* sysdeps/powerpc/powerpc64/memset.S: Don't include <bp-sym.h> and
<bp-asm.h>.
(memset): Don't use BP_SYM.
(memset) [__BOUNDED_POINTERS__]: Remove conditional code.
(memset) [!__BOUNDED_POINTERS__]: Make code unconditional.
(__bzero): Don't use BP_SYM.
(__bzero) [__BOUNDED_POINTERS__]: Remove conditional code.
(__bzero) [!__BOUNDED_POINTERS__]: Make code unconditional.
* sysdeps/powerpc/powerpc64/power4/memcmp.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(memcmp): Don't use BP_SYM. Remove comment about bounded
pointers.
* sysdeps/powerpc/powerpc64/power4/memcpy.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(memcpy): Don't use BP_SYM.
* sysdeps/powerpc/powerpc64/power4/memset.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(memset): Don't use BP_SYM.
(memset) [__BOUNDED_POINTERS__]: Remove conditional code.
(memset) [!__BOUNDED_POINTERS__]: Make code unconditional.
(__bzero): Don't use BP_SYM.
(__bzero) [__BOUNDED_POINTERS__]: Remove conditional code.
(__bzero) [!__BOUNDED_POINTERS__]: Make code unconditional.
* sysdeps/powerpc/powerpc64/power4/strncmp.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(strncmp): Don't use BP_SYM. Remove comment about bounded
pointers.
* sysdeps/powerpc/powerpc64/power6/memcpy.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(memcpy): Don't use BP_SYM.
* sysdeps/powerpc/powerpc64/power6/memset.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(memset): Don't use BP_SYM.
(memset) [__BOUNDED_POINTERS__]: Remove conditional code.
(memset) [!__BOUNDED_POINTERS__]: Make code unconditional.
(__bzero): Don't use BP_SYM.
(__bzero) [__BOUNDED_POINTERS__]: Remove conditional code.
(__bzero) [!__BOUNDED_POINTERS__]: Make code unconditional.
* sysdeps/powerpc/powerpc64/power7/memchr.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__memchr): Don't use BP_SYM.
* sysdeps/powerpc/powerpc64/power7/memcmp.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(memcmp): Don't use BP_SYM. Remove comment about bounded
pointers.
* sysdeps/powerpc/powerpc64/power7/memcpy.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(memcpy): Don't use BP_SYM.
* sysdeps/powerpc/powerpc64/power7/mempcpy.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__mempcpy): Don't use BP_SYM.
* sysdeps/powerpc/powerpc64/power7/memrchr.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__memrchr): Don't use BP_SYM.
* sysdeps/powerpc/powerpc64/power7/memset.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(memset): Don't use BP_SYM.
(__bzero): Likewise.
* sysdeps/powerpc/powerpc64/power7/rawmemchr.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__rawmemchr): Don't use BP_SYM.
* sysdeps/powerpc/powerpc64/power7/strcasecmp.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__STRCMP): Don't use BP_SYM.
* sysdeps/powerpc/powerpc64/power7/strchr.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(strchr): Don't use BP_SYM.
* sysdeps/powerpc/powerpc64/power7/strchrnul.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__strchrnul): Don't use BP_SYM.
* sysdeps/powerpc/powerpc64/power7/strlen.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(strlen): Don't use BP_SYM.
* sysdeps/powerpc/powerpc64/power7/strncmp.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(strncmp): Don't use BP_SYM. Remove comment about bounded
pointers.
* sysdeps/powerpc/powerpc64/power7/strnlen.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__strnlen): Don't use BP_SYM.
* sysdeps/powerpc/powerpc64/setjmp-common.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__GI__setjmp): Don't use BP_SYM.
(_setjmp): Likewise.
(__sigsetjmp): Likewise.
* sysdeps/powerpc/powerpc64/start.S: Don't include "bp-sym.h".
(L(start_addresses)): Don't use BP_SYM.
(_start): Likewise.
* sysdeps/powerpc/powerpc64/stpcpy.S: Don't include <bp-sym.h> and
<bp-asm.h>.
(__stpcpy): Don't use BP_SYM, CHECK_BOUNDS_LOW,
STORE_RETURN_BOUNDS, CHECK_BOUNDS_HIGH and STORE_RETURN_VALUE.
(__stpcpy) [__BOUNDED_POINTERS__]: Remove conditional code.
(__stpcpy) [!__BOUNDED_POINTERS__]: Make code unconditional.
* sysdeps/powerpc/powerpc64/strchr.S: Don't include <bp-sym.h> and
<bp-asm.h>.
(strchr): Don't use BP_SYM, CHECK_BOUNDS_LOW, STORE_RETURN_BOUNDS,
CHECK_BOUNDS_HIGH_RTN and STORE_RETURN_VALUE. Remove comment
about bounded pointers.
(strchr) [__BOUNDED_POINTERS__]: Remove conditional code.
(strchr) [!__BOUNDED_POINTERS__]: Make code unconditional.
* sysdeps/powerpc/powerpc64/strcmp.S: Don't include <bp-sym.h> and
<bp-asm.h>.
(strcmp): Don't use BP_SYM and CHECK_BOUNDS_LOW. Remove comment
about bounded pointers. Remove GKM FIXME comments.
(strcmp) [__BOUNDED_POINTERS__]: Remove conditional code.
* sysdeps/powerpc/powerpc64/strcpy.S: Don't include <bp-sym.h> and
<bp-asm.h>.
(strcpy): Don't use BP_SYM, CHECK_BOUNDS_LOW and
STORE_RETURN_BOUNDS. Remove comment about bounded pointers.
Remove GKM FIXME comments.
(strcpy) [__BOUNDED_POINTERS__]: Remove conditional code.
(strcpy) [!__BOUNDED_POINTERS__]: Make code unconditional.
* sysdeps/powerpc/powerpc64/strlen.S: Don't include <bp-sym.h> and
<bp-asm.h>.
(strlen): Don't use BP_SYM and CHECK_BOUNDS_LOW. Remove comment
about bounded pointers. Remove GKM FIXME comment.
* sysdeps/powerpc/powerpc64/strncmp.S: Don't include <bp-sym.h>
and <bp-asm.h>.
(strncmp): Don't use BP_SYM. Remove comment about bounded
pointers.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/brk.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__brk): Don't use BP_SYM and DISCARD_BOUNDS.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S: Don't include
<bp-sym.h> and <bp-asm.h>.
(__clone): Don't use BP_SYM and DISCARD_BOUNDS. Remove GKM FIXME
comment.
2013-03-05 Paul Pluzhnikov <ppluzhnikov@google.com> 2013-03-05 Paul Pluzhnikov <ppluzhnikov@google.com>
* stdio-common/vfprintf.c (vfprintf): Check malloc return; don't * stdio-common/vfprintf.c (vfprintf): Check malloc return; don't

6
NEWS
View File

@ -9,9 +9,9 @@ Version 2.18
* The following bugs are resolved with this release: * The following bugs are resolved with this release:
11561, 13951, 14142, 14200, 14317, 14327, 14496, 14920, 14964, 14981, 11561, 13550, 13951, 14142, 14200, 14317, 14327, 14496, 14920, 14964,
14982, 14985, 14994, 14996, 15003, 15006, 15020, 15023, 15036, 15054, 14981, 14982, 14985, 14994, 14996, 15003, 15006, 15020, 15023, 15036,
15055, 15062, 15078, 15160. 15054, 15055, 15062, 15078, 15160.
* Add support for calling C++11 thread_local object destructors on thread * Add support for calling C++11 thread_local object destructors on thread
and program exit. This needs compiler support for offloading C++11 and program exit. This needs compiler support for offloading C++11

View File

@ -1,25 +0,0 @@
/* Bounded-pointer symbol modifier.
Copyright (C) 2000-2013 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Greg McGary <greg@mcgary.org>
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/>. */
#define BP_SYM(name) _BP_SYM (name)
#if __BOUNDED_POINTERS__
# define _BP_SYM(name) __BP_##name
#else
# define _BP_SYM(name) name
#endif

View File

@ -24,8 +24,6 @@
#else #else
# include <jmpbuf-offsets.h> # include <jmpbuf-offsets.h>
#endif #endif
#include <bp-sym.h>
#include <bp-asm.h>
#ifndef __NO_VMX__ #ifndef __NO_VMX__
.section ".toc","aw" .section ".toc","aw"
@ -45,9 +43,8 @@
#endif #endif
.machine "altivec" .machine "altivec"
ENTRY (BP_SYM (__longjmp)) ENTRY (__longjmp)
CALL_MCOUNT 2 CALL_MCOUNT 2
CHECK_BOUNDS_BOTH_WIDE_LIT (r3, r8, r9, JB_SIZE)
#ifndef __NO_VMX__ #ifndef __NO_VMX__
ld r5,.LC__dl_hwcap@toc(r2) ld r5,.LC__dl_hwcap@toc(r2)
# ifdef SHARED # ifdef SHARED
@ -178,4 +175,4 @@ L(no_vmx):
lfd fp31,((JB_FPRS+17)*8)(r3) lfd fp31,((JB_FPRS+17)*8)(r3)
mr r3,r4 mr r3,r4
blr blr
END (BP_SYM (__longjmp)) END (__longjmp)

View File

@ -18,8 +18,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
#define PREFETCH_AHEAD 4 /* no cache lines SRC prefetching ahead */ #define PREFETCH_AHEAD 4 /* no cache lines SRC prefetching ahead */
#define ZERO_AHEAD 2 /* no cache lines DST zeroing ahead */ #define ZERO_AHEAD 2 /* no cache lines DST zeroing ahead */
@ -32,7 +30,7 @@
.machine a2 .machine a2
EALIGN (BP_SYM (memcpy), 5, 0) EALIGN (memcpy, 5, 0)
CALL_MCOUNT 3 CALL_MCOUNT 3
dcbt 0,r4 /* Prefetch ONE SRC cacheline */ dcbt 0,r4 /* Prefetch ONE SRC cacheline */
@ -522,5 +520,5 @@ L(endloop2_128):
b L(lessthancacheline) b L(lessthancacheline)
END_GEN_TB (BP_SYM (memcpy),TB_TOCLESS) END_GEN_TB (memcpy,TB_TOCLESS)
libc_hidden_builtin_def (memcpy) libc_hidden_builtin_def (memcpy)

View File

@ -1,113 +0,0 @@
/* Bounded-pointer definitions for PowerPC64 assembler.
Copyright (C) 2000-2013 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, see <http://www.gnu.org/licenses/>. */
#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

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
#define PREFETCH_AHEAD 6 /* no cache lines SRC prefetching ahead */ #define PREFETCH_AHEAD 6 /* no cache lines SRC prefetching ahead */
#define ZERO_AHEAD 4 /* no cache lines DST zeroing ahead */ #define ZERO_AHEAD 4 /* no cache lines DST zeroing ahead */
@ -41,7 +39,7 @@
.align 7 .align 7
EALIGN (BP_SYM (memcpy), 5, 0) EALIGN (memcpy, 5, 0)
CALL_MCOUNT 3 CALL_MCOUNT 3
dcbt 0,r4 /* Prefetch ONE SRC cacheline */ dcbt 0,r4 /* Prefetch ONE SRC cacheline */
@ -240,5 +238,5 @@ EALIGN (BP_SYM (memcpy), 5, 0)
stb r0,0(r6) stb r0,0(r6)
1: blr 1: blr
END_GEN_TB (BP_SYM (memcpy),TB_TOCLESS) END_GEN_TB (memcpy,TB_TOCLESS)
libc_hidden_builtin_def (memcpy) libc_hidden_builtin_def (memcpy)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]); /* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]);
Returns 'dst'. Returns 'dst'.
@ -35,7 +33,7 @@
possible when both source and destination are doubleword aligned. possible when both source and destination are doubleword aligned.
Each case has a optimized unrolled loop. */ Each case has a optimized unrolled loop. */
EALIGN (BP_SYM (memcpy), 5, 0) EALIGN (memcpy, 5, 0)
CALL_MCOUNT 3 CALL_MCOUNT 3
cmpldi cr1,5,31 cmpldi cr1,5,31
@ -364,5 +362,5 @@ EALIGN (BP_SYM (memcpy), 5, 0)
ld 31,-8(1) ld 31,-8(1)
ld 3,-16(1) ld 3,-16(1)
blr blr
END_GEN_TB (BP_SYM (memcpy),TB_TOCLESS) END_GEN_TB (memcpy,TB_TOCLESS)
libc_hidden_builtin_def (memcpy) libc_hidden_builtin_def (memcpy)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
.section ".toc","aw" .section ".toc","aw"
.LC0: .LC0:
@ -33,22 +31,15 @@
cache line (256 bits). There is a special case for setting cache lines cache line (256 bits). There is a special case for setting cache lines
to 0, to take advantage of the dcbz instruction. */ to 0, to take advantage of the dcbz instruction. */
EALIGN (BP_SYM (memset), 5, 0) EALIGN (memset, 5, 0)
CALL_MCOUNT 3 CALL_MCOUNT 3
#define rTMP r0 #define rTMP r0
#define rRTN r3 /* Initial value of 1st argument. */ #define rRTN r3 /* Initial value of 1st argument. */
#if __BOUNDED_POINTERS__ #define rMEMP0 r3 /* Original value of 1st arg. */
# define rMEMP0 r4 /* Original value of 1st arg. */ #define rCHR r4 /* Char to set in each byte. */
# define rCHR r5 /* Char to set in each byte. */ #define rLEN r5 /* Length of region to set. */
# define rLEN r6 /* Length of region to set. */ #define rMEMP r6 /* Address at which we are storing. */
# define rMEMP r10 /* Address at which we are storing. */
#else
# define rMEMP0 r3 /* Original value of 1st arg. */
# define rCHR r4 /* Char to set in each byte. */
# define rLEN r5 /* Length of region to set. */
# define rMEMP r6 /* Address at which we are storing. */
#endif
#define rALIGN r7 /* Number of bytes we are setting now (when aligning). */ #define rALIGN r7 /* Number of bytes we are setting now (when aligning). */
#define rMEMP2 r8 #define rMEMP2 r8
@ -56,14 +47,6 @@ EALIGN (BP_SYM (memset), 5, 0)
#define rCLS r8 /* Cache line size obtained from static. */ #define rCLS r8 /* Cache line size obtained from static. */
#define rCLM r9 /* Cache line size mask to check for cache alignment. */ #define rCLM r9 /* Cache line size mask to check for cache alignment. */
L(_memset): L(_memset):
#if __BOUNDED_POINTERS__
cmpldi cr1, rRTN, 0
CHECK_BOUNDS_BOTH_WIDE (rMEMP0, rTMP, rTMP2, rLEN)
beq cr1, L(b0)
STORE_RETURN_VALUE (rMEMP0)
STORE_RETURN_BOUNDS (rTMP, rTMP2)
L(b0):
#endif
/* Take care of case for size <= 4. */ /* Take care of case for size <= 4. */
cmpldi cr1, rLEN, 8 cmpldi cr1, rLEN, 8
andi. rALIGN, rMEMP0, 7 andi. rALIGN, rMEMP0, 7
@ -261,25 +244,16 @@ L(medium_27f):
L(medium_28t): L(medium_28t):
std rCHR, -8(rMEMP) std rCHR, -8(rMEMP)
blr blr
END_GEN_TB (BP_SYM (memset),TB_TOCLESS) END_GEN_TB (memset,TB_TOCLESS)
libc_hidden_builtin_def (memset) libc_hidden_builtin_def (memset)
/* Copied from bzero.S to prevent the linker from inserting a stub /* Copied from bzero.S to prevent the linker from inserting a stub
between bzero and memset. */ between bzero and memset. */
ENTRY (BP_SYM (__bzero)) ENTRY (__bzero)
CALL_MCOUNT 3 CALL_MCOUNT 3
#if __BOUNDED_POINTERS__
mr r6,r4
li r5,0
mr r4,r3
/* Tell memset that we don't want a return value. */
li r3,0
b L(_memset)
#else
mr r5,r4 mr r5,r4
li r4,0 li r4,0
b L(_memset) b L(_memset)
#endif END_GEN_TB (__bzero,TB_TOCLESS)
END_GEN_TB (BP_SYM (__bzero),TB_TOCLESS)
weak_alias (BP_SYM (__bzero), BP_SYM (bzero)) weak_alias (__bzero, bzero)

View File

@ -17,13 +17,11 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* int [r3] memcmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5]) */ /* int [r3] memcmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5]) */
.machine power4 .machine power4
EALIGN (BP_SYM(memcmp), 4, 0) EALIGN (memcmp, 4, 0)
CALL_MCOUNT 3 CALL_MCOUNT 3
#define rTMP r0 #define rTMP r0
@ -31,9 +29,6 @@ EALIGN (BP_SYM(memcmp), 4, 0)
#define rSTR1 r3 /* first string arg */ #define rSTR1 r3 /* first string arg */
#define rSTR2 r4 /* second string arg */ #define rSTR2 r4 /* second string arg */
#define rN r5 /* max string length */ #define rN r5 /* max string length */
/* Note: The Bounded pointer support in this code is broken. This code
was inherited from PPC32 and that support was never completed.
Current PPC gcc does not support -fbounds-check or -fbounded-pointers. */
#define rWORD1 r6 /* current word in s1 */ #define rWORD1 r6 /* current word in s1 */
#define rWORD2 r7 /* current word in s2 */ #define rWORD2 r7 /* current word in s2 */
#define rWORD3 r8 /* next word in s1 */ #define rWORD3 r8 /* next word in s1 */
@ -976,6 +971,6 @@ L(duzeroLength):
li rRTN,0 li rRTN,0
blr blr
END (BP_SYM (memcmp)) END (memcmp)
libc_hidden_builtin_def (memcmp) libc_hidden_builtin_def (memcmp)
weak_alias (memcmp, bcmp) weak_alias (memcmp, bcmp)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]); /* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]);
Returns 'dst'. Returns 'dst'.
@ -36,7 +34,7 @@
Each case has a optimized unrolled loop. */ Each case has a optimized unrolled loop. */
.machine power4 .machine power4
EALIGN (BP_SYM (memcpy), 5, 0) EALIGN (memcpy, 5, 0)
CALL_MCOUNT 3 CALL_MCOUNT 3
cmpldi cr1,5,31 cmpldi cr1,5,31
@ -413,5 +411,5 @@ EALIGN (BP_SYM (memcpy), 5, 0)
ld 31,-8(1) ld 31,-8(1)
ld 3,-16(1) ld 3,-16(1)
blr blr
END_GEN_TB (BP_SYM (memcpy),TB_TOCLESS) END_GEN_TB (memcpy,TB_TOCLESS)
libc_hidden_builtin_def (memcpy) libc_hidden_builtin_def (memcpy)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5])); /* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5]));
Returns 's'. Returns 's'.
@ -28,22 +26,15 @@
to 0, to take advantage of the dcbz instruction. */ to 0, to take advantage of the dcbz instruction. */
.machine power4 .machine power4
EALIGN (BP_SYM (memset), 5, 0) EALIGN (memset, 5, 0)
CALL_MCOUNT 3 CALL_MCOUNT 3
#define rTMP r0 #define rTMP r0
#define rRTN r3 /* Initial value of 1st argument. */ #define rRTN r3 /* Initial value of 1st argument. */
#if __BOUNDED_POINTERS__ #define rMEMP0 r3 /* Original value of 1st arg. */
# define rMEMP0 r4 /* Original value of 1st arg. */ #define rCHR r4 /* Char to set in each byte. */
# define rCHR r5 /* Char to set in each byte. */ #define rLEN r5 /* Length of region to set. */
# define rLEN r6 /* Length of region to set. */ #define rMEMP r6 /* Address at which we are storing. */
# define rMEMP r10 /* Address at which we are storing. */
#else
# define rMEMP0 r3 /* Original value of 1st arg. */
# define rCHR r4 /* Char to set in each byte. */
# define rLEN r5 /* Length of region to set. */
# define rMEMP r6 /* Address at which we are storing. */
#endif
#define rALIGN r7 /* Number of bytes we are setting now (when aligning). */ #define rALIGN r7 /* Number of bytes we are setting now (when aligning). */
#define rMEMP2 r8 #define rMEMP2 r8
@ -51,14 +42,6 @@ EALIGN (BP_SYM (memset), 5, 0)
#define rCLS r8 /* Cache line size obtained from static. */ #define rCLS r8 /* Cache line size obtained from static. */
#define rCLM r9 /* Cache line size mask to check for cache alignment. */ #define rCLM r9 /* Cache line size mask to check for cache alignment. */
L(_memset): L(_memset):
#if __BOUNDED_POINTERS__
cmpldi cr1, rRTN, 0
CHECK_BOUNDS_BOTH_WIDE (rMEMP0, rTMP, rTMP2, rLEN)
beq cr1, L(b0)
STORE_RETURN_VALUE (rMEMP0)
STORE_RETURN_BOUNDS (rTMP, rTMP2)
L(b0):
#endif
/* Take care of case for size <= 4. */ /* Take care of case for size <= 4. */
cmpldi cr1, rLEN, 8 cmpldi cr1, rLEN, 8
andi. rALIGN, rMEMP0, 7 andi. rALIGN, rMEMP0, 7
@ -249,25 +232,16 @@ L(medium_27f):
L(medium_28t): L(medium_28t):
std rCHR, -8(rMEMP) std rCHR, -8(rMEMP)
blr blr
END_GEN_TB (BP_SYM (memset),TB_TOCLESS) END_GEN_TB (memset,TB_TOCLESS)
libc_hidden_builtin_def (memset) libc_hidden_builtin_def (memset)
/* Copied from bzero.S to prevent the linker from inserting a stub /* Copied from bzero.S to prevent the linker from inserting a stub
between bzero and memset. */ between bzero and memset. */
ENTRY (BP_SYM (__bzero)) ENTRY (__bzero)
CALL_MCOUNT 3 CALL_MCOUNT 3
#if __BOUNDED_POINTERS__
mr r6,r4
li r5,0
mr r4,r3
/* Tell memset that we don't want a return value. */
li r3,0
b L(_memset)
#else
mr r5,r4 mr r5,r4
li r4,0 li r4,0
b L(_memset) b L(_memset)
#endif END_GEN_TB (__bzero,TB_TOCLESS)
END_GEN_TB (BP_SYM (__bzero),TB_TOCLESS)
weak_alias (BP_SYM (__bzero), BP_SYM (bzero)) weak_alias (__bzero, bzero)

View File

@ -17,14 +17,12 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* See strlen.s for comments on how the end-of-string testing works. */ /* See strlen.s for comments on how the end-of-string testing works. */
/* int [r3] strncmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5]) */ /* int [r3] strncmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5]) */
EALIGN (BP_SYM(strncmp), 4, 0) EALIGN (strncmp, 4, 0)
CALL_MCOUNT 3 CALL_MCOUNT 3
#define rTMP r0 #define rTMP r0
@ -32,9 +30,6 @@ EALIGN (BP_SYM(strncmp), 4, 0)
#define rSTR1 r3 /* first string arg */ #define rSTR1 r3 /* first string arg */
#define rSTR2 r4 /* second string arg */ #define rSTR2 r4 /* second string arg */
#define rN r5 /* max string length */ #define rN r5 /* max string length */
/* Note: The Bounded pointer support in this code is broken. This code
was inherited from PPC32 and that support was never completed.
Current PPC gcc does not support -fbounds-check or -fbounded-pointers. */
#define rWORD1 r6 /* current word in s1 */ #define rWORD1 r6 /* current word in s1 */
#define rWORD2 r7 /* current word in s2 */ #define rWORD2 r7 /* current word in s2 */
#define rWORD3 r10 #define rWORD3 r10
@ -175,5 +170,5 @@ L(u4): sub rRTN, rWORD1, rWORD2
L(ux): L(ux):
li rRTN, 0 li rRTN, 0
blr blr
END (BP_SYM (strncmp)) END (strncmp)
libc_hidden_builtin_def (strncmp) libc_hidden_builtin_def (strncmp)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]); /* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]);
Returns 'dst'. Returns 'dst'.
@ -43,7 +41,7 @@
for the destination. */ for the destination. */
.machine "power6" .machine "power6"
EALIGN (BP_SYM (memcpy), 7, 0) EALIGN (memcpy, 7, 0)
CALL_MCOUNT 3 CALL_MCOUNT 3
cmpldi cr1,5,31 cmpldi cr1,5,31
@ -1165,5 +1163,5 @@ L(du_done):
ld 31,-8(1) ld 31,-8(1)
ld 3,-16(1) ld 3,-16(1)
blr blr
END_GEN_TB (BP_SYM (memcpy),TB_TOCLESS) END_GEN_TB (memcpy,TB_TOCLESS)
libc_hidden_builtin_def (memcpy) libc_hidden_builtin_def (memcpy)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5])); /* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5]));
Returns 's'. Returns 's'.
@ -28,34 +26,19 @@
to 0, to take advantage of the dcbz instruction. */ to 0, to take advantage of the dcbz instruction. */
.machine power6 .machine power6
EALIGN (BP_SYM (memset), 7, 0) EALIGN (memset, 7, 0)
CALL_MCOUNT 3 CALL_MCOUNT 3
#define rTMP r0 #define rTMP r0
#define rRTN r3 /* Initial value of 1st argument. */ #define rRTN r3 /* Initial value of 1st argument. */
#if __BOUNDED_POINTERS__ #define rMEMP0 r3 /* Original value of 1st arg. */
# define rMEMP0 r4 /* Original value of 1st arg. */ #define rCHR r4 /* Char to set in each byte. */
# define rCHR r5 /* Char to set in each byte. */ #define rLEN r5 /* Length of region to set. */
# define rLEN r6 /* Length of region to set. */ #define rMEMP r6 /* Address at which we are storing. */
# define rMEMP r10 /* Address at which we are storing. */
#else
# define rMEMP0 r3 /* Original value of 1st arg. */
# define rCHR r4 /* Char to set in each byte. */
# define rLEN r5 /* Length of region to set. */
# define rMEMP r6 /* Address at which we are storing. */
#endif
#define rALIGN r7 /* Number of bytes we are setting now (when aligning). */ #define rALIGN r7 /* Number of bytes we are setting now (when aligning). */
#define rMEMP2 r8 #define rMEMP2 r8
#define rMEMP3 r9 /* Alt mem pointer. */ #define rMEMP3 r9 /* Alt mem pointer. */
L(_memset): L(_memset):
#if __BOUNDED_POINTERS__
cmpldi cr1, rRTN, 0
CHECK_BOUNDS_BOTH_WIDE (rMEMP0, rTMP, rTMP2, rLEN)
beq cr1, L(b0)
STORE_RETURN_VALUE (rMEMP0)
STORE_RETURN_BOUNDS (rTMP, rTMP2)
L(b0):
#endif
/* Take care of case for size <= 4. */ /* Take care of case for size <= 4. */
cmpldi cr1, rLEN, 8 cmpldi cr1, rLEN, 8
andi. rALIGN, rMEMP0, 7 andi. rALIGN, rMEMP0, 7
@ -393,25 +376,16 @@ L(medium_27f):
L(medium_28t): L(medium_28t):
std rCHR, -8(rMEMP) std rCHR, -8(rMEMP)
blr blr
END_GEN_TB (BP_SYM (memset),TB_TOCLESS) END_GEN_TB (memset,TB_TOCLESS)
libc_hidden_builtin_def (memset) libc_hidden_builtin_def (memset)
/* Copied from bzero.S to prevent the linker from inserting a stub /* Copied from bzero.S to prevent the linker from inserting a stub
between bzero and memset. */ between bzero and memset. */
ENTRY (BP_SYM (__bzero)) ENTRY (__bzero)
CALL_MCOUNT 3 CALL_MCOUNT 3
#if __BOUNDED_POINTERS__
mr r6,r4
li r5,0
mr r4,r3
/* Tell memset that we don't want a return value. */
li r3,0
b L(_memset)
#else
mr r5,r4 mr r5,r4
li r4,0 li r4,0
b L(_memset) b L(_memset)
#endif END_GEN_TB (__bzero,TB_TOCLESS)
END_GEN_TB (BP_SYM (__bzero),TB_TOCLESS)
weak_alias (BP_SYM (__bzero), BP_SYM (bzero)) weak_alias (__bzero, bzero)

View File

@ -18,12 +18,10 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* int [r3] memchr (char *s [r3], int byte [r4], int size [r5]) */ /* int [r3] memchr (char *s [r3], int byte [r4], int size [r5]) */
.machine power7 .machine power7
ENTRY (BP_SYM (__memchr)) ENTRY (__memchr)
CALL_MCOUNT 2 CALL_MCOUNT 2
dcbt 0,r3 dcbt 0,r3
clrrdi r8,r3,3 clrrdi r8,r3,3
@ -202,6 +200,6 @@ L(loop_small): /* loop_small has been unrolled. */
blr blr
END (BP_SYM (__memchr)) END (__memchr)
weak_alias (BP_SYM (__memchr), BP_SYM(memchr)) weak_alias (__memchr, memchr)
libc_hidden_builtin_def (memchr) libc_hidden_builtin_def (memchr)

View File

@ -17,15 +17,13 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* int [r3] memcmp (const char *s1 [r3], /* int [r3] memcmp (const char *s1 [r3],
const char *s2 [r4], const char *s2 [r4],
size_t size [r5]) */ size_t size [r5]) */
.machine power7 .machine power7
EALIGN (BP_SYM(memcmp),4,0) EALIGN (memcmp,4,0)
CALL_MCOUNT 3 CALL_MCOUNT 3
#define rTMP r0 #define rTMP r0
@ -33,9 +31,6 @@ EALIGN (BP_SYM(memcmp),4,0)
#define rSTR1 r3 /* first string arg */ #define rSTR1 r3 /* first string arg */
#define rSTR2 r4 /* second string arg */ #define rSTR2 r4 /* second string arg */
#define rN r5 /* max string length */ #define rN r5 /* max string length */
/* Note: The Bounded pointer support in this code is broken. This code
was inherited from PPC32 and that support was never completed.
Current PPC gcc does not support -fbounds-check or -fbounded-pointers. */
#define rWORD1 r6 /* current word in s1 */ #define rWORD1 r6 /* current word in s1 */
#define rWORD2 r7 /* current word in s2 */ #define rWORD2 r7 /* current word in s2 */
#define rWORD3 r8 /* next word in s1 */ #define rWORD3 r8 /* next word in s1 */
@ -978,6 +973,6 @@ L(duzeroLength):
li rRTN,0 li rRTN,0
blr blr
END (BP_SYM (memcmp)) END (memcmp)
libc_hidden_builtin_def (memcmp) libc_hidden_builtin_def (memcmp)
weak_alias (memcmp,bcmp) weak_alias (memcmp,bcmp)

View File

@ -18,15 +18,13 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]); /* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]);
Returns 'dst'. */ Returns 'dst'. */
.machine power7 .machine power7
EALIGN (BP_SYM (memcpy), 5, 0) EALIGN (memcpy, 5, 0)
CALL_MCOUNT 3 CALL_MCOUNT 3
cmpldi cr1,5,31 cmpldi cr1,5,31
@ -502,5 +500,5 @@ L(end_unaligned_loop):
ld 3,-16(1) ld 3,-16(1)
blr blr
END_GEN_TB (BP_SYM (memcpy),TB_TOCLESS) END_GEN_TB (memcpy,TB_TOCLESS)
libc_hidden_builtin_def (memcpy) libc_hidden_builtin_def (memcpy)

View File

@ -18,15 +18,13 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* __ptr_t [r3] __mempcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]); /* __ptr_t [r3] __mempcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]);
Returns 'dst' + 'len'. */ Returns 'dst' + 'len'. */
.machine power7 .machine power7
EALIGN (BP_SYM (__mempcpy), 5, 0) EALIGN (__mempcpy, 5, 0)
CALL_MCOUNT 3 CALL_MCOUNT 3
cmpldi cr1,5,31 cmpldi cr1,5,31
@ -451,7 +449,7 @@ L(end_unaligned_loop):
add 3,3,5 add 3,3,5
blr blr
END_GEN_TB (BP_SYM (__mempcpy),TB_TOCLESS) END_GEN_TB (__mempcpy,TB_TOCLESS)
libc_hidden_def (BP_SYM (__mempcpy)) libc_hidden_def (__mempcpy)
weak_alias (BP_SYM (__mempcpy), BP_SYM (mempcpy)) weak_alias (__mempcpy, mempcpy)
libc_hidden_builtin_def (mempcpy) libc_hidden_builtin_def (mempcpy)

View File

@ -18,12 +18,10 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* int [r3] memrchr (char *s [r3], int byte [r4], int size [r5]) */ /* int [r3] memrchr (char *s [r3], int byte [r4], int size [r5]) */
.machine power7 .machine power7
ENTRY (BP_SYM (__memrchr)) ENTRY (__memrchr)
CALL_MCOUNT CALL_MCOUNT
dcbt 0,r3 dcbt 0,r3
mr r7,r3 mr r7,r3
@ -174,6 +172,6 @@ L(loop_small):
ble L(null) ble L(null)
b L(loop_small) b L(loop_small)
END (BP_SYM (__memrchr)) END (__memrchr)
weak_alias (BP_SYM (__memrchr), BP_SYM(memrchr)) weak_alias (__memrchr, memrchr)
libc_hidden_builtin_def (memrchr) libc_hidden_builtin_def (memrchr)

View File

@ -18,14 +18,12 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5])); /* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5]));
Returns 's'. */ Returns 's'. */
.machine power7 .machine power7
EALIGN (BP_SYM (memset), 5, 0) EALIGN (memset, 5, 0)
CALL_MCOUNT 3 CALL_MCOUNT 3
L(_memset): L(_memset):
@ -382,16 +380,16 @@ L(small):
stw 4,4(10) stw 4,4(10)
blr blr
END_GEN_TB (BP_SYM (memset),TB_TOCLESS) END_GEN_TB (memset,TB_TOCLESS)
libc_hidden_builtin_def (memset) libc_hidden_builtin_def (memset)
/* Copied from bzero.S to prevent the linker from inserting a stub /* Copied from bzero.S to prevent the linker from inserting a stub
between bzero and memset. */ between bzero and memset. */
ENTRY (BP_SYM (__bzero)) ENTRY (__bzero)
CALL_MCOUNT 3 CALL_MCOUNT 3
mr r5,r4 mr r5,r4
li r4,0 li r4,0
b L(_memset) b L(_memset)
END_GEN_TB (BP_SYM (__bzero),TB_TOCLESS) END_GEN_TB (__bzero,TB_TOCLESS)
weak_alias (BP_SYM (__bzero), BP_SYM (bzero)) weak_alias (__bzero, bzero)

View File

@ -18,12 +18,10 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* int [r3] rawmemchr (void *s [r3], int c [r4]) */ /* int [r3] rawmemchr (void *s [r3], int c [r4]) */
.machine power7 .machine power7
ENTRY (BP_SYM(__rawmemchr)) ENTRY (__rawmemchr)
CALL_MCOUNT 2 CALL_MCOUNT 2
dcbt 0,r3 dcbt 0,r3
clrrdi r8,r3,3 /* Align the address to doubleword boundary. */ clrrdi r8,r3,3 /* Align the address to doubleword boundary. */
@ -97,6 +95,6 @@ L(done):
srdi r0,r0,3 /* Convert leading zeroes to bytes. */ srdi r0,r0,3 /* Convert leading zeroes to bytes. */
add r3,r8,r0 /* Return address of the matching char. */ add r3,r8,r0 /* Return address of the matching char. */
blr blr
END (BP_SYM (__rawmemchr)) END (__rawmemchr)
weak_alias (__rawmemchr,rawmemchr) weak_alias (__rawmemchr,rawmemchr)
libc_hidden_builtin_def (__rawmemchr) libc_hidden_builtin_def (__rawmemchr)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
#include <locale-defines.h> #include <locale-defines.h>
/* int [r3] strcasecmp (const char *s1 [r3], const char *s2 [r4] ) /* int [r3] strcasecmp (const char *s1 [r3], const char *s2 [r4] )
@ -33,7 +31,7 @@
# define STRCMP strcasecmp # define STRCMP strcasecmp
#endif #endif
ENTRY (BP_SYM (__STRCMP)) ENTRY (__STRCMP)
CALL_MCOUNT 2 CALL_MCOUNT 2
#define rRTN r3 /* Return value */ #define rRTN r3 /* Return value */
@ -118,7 +116,7 @@ L(done):
subf r0, rLWR2, rLWR1 subf r0, rLWR2, rLWR1
extsw rRTN, r0 extsw rRTN, r0
blr blr
END (BP_SYM (__STRCMP)) END (__STRCMP)
weak_alias (BP_SYM (__STRCMP), BP_SYM (STRCMP)) weak_alias (__STRCMP, STRCMP)
libc_hidden_builtin_def (__STRCMP) libc_hidden_builtin_def (__STRCMP)

View File

@ -18,12 +18,10 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* int [r3] strchr (char *s [r3], int c [r4]) */ /* int [r3] strchr (char *s [r3], int c [r4]) */
.machine power7 .machine power7
ENTRY (BP_SYM(strchr)) ENTRY (strchr)
CALL_MCOUNT 2 CALL_MCOUNT 2
dcbt 0,r3 dcbt 0,r3
clrrdi r8,r3,3 /* Align the address to doubleword boundary. */ clrrdi r8,r3,3 /* Align the address to doubleword boundary. */
@ -198,6 +196,6 @@ L(done_null):
srdi r0,r0,3 /* Convert leading zeros to bytes. */ srdi r0,r0,3 /* Convert leading zeros to bytes. */
add r3,r8,r0 /* Return address of the matching null byte. */ add r3,r8,r0 /* Return address of the matching null byte. */
blr blr
END (BP_SYM (strchr)) END (strchr)
weak_alias (BP_SYM (strchr), BP_SYM (index)) weak_alias (strchr, index)
libc_hidden_builtin_def (strchr) libc_hidden_builtin_def (strchr)

View File

@ -18,12 +18,10 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* int [r3] strchrnul (char *s [r3], int c [r4]) */ /* int [r3] strchrnul (char *s [r3], int c [r4]) */
.machine power7 .machine power7
ENTRY (BP_SYM(__strchrnul)) ENTRY (__strchrnul)
CALL_MCOUNT 2 CALL_MCOUNT 2
dcbt 0,r3 dcbt 0,r3
clrrdi r8,r3,3 /* Align the address to doubleword boundary. */ clrrdi r8,r3,3 /* Align the address to doubleword boundary. */
@ -112,6 +110,6 @@ L(done):
srdi r0,r0,3 /* Convert leading zeros to bytes. */ srdi r0,r0,3 /* Convert leading zeros to bytes. */
add r3,r8,r0 /* Return address of matching c/null byte. */ add r3,r8,r0 /* Return address of matching c/null byte. */
blr blr
END (BP_SYM (__strchrnul)) END (__strchrnul)
weak_alias (__strchrnul,strchrnul) weak_alias (__strchrnul,strchrnul)
libc_hidden_builtin_def (__strchrnul) libc_hidden_builtin_def (__strchrnul)

View File

@ -18,12 +18,10 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* int [r3] strlen (char *s [r3]) */ /* int [r3] strlen (char *s [r3]) */
.machine power7 .machine power7
ENTRY (BP_SYM (strlen)) ENTRY (strlen)
CALL_MCOUNT 1 CALL_MCOUNT 1
dcbt 0,r3 dcbt 0,r3
clrrdi r4,r3,3 /* Align the address to doubleword boundary. */ clrrdi r4,r3,3 /* Align the address to doubleword boundary. */
@ -94,5 +92,5 @@ L(done):
srdi r0,r0,3 /* Convert leading zeroes to bytes. */ srdi r0,r0,3 /* Convert leading zeroes to bytes. */
add r3,r5,r0 /* Compute final length. */ add r3,r5,r0 /* Compute final length. */
blr blr
END (BP_SYM (strlen)) END (strlen)
libc_hidden_builtin_def (strlen) libc_hidden_builtin_def (strlen)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* See strlen.s for comments on how the end-of-string testing works. */ /* See strlen.s for comments on how the end-of-string testing works. */
@ -26,7 +24,7 @@
const char *s2 [r4], const char *s2 [r4],
size_t size [r5]) */ size_t size [r5]) */
EALIGN (BP_SYM(strncmp),5,0) EALIGN (strncmp,5,0)
CALL_MCOUNT 3 CALL_MCOUNT 3
#define rTMP r0 #define rTMP r0
@ -34,9 +32,6 @@ EALIGN (BP_SYM(strncmp),5,0)
#define rSTR1 r3 /* first string arg */ #define rSTR1 r3 /* first string arg */
#define rSTR2 r4 /* second string arg */ #define rSTR2 r4 /* second string arg */
#define rN r5 /* max string length */ #define rN r5 /* max string length */
/* Note: The Bounded pointer support in this code is broken. This code
was inherited from PPC32 and that support was never completed.
Current PPC gcc does not support -fbounds-check or -fbounded-pointers. */
#define rWORD1 r6 /* current word in s1 */ #define rWORD1 r6 /* current word in s1 */
#define rWORD2 r7 /* current word in s2 */ #define rWORD2 r7 /* current word in s2 */
#define rWORD3 r10 #define rWORD3 r10
@ -179,5 +174,5 @@ L(u4): sub rRTN,rWORD1,rWORD2
L(ux): L(ux):
li rRTN,0 li rRTN,0
blr blr
END (BP_SYM (strncmp)) END (strncmp)
libc_hidden_builtin_def (strncmp) libc_hidden_builtin_def (strncmp)

View File

@ -18,12 +18,10 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* int [r3] strnlen (char *s [r3], int size [r4]) */ /* int [r3] strnlen (char *s [r3], int size [r4]) */
.machine power7 .machine power7
ENTRY (BP_SYM (__strnlen)) ENTRY (__strnlen)
CALL_MCOUNT 2 CALL_MCOUNT 2
dcbt 0,r3 dcbt 0,r3
clrrdi r8,r3,3 clrrdi r8,r3,3
@ -167,6 +165,6 @@ L(loop_small):
cmpld r9,r7 cmpld r9,r7
bge L(end_max) bge L(end_max)
b L(loop_small) b L(loop_small)
END (BP_SYM (__strnlen)) END (__strnlen)
weak_alias (BP_SYM (__strnlen), BP_SYM(strnlen)) weak_alias (__strnlen, strnlen)
libc_hidden_builtin_def (strnlen) libc_hidden_builtin_def (strnlen)

View File

@ -23,8 +23,6 @@
#else #else
#include <jmpbuf-offsets.h> #include <jmpbuf-offsets.h>
#endif #endif
#include <bp-sym.h>
#include <bp-asm.h>
#ifndef __NO_VMX__ #ifndef __NO_VMX__
.section ".toc","aw" .section ".toc","aw"
@ -55,24 +53,23 @@ END (setjmp)
that saves r2 since the call won't go via a plt call stub. See that saves r2 since the call won't go via a plt call stub. See
bugz #269. __GI__setjmp is used in csu/libc-start.c when bugz #269. __GI__setjmp is used in csu/libc-start.c when
HAVE_CLEANUP_JMP_BUF is defined. */ HAVE_CLEANUP_JMP_BUF is defined. */
ENTRY (BP_SYM (__GI__setjmp)) ENTRY (__GI__setjmp)
std r2,40(r1) /* Save the callers TOC in the save area. */ std r2,40(r1) /* Save the callers TOC in the save area. */
cfi_endproc cfi_endproc
END_2 (BP_SYM (__GI__setjmp)) END_2 (__GI__setjmp)
/* Fall thru. */ /* Fall thru. */
#endif #endif
ENTRY (BP_SYM (_setjmp)) ENTRY (_setjmp)
CALL_MCOUNT 1 CALL_MCOUNT 1
li r4,0 /* Set second argument to 0. */ li r4,0 /* Set second argument to 0. */
b JUMPTARGET (GLUE(__sigsetjmp,_ent)) b JUMPTARGET (GLUE(__sigsetjmp,_ent))
END (BP_SYM (_setjmp)) END (_setjmp)
libc_hidden_def (_setjmp) libc_hidden_def (_setjmp)
ENTRY (BP_SYM (__sigsetjmp)) ENTRY (__sigsetjmp)
CALL_MCOUNT 2 CALL_MCOUNT 2
JUMPTARGET(GLUE(__sigsetjmp,_ent)): JUMPTARGET(GLUE(__sigsetjmp,_ent)):
CHECK_BOUNDS_BOTH_WIDE_LIT (r3, r8, r9, JB_SIZE)
#ifdef PTR_MANGLE #ifdef PTR_MANGLE
mr r5, r1 mr r5, r1
PTR_MANGLE (r5, r6) PTR_MANGLE (r5, r6)
@ -219,18 +216,18 @@ L(no_vmx):
li r3,0 li r3,0
blr blr
#elif defined SHARED #elif defined SHARED
b JUMPTARGET (BP_SYM (__sigjmp_save)) b JUMPTARGET (__sigjmp_save)
#else #else
mflr r0 mflr r0
std r0,16(r1) std r0,16(r1)
stdu r1,-112(r1) stdu r1,-112(r1)
cfi_adjust_cfa_offset(112) cfi_adjust_cfa_offset(112)
cfi_offset(lr,16) cfi_offset(lr,16)
bl JUMPTARGET (BP_SYM (__sigjmp_save)) bl JUMPTARGET (__sigjmp_save)
nop nop
ld r0,112+16(r1) ld r0,112+16(r1)
addi r1,r1,112 addi r1,r1,112
mtlr r0 mtlr r0
blr blr
#endif #endif
END (BP_SYM (__sigsetjmp)) END (__sigsetjmp)

View File

@ -34,7 +34,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include "bp-sym.h"
/* These are the various addresses we require. */ /* These are the various addresses we require. */
#ifdef PIC #ifdef PIC
@ -46,7 +45,7 @@
L(start_addresses): L(start_addresses):
.quad 0 /* was _SDA_BASE_ but not in 64-bit ABI*/ .quad 0 /* was _SDA_BASE_ but not in 64-bit ABI*/
/* function descriptors so don't need JUMPTARGET */ /* function descriptors so don't need JUMPTARGET */
.quad BP_SYM(main) .quad main
.quad __libc_csu_init .quad __libc_csu_init
.quad __libc_csu_fini .quad __libc_csu_fini
@ -71,7 +70,7 @@ ENTRY(_start)
ld r8,.L01(r2) ld r8,.L01(r2)
/* and continue in libc-start, in glibc. */ /* and continue in libc-start, in glibc. */
b JUMPTARGET(BP_SYM(__libc_start_main)) b JUMPTARGET(__libc_start_main)
/* The linker needs this nop to recognize that it's OK to call via a /* The linker needs this nop to recognize that it's OK to call via a
TOC adjusting stub. */ TOC adjusting stub. */
nop nop

View File

@ -17,37 +17,24 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* See strlen.s for comments on how the end-of-string testing works. */ /* See strlen.s for comments on how the end-of-string testing works. */
/* char * [r3] stpcpy (char *dest [r3], const char *src [r4]) */ /* char * [r3] stpcpy (char *dest [r3], const char *src [r4]) */
EALIGN (BP_SYM (__stpcpy), 4, 0) EALIGN (__stpcpy, 4, 0)
CALL_MCOUNT 2 CALL_MCOUNT 2
#define rTMP r0 #define rTMP r0
#define rRTN r3 #define rRTN r3
#if __BOUNDED_POINTERS__ #define rDEST r3 /* pointer to previous word in dest */
# define rDEST r4 /* pointer to previous word in dest */ #define rSRC r4 /* pointer to previous word in src */
# define rSRC r5 /* pointer to previous word in src */
# define rLOW r11
# define rHIGH r12
#else
# define rDEST r3 /* pointer to previous word in dest */
# define rSRC r4 /* pointer to previous word in src */
#endif
#define rWORD r6 /* current word from src */ #define rWORD r6 /* current word from src */
#define rFEFE r7 /* 0xfefefeff */ #define rFEFE r7 /* 0xfefefeff */
#define r7F7F r8 /* 0x7f7f7f7f */ #define r7F7F r8 /* 0x7f7f7f7f */
#define rNEG r9 /* ~(word in src | 0x7f7f7f7f) */ #define rNEG r9 /* ~(word in src | 0x7f7f7f7f) */
#define rALT r10 /* alternate word from src */ #define rALT r10 /* alternate word from src */
CHECK_BOUNDS_LOW (rSRC, rLOW, rHIGH)
CHECK_BOUNDS_LOW (rDEST, rLOW, rHIGH)
STORE_RETURN_BOUNDS (rLOW, rHIGH)
or rTMP, rSRC, rDEST or rTMP, rSRC, rDEST
clrldi. rTMP, rTMP, 62 clrldi. rTMP, rTMP, 62
addi rDEST, rDEST, -4 addi rDEST, rDEST, -4
@ -85,8 +72,6 @@ L(g1): rlwinm. rTMP, rALT, 8, 24, 31
stbu rTMP, 1(rDEST) stbu rTMP, 1(rDEST)
beqlr- beqlr-
stbu rALT, 1(rDEST) stbu rALT, 1(rDEST)
CHECK_BOUNDS_HIGH (rDEST, rHIGH, twlgt)
STORE_RETURN_VALUE (rDEST)
blr blr
/* Oh well. In this case, we just do a byte-by-byte copy. */ /* Oh well. In this case, we just do a byte-by-byte copy. */
@ -108,15 +93,11 @@ L(u0): lbzu rALT, 1(rSRC)
cmpwi rWORD, 0 cmpwi rWORD, 0
bne+ L(u0) bne+ L(u0)
L(u2): stbu rWORD, 1(rDEST) L(u2): stbu rWORD, 1(rDEST)
CHECK_BOUNDS_HIGH (rDEST, rHIGH, twlgt)
STORE_RETURN_VALUE (rDEST)
blr blr
L(u1): stbu rALT, 1(rDEST) L(u1): stbu rALT, 1(rDEST)
CHECK_BOUNDS_HIGH (rDEST, rHIGH, twlgt)
STORE_RETURN_VALUE (rDEST)
blr blr
END (BP_SYM (__stpcpy)) END (__stpcpy)
weak_alias (BP_SYM (__stpcpy), BP_SYM (stpcpy)) weak_alias (__stpcpy, stpcpy)
libc_hidden_def (__stpcpy) libc_hidden_def (__stpcpy)
libc_hidden_builtin_def (stpcpy) libc_hidden_builtin_def (stpcpy)

View File

@ -17,32 +17,19 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* See strlen.s for comments on how this works. */ /* See strlen.s for comments on how this works. */
/* char * [r3] strchr (const char *s [r3] , int c [r4] ) */ /* char * [r3] strchr (const char *s [r3] , int c [r4] ) */
ENTRY (BP_SYM (strchr)) ENTRY (strchr)
CALL_MCOUNT 2 CALL_MCOUNT 2
#define rTMP1 r0 #define rTMP1 r0
#define rRTN r3 /* outgoing result */ #define rRTN r3 /* outgoing result */
/* Note: The Bounded pointer support in this code is broken. This code #define rSTR r8 /* current word pointer */
was inherited from PPC32 and that support was never completed. #define rCHR r4 /* byte we're looking for, spread over the whole word */
Currently PPC gcc does not support -fbounds-check or -fbounded-pointers. #define rWORD r5 /* the current word */
These artifacts are left in the code as a reminder in case we need
bounded pointer support in the future. */
#if __BOUNDED_POINTERS__
# define rSTR r4
# define rCHR r5 /* byte we're looking for, spread over the whole word */
# define rWORD r8 /* the current word */
#else
# define rSTR r8 /* current word pointer */
# define rCHR r4 /* byte we're looking for, spread over the whole word */
# define rWORD r5 /* the current word */
#endif
#define rCLZB rCHR /* leading zero byte count */ #define rCLZB rCHR /* leading zero byte count */
#define rFEFE r6 /* constant 0xfefefefefefefeff (-0x0101010101010101) */ #define rFEFE r6 /* constant 0xfefefefefefefeff (-0x0101010101010101) */
#define r7F7F r7 /* constant 0x7f7f7f7f7f7f7f7f */ #define r7F7F r7 /* constant 0x7f7f7f7f7f7f7f7f */
@ -51,9 +38,6 @@ ENTRY (BP_SYM (strchr))
#define rMASK r11 /* mask with the bits to ignore set to 0 */ #define rMASK r11 /* mask with the bits to ignore set to 0 */
#define rTMP3 r12 #define rTMP3 r12
CHECK_BOUNDS_LOW (rSTR, rTMP1, rTMP2)
STORE_RETURN_BOUNDS (rTMP1, rTMP2)
dcbt 0,rRTN dcbt 0,rRTN
rlwimi rCHR, rCHR, 8, 16, 23 rlwimi rCHR, rCHR, 8, 16, 23
li rMASK, -1 li rMASK, -1
@ -101,7 +85,6 @@ L(loopentry):
L(missed): L(missed):
and. rTMP1, rTMP1, rTMP2 and. rTMP1, rTMP1, rTMP2
li rRTN, 0 li rRTN, 0
STORE_RETURN_VALUE (rSTR)
beqlr beqlr
/* It did happen. Decide which one was first... /* It did happen. Decide which one was first...
I'm not sure if this is actually faster than a sequence of I'm not sure if this is actually faster than a sequence of
@ -119,8 +102,6 @@ L(missed):
cntlzd rCLZB, rTMP2 cntlzd rCLZB, rTMP2
srdi rCLZB, rCLZB, 3 srdi rCLZB, rCLZB, 3
add rRTN, rSTR, rCLZB add rRTN, rSTR, rCLZB
CHECK_BOUNDS_HIGH_RTN (rSTR, rTMP2, tdlge)
STORE_RETURN_VALUE (rSTR)
blr blr
L(foundit): L(foundit):
@ -132,10 +113,8 @@ L(foundit):
subi rSTR, rSTR, 8 subi rSTR, rSTR, 8
srdi rCLZB, rCLZB, 3 srdi rCLZB, rCLZB, 3
add rRTN, rSTR, rCLZB add rRTN, rSTR, rCLZB
CHECK_BOUNDS_HIGH_RTN (rSTR, rTMP2, tdlge)
STORE_RETURN_VALUE (rSTR)
blr blr
END (BP_SYM (strchr)) END (strchr)
weak_alias (BP_SYM (strchr), BP_SYM (index)) weak_alias (strchr, index)
libc_hidden_builtin_def (strchr) libc_hidden_builtin_def (strchr)

View File

@ -17,29 +17,18 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* See strlen.s for comments on how the end-of-string testing works. */ /* See strlen.s for comments on how the end-of-string testing works. */
/* int [r3] strcmp (const char *s1 [r3], const char *s2 [r4]) */ /* int [r3] strcmp (const char *s1 [r3], const char *s2 [r4]) */
EALIGN (BP_SYM(strcmp), 4, 0) EALIGN (strcmp, 4, 0)
CALL_MCOUNT 2 CALL_MCOUNT 2
#define rTMP r0 #define rTMP r0
#define rRTN r3 #define rRTN r3
#define rSTR1 r3 /* first string arg */ #define rSTR1 r3 /* first string arg */
#define rSTR2 r4 /* second string arg */ #define rSTR2 r4 /* second string arg */
/* Note: The Bounded pointer support in this code is broken. This code
was inherited from PPC32 and that support was never completed.
Current PPC gcc does not support -fbounds-check or -fbounded-pointers.
These artifacts are left in the code as a reminder in case we need
bounded pointer support in the future. */
#if __BOUNDED_POINTERS__
# define rHIGH1 r11
# define rHIGH2 r12
#endif
#define rWORD1 r5 /* current word in s1 */ #define rWORD1 r5 /* current word in s1 */
#define rWORD2 r6 /* current word in s2 */ #define rWORD2 r6 /* current word in s2 */
#define rFEFE r7 /* constant 0xfefefefefefefeff (-0x0101010101010101) */ #define rFEFE r7 /* constant 0xfefefefefefefeff (-0x0101010101010101) */
@ -47,9 +36,6 @@ EALIGN (BP_SYM(strcmp), 4, 0)
#define rNEG r9 /* ~(word in s1 | 0x7f7f7f7f7f7f7f7f) */ #define rNEG r9 /* ~(word in s1 | 0x7f7f7f7f7f7f7f7f) */
#define rBITDIF r10 /* bits that differ in s1 & s2 words */ #define rBITDIF r10 /* bits that differ in s1 & s2 words */
CHECK_BOUNDS_LOW (rSTR1, rTMP, rHIGH1)
CHECK_BOUNDS_LOW (rSTR2, rTMP, rHIGH2)
dcbt 0,rSTR1 dcbt 0,rSTR1
or rTMP, rSTR2, rSTR1 or rTMP, rSTR2, rSTR1
dcbt 0,rSTR2 dcbt 0,rSTR2
@ -98,7 +84,6 @@ L(endstring):
blr blr
L(equal): L(equal):
li rRTN, 0 li rRTN, 0
/* GKM FIXME: check high bounds. */
blr blr
L(different): L(different):
@ -113,7 +98,6 @@ L(highbit):
srdi rWORD2, rWORD2, 56 srdi rWORD2, rWORD2, 56
srdi rWORD1, rWORD1, 56 srdi rWORD1, rWORD1, 56
sub rRTN, rWORD1, rWORD2 sub rRTN, rWORD1, rWORD2
/* GKM FIXME: check high bounds. */
blr blr
@ -137,11 +121,9 @@ L(u1): cmpwi cr1, rWORD1, 0
cmpd rWORD1, rWORD2 cmpd rWORD1, rWORD2
bne+ cr1, L(u0) bne+ cr1, L(u0)
L(u3): sub rRTN, rWORD1, rWORD2 L(u3): sub rRTN, rWORD1, rWORD2
/* GKM FIXME: check high bounds. */
blr blr
L(u4): lbz rWORD1, -1(rSTR1) L(u4): lbz rWORD1, -1(rSTR1)
sub rRTN, rWORD1, rWORD2 sub rRTN, rWORD1, rWORD2
/* GKM FIXME: check high bounds. */
blr blr
END (BP_SYM (strcmp)) END (strcmp)
libc_hidden_builtin_def (strcmp) libc_hidden_builtin_def (strcmp)

View File

@ -17,50 +17,28 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* See strlen.s for comments on how the end-of-string testing works. */ /* See strlen.s for comments on how the end-of-string testing works. */
/* char * [r3] strcpy (char *dest [r3], const char *src [r4]) */ /* char * [r3] strcpy (char *dest [r3], const char *src [r4]) */
EALIGN (BP_SYM (strcpy), 4, 0) EALIGN (strcpy, 4, 0)
CALL_MCOUNT 2 CALL_MCOUNT 2
#define rTMP r0 #define rTMP r0
#define rRTN r3 /* incoming DEST arg preserved as result */ #define rRTN r3 /* incoming DEST arg preserved as result */
/* Note. The Bounded pointer support in this code is broken. This code #define rSRC r4 /* pointer to previous word in src */
was inherited from PPC32 and that support was never completed. #define rDEST r5 /* pointer to previous word in dest */
Current PPC gcc does not support -fbounds-check or -fbounded-pointers.
These artifacts are left in the code as a reminder in case we need
bounded pointer support in the future. */
#if __BOUNDED_POINTERS__
# define rDEST r4 /* pointer to previous word in dest */
# define rSRC r5 /* pointer to previous word in src */
# define rLOW r11
# define rHIGH r12
#else
# define rSRC r4 /* pointer to previous word in src */
# define rDEST r5 /* pointer to previous word in dest */
#endif
#define rWORD r6 /* current word from src */ #define rWORD r6 /* current word from src */
#define rFEFE r7 /* constant 0xfefefefefefefeff (-0x0101010101010101) */ #define rFEFE r7 /* constant 0xfefefefefefefeff (-0x0101010101010101) */
#define r7F7F r8 /* constant 0x7f7f7f7f7f7f7f7f */ #define r7F7F r8 /* constant 0x7f7f7f7f7f7f7f7f */
#define rNEG r9 /* ~(word in s1 | 0x7f7f7f7f7f7f7f7f) */ #define rNEG r9 /* ~(word in s1 | 0x7f7f7f7f7f7f7f7f) */
#define rALT r10 /* alternate word from src */ #define rALT r10 /* alternate word from src */
CHECK_BOUNDS_LOW (rSRC, rLOW, rHIGH)
CHECK_BOUNDS_LOW (rDEST, rLOW, rHIGH)
STORE_RETURN_BOUNDS (rLOW, rHIGH)
dcbt 0,rSRC dcbt 0,rSRC
or rTMP, rSRC, rRTN or rTMP, rSRC, rRTN
clrldi. rTMP, rTMP, 61 clrldi. rTMP, rTMP, 61
#if __BOUNDED_POINTERS__
addi rDEST, rDEST, -8
#else
addi rDEST, rRTN, -8 addi rDEST, rRTN, -8
#endif
dcbtst 0,rRTN dcbtst 0,rRTN
bne L(unaligned) bne L(unaligned)
@ -112,7 +90,6 @@ L(g1):
stb rTMP, 14(rDEST) stb rTMP, 14(rDEST)
beqlr- beqlr-
stb rALT, 15(rDEST) stb rALT, 15(rDEST)
/* GKM FIXME: check high bound. */
blr blr
/* Oh well. In this case, we just do a byte-by-byte copy. */ /* Oh well. In this case, we just do a byte-by-byte copy. */
@ -134,11 +111,9 @@ L(u0): lbzu rALT, 1(rSRC)
cmpwi rWORD, 0 cmpwi rWORD, 0
bne+ L(u0) bne+ L(u0)
L(u2): stb rWORD, 1(rDEST) L(u2): stb rWORD, 1(rDEST)
/* GKM FIXME: check high bound. */
blr blr
L(u1): stb rALT, 1(rDEST) L(u1): stb rALT, 1(rDEST)
/* GKM FIXME: check high bound. */
blr blr
END (BP_SYM (strcpy)) END (strcpy)
libc_hidden_builtin_def (strcpy) libc_hidden_builtin_def (strcpy)

View File

@ -17,8 +17,6 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* The algorithm here uses the following techniques: /* The algorithm here uses the following techniques:
@ -77,7 +75,7 @@
/* int [r3] strlen (char *s [r3]) */ /* int [r3] strlen (char *s [r3]) */
ENTRY (BP_SYM (strlen)) ENTRY (strlen)
CALL_MCOUNT 1 CALL_MCOUNT 1
#define rTMP1 r0 #define rTMP1 r0
@ -94,13 +92,6 @@ ENTRY (BP_SYM (strlen))
#define rTMP3 r11 #define rTMP3 r11
#define rTMP4 r12 #define rTMP4 r12
/* Note: The Bounded pointer support in this code is broken. This code
was inherited from PPC32 and that support was never completed.
Current PPC gcc does not support -fbounds-check or -fbounded-pointers.
These artifacts are left in the code as a reminder in case we need
bounded pointer support in the future. */
CHECK_BOUNDS_LOW (rRTN, rTMP1, rTMP2)
dcbt 0,rRTN dcbt 0,rRTN
clrrdi rSTR, rRTN, 3 clrrdi rSTR, rRTN, 3
lis r7F7F, 0x7f7f lis r7F7F, 0x7f7f
@ -168,7 +159,6 @@ L(done0):
subf rTMP1, rRTN, rSTR subf rTMP1, rRTN, rSTR
srdi rTMP3, rTMP3, 3 srdi rTMP3, rTMP3, 3
add rRTN, rTMP1, rTMP3 add rRTN, rTMP1, rTMP3
/* GKM FIXME: check high bound. */
blr blr
END (BP_SYM (strlen)) END (strlen)
libc_hidden_builtin_def (strlen) libc_hidden_builtin_def (strlen)

View File

@ -17,14 +17,12 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include <sysdep.h> #include <sysdep.h>
#include <bp-sym.h>
#include <bp-asm.h>
/* See strlen.s for comments on how the end-of-string testing works. */ /* See strlen.s for comments on how the end-of-string testing works. */
/* int [r3] strncmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5]) */ /* int [r3] strncmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5]) */
EALIGN (BP_SYM(strncmp), 4, 0) EALIGN (strncmp, 4, 0)
CALL_MCOUNT 3 CALL_MCOUNT 3
#define rTMP r0 #define rTMP r0
@ -32,9 +30,6 @@ EALIGN (BP_SYM(strncmp), 4, 0)
#define rSTR1 r3 /* first string arg */ #define rSTR1 r3 /* first string arg */
#define rSTR2 r4 /* second string arg */ #define rSTR2 r4 /* second string arg */
#define rN r5 /* max string length */ #define rN r5 /* max string length */
/* Note: The Bounded pointer support in this code is broken. This code
was inherited from PPC32 and that support was never completed.
Current PPC gcc does not support -fbounds-check or -fbounded-pointers. */
#define rWORD1 r6 /* current word in s1 */ #define rWORD1 r6 /* current word in s1 */
#define rWORD2 r7 /* current word in s2 */ #define rWORD2 r7 /* current word in s2 */
#define rFEFE r8 /* constant 0xfefefefefefefeff (-0x0101010101010101) */ #define rFEFE r8 /* constant 0xfefefefefefefeff (-0x0101010101010101) */
@ -160,5 +155,5 @@ L(u1):
L(u2): lbzu rWORD1, -1(rSTR1) L(u2): lbzu rWORD1, -1(rSTR1)
L(u3): sub rRTN, rWORD1, rWORD2 L(u3): sub rRTN, rWORD1, rWORD2
blr blr
END (BP_SYM (strncmp)) END (strncmp)
libc_hidden_builtin_def (strncmp) libc_hidden_builtin_def (strncmp)

View File

@ -19,17 +19,14 @@
#include <sysdep.h> #include <sysdep.h>
#define _ERRNO_H 1 #define _ERRNO_H 1
#include <bits/errno.h> #include <bits/errno.h>
#include <bp-sym.h>
#include <bp-asm.h>
.comm __curbrk,8,8 .comm __curbrk,8,8
.section ".toc","aw" .section ".toc","aw"
.LC__curbrk: .LC__curbrk:
.tc __curbrk[TC],__curbrk .tc __curbrk[TC],__curbrk
.section ".text" .section ".text"
ENTRY (BP_SYM (__brk)) ENTRY (__brk)
CALL_MCOUNT 1 CALL_MCOUNT 1
DISCARD_BOUNDS (r3) /* the bounds are meaningless, so toss 'em. */
std r3,48(r1) std r3,48(r1)
DO_CALL(SYS_ify(brk)) DO_CALL(SYS_ify(brk))
@ -41,6 +38,6 @@ ENTRY (BP_SYM (__brk))
blelr+ blelr+
li r3,ENOMEM li r3,ENOMEM
TAIL_CALL_SYSCALL_ERROR TAIL_CALL_SYSCALL_ERROR
END (BP_SYM (__brk)) END (__brk)
weak_alias (BP_SYM (__brk), BP_SYM (brk)) weak_alias (__brk, brk)

View File

@ -19,8 +19,6 @@
#include <sysdep.h> #include <sysdep.h>
#define _ERRNO_H 1 #define _ERRNO_H 1
#include <bits/errno.h> #include <bits/errno.h>
#include <bp-sym.h>
#include <bp-asm.h>
#define CLONE_VM 0x00000100 #define CLONE_VM 0x00000100
#define CLONE_THREAD 0x00010000 #define CLONE_THREAD 0x00010000
@ -33,11 +31,8 @@
int flags [r5], void *arg [r6], void *parent_tid [r7], int flags [r5], void *arg [r6], void *parent_tid [r7],
void *tls [r8], void *child_tid [r9]); */ void *tls [r8], void *child_tid [r9]); */
ENTRY (BP_SYM (__clone)) ENTRY (__clone)
CALL_MCOUNT 7 CALL_MCOUNT 7
/* GKM FIXME: add bounds checks, where sensible. */
DISCARD_BOUNDS (r4)
DISCARD_BOUNDS (r6)
/* Check for child_stack == NULL || fn == NULL. */ /* Check for child_stack == NULL || fn == NULL. */
cmpdi cr0,r4,0 cmpdi cr0,r4,0
@ -144,6 +139,6 @@ L(parent):
cfi_restore(r31) cfi_restore(r31)
PSEUDO_RET PSEUDO_RET
END (BP_SYM (__clone)) END (__clone)
weak_alias (BP_SYM (__clone), BP_SYM (clone)) weak_alias (__clone, clone)