about summary refs log tree commit diff
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.gz
glibc-0903610fdc31efbea4309f69e5ee3e1d4f7ed29e.tar.xz
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