diff options
author | Greg McGary <greg@mcgary.org> | 2000-06-30 21:35:52 +0000 |
---|---|---|
committer | Greg McGary <greg@mcgary.org> | 2000-06-30 21:35:52 +0000 |
commit | fa87f4037711e92c52965e87a83c60f270292dc0 (patch) | |
tree | dd90b952e4f46f3fa4d1b36a51a05a03a960d422 /sysdeps/powerpc/strcpy.S | |
parent | dbda6079a64a9dbc6dfb24280af01e871e6f7de5 (diff) | |
download | glibc-fa87f4037711e92c52965e87a83c60f270292dc0.tar.gz glibc-fa87f4037711e92c52965e87a83c60f270292dc0.tar.xz glibc-fa87f4037711e92c52965e87a83c60f270292dc0.zip |
* sysdeps/powerpc/bp-asm.h: New file.
* sysdeps/powerpc/__longjmp.S: Check bounds. Wrap extern symbols in BP_SYM (). * sysdeps/powerpc/bsd-_setjmp.S: Likewise. * sysdeps/powerpc/bsd-setjmp.S: Likewise. * sysdeps/powerpc/setjmp.S: Likewise. * sysdeps/powerpc/add_n.S: Likewise. * sysdeps/powerpc/addmul_1.S: Likewise. * sysdeps/powerpc/lshift.S: Likewise. * sysdeps/powerpc/rshift.S: Likewise. * sysdeps/powerpc/mul_1.S: Likewise. * sysdeps/powerpc/sub_n.S: Likewise. * sysdeps/powerpc/submul_1.S: Likewise. * sysdeps/powerpc/strlen.S: Likewise. * sysdeps/powerpc/memset.S: Likewise. * sysdeps/powerpc/stpcpy.S: Likewise. * sysdeps/powerpc/strcmp.S: Likewise. * sysdeps/powerpc/strcpy.S: Likewise. * sysdeps/powerpc/elf/bzero.S: Likewise. * sysdeps/powerpc/bp-asm.h: New file. * sysdeps/powerpc/__longjmp.S: Check bounds. Wrap extern symbols in BP_SYM (). * sysdeps/powerpc/bsd-_setjmp.S: Likewise. * sysdeps/powerpc/bsd-setjmp.S: Likewise. * sysdeps/powerpc/setjmp.S: Likewise. * sysdeps/powerpc/add_n.S: Likewise. * sysdeps/powerpc/addmul_1.S: Likewise. * sysdeps/powerpc/lshift.S: Likewise. * sysdeps/powerpc/rshift.S: Likewise. * sysdeps/powerpc/mul_1.S: Likewise. * sysdeps/powerpc/sub_n.S: Likewise. * sysdeps/powerpc/submul_1.S: Likewise. * sysdeps/powerpc/strlen.S: Likewise. * sysdeps/powerpc/memset.S: Likewise. * sysdeps/powerpc/stpcpy.S: Likewise. * sysdeps/powerpc/strcmp.S: Likewise. * sysdeps/powerpc/strcpy.S: Likewise. * sysdeps/powerpc/elf/bzero.S: Likewise.
Diffstat (limited to 'sysdeps/powerpc/strcpy.S')
-rw-r--r-- | sysdeps/powerpc/strcpy.S | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/sysdeps/powerpc/strcpy.S b/sysdeps/powerpc/strcpy.S index 901ccf1259..122cf59be7 100644 --- a/sysdeps/powerpc/strcpy.S +++ b/sysdeps/powerpc/strcpy.S @@ -18,26 +18,43 @@ Boston, MA 02111-1307, USA. */ #include <sysdep.h> +#include <bp-sym.h> +#include <bp-asm.h> /* See strlen.s for comments on how the end-of-string testing works. */ /* char * [r3] strcpy (char *dest [r3], const char *src [r4]) */ -EALIGN(strcpy, 4, 0) +EALIGN (BP_SYM (strcpy), 4, 0) #define rTMP r0 #define rRTN r3 /* incoming DEST arg preserved as result */ -#define rSRC r4 /* pointer to previous word in src */ -#define rDEST r5 /* pointer to previous word in dest */ -#define rWORD r6 /* current word from src */ +#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 rFEFE r7 /* constant 0xfefefeff (-0x01010101) */ -#define r7F7F r8 /* constant 0x7f7f7f7f */ +#define r7F7F r8 /* constant 0x7f7f7f7f */ #define rNEG r9 /* ~(word in s1 | 0x7f7f7f7f) */ #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, rRTN clrlwi. rTMP, rTMP, 30 +#if __BOUNDED_POINTERS__ + addi rDEST, rDEST, -4 +#else addi rDEST, rRTN, -4 +#endif bne L(unaligned) lis rFEFE, -0x101 @@ -72,6 +89,7 @@ L(g1): rlwinm. rTMP, rALT, 8, 24, 31 stb rTMP, 6(rDEST) beqlr- stb rALT, 7(rDEST) + /* GKM FIXME: check high bound. */ blr /* Oh well. In this case, we just do a byte-by-byte copy. */ @@ -93,8 +111,10 @@ L(u0): lbzu rALT, 1(rSRC) cmpwi rWORD, 0 bne+ L(u0) L(u2): stb rWORD, 1(rDEST) + /* GKM FIXME: check high bound. */ blr L(u1): stb rALT, 1(rDEST) + /* GKM FIXME: check high bound. */ blr -END(strcpy) +END (BP_SYM (strcpy)) |