diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2021-06-17 12:35:18 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2021-07-08 18:11:53 -0700 |
commit | 6320fd00dc374f74658c7e4b7dffbe1d71723284 (patch) | |
tree | 95d9ca4603d3b066d511280d66ee384062c52853 /binutils/readelf.c | |
parent | ce8fea3651a6050d5089b6d90068733f4cb9f686 (diff) | |
download | gdb-6320fd00dc374f74658c7e4b7dffbe1d71723284.zip gdb-6320fd00dc374f74658c7e4b7dffbe1d71723284.tar.gz gdb-6320fd00dc374f74658c7e4b7dffbe1d71723284.tar.bz2 |
elf: Add GNU_PROPERTY_1_NEEDED
Add GNU_PROPERTY_1_NEEDED:
#define GNU_PROPERTY_1_NEEDED GNU_PROPERTY_UINT32_OR_LO
to indicate the needed properties by the object file.
Add GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS:
#define GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS (1U << 0)
to indicate that the object file requires canonical function pointers and
cannot be used with copy relocation.
binutils/
* readelf.c (decode_1_needed): New.
(print_gnu_property_note): Handle GNU_PROPERTY_1_NEEDED.
include/
* elf/common.h (GNU_PROPERTY_1_NEEDED): New.
(GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS): Likewise.
ld/
* testsuite/ld-elf/property-1_needed-1a.d: New file.
* testsuite/ld-elf/property-1_needed-1.s: Likewise.
Diffstat (limited to 'binutils/readelf.c')
-rw-r--r-- | binutils/readelf.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/binutils/readelf.c b/binutils/readelf.c index 2215339..24ff069 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -19333,6 +19333,28 @@ decode_aarch64_feature_1_and (unsigned int bitmask) } static void +decode_1_needed (unsigned int bitmask) +{ + while (bitmask) + { + unsigned int bit = bitmask & (- bitmask); + + bitmask &= ~ bit; + switch (bit) + { + case GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS: + printf ("indirect external access"); + break; + default: + printf (_("<unknown: %x>"), bit); + break; + } + if (bitmask) + printf (", "); + } +} + +static void print_gnu_property_note (Filedata * filedata, Elf_Internal_Note * pnote) { unsigned char * ptr = (unsigned char *) pnote->descdata; @@ -19525,6 +19547,23 @@ print_gnu_property_note (Filedata * filedata, Elf_Internal_Note * pnote) || (type >= GNU_PROPERTY_UINT32_OR_LO && type <= GNU_PROPERTY_UINT32_OR_HI)) { + switch (type) + { + case GNU_PROPERTY_1_NEEDED: + if (datasz != 4) + printf (_("1_needed: <corrupt length: %#x> "), + datasz); + else + { + unsigned int bitmask = byte_get (ptr, 4); + printf ("1_needed: "); + decode_1_needed (bitmask); + } + goto next; + + default: + break; + } if (type <= GNU_PROPERTY_UINT32_AND_HI) printf (_("UINT32_AND (%#x): "), type); else |