readelf display of 0x800...000 addend
Alan Modra
amodra@gmail.com
Wed Jul 22 13:28:00 GMT 2015
Nick, in commit 834f871cdc, you changed readelf to display
sym + 8000...0000 for rela relocs with a MIN_INT addend.
Previously we showed sym - 8000...0000, which I think is a little more
correct if readelf is showing signed addends. Was the change just to
avoid a ubsan warning about negation of MIN_INT? If so, we can avoid
the warning by simply doing unsigned arithmetic.
* readelf.c (dump_relocations): Show MIN_INT addends as negative.
OK?
diff --git a/binutils/readelf.c b/binutils/readelf.c
index c313db4..a9b9f2d 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -1608,12 +1608,9 @@ dump_relocations (FILE * file,
if (is_rela)
{
- bfd_signed_vma off = rels[i].r_addend;
+ bfd_vma off = rels[i].r_addend;
- /* PR 17531: file: 2e63226f. */
- if (off == ((bfd_signed_vma) 1) << ((sizeof (bfd_signed_vma) * 8) - 1))
- printf (" + %" BFD_VMA_FMT "x", off);
- else if (off < 0)
+ if ((bfd_signed_vma) off < 0)
printf (" - %" BFD_VMA_FMT "x", - off);
else
printf (" + %" BFD_VMA_FMT "x", off);
@@ -1622,13 +1619,10 @@ dump_relocations (FILE * file,
}
else if (is_rela)
{
- bfd_signed_vma off = rels[i].r_addend;
+ bfd_vma off = rels[i].r_addend;
printf ("%*c", is_32bit_elf ? 12 : 20, ' ');
- /* PR 17531: file: 2e63226f. */
- if (off == ((bfd_signed_vma) 1) << ((sizeof (bfd_signed_vma) * 8) - 1))
- printf ("%" BFD_VMA_FMT "x", off);
- else if (off < 0)
+ if ((bfd_signed_vma) off < 0)
printf ("-%" BFD_VMA_FMT "x", - off);
else
printf ("%" BFD_VMA_FMT "x", off);
--
Alan Modra
Australia Development Lab, IBM
More information about the Binutils
mailing list