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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179345 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/llvm-readobj/MachODumper.cpp b/tools/llvm-readobj/MachODumper.cpp
index 2073ddf..a13593b 100644
--- a/tools/llvm-readobj/MachODumper.cpp
+++ b/tools/llvm-readobj/MachODumper.cpp
@@ -330,20 +330,28 @@
                                   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";
 }