Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Symbolizer][WebAssembly] Use wasm-specific getSymbolSize #82083

Merged
merged 1 commit into from
Feb 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions llvm/lib/Object/SymbolSize.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,13 @@ llvm::object::computeSymbolSizes(const ObjectFile &O) {
return Ret;
}

if (const auto *E = dyn_cast<WasmObjectFile>(&O)) {
for (SymbolRef Sym : E->symbols()) {
Ret.push_back({Sym, E->getSymbolSize(Sym)});
}
return Ret;
}

// Collect sorted symbol addresses. Include dummy addresses for the end
// of each section.
std::vector<SymEntry> Addresses;
Expand Down
53 changes: 44 additions & 9 deletions llvm/test/tools/llvm-symbolizer/wasm-basic.s
Original file line number Diff line number Diff line change
@@ -1,24 +1,59 @@
# REQUIRES: webassembly-registered-target
# RUN: llvm-mc -triple=wasm32-unknown-unknown -filetype=obj %s -o %t.o -g
# RUN: llvm-symbolizer --basenames --output-style=GNU -e %t.o 1 2 3 4 5 6 7 8 9 10 11 12 13 | FileCheck %s

foo:
.functype foo () -> ()
nop
return
end_function

bar:
.functype bar (i32) -> (i32)
local.get 0
nop
return
end_function

# RUN: llvm-symbolizer -e %t.o 3 4 7 8 | FileCheck %s
## Byte 1 is the function length and 2 is the locals declaration.
## Currently no line corresponds to them.
## TODO: create a loc for .functype?

## Test 2 functions to ensure wasm's function-sections system works.
# CHECK: wasm-basic.s:6:0
# CHECK: wasm-basic.s:7:0
# CHECK: wasm-basic.s:11:0
# CHECK: wasm-basic.s:11:0
## Symbols start from (including) the function length and should cover all the
## way to the next symbol start.
## TODO: create a loc for .functype? It could go with the local declarations.

## Byte 1 is the function length, has no loc but the symbol table considers it
## the start of the function
# CHECK: foo
# CHECK-NEXT: ??:0
## Byte 2 is the local declaration, but for some reason DWARF is marking it as line 7.
## TODO: figure out why.
# CHECK-NEXT: foo
# CHECK-NEXT: wasm-basic.s:7
## Byte 3 is actually the nop, line 7
# CHECK-NEXT: foo
# CHECK-NEXT: wasm-basic.s:7
## Byte 4 is the return, line 8
# CHECK-NEXT: foo
# CHECK-NEXT: wasm-basic.s:8
## Byte 5 is the end_function, line 9
# CHECK-NEXT: foo
# CHECK-NEXT: wasm-basic.s:9
## Byte 6 is bar's function length, symbol table considers it part of bar
# CHECK-NEXT: bar
# CHECK-NEXT: ??:0
## Byte 7 bar's local declaration, but DWARF marks it as line 13, like above
# CHECK-NEXT: bar
# CHECK-NEXT: wasm-basic.s:13
## Byte 8 and 9 are actually the local.get on line 13
# CHECK-NEXT: bar
# CHECK-NEXT: wasm-basic.s:13
# CHECK-NEXT: bar
# CHECK-NEXT: wasm-basic.s:13
## Byte 10 is the nop
# CHECK-NEXT: bar
# CHECK-NEXT: wasm-basic.s:14
## Byte b is the return
# CHECK-NEXT: bar
# CHECK-NEXT: wasm-basic.s:15
## Byte c is end_function
# CHECK-NEXT: bar
# CHECK-NEXT: wasm-basic.s:16
Loading