[Objdump] Output information about common symbols in a way closer to GNU objdump.
[oota-llvm.git] / tools / llvm-objdump / llvm-objdump.cpp
index f9660fef9fc5810bbf9eec68d8e00f2f94467615..1204a973d45849ac61bff3ebc4c944859b8afdee 100644 (file)
@@ -642,7 +642,15 @@ void llvm::PrintSymbolTable(const ObjectFile *o) {
     bool Global = Flags & SymbolRef::SF_Global;
     bool Weak = Flags & SymbolRef::SF_Weak;
     bool Absolute = Flags & SymbolRef::SF_Absolute;
-
+    bool Common = Flags & SymbolRef::SF_Common;
+
+    if (Common) {
+      uint32_t Alignment;
+      if (error(Symbol.getAlignment(Alignment)))
+        Alignment = 0;
+      Address = Size;
+      Size = Alignment;
+    }
     if (Address == UnknownAddressOrSize)
       Address = 0;
     if (Size == UnknownAddressOrSize)
@@ -672,6 +680,8 @@ void llvm::PrintSymbolTable(const ObjectFile *o) {
            << ' ';
     if (Absolute) {
       outs() << "*ABS*";
+    } else if (Common) {
+      outs() << "*COM*";
     } else if (Section == o->section_end()) {
       outs() << "*UND*";
     } else {
@@ -894,7 +904,8 @@ int main(int argc, char **argv) {
       && !WeakBind
       && !(UniversalHeaders && MachOOpt)
       && !(ArchiveHeaders && MachOOpt)
-      && !(IndirectSymbols && MachOOpt)) {
+      && !(IndirectSymbols && MachOOpt)
+      && !(DataInCode && MachOOpt)) {
     cl::PrintHelpMessage();
     return 2;
   }