[llvm] r270813 - llvm-objdump: support dumping AUX records for weak externals

Saleem Abdulrasool via llvm-commits llvm-commits at lists.llvm.org
Wed May 25 18:45:13 PDT 2016


Author: compnerd
Date: Wed May 25 20:45:12 2016
New Revision: 270813

URL: http://llvm.org/viewvc/llvm-project?rev=270813&view=rev
Log:
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).

This reapplies the previous patch with a modification which hopefully should fix
the endianness issues.  The variadic call would promote the ulittle32_t to a
uint32_t which would lose the byte-swapping behaviour desired.

Added:
    llvm/trunk/test/Object/Inputs/COFF/weak-externals.yaml
    llvm/trunk/test/Object/coff-weak-externals.test
Removed:
    llvm/trunk/test/Object/Inputs/COFF/weak-externals.obj
Modified:
    llvm/trunk/tools/llvm-objdump/COFFDump.cpp

Removed: llvm/trunk/test/Object/Inputs/COFF/weak-externals.obj
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/Inputs/COFF/weak-externals.obj?rev=270812&view=auto
==============================================================================
Binary files llvm/trunk/test/Object/Inputs/COFF/weak-externals.obj (original) and llvm/trunk/test/Object/Inputs/COFF/weak-externals.obj (removed) differ

Added: llvm/trunk/test/Object/Inputs/COFF/weak-externals.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/Inputs/COFF/weak-externals.yaml?rev=270813&view=auto
==============================================================================
--- llvm/trunk/test/Object/Inputs/COFF/weak-externals.yaml (added)
+++ llvm/trunk/test/Object/Inputs/COFF/weak-externals.yaml Wed May 25 20:45:12 2016
@@ -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
+...

Added: llvm/trunk/test/Object/coff-weak-externals.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/coff-weak-externals.test?rev=270813&view=auto
==============================================================================
--- llvm/trunk/test/Object/coff-weak-externals.test (added)
+++ llvm/trunk/test/Object/coff-weak-externals.test Wed May 25 20:45:12 2016
@@ -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 indx 9 srch 2
+

Modified: llvm/trunk/tools/llvm-objdump/COFFDump.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objdump/COFFDump.cpp?rev=270813&r1=270812&r2=270813&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-objdump/COFFDump.cpp (original)
+++ llvm/trunk/tools/llvm-objdump/COFFDump.cpp Wed May 25 20:45:12 2016
@@ -653,6 +653,13 @@ void llvm::printCOFFSymbolTable(const CO
 
         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("indx %d srch %d\n",
+                                   static_cast<uint32_t>(awe->TagIndex),
+                                   static_cast<uint32_t>(awe->Characteristics));
       } else {
         outs() << "AUX Unknown\n";
       }




More information about the llvm-commits mailing list