aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-readobj/MachODumper.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-04-12 00:17:33 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-04-12 00:17:33 +0000
commitecf132057979bd5e0d005d042ffcf6fcffbcff22 (patch)
treedd16a6da637b835c0c0b788affc9b6c4cbea841c /llvm/tools/llvm-readobj/MachODumper.cpp
parent766d0dea11a7d47750d128c398f0c8e6c741d855 (diff)
downloadllvm-ecf132057979bd5e0d005d042ffcf6fcffbcff22.zip
llvm-ecf132057979bd5e0d005d042ffcf6fcffbcff22.tar.gz
llvm-ecf132057979bd5e0d005d042ffcf6fcffbcff22.tar.bz2
Add 179294 back, but don't use bit fields so that it works on big endian hosts.
Original message: Print more information about relocations. With this patch llvm-readobj now prints if a relocation is pcrel, its length, if it is extern and if it is scattered. It also refactors the code a bit to use bit fields instead of shifts and masks all over the place. llvm-svn: 179345
Diffstat (limited to 'llvm/tools/llvm-readobj/MachODumper.cpp')
-rw-r--r--llvm/tools/llvm-readobj/MachODumper.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/llvm/tools/llvm-readobj/MachODumper.cpp b/llvm/tools/llvm-readobj/MachODumper.cpp
index 2073ddf..a13593b 100644
--- a/llvm/tools/llvm-readobj/MachODumper.cpp
+++ b/llvm/tools/llvm-readobj/MachODumper.cpp
@@ -330,20 +330,28 @@ void MachODumper::printRelocation(section_iterator SecI,
relocation_iterator RelI) {
uint64_t Offset;
SmallString<32> RelocName;
- int64_t Info;
StringRef SymbolName;
SymbolRef Symbol;
if (error(RelI->getOffset(Offset))) return;
if (error(RelI->getTypeName(RelocName))) return;
- if (error(RelI->getAdditionalInfo(Info))) return;
if (error(RelI->getSymbol(Symbol))) return;
if (error(Symbol.getName(SymbolName))) return;
+ DataRefImpl DR = RelI->getRawDataRefImpl();
+ const MachOObjectFileBase::RelocationEntry *RE = Obj->getRelocation(DR);
+ bool IsScattered = Obj->isScattered(RE);
+
raw_ostream& OS = W.startLine();
OS << W.hex(Offset)
- << " " << RelocName
+ << " " << Obj->isPCRel(RE)
+ << " " << Obj->getLength(RE);
+ if (IsScattered)
+ OS << " n/a";
+ else
+ OS << " " << RE->getExternal();
+ OS << " " << RelocName
+ << " " << IsScattered
<< " " << (SymbolName.size() > 0 ? SymbolName : "-")
- << " " << W.hex(Info)
<< "\n";
}