summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2012-12-31 16:05:21 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2012-12-31 16:05:21 +0000
commit144af2cb4d7d4ae0b2784befc60b94f9de3989fb (patch)
tree250ce24942e8a60a7af1c0e9bff5435c31469b9a
parent63d52b1e1c651a186cab35b38e0ced2acb7c71dd (diff)
downloadbcm5719-llvm-144af2cb4d7d4ae0b2784befc60b94f9de3989fb.tar.gz
bcm5719-llvm-144af2cb4d7d4ae0b2784befc60b94f9de3989fb.zip
Print a header above the symbols. Extracted from a patch by Sami Liedes.
llvm-svn: 171302
-rw-r--r--llvm/test/Object/readobj-shared-object.test2
-rw-r--r--llvm/tools/llvm-readobj/llvm-readobj.cpp12
2 files changed, 14 insertions, 0 deletions
diff --git a/llvm/test/Object/readobj-shared-object.test b/llvm/test/Object/readobj-shared-object.test
index 3b5457ce073..8d9b179002b 100644
--- a/llvm/test/Object/readobj-shared-object.test
+++ b/llvm/test/Object/readobj-shared-object.test
@@ -19,6 +19,7 @@ ELF32:Address Size: 32 bits
ELF32:Load Name : libfoo.so
ELF:Symbols:
+ELF: Name Type Address Size FileOffset Flags
ELF: .dynsym DBG {{[0-9a-f]+}} {{[0-9a-f]+}} {{[0-9a-f]+}} formatspecific
ELF: .dynstr DBG {{[0-9a-f]+}} {{[0-9a-f]+}} {{[0-9a-f]+}} formatspecific
ELF: .text DBG {{[0-9a-f]+}} {{[0-9a-f]+}} {{[0-9a-f]+}} formatspecific
@@ -42,6 +43,7 @@ ELF: _edata ? {{[0-9a-f]+}} {{[0-9a-f]+}} {{[0-
ELF: Total: 21
ELF:Dynamic Symbols:
+ELF: Name Type Address Size FileOffset Flags
ELF: common_sym DATA {{[0-9a-f]+}} {{[0-9a-f]+}} {{[0-9a-f]+}} global
ELF: tls_sym DATA {{[0-9a-f]+}} {{[0-9a-f]+}} {{[0-9a-f]+}} global,threadlocal
ELF: defined_sym DATA {{[0-9a-f]+}} {{[0-9a-f]+}} {{[0-9a-f]+}} global
diff --git a/llvm/tools/llvm-readobj/llvm-readobj.cpp b/llvm/tools/llvm-readobj/llvm-readobj.cpp
index 8f8804a7c45..81d2bfb730b 100644
--- a/llvm/tools/llvm-readobj/llvm-readobj.cpp
+++ b/llvm/tools/llvm-readobj/llvm-readobj.cpp
@@ -33,6 +33,16 @@ using namespace llvm::object;
static cl::opt<std::string>
InputFilename(cl::Positional, cl::desc("<input object>"), cl::init(""));
+static void dumpSymbolHeader() {
+ outs() << format(" %-32s", (const char*)"Name")
+ << format(" %-4s", (const char*)"Type")
+ << format(" %-16s", (const char*)"Address")
+ << format(" %-16s", (const char*)"Size")
+ << format(" %-16s", (const char*)"FileOffset")
+ << format(" %-26s", (const char*)"Flags")
+ << "\n";
+}
+
static const char *getTypeStr(SymbolRef::Type Type) {
switch (Type) {
case SymbolRef::ST_Unknown: return "?";
@@ -118,6 +128,7 @@ static void dumpSymbols(const ObjectFile *obj) {
error_code ec;
uint32_t count = 0;
outs() << "Symbols:\n";
+ dumpSymbolHeader();
symbol_iterator it = obj->begin_symbols();
symbol_iterator ie = obj->end_symbols();
while (it != ie) {
@@ -135,6 +146,7 @@ static void dumpDynamicSymbols(const ObjectFile *obj) {
error_code ec;
uint32_t count = 0;
outs() << "Dynamic Symbols:\n";
+ dumpSymbolHeader();
symbol_iterator it = obj->begin_dynamic_symbols();
symbol_iterator ie = obj->end_dynamic_symbols();
while (it != ie) {
OpenPOWER on IntegriCloud