]> granicus.if.org Git - llvm/commitdiff
[WebAssembly] Support EXPLICIT_NAME symbols in llvm-readobj
authorDan Gohman <dan433584@gmail.com>
Tue, 30 Apr 2019 19:30:24 +0000 (19:30 +0000)
committerDan Gohman <dan433584@gmail.com>
Tue, 30 Apr 2019 19:30:24 +0000 (19:30 +0000)
Teach llvm-readobj about WASM_SYMBOL_EXPLICIT_NAME.

Differential Revision: https://reviews.llvm.org/D61323

Reviewer: sbc100

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@359602 91177308-0d34-0410-b5e6-96231b3b80d8

lib/ObjectYAML/WasmYAML.cpp
test/tools/llvm-readobj/wasm-imports.test [new file with mode: 0644]
tools/llvm-readobj/WasmDumper.cpp

index 19c7f54aed933b77b4f4382801ae96120abbdfb9..214aa1c780828473f456c6bd68f272204da813ef 100644 (file)
@@ -533,6 +533,7 @@ void ScalarBitSetTraits<WasmYAML::SymbolFlags>::bitset(
   BCaseMask(VISIBILITY_MASK, VISIBILITY_HIDDEN);
   BCaseMask(UNDEFINED, UNDEFINED);
   BCaseMask(EXPORTED, EXPORTED);
+  BCaseMask(EXPLICIT_NAME, EXPLICIT_NAME);
 #undef BCaseMask
 }
 
diff --git a/test/tools/llvm-readobj/wasm-imports.test b/test/tools/llvm-readobj/wasm-imports.test
new file mode 100644 (file)
index 0000000..fd1e5c8
--- /dev/null
@@ -0,0 +1,135 @@
+# RUN: yaml2obj %s | llvm-readobj --symbols | FileCheck %s
+
+# Test symbols with custom import module and name attributes.
+
+--- !WASM
+FileHeader:      
+  Version:         0x00000001
+Sections:        
+  - Type:            TYPE
+    Signatures:      
+      - Index:           0
+        ReturnType:      I32
+        ParamTypes:      []
+      - Index:           1
+        ReturnType:      NORESULT
+        ParamTypes:      []
+  - Type:            IMPORT
+    Imports:         
+      - Module:          env
+        Field:           __linear_memory
+        Kind:            MEMORY
+        Memory:          
+          Initial:         0x00000000
+      - Module:          env
+        Field:           __indirect_function_table
+        Kind:            TABLE
+        Table:           
+          ElemType:        FUNCREF
+          Limits:          
+            Initial:         0x00000000
+      - Module:          red
+        Field:           foo
+        Kind:            FUNCTION
+        SigIndex:        1
+      - Module:          env
+        Field:           green
+        Kind:            FUNCTION
+        SigIndex:        1
+      - Module:          blue
+        Field:           purple
+        Kind:            FUNCTION
+        SigIndex:        1
+  - Type:            FUNCTION
+    FunctionTypes:   [ 0 ]
+  - Type:            CODE
+    Relocations:     
+      - Type:            R_WASM_FUNCTION_INDEX_LEB
+        Index:           1
+        Offset:          0x00000004
+      - Type:            R_WASM_FUNCTION_INDEX_LEB
+        Index:           2
+        Offset:          0x0000000A
+      - Type:            R_WASM_FUNCTION_INDEX_LEB
+        Index:           3
+        Offset:          0x00000010
+    Functions:       
+      - Index:           3
+        Locals:          []
+        Body:            10808080800010818080800010828080800041000B
+  - Type:            CUSTOM
+    Name:            linking
+    Version:         2
+    SymbolTable:     
+      - Index:           0
+        Kind:            FUNCTION
+        Name:            test
+        Flags:           [ VISIBILITY_HIDDEN ]
+        Function:        3
+      - Index:           1
+        Kind:            FUNCTION
+        Name:            foo
+        Flags:           [ UNDEFINED ]
+        Function:        0
+      - Index:           2
+        Kind:            FUNCTION
+        Name:            bar
+        Flags:           [ UNDEFINED, EXPLICIT_NAME ]
+        Function:        1
+      - Index:           3
+        Kind:            FUNCTION
+        Name:            qux
+        Flags:           [ UNDEFINED, EXPLICIT_NAME ]
+        Function:        2
+  - Type:            CUSTOM
+    Name:            producers
+    Tools:           
+      - Name:            clang
+        Version:         '9.0.0 (trunk 359436)'
+...
+# CHECK:      Format: WASM
+# CHECK-NEXT: Arch: wasm32
+# CHECK-NEXT: AddressSize: 32bit
+# CHECK-NEXT: Symbols [
+# CHECK-NEXT:   Symbol {
+# CHECK-NEXT:     Name: test
+# CHECK-NEXT:     Type: FUNCTION (0x0)
+# CHECK-NEXT:     Flags [ (0x4)
+# CHECK-NEXT:       VISIBILITY_HIDDEN (0x4)
+# CHECK-NEXT:     ]
+# CHECK-NEXT:     ElementIndex: 0x3
+# CHECK-NEXT:   }
+# CHECK-NEXT:   Symbol {
+# CHECK-NEXT:     Name: foo
+# CHECK-NEXT:     Type: FUNCTION (0x0)
+# CHECK-NEXT:     Flags [ (0x10)
+# CHECK-NEXT:       UNDEFINED (0x10)
+# CHECK-NEXT:     ]
+# CHECK-NEXT:     ImportName: foo
+# CHECK-NEXT:     ImportModule: red
+# CHECK-NEXT:     ElementIndex: 0x0
+# CHECK-NEXT:   }
+# CHECK-NEXT:   Symbol {
+# CHECK-NEXT:     Name: bar
+# CHECK-NEXT:     Type: FUNCTION (0x0)
+# CHECK-NEXT:     Flags [ (0x50)
+# CHECK-NEXT:       EXPLICIT_NAME (0x40)
+# CHECK-NEXT:       UNDEFINED (0x10)
+# CHECK-NEXT:     ]
+# CHECK-NEXT:     ImportName: green
+# CHECK-NEXT:     ImportModule: env
+# CHECK-NEXT:     ElementIndex: 0x1
+# CHECK-NEXT:   }
+# CHECK-NEXT:   Symbol {
+# CHECK-NEXT:     Name: qux
+# CHECK-NEXT:     Type: FUNCTION (0x0)
+# CHECK-NEXT:     Flags [ (0x50)
+# CHECK-NEXT:       EXPLICIT_NAME (0x40)
+# CHECK-NEXT:       UNDEFINED (0x10)
+# CHECK-NEXT:     ]
+# CHECK-NEXT:     ImportName: purple
+# CHECK-NEXT:     ImportModule: blue
+# CHECK-NEXT:     ElementIndex: 0x2
+# CHECK-NEXT:   }
+# CHECK-NEXT: ]
index e232d1124ddfa4b04cbcc35bd039a2c57bd5cbaf..041a9a15bdb64410ec5128f70d90868ffc89ca16 100644 (file)
@@ -50,6 +50,7 @@ static const EnumEntry<unsigned> WasmSymbolFlags[] = {
   ENUM_ENTRY(VISIBILITY_HIDDEN),
   ENUM_ENTRY(UNDEFINED),
   ENUM_ENTRY(EXPORTED),
+  ENUM_ENTRY(EXPLICIT_NAME),
 #undef ENUM_ENTRY
 };