Fix gmon static test failures.

* sysdeps/hppa/start.S (_start): Check PIC instead of SHARED.  Load
	address of $global$ into %dp register earlier.  Use pc-relative
	instruction sequence for PIC case.
This commit is contained in:
John David Anglin 2017-11-28 20:01:05 -05:00
parent e4602cba2f
commit d5bfa34a53
2 changed files with 18 additions and 17 deletions

View File

@ -1,3 +1,9 @@
2017-11-28 John David Anglin <danglin@gcc.gnu.org>
* sysdeps/hppa/start.S (_start): Check PIC instead of SHARED. Load
address of $global$ into %dp register earlier. Use pc-relative
instruction sequence for PIC case.
2017-11-28 Joseph Myers <joseph@codesourcery.com>
* sysdeps/i386/fpu/s_asinhf.S: Include <libm-alias-float.h>.

View File

@ -42,7 +42,7 @@
/* 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. */
#ifdef SHARED
#ifdef PIC
.section .data.rel.ro,"aw",@progbits
#else
.section .rodata,"a",@progbits
@ -56,10 +56,6 @@
.word P%__libc_csu_fini
.Lp__libc_csu_init:
.word P%__libc_csu_init
#ifdef SHARED
.Lp__global:
.word $global$
#endif
.text
.align 4
@ -99,9 +95,15 @@ _start:
/* argc and argv should be in 25 and 24 (2nd and 3rd argument) */
/* void (*rtld_fini) (void) (6th argument) */
stw %r23, -56(%sp)
/* Need to setup 1, 4, 5, and 7th arguments */
#ifdef SHARED
#ifdef PIC
/* Load $global$ address into %dp */
bl .+8, %dp
addil L'$global$-$PIC_pcrel$0+1, %dp
ldo R'$global$-$PIC_pcrel$0+5(%r1), %dp
/* load main (1st argument) */
addil LT'.Lpmain, %r19
ldw RT'.Lpmain(%r1), %r26
@ -115,6 +117,10 @@ _start:
ldw RT'.Lp__libc_csu_fini(%r1), %r22
ldw 0(%r22), %r22
#else
/* Load $global$ address into %dp */
ldil L%$global$, %dp
ldo R%$global$(%dp), %dp
/* load main (1st argument) */
ldil LR'.Lpmain, %r26
ldw RR'.Lpmain(%r26), %r26
@ -129,17 +135,6 @@ _start:
stw %r22, -52(%sp)
/* void *stack_end (7th argument) */
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
ldo R%$global$(%dp), %dp
#endif
bl __libc_start_main,%r2
nop
/* die horribly if it returned (it shouldn't) */