From: Alan Modra Date: Thu, 23 Aug 2018 08:04:13 +0000 (+0930) Subject: PowerPC64 st_other decoding in readelf X-Git-Tag: users/ARM/embedded-binutils-master-2018q4~1018 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=14732552e70bcb0c85093c404a7091627eea4e38;p=thirdparty%2Fbinutils-gdb.git PowerPC64 st_other decoding in readelf localentry:1 is a valid encoding, so display it. The patch also bails out of get_ppc64_symbol_other when st_other bits besides the three used for localentry offsets are set, to avoid hiding any such values. * readelf.c (get_ppc64_symbol_other): Return NULL if st_other field contains unrecognised or reserved values. Handle localentry:1 value. --- diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 600f326769c..673bd904dc8 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,9 @@ +2018-08-23 Alan Modra + + * readelf.c (get_ppc64_symbol_other): Return NULL if st_other + field contains unrecognised or reserved values. Handle + localentry:1 value. + 2018-08-23 H.J. Lu PR ld/23536 diff --git a/binutils/readelf.c b/binutils/readelf.c index a936ff37587..2d9d48d002b 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -11088,11 +11088,16 @@ get_ia64_symbol_other (Filedata * filedata, unsigned int other) static const char * get_ppc64_symbol_other (unsigned int other) { - if (PPC64_LOCAL_ENTRY_OFFSET (other) != 0) + if ((other & ~STO_PPC64_LOCAL_MASK) != 0) + return NULL; + + other >>= STO_PPC64_LOCAL_BIT; + if (other <= 6) { static char buf[32]; - snprintf (buf, sizeof buf, _(": %d"), - PPC64_LOCAL_ENTRY_OFFSET (other)); + if (other >= 2) + other = ppc64_decode_local_entry (other); + snprintf (buf, sizeof buf, _(": %d"), other); return buf; } return NULL;