rtld: Clean up PT_NOTE and add PT_GNU_PROPERTY handling
commitc7aa8596de86fb667914ccb95c10495ad056ff96
authorSzabolcs Nagy <szabolcs.nagy@arm.com>
Mon, 22 Jun 2020 09:56:38 +0000 (22 10:56 +0100)
committerSzabolcs Nagy <szabolcs.nagy@arm.com>
Wed, 8 Jul 2020 13:28:53 +0000 (8 14:28 +0100)
tree1d49bc2092f2cbb06b761f7f047626e45195082d
parentc1e63c7214aaef99039068da384a0ab3abc176f2
rtld: Clean up PT_NOTE and add PT_GNU_PROPERTY handling

Add generic code to handle PT_GNU_PROPERTY notes. Invalid
content is ignored, _dl_process_pt_gnu_property is always called
after PT_LOAD segments are mapped and it has no failure modes.
Currently only one NT_GNU_PROPERTY_TYPE_0 note is handled, which
contains target specific properties: the _dl_process_gnu_property
hook is called for each property.

The old _dl_process_pt_note and _rtld_process_pt_note differ in how
the program header is read.  The old _dl_process_pt_note is called
before PT_LOAD segments are mapped and _rtld_process_pt_note is called
after PT_LOAD segments are mapped. The old _rtld_process_pt_note is
removed and _dl_process_pt_note is always called after PT_LOAD
segments are mapped and now it has no failure modes.

The program headers are scanned backwards so that PT_NOTE can be
skipped if PT_GNU_PROPERTY exists.

Co-Authored-By: H.J. Lu <hjl.tools@gmail.com>
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
elf/dl-load.c
elf/rtld.c
sysdeps/generic/dl-prop.h
sysdeps/generic/ldsodefs.h
sysdeps/x86/dl-prop.h