This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.21-208-g298e5d5
- From: roland at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 19 Mar 2015 19:45:45 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.21-208-g298e5d5
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via 298e5d56dca199aea2c18ef27dd33bd82c879ee4 (commit)
from becb26b84bfe4d3273c4e2d4e7684dfbbf7c6bcd (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=298e5d56dca199aea2c18ef27dd33bd82c879ee4
commit 298e5d56dca199aea2c18ef27dd33bd82c879ee4
Author: Roland McGrath <roland@hack.frob.com>
Date: Thu Mar 19 12:45:24 2015 -0700
ARM: Fix memcpy & memmove for [ARM_ALWAYS_BX]
diff --git a/ChangeLog b/ChangeLog
index b9b3c2c..9d14696 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2015-03-19 Roland McGrath <roland@hack.frob.com>
+
+ * sysdeps/arm/memcpy.S [ARM_ALWAYS_BX]: Fix computed-jump calculations
+ to account for alignment padding.
+ * sysdeps/arm/memmove.S: Likewise.
+
2015-03-19 Chris Metcalf <cmetcalf@ezchip.com>
* sysdeps/unix/sysv/linux/generic/README: New file.
diff --git a/sysdeps/arm/memcpy.S b/sysdeps/arm/memcpy.S
index 0602d99..3e41ea6 100644
--- a/sysdeps/arm/memcpy.S
+++ b/sysdeps/arm/memcpy.S
@@ -125,7 +125,12 @@ ENTRY(memcpy)
push {r10}
cfi_adjust_cfa_offset (4)
cfi_rel_offset (r10, 0)
- add r10, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2)
+0: add r10, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2)
+ /* If alignment is not perfect, then there will be some
+ padding (nop) instructions between this BX and label 6.
+ The computation above assumed that two instructions
+ later is exactly the right spot. */
+ add r10, #(6f - (0b + PC_OFS))
bx r10
#endif
.p2align ARM_BX_ALIGN_LOG2
@@ -156,11 +161,16 @@ ENTRY(memcpy)
add pc, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2)
nop
#else
- add r10, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2)
+0: add r10, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2)
+ /* If alignment is not perfect, then there will be some
+ padding (nop) instructions between this BX and label 66.
+ The computation above assumed that two instructions
+ later is exactly the right spot. */
+ add r10, #(66f - (0b + PC_OFS))
bx r10
#endif
.p2align ARM_BX_ALIGN_LOG2
- nop
+66: nop
.p2align ARM_BX_ALIGN_LOG2
sfi_breg r0, \
str r3, [\B], #4
diff --git a/sysdeps/arm/memmove.S b/sysdeps/arm/memmove.S
index f8a4eff..dde877e 100644
--- a/sysdeps/arm/memmove.S
+++ b/sysdeps/arm/memmove.S
@@ -141,7 +141,12 @@ ENTRY(memmove)
push {r10}
cfi_adjust_cfa_offset (4)
cfi_rel_offset (r10, 0)
- add r10, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2)
+0: add r10, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2)
+ /* If alignment is not perfect, then there will be some
+ padding (nop) instructions between this BX and label 6.
+ The computation above assumed that two instructions
+ later is exactly the right spot. */
+ add r10, #(6f - (0b + PC_OFS))
bx r10
#endif
.p2align ARM_BX_ALIGN_LOG2
@@ -172,11 +177,16 @@ ENTRY(memmove)
add pc, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2)
nop
#else
- add r10, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2)
+0: add r10, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2)
+ /* If alignment is not perfect, then there will be some
+ padding (nop) instructions between this BX and label 66.
+ The computation above assumed that two instructions
+ later is exactly the right spot. */
+ add r10, #(66f - (0b + PC_OFS))
bx r10
#endif
.p2align ARM_BX_ALIGN_LOG2
- nop
+66: nop
.p2align ARM_BX_ALIGN_LOG2
sfi_breg r0, \
str r3, [\B, #-4]!
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 6 ++++++
sysdeps/arm/memcpy.S | 16 +++++++++++++---
sysdeps/arm/memmove.S | 16 +++++++++++++---
3 files changed, 32 insertions(+), 6 deletions(-)
hooks/post-receive
--
GNU C Library master sources