[PATCH] S390: Use DT_JUMPREL in prelink undo code.
Stefan Liebler
stli@linux.vnet.ibm.com
Thu Jun 30 16:28:00 GMT 2016
Hi,
on s390, the current prelink undo code in elf_machine_lazy_rel()
has the requirement, that the plt stubs use the first got slots
after the 3 reserved ones.
In case of undoing prelink, the plt got slots are reset to the correct
addresses whithin the corresponding plt-stub. Therefore the address
is calculated by the address of the first plt-stub-address which
was written by prelink (see l->l_mach.plt) to got[1] and index of
current relocation multiplied with 32 (=size of one plt slot).
The index was calculated with ¤t-got-slot - &got[3].
This patch removes the requirement, that the plt-got-slots are
starting at got[3]. The index is now calculated with
¤t-reloc - &reloc[0]. The first struct Elf64_Rela is stored
at DT_JMPREL.
This patch is needed to prepare for partial relro support.
Ulrich Weigand suggested this approach to use DT_JMPREL - Thanks.
Okay to commit?
Bye Stefan
ChangeLog:
* sysdeps/s390/linkmap.h (struct link_map_machine):
Remove member gotplt and add member jmprel.
* sysdeps/s390/s390-32/dl-machine.h
(elf_machine_runtime_setup): Setup member jmprel with DT_JMPREL
instead of gotplt with &got[3].
(elf_machine_lazy_rel): Calculate address with reloc and jmprel.
* sysdeps/s390/s390-64/dl-machine.h: Likewise.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 20160630_prelink_undo.patch
Type: text/x-patch
Size: 2456 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/libc-alpha/attachments/20160630/8fa0c8af/attachment.bin>
More information about the Libc-alpha
mailing list