yann@1: See also yann@1: http://lists.gnu.org/archive/html/bug-glibc/2002-12/msg00056.html yann@1: http://lists.arm.linux.org.uk/pipermail/linux-arm-toolchain/2004-June/000016.html yann@1: yann@1: 2002-12-12 Andreas Schwab yann@1: * sysdeps/arm/strlen.S: Fix last word check for big endian. yann@1: yann@1: To: libc-alpha at sources dot redhat dot com yann@1: Subject: [PATCH] REPOST: ARM big-endian strlen() fix yann@1: References: yann@1: From: Krzysztof Halasa yann@1: Date: Thu, 10 Jun 2004 13:41:44 +0200 yann@1: Message-ID: yann@1: MIME-Version: 1.0 yann@1: Content-Type: multipart/mixed; boundary="=-=-=" yann@1: yann@1: --=-=-= yann@1: yann@1: The attached patch fixes strlen() on big-endian ARM. Please apply. yann@1: Thanks. yann@1: -- yann@1: Krzysztof Halasa, B*FH yann@1: yann@1: --=-=-= yann@1: Content-Type: text/x-patch yann@1: Content-Disposition: inline; filename=glibc-strlen.patch yann@1: yann@1: --- glibc-2.3.3.old/sysdeps/arm/strlen.S 2003-04-30 00:47:20.000000000 +0200 yann@1: +++ glibc-2.3.3/sysdeps/arm/strlen.S 2004-06-06 03:21:48.351931240 +0200 yann@1: @@ -53,12 +53,21 @@ yann@1: ldrne r2, [r1], $4 @ and we continue to the next word yann@1: bne Laligned @ yann@1: Llastword: @ drop through to here once we find a yann@1: +#ifdef __ARMEB__ yann@1: + tst r2, $0xff000000 @ word that has a zero byte in it yann@1: + addne r0, r0, $1 @ yann@1: + tstne r2, $0x00ff0000 @ and add up to 3 bytes on to it yann@1: + addne r0, r0, $1 @ yann@1: + tstne r2, $0x0000ff00 @ (if first three all non-zero, 4th yann@1: + addne r0, r0, $1 @ must be zero) yann@1: +#else yann@1: tst r2, $0x000000ff @ word that has a zero byte in it yann@1: addne r0, r0, $1 @ yann@1: tstne r2, $0x0000ff00 @ and add up to 3 bytes on to it yann@1: addne r0, r0, $1 @ yann@1: tstne r2, $0x00ff0000 @ (if first three all non-zero, 4th yann@1: addne r0, r0, $1 @ must be zero) yann@1: +#endif yann@1: RETINSTR(mov,pc,lr) yann@1: END(strlen) yann@1: libc_hidden_builtin_def (strlen) yann@1: yann@1: --=-=-=-- yann@1: