OSDN Git Service

[WebAssembly] Section symbols must have local binding
authorSam Clegg <sbc@chromium.org>
Fri, 27 Apr 2018 00:17:21 +0000 (00:17 +0000)
committerSam Clegg <sbc@chromium.org>
Fri, 27 Apr 2018 00:17:21 +0000 (00:17 +0000)
Summary: Also test for symbols information in test/MC/WebAssembly/debug-info.ll.

Subscribers: jfb, dschuff, jgravelle-google, aheejin, sunfish, JDevlieghere, llvm-commits

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

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

lib/MC/WasmObjectWriter.cpp
lib/Object/WasmObjectFile.cpp
test/MC/WebAssembly/debug-info.ll
test/Object/Inputs/trivial-object-test.wasm
test/tools/llvm-objdump/Inputs/trivial.obj.wasm
test/tools/llvm-readobj/Inputs/trivial.obj.wasm
tools/llvm-readobj/WasmDumper.cpp

index 88bd046..05fc336 100644 (file)
@@ -1220,7 +1220,7 @@ void WasmObjectWriter::writeObject(MCAssembler &Asm,
     wasm::WasmSymbolInfo Info;
     Info.Name = SectionSym->getName();
     Info.Kind = wasm::WASM_SYMBOL_TYPE_SECTION;
-    Info.Flags = 0;
+    Info.Flags = wasm::WASM_SYMBOL_BINDING_LOCAL;
     Info.ElementIndex = ElementIndex;
     SymbolIndices[SectionSym] = SymbolInfos.size();
     SymbolInfos.emplace_back(Info);
index 121e1f9..d37057f 100644 (file)
@@ -466,6 +466,10 @@ Error WasmObjectFile::parseLinkingSectionSymtab(const uint8_t *&Ptr,
       break;
 
     case wasm::WASM_SYMBOL_TYPE_SECTION: {
+      if ((Info.Flags & wasm::WASM_SYMBOL_BINDING_MASK) !=
+          wasm::WASM_SYMBOL_BINDING_LOCAL)
+        return make_error<GenericBinaryError>("Section symbol must have local binding",
+                                              object_error::parse_failed);
       Info.ElementIndex = readVaruint32(Ptr);
       // Use somewhat unique section name as symbol name.
       StringRef SectionName = Sections[Info.ElementIndex].Name;
index 9df379f..77d4743 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: llc -filetype=obj %s -o - | llvm-readobj -r -s | FileCheck %s
+; RUN: llc -filetype=obj %s -o - | llvm-readobj -r -s -symbols | FileCheck %s
 
 ; CHECK: Format: WASM
 ; CHECK-NEXT:Arch: wasm32
 ; CHECK-NEXT:    0x2B R_WEBASSEMBLY_FUNCTION_OFFSET_I32[8] 0
 ; CHECK-NEXT:  }
 ; CHECK-NEXT:]
+; CHECK-NEXT:Symbols [
+; CHECK-NEXT:  Symbol {
+; CHECK-NEXT:    Name: .debug_str
+; CHECK-NEXT:    Type: SECTION (0x3)
+; CHECK-NEXT:    Flags: 0x2
+; CHECK-NEXT:  }
+; CHECK-NEXT:  Symbol {
+; CHECK-NEXT:    Name: .debug_abbrev
+; CHECK-NEXT:    Type: SECTION (0x3)
+; CHECK-NEXT:    Flags: 0x2
+; CHECK-NEXT:  }
+; CHECK-NEXT:  Symbol {
+; CHECK-NEXT:    Name: .debug_info
+; CHECK-NEXT:    Type: SECTION (0x3)
+; CHECK-NEXT:    Flags: 0x2
+; CHECK-NEXT:  }
+; CHECK-NEXT:  Symbol {
+; CHECK-NEXT:    Name: .debug_ranges
+; CHECK-NEXT:    Type: SECTION (0x3)
+; CHECK-NEXT:    Flags: 0x2
+; CHECK-NEXT:  }
+; CHECK-NEXT:  Symbol {
+; CHECK-NEXT:    Name: .debug_macinfo
+; CHECK-NEXT:    Type: SECTION (0x3)
+; CHECK-NEXT:    Flags: 0x2
+; CHECK-NEXT:  }
+; CHECK-NEXT:  Symbol {
+; CHECK-NEXT:    Name: .debug_pubnames
+; CHECK-NEXT:    Type: SECTION (0x3)
+; CHECK-NEXT:    Flags: 0x2
+; CHECK-NEXT:  }
+; CHECK-NEXT:  Symbol {
+; CHECK-NEXT:    Name: .debug_pubtypes
+; CHECK-NEXT:    Type: SECTION (0x3)
+; CHECK-NEXT:    Flags: 0x2
+; CHECK-NEXT:  }
+; CHECK-NEXT:  Symbol {
+; CHECK-NEXT:    Name: .debug_line
+; CHECK-NEXT:    Type: SECTION (0x3)
+; CHECK-NEXT:    Flags: 0x2
+; CHECK-NEXT:  }
+; CHECK-NEXT:  Symbol {
+; CHECK-NEXT:    Name: f2
+; CHECK-NEXT:    Type: FUNCTION (0x0)
+; CHECK-NEXT:    Flags: 0x4
+; CHECK-NEXT:  }
+; CHECK-NEXT:  Symbol {
+; CHECK-NEXT:    Name: foo
+; CHECK-NEXT:    Type: DATA (0x1)
+; CHECK-NEXT:    Flags: 0x4
+; CHECK-NEXT:  }
+; CHECK-NEXT:  Symbol {
+; CHECK-NEXT:    Name: myextern
+; CHECK-NEXT:    Type: DATA (0x1)
+; CHECK-NEXT:    Flags: 0x10
+; CHECK-NEXT:  }
+; CHECK-NEXT:  Symbol {
+; CHECK-NEXT:    Name: ptr2
+; CHECK-NEXT:    Type: DATA (0x1)
+; CHECK-NEXT:    Flags: 0x4
+; CHECK-NEXT:  }
+; CHECK-NEXT:]
 
 target triple = "wasm32-unknown-unknown-wasm"
 
index 2aa042d..f7da9c5 100644 (file)
Binary files a/test/Object/Inputs/trivial-object-test.wasm and b/test/Object/Inputs/trivial-object-test.wasm differ
index 2aa042d..f7da9c5 100644 (file)
Binary files a/test/tools/llvm-objdump/Inputs/trivial.obj.wasm and b/test/tools/llvm-objdump/Inputs/trivial.obj.wasm differ
index 0e3efb6..9d55ad2 100644 (file)
Binary files a/test/tools/llvm-readobj/Inputs/trivial.obj.wasm and b/test/tools/llvm-readobj/Inputs/trivial.obj.wasm differ
index 63ec0b7..562c76f 100644 (file)
@@ -27,6 +27,7 @@ static const EnumEntry<unsigned> WasmSymbolTypes[] = {
   ENUM_ENTRY(FUNCTION),
   ENUM_ENTRY(DATA),
   ENUM_ENTRY(GLOBAL),
+  ENUM_ENTRY(SECTION),
 #undef ENUM_ENTRY
 };