diff options
| author | Sam Clegg <sbc@chromium.org> | 2018-04-27 00:17:21 +0000 |
|---|---|---|
| committer | Sam Clegg <sbc@chromium.org> | 2018-04-27 00:17:21 +0000 |
| commit | d5504a0a6261f59482c1d6d9a2d022757b795aa7 (patch) | |
| tree | 28f5a27fc1230544ccf01c8adf781c781597ea0e /llvm | |
| parent | 34ec0bfb5ecee851d31d77a21dd69d49d58eb6b5 (diff) | |
| download | bcm5719-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.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/Object/WasmObjectFile.cpp | 4 | ||||
| -rw-r--r-- | llvm/test/MC/WebAssembly/debug-info.ll | 64 | ||||
| -rw-r--r-- | llvm/test/Object/Inputs/trivial-object-test.wasm | bin | 324 -> 321 bytes | |||
| -rw-r--r-- | llvm/test/tools/llvm-objdump/Inputs/trivial.obj.wasm | bin | 324 -> 321 bytes | |||
| -rw-r--r-- | llvm/test/tools/llvm-readobj/Inputs/trivial.obj.wasm | bin | 295 -> 292 bytes | |||
| -rw-r--r-- | llvm/tools/llvm-readobj/WasmDumper.cpp | 1 |
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 Binary files differindex 2aa042d54dc..f7da9c58594 100644 --- a/llvm/test/Object/Inputs/trivial-object-test.wasm +++ b/llvm/test/Object/Inputs/trivial-object-test.wasm diff --git a/llvm/test/tools/llvm-objdump/Inputs/trivial.obj.wasm b/llvm/test/tools/llvm-objdump/Inputs/trivial.obj.wasm Binary files differindex 2aa042d54dc..f7da9c58594 100644 --- a/llvm/test/tools/llvm-objdump/Inputs/trivial.obj.wasm +++ b/llvm/test/tools/llvm-objdump/Inputs/trivial.obj.wasm diff --git a/llvm/test/tools/llvm-readobj/Inputs/trivial.obj.wasm b/llvm/test/tools/llvm-readobj/Inputs/trivial.obj.wasm Binary files differindex 0e3efb66a7f..9d55ad22cc1 100644 --- a/llvm/test/tools/llvm-readobj/Inputs/trivial.obj.wasm +++ b/llvm/test/tools/llvm-readobj/Inputs/trivial.obj.wasm 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 }; |

