S/390: Fix highgprs check in startup code
authorAndreas Krebbel <Andreas.Krebbel@de.ibm.com>
Wed, 29 Sep 2010 15:31:42 +0000 (11:31 -0400)
committerUlrich Drepper <drepper@gmail.com>
Wed, 29 Sep 2010 15:31:42 +0000 (11:31 -0400)
ChangeLog
sysdeps/s390/s390-32/elf/start.S

index bfcadde..70505a9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2010-09-29  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
+
+       [BZ #12067]
+       * sysdeps/s390/s390-32/elf/start.S: Fix address calculation when
+       trying to locate the ELF header.
+
 2010-09-27  Andreas Schwab  <schwab@redhat.com>
 
        [BZ #11611]
index 066f7f0..8e48abb 100644 (file)
@@ -108,7 +108,7 @@ _start:
        jne     .L20
        cl      %r8,4(%r4)     /* p_offset == 0? */
        jne     .L20
-       l       %r9,8(%r4)     /* r9 = p_vaddr <- ELF header address  */
+       l       %r9,8(%r4)     /* r9 = PT_LOAD.p_vaddr <- ELF header address  */
        j       .L24
 .L20:  alr     %r4,%r0        /* r4 += AT_PHENT value */
        brct    %r12,.L19
@@ -124,16 +124,12 @@ _start:
 .L22:  alr     %r4,%r0        /* r4 += AT_PHENT value */
        brct    %r12,.L23
 
-       ltr     %r9,%r9        /* Load address == 0? */
-       jz      .L14           /* No checking for PIE without PT_PHDR.  */
-       j       .L21
+       j       .L14           /* No PT_PHDR found - skip checking.  */
 
-.L25:  clr     %r3,%r11       /* PT_PHDR p_vaddr == AT_PHDR? */
-       je      .L21
-       lr      %r9,%r11
-       slr     %r9,%r3        /* elf_header_addr = AT_PHDR - PT_PHDR.p_vaddr */
+.L25:  slr     %r11,%r3       /* AT_PHDR - PT_PHDR.p_vaddr (relocation offset)*/
+       alr     %r9,%r11       /* PT_LOAD.p_vaddr += relocation offset */
 
-.L21:  l       %r5,36(%r9)    /* Load the e_flags field.  */
+       l       %r5,36(%r9)    /* Load the e_flags field.  */
        tml     %r5,1
        jz      .L14           /* Binary does not require highgprs facility.  */