aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn David Anglin <dave.anglin@bell.net>2016-06-21 18:35:22 -0400
committerAurelien Jarno <aurelien@aurel32.net>2016-07-01 14:40:09 +0200
commit0903610fdc31efbea4309f69e5ee3e1d4f7ed29e (patch)
tree6c3f7b0cbad2b9b33c86e6031541041df43bdc7f
parent3d21617c430d190e5412bc450afad22169218c0e (diff)
downloadglibc-0903610fdc31efbea4309f69e5ee3e1d4f7ed29e.tar
glibc-0903610fdc31efbea4309f69e5ee3e1d4f7ed29e.tar.gz
glibc-0903610fdc31efbea4309f69e5ee3e1d4f7ed29e.tar.bz2
glibc-0903610fdc31efbea4309f69e5ee3e1d4f7ed29e.zip
hppa: fix loading of global pointer in _start [BZ #20277]
The patched change fixes a regression for executables compiled with the -p option and linked with gcrt1.o. The executables crash on startup. This regression was introduced in 2.22 and was noticed in the gcc testsuite. (cherry picked from commit 9765ffa71030efd8bb4f2ea4ed6e020fcb4bb714)
-rw-r--r--ChangeLog6
-rw-r--r--NEWS1
-rw-r--r--sysdeps/hppa/start.S2
3 files changed, 9 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index aaba8df217..3c8315f88f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2016-06-30 John David Anglin <danglin@gcc.gnu.org>
+
+ [BZ #20277]
+ * sysdeps/hppa/start.S (_start): Correct loading of global pointer
+ when SHARED is defined.
+
2016-06-30 Aurelien Jarno <aurelien@aurel32.net>
* sysdeps/i386/i686/fpu/multiarch/libm-test-ulps: Regenerated.
diff --git a/NEWS b/NEWS
index 532cfe2f62..07f3fe8569 100644
--- a/NEWS
+++ b/NEWS
@@ -34,6 +34,7 @@ The following bugs are resolved with this release:
[19822] libm.so install clobbers old version
[19879] network: nss_dns: Stack overflow in getnetbyname implementation
(CVE-2016-3075)
+ [20177] $dp is not initialized correctly in sysdeps/hppa/start.S
Version 2.23
diff --git a/sysdeps/hppa/start.S b/sysdeps/hppa/start.S
index 90d4331f5a..b7ab830e92 100644
--- a/sysdeps/hppa/start.S
+++ b/sysdeps/hppa/start.S
@@ -131,8 +131,10 @@ _start:
stw %sp, -60(%sp)
#ifdef SHARED
+ /* load global */
addil LT'.Lp__global, %r19
ldw RT'.Lp__global(%r1), %dp
+ ldw 0(%dp), %dp
#else
/* load global */
ldil L%$global$, %dp