[PATCH] D69997: [llvm-objdump] Print relocation addends in hexadecimal

James Henderson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 12 06:15:31 PST 2019


jhenderson added a comment.

By the way, this needs to print differently for 64 bit versus 32 bit ELF, although I'm not sure that this needs to necessarily be part of this change.



================
Comment at: llvm/tools/llvm-objdump/ELFDump.cpp:113
+      if (Addend < 0)
+        Addend = -Addend;
+
----------------
davidb wrote:
> jhenderson wrote:
> > davidb wrote:
> > > jhenderson wrote:
> > > > davidb wrote:
> > > > > jhenderson wrote:
> > > > > > Won't this fail for minimum int64_t?
> > > > > Yes. Is there a better abs implementation or function in LLVM that works around this case?
> > > > I'm not aware of one, unfortunately, but do you need it?
> > > > 
> > > > My reading of the code is that format(AddendFmt, Addend) combined with the PRIx64 (which uses a signed integer type) you used above should be sufficient.
> > > Yes, I need the absolute value for the string representation so `foo-0x4` rather than `foo+0xfffffffc`....
> > Right, of course, sorry.
> > 
> > The answer to [[ https://stackoverflow.com/questions/17313579/is-there-a-safe-way-to-get-the-unsigned-absolute-value-of-a-signed-integer-with | this stack overflow post ]] suggests the way to do it is to cast the type to the unsigned equivalent and then negating it (rather than the other way around). I haven't tested that this works though. You should add a test case for it.
> Might be tricky given that objtoyaml can't seem to parse large signed integers,
yaml2obj can handle the following yaml fine for me (the integer is 0x8000000000000000):

```
--- !ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    ET_REL
  Machine: EM_X86_64
Sections:
  - Name:    .foo
    Type:    SHT_PROGBITS
  - Name:    .rela.foo
    Type:    SHT_RELA
    Info:    .foo
    Relocations:
      - Offset: 0
        Symbol: foo
        Type: R_X86_64_NONE
        Addend: -9223372036854775808
Symbols:
  - Name: foo
```


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D69997/new/

https://reviews.llvm.org/D69997





More information about the llvm-commits mailing list