diff options
author | Alan Modra <amodra@gmail.com> | 2015-08-14 22:15:49 -0400 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2016-01-24 03:43:10 -0500 |
commit | 7ad78f869815a73dc26c93b72d156812d93eb026 (patch) | |
tree | 0fd18c2e83d4d580877128975bbe03abaaf25243 | |
parent | c6d1664014de6e9f36aba21e8c84419885b396d8 (diff) | |
download | glibc-7ad78f869815a73dc26c93b72d156812d93eb026.tar.gz glibc-7ad78f869815a73dc26c93b72d156812d93eb026.tar.xz glibc-7ad78f869815a73dc26c93b72d156812d93eb026.zip |
hppa: start.S: rework references to fix PIE TEXTRELs [BZ #18421]
The startup code was not using PIC friendly references leading to TEXTRELs in every PIE ELF. (cherry picked from commit cf4253777412e9c8d5bfbc1c8b975f472e1e7d43)
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | sysdeps/hppa/start.S | 16 |
3 files changed, 24 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog index 4f30c7e002..0bde9e21f4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2015-08-18 Alan Modra <amodra@gmail.com> + + [BZ #18421] + * sysdeps/hppa/start.S [SHARED]: Use .section .data.rel.ro and define + .Lp__global. + (_start): Load %dp via .Lp__global. + [!SHARED]: Use .section .rodata. + 2015-08-09 John David Anglin <danglin@gcc.gnu.org> [BZ #18480] diff --git a/NEWS b/NEWS index bc2287d222..99e68d20de 100644 --- a/NEWS +++ b/NEWS @@ -9,8 +9,8 @@ Version 2.22.1 * The following bugs are resolved with this release: - 17905, 18480, 18589, 18743, 18778, 18781, 18787, 18796, 18870, 18887, - 18921, 18928, 18969, 18985, 19018, 19058, 19174, 19178. + 17905, 18421, 18480, 18589, 18743, 18778, 18781, 18787, 18796, 18870, + 18887, 18921, 18928, 18969, 18985, 19018, 19058, 19174, 19178. * The LD_POINTER_GUARD environment variable can no longer be used to disable the pointer guard feature. It is always enabled. diff --git a/sysdeps/hppa/start.S b/sysdeps/hppa/start.S index 64d8c3ed6f..cc4f243650 100644 --- a/sysdeps/hppa/start.S +++ b/sysdeps/hppa/start.S @@ -42,7 +42,11 @@ /* Have the linker create plabel words so we get PLABEL32 relocs and not 21/14. The use of 21/14 relocs is only supported in the latest dynamic linker. */ - .section .rodata +#ifdef SHARED + .section .data.rel.ro,"aw",@progbits +#else + .section .rodata,"a",@progbits +#endif .align 4 .Lpmain: .word P%main @@ -52,6 +56,10 @@ .word P%__libc_csu_fini .Lp__libc_csu_init: .word P%__libc_csu_init +#ifdef SHARED +.Lp__global: + .word $global$ +#endif .text .align 4 @@ -122,10 +130,14 @@ _start: /* void *stack_end (7th argument) */ stw %sp, -60(%sp) +#ifdef SHARED + addil LT'.Lp__global, %r19 + ldw RT'.Lp__global(%r1), %dp +#else /* load global */ ldil L%$global$, %dp ldo R%$global$(%dp), %dp - +#endif bl __libc_start_main,%r2 nop /* die horribly if it returned (it shouldn't) */ |