From: Richard Henderson <rth@twiddle.net>
To: libc-ports@sourceware.org
Subject: [PATCH 4/5] alpha: Fix [BZ #13718]
Date: Wed, 06 Jun 2012 21:52:00 -0000 [thread overview]
Message-ID: <1339019524-32478-4-git-send-email-rth@twiddle.net> (raw)
In-Reply-To: <1339019524-32478-1-git-send-email-rth@twiddle.net>
The routines expect to be able to bias the count by a small number.
If the count is near -1ull, the count will overflow. Since we cannot
use the whole 64-bit address space, bound the count to LONG_MAX.
---
ChangeLog.alpha | 4 ++++
sysdeps/alpha/alphaev6/stxncpy.S | 19 +++++++++++++------
sysdeps/alpha/stxncpy.S | 23 +++++++++++++----------
3 files changed, 30 insertions(+), 16 deletions(-)
diff --git a/ChangeLog.alpha b/ChangeLog.alpha
index 0598d7e..d291df9 100644
--- a/ChangeLog.alpha
+++ b/ChangeLog.alpha
@@ -1,5 +1,9 @@
2012-06-06 Richard Henderson <rth@twiddle.net>
+ [BZ #13718]
+ * sysdeps/alpha/stxncmp.S: Bound count to LONG_MAX at startup.
+ * sysdeps/alpha/alphaev6/stxncmp.S: Likewise.
+
* sysdeps/alpha/fpu/e_sqrt.c: Include <math_private.h> before
redefining __ieee758_sqrt.
diff --git a/sysdeps/alpha/alphaev6/stxncpy.S b/sysdeps/alpha/alphaev6/stxncpy.S
index d134eb8..28495df 100644
--- a/sysdeps/alpha/alphaev6/stxncpy.S
+++ b/sysdeps/alpha/alphaev6/stxncpy.S
@@ -143,18 +143,25 @@ $a_eoc:
.align 4
__stxncpy:
/* Are source and destination co-aligned? */
+ lda t2, -1 # E :
xor a0, a1, t1 # E :
and a0, 7, t0 # E : find dest misalignment
- and t1, 7, t1 # E : (stall)
- addq a2, t0, a2 # E : bias count by dest misalignment (stall)
+ nop # E :
- subq a2, 1, a2 # E :
+ srl t2, 1, t2 # U :
+ and t1, 7, t1 # E :
+ cmovlt a2, t2, a2 # E : bound count to LONG_MAX (stall)
+ nop # E :
+
+ addq a2, t0, a2 # E : bias count by dest misalignment
+ subq a2, 1, a2 # E : (stall)
and a2, 7, t2 # E : (stall)
- srl a2, 3, a2 # U : a2 = loop counter = (count - 1)/8 (stall)
- addq zero, 1, t10 # E :
+ lda t10, 1 # E :
+ srl a2, 3, a2 # U : a2 = loop counter = (count - 1)/8
sll t10, t2, t10 # U : t10 = bitmask of last count byte
- bne t1, $unaligned # U :
+ nop # E :
+ bne t1, $unaligned # U : (stall)
/* We are co-aligned; take care of a partial first word. */
ldq_u t1, 0(a1) # L : load first src word
diff --git a/sysdeps/alpha/stxncpy.S b/sysdeps/alpha/stxncpy.S
index f8b494a..d2cb9c3 100644
--- a/sysdeps/alpha/stxncpy.S
+++ b/sysdeps/alpha/stxncpy.S
@@ -123,16 +123,19 @@ $a_eoc:
.align 3
__stxncpy:
/* Are source and destination co-aligned? */
- xor a0, a1, t1 # e0 :
- and a0, 7, t0 # .. e1 : find dest misalignment
- and t1, 7, t1 # e0 :
- addq a2, t0, a2 # .. e1 : bias count by dest misalignment
- subq a2, 1, a2 # e0 :
- and a2, 7, t2 # e1 :
- srl a2, 3, a2 # e0 : a2 = loop counter = (count - 1)/8
- addq zero, 1, t10 # .. e1 :
- sll t10, t2, t10 # e0 : t10 = bitmask of last count byte
- bne t1, $unaligned # .. e1 :
+ lda t2, -1
+ xor a0, a1, t1
+ srl t2, 1, t2
+ and a0, 7, t0 # find dest misalignment
+ cmovlt a2, t2, a2 # bound neg count to LONG_MAX
+ and t1, 7, t1
+ addq a2, t0, a2 # bias count by dest misalignment
+ subq a2, 1, a2
+ and a2, 7, t2
+ srl a2, 3, a2 # a2 = loop counter = (count - 1)/8
+ addq zero, 1, t10
+ sll t10, t2, t10 # t10 = bitmask of last count byte
+ bne t1, $unaligned
/* We are co-aligned; take care of a partial first word. */
--
1.7.7.6
next prev parent reply other threads:[~2012-06-06 21:52 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-06 21:52 [PATCH 1/5] alpha: put mcount prologue at correct location Richard Henderson
2012-06-06 21:52 ` Richard Henderson [this message]
2012-06-06 21:52 ` [PATCH 2/5] alpha: Use cfi_startproc instead of dual procedure descriptors Richard Henderson
2012-06-06 21:52 ` [PATCH 3/5] alpha: Fix ev4 build with ev6 compiler Richard Henderson
2012-06-06 21:52 ` [PATCH 5/5] alpha: Fix end-of-count checks in strncmp Richard Henderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1339019524-32478-4-git-send-email-rth@twiddle.net \
--to=rth@twiddle.net \
--cc=libc-ports@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).