summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSaleem Abdulrasool <compnerd@compnerd.org>2016-05-25 01:59:32 +0000
committerSaleem Abdulrasool <compnerd@compnerd.org>2016-05-25 01:59:32 +0000
commite7e467aaa985d345ab6d9c40e7726501b49a6899 (patch)
tree850113a98e50f88e1400fee0899e720d01e2ca4e
parent655a145e83aa678d1e0b492820a55d574be46b19 (diff)
downloadbcm5719-llvm-e7e467aaa985d345ab6d9c40e7726501b49a6899.tar.gz
bcm5719-llvm-e7e467aaa985d345ab6d9c40e7726501b49a6899.zip
llvm-objdump: support dumping AUX records for weak externals
This is a support COFF feature. Ensure that we can display the weak externals auxiliary symbol. It contains useful information (such as the default binding and how to resolve the symbol). llvm-svn: 270648
-rw-r--r--llvm/test/Object/Inputs/COFF/weak-externals.yaml26
-rw-r--r--llvm/test/Object/coff-weak-externals.test5
-rw-r--r--llvm/tools/llvm-objdump/COFFDump.cpp6
3 files changed, 37 insertions, 0 deletions
diff --git a/llvm/test/Object/Inputs/COFF/weak-externals.yaml b/llvm/test/Object/Inputs/COFF/weak-externals.yaml
new file mode 100644
index 00000000000..44364186b52
--- /dev/null
+++ b/llvm/test/Object/Inputs/COFF/weak-externals.yaml
@@ -0,0 +1,26 @@
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_ARMNT
+ Characteristics: [ ]
+sections:
+ - Name: .rdata
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
+ Alignment: 1
+ SectionData: ''
+symbols:
+ - Name: Function
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_WEAK_EXTERNAL
+ WeakExternal:
+ TagIndex: 9
+ Characteristics: IMAGE_WEAK_EXTERN_SEARCH_LIBRARY
+ - Name: .weak.Function.default
+ Value: 0
+ SectionNumber: -1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/llvm/test/Object/coff-weak-externals.test b/llvm/test/Object/coff-weak-externals.test
new file mode 100644
index 00000000000..b7a0980ff72
--- /dev/null
+++ b/llvm/test/Object/coff-weak-externals.test
@@ -0,0 +1,5 @@
+RUN: yaml2obj %p/Inputs/COFF/weak-externals.yaml | llvm-objdump -t - | FileCheck %s
+
+CHECK: [ 0](sec 0)(fl 0x00)(ty 0)(scl 69) (nx 1) 0x00000000 Function
+CHECK: AUX tagndx 9 type 2
+
diff --git a/llvm/tools/llvm-objdump/COFFDump.cpp b/llvm/tools/llvm-objdump/COFFDump.cpp
index 6b98b72b5c1..3b72f9bcad7 100644
--- a/llvm/tools/llvm-objdump/COFFDump.cpp
+++ b/llvm/tools/llvm-objdump/COFFDump.cpp
@@ -653,6 +653,12 @@ void llvm::printCOFFSymbolTable(const COFFObjectFile *coff) {
SI = SI + Symbol->getNumberOfAuxSymbols();
break;
+ } else if (Symbol->isWeakExternal()) {
+ const coff_aux_weak_external *awe;
+ error(coff->getAuxSymbol<coff_aux_weak_external>(SI + 1, awe));
+
+ outs() << "AUX " << format("tagndx %d type %d\n", awe->TagIndex,
+ awe->Characteristics);
} else {
outs() << "AUX Unknown\n";
}
OpenPOWER on IntegriCloud