summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorSam Clegg <sbc@chromium.org>2018-04-27 00:17:21 +0000
committerSam Clegg <sbc@chromium.org>2018-04-27 00:17:21 +0000
commitd5504a0a6261f59482c1d6d9a2d022757b795aa7 (patch)
tree28f5a27fc1230544ccf01c8adf781c781597ea0e /llvm
parent34ec0bfb5ecee851d31d77a21dd69d49d58eb6b5 (diff)
downloadbcm5719-llvm-d5504a0a6261f59482c1d6d9a2d022757b795aa7.tar.gz
bcm5719-llvm-d5504a0a6261f59482c1d6d9a2d022757b795aa7.zip
[WebAssembly] Section symbols must have local binding
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 llvm-svn: 331005
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/MC/WasmObjectWriter.cpp2
-rw-r--r--llvm/lib/Object/WasmObjectFile.cpp4
-rw-r--r--llvm/test/MC/WebAssembly/debug-info.ll64
-rw-r--r--llvm/test/Object/Inputs/trivial-object-test.wasmbin324 -> 321 bytes
-rw-r--r--llvm/test/tools/llvm-objdump/Inputs/trivial.obj.wasmbin324 -> 321 bytes
-rw-r--r--llvm/test/tools/llvm-readobj/Inputs/trivial.obj.wasmbin295 -> 292 bytes
-rw-r--r--llvm/tools/llvm-readobj/WasmDumper.cpp1
7 files changed, 69 insertions, 2 deletions
diff --git a/llvm/lib/MC/WasmObjectWriter.cpp b/llvm/lib/MC/WasmObjectWriter.cpp
index 88bd046ec6e..05fc3362745 100644
--- a/llvm/lib/MC/WasmObjectWriter.cpp
+++ b/llvm/lib/MC/WasmObjectWriter.cpp
@@ -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);
diff --git a/llvm/lib/Object/WasmObjectFile.cpp b/llvm/lib/Object/WasmObjectFile.cpp
index 121e1f98f3e..d37057fc391 100644
--- a/llvm/lib/Object/WasmObjectFile.cpp
+++ b/llvm/lib/Object/WasmObjectFile.cpp
@@ -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;
diff --git a/llvm/test/MC/WebAssembly/debug-info.ll b/llvm/test/MC/WebAssembly/debug-info.ll
index 9df379ff1e1..77d47437485 100644
--- a/llvm/test/MC/WebAssembly/debug-info.ll
+++ b/llvm/test/MC/WebAssembly/debug-info.ll
@@ -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
@@ -161,6 +161,68 @@
; 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"
diff --git a/llvm/test/Object/Inputs/trivial-object-test.wasm b/llvm/test/Object/Inputs/trivial-object-test.wasm
index 2aa042d54dc..f7da9c58594 100644
--- a/llvm/test/Object/Inputs/trivial-object-test.wasm
+++ b/llvm/test/Object/Inputs/trivial-object-test.wasm
Binary files differ
diff --git a/llvm/test/tools/llvm-objdump/Inputs/trivial.obj.wasm b/llvm/test/tools/llvm-objdump/Inputs/trivial.obj.wasm
index 2aa042d54dc..f7da9c58594 100644
--- a/llvm/test/tools/llvm-objdump/Inputs/trivial.obj.wasm
+++ b/llvm/test/tools/llvm-objdump/Inputs/trivial.obj.wasm
Binary files differ
diff --git a/llvm/test/tools/llvm-readobj/Inputs/trivial.obj.wasm b/llvm/test/tools/llvm-readobj/Inputs/trivial.obj.wasm
index 0e3efb66a7f..9d55ad22cc1 100644
--- a/llvm/test/tools/llvm-readobj/Inputs/trivial.obj.wasm
+++ b/llvm/test/tools/llvm-readobj/Inputs/trivial.obj.wasm
Binary files differ
diff --git a/llvm/tools/llvm-readobj/WasmDumper.cpp b/llvm/tools/llvm-readobj/WasmDumper.cpp
index 63ec0b732ee..562c76f85be 100644
--- a/llvm/tools/llvm-readobj/WasmDumper.cpp
+++ b/llvm/tools/llvm-readobj/WasmDumper.cpp
@@ -27,6 +27,7 @@ static const EnumEntry<unsigned> WasmSymbolTypes[] = {
ENUM_ENTRY(FUNCTION),
ENUM_ENTRY(DATA),
ENUM_ENTRY(GLOBAL),
+ ENUM_ENTRY(SECTION),
#undef ENUM_ENTRY
};
OpenPOWER on IntegriCloud