From: John David Anglin Date: Wed, 29 Nov 2017 01:01:05 +0000 (-0500) Subject: Fix gmon static test failures. X-Git-Tag: glibc-2.27~407 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d5bfa34a53fe67e9e86edc7f5d8277dcd687d064;p=thirdparty%2Fglibc.git 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. --- diff --git a/ChangeLog b/ChangeLog index ea124d40df2..bffaf21f51a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2017-11-28 John David Anglin + + * 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 * sysdeps/i386/fpu/s_asinhf.S: Include . diff --git a/sysdeps/hppa/start.S b/sysdeps/hppa/start.S index 5db1ba960be..1d69ae8a4b9 100644 --- a/sysdeps/hppa/start.S +++ b/sysdeps/hppa/start.S @@ -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) */