Skip to content

Commit d5504a0

Browse files
committedApr 27, 2018
[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
1 parent 34ec0bf commit d5504a0

File tree

7 files changed

+69
-2
lines changed

7 files changed

+69
-2
lines changed
 

‎llvm/lib/MC/WasmObjectWriter.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1220,7 +1220,7 @@ void WasmObjectWriter::writeObject(MCAssembler &Asm,
12201220
wasm::WasmSymbolInfo Info;
12211221
Info.Name = SectionSym->getName();
12221222
Info.Kind = wasm::WASM_SYMBOL_TYPE_SECTION;
1223-
Info.Flags = 0;
1223+
Info.Flags = wasm::WASM_SYMBOL_BINDING_LOCAL;
12241224
Info.ElementIndex = ElementIndex;
12251225
SymbolIndices[SectionSym] = SymbolInfos.size();
12261226
SymbolInfos.emplace_back(Info);

‎llvm/lib/Object/WasmObjectFile.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,10 @@ Error WasmObjectFile::parseLinkingSectionSymtab(const uint8_t *&Ptr,
466466
break;
467467

468468
case wasm::WASM_SYMBOL_TYPE_SECTION: {
469+
if ((Info.Flags & wasm::WASM_SYMBOL_BINDING_MASK) !=
470+
wasm::WASM_SYMBOL_BINDING_LOCAL)
471+
return make_error<GenericBinaryError>("Section symbol must have local binding",
472+
object_error::parse_failed);
469473
Info.ElementIndex = readVaruint32(Ptr);
470474
// Use somewhat unique section name as symbol name.
471475
StringRef SectionName = Sections[Info.ElementIndex].Name;

‎llvm/test/MC/WebAssembly/debug-info.ll

+63-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; RUN: llc -filetype=obj %s -o - | llvm-readobj -r -s | FileCheck %s
1+
; RUN: llc -filetype=obj %s -o - | llvm-readobj -r -s -symbols | FileCheck %s
22

33
; CHECK: Format: WASM
44
; CHECK-NEXT:Arch: wasm32
@@ -161,6 +161,68 @@
161161
; CHECK-NEXT: 0x2B R_WEBASSEMBLY_FUNCTION_OFFSET_I32[8] 0
162162
; CHECK-NEXT: }
163163
; CHECK-NEXT:]
164+
; CHECK-NEXT:Symbols [
165+
; CHECK-NEXT: Symbol {
166+
; CHECK-NEXT: Name: .debug_str
167+
; CHECK-NEXT: Type: SECTION (0x3)
168+
; CHECK-NEXT: Flags: 0x2
169+
; CHECK-NEXT: }
170+
; CHECK-NEXT: Symbol {
171+
; CHECK-NEXT: Name: .debug_abbrev
172+
; CHECK-NEXT: Type: SECTION (0x3)
173+
; CHECK-NEXT: Flags: 0x2
174+
; CHECK-NEXT: }
175+
; CHECK-NEXT: Symbol {
176+
; CHECK-NEXT: Name: .debug_info
177+
; CHECK-NEXT: Type: SECTION (0x3)
178+
; CHECK-NEXT: Flags: 0x2
179+
; CHECK-NEXT: }
180+
; CHECK-NEXT: Symbol {
181+
; CHECK-NEXT: Name: .debug_ranges
182+
; CHECK-NEXT: Type: SECTION (0x3)
183+
; CHECK-NEXT: Flags: 0x2
184+
; CHECK-NEXT: }
185+
; CHECK-NEXT: Symbol {
186+
; CHECK-NEXT: Name: .debug_macinfo
187+
; CHECK-NEXT: Type: SECTION (0x3)
188+
; CHECK-NEXT: Flags: 0x2
189+
; CHECK-NEXT: }
190+
; CHECK-NEXT: Symbol {
191+
; CHECK-NEXT: Name: .debug_pubnames
192+
; CHECK-NEXT: Type: SECTION (0x3)
193+
; CHECK-NEXT: Flags: 0x2
194+
; CHECK-NEXT: }
195+
; CHECK-NEXT: Symbol {
196+
; CHECK-NEXT: Name: .debug_pubtypes
197+
; CHECK-NEXT: Type: SECTION (0x3)
198+
; CHECK-NEXT: Flags: 0x2
199+
; CHECK-NEXT: }
200+
; CHECK-NEXT: Symbol {
201+
; CHECK-NEXT: Name: .debug_line
202+
; CHECK-NEXT: Type: SECTION (0x3)
203+
; CHECK-NEXT: Flags: 0x2
204+
; CHECK-NEXT: }
205+
; CHECK-NEXT: Symbol {
206+
; CHECK-NEXT: Name: f2
207+
; CHECK-NEXT: Type: FUNCTION (0x0)
208+
; CHECK-NEXT: Flags: 0x4
209+
; CHECK-NEXT: }
210+
; CHECK-NEXT: Symbol {
211+
; CHECK-NEXT: Name: foo
212+
; CHECK-NEXT: Type: DATA (0x1)
213+
; CHECK-NEXT: Flags: 0x4
214+
; CHECK-NEXT: }
215+
; CHECK-NEXT: Symbol {
216+
; CHECK-NEXT: Name: myextern
217+
; CHECK-NEXT: Type: DATA (0x1)
218+
; CHECK-NEXT: Flags: 0x10
219+
; CHECK-NEXT: }
220+
; CHECK-NEXT: Symbol {
221+
; CHECK-NEXT: Name: ptr2
222+
; CHECK-NEXT: Type: DATA (0x1)
223+
; CHECK-NEXT: Flags: 0x4
224+
; CHECK-NEXT: }
225+
; CHECK-NEXT:]
164226

165227
target triple = "wasm32-unknown-unknown-wasm"
166228

-3 Bytes
Binary file not shown.
Binary file not shown.
Binary file not shown.

‎llvm/tools/llvm-readobj/WasmDumper.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ static const EnumEntry<unsigned> WasmSymbolTypes[] = {
2727
ENUM_ENTRY(FUNCTION),
2828
ENUM_ENTRY(DATA),
2929
ENUM_ENTRY(GLOBAL),
30+
ENUM_ENTRY(SECTION),
3031
#undef ENUM_ENTRY
3132
};
3233

0 commit comments

Comments
 (0)
Please sign in to comment.