aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Krebbel <Andreas.Krebbel@de.ibm.com>2010-09-29 11:31:42 -0400
committerUlrich Drepper <drepper@gmail.com>2010-09-29 11:31:42 -0400
commit87a97932bdd8a62a5eede11fdf031efd38da33ac (patch)
treeaf2f6f7b96ca2bf7c05f1c7a9c6149d482d94092
parent724da3d7f42295c240f69bf874886efb9ad98510 (diff)
downloadglibc-87a97932bdd8a62a5eede11fdf031efd38da33ac.tar
glibc-87a97932bdd8a62a5eede11fdf031efd38da33ac.tar.gz
glibc-87a97932bdd8a62a5eede11fdf031efd38da33ac.tar.bz2
glibc-87a97932bdd8a62a5eede11fdf031efd38da33ac.zip
S/390: Fix highgprs check in startup code
-rw-r--r--ChangeLog6
-rw-r--r--sysdeps/s390/s390-32/elf/start.S14
2 files changed, 11 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index bfcadde3cb..70505a9445 100644
--- 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]
diff --git a/sysdeps/s390/s390-32/elf/start.S b/sysdeps/s390/s390-32/elf/start.S
index 066f7f0aa1..8e48abbcc3 100644
--- a/sysdeps/s390/s390-32/elf/start.S
+++ b/sysdeps/s390/s390-32/elf/start.S
@@ -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. */