Skip to content

Commit

Permalink
[WebAssembly][Object] Record section start offsets at start of payload (
Browse files Browse the repository at this point in the history
#76188)

LLVM ObjectFile currently records the start offsets of sections as the
start of the section header, whereas most other tools (WABT, emscripten,
wasm-tools) record it as the start of the section content, after the
header. This affects binutils tools such as objdump and nm, but not
compilation/assembly (since that is driven by symbols and assembler
labels which already have their values inside the section payload rather
in the header. This patch updates LLVM to match the other tools.
  • Loading branch information
dschuff committed Dec 21, 2023
1 parent 0110245 commit 35a5df2
Show file tree
Hide file tree
Showing 7 changed files with 58 additions and 58 deletions.
2 changes: 1 addition & 1 deletion llvm/lib/Object/WasmObjectFile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -265,14 +265,14 @@ static wasm::WasmTableType readTableType(WasmObjectFile::ReadContext &Ctx) {

static Error readSection(WasmSection &Section, WasmObjectFile::ReadContext &Ctx,
WasmSectionOrderChecker &Checker) {
Section.Offset = Ctx.Ptr - Ctx.Start;
Section.Type = readUint8(Ctx);
LLVM_DEBUG(dbgs() << "readSection type=" << Section.Type << "\n");
// When reading the section's size, store the size of the LEB used to encode
// it. This allows objcopy/strip to reproduce the binary identically.
const uint8_t *PreSizePtr = Ctx.Ptr;
uint32_t Size = readVaruint32(Ctx);
Section.HeaderSecSizeEncodingLen = Ctx.Ptr - PreSizePtr;
Section.Offset = Ctx.Ptr - Ctx.Start;
if (Size == 0)
return make_error<StringError>("zero length section",
object_error::parse_failed);
Expand Down
6 changes: 3 additions & 3 deletions llvm/test/MC/WebAssembly/custom-sections.ll
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,18 @@ target triple = "wasm32-unknown-unknown"
; CHECK: Section {
; CHECK: Type: CUSTOM (0x0)
; CHECK: Size: 3
; CHECK: Offset: 38
; CHECK: Offset: 44
; CHECK: Name: red
; CHECK: }
; CHECK: Section {
; CHECK: Type: CUSTOM (0x0)
; CHECK: Size: 6
; CHECK: Offset: 51
; CHECK: Offset: 57
; CHECK: Name: green
; CHECK: }
; CHECK: Section {
; CHECK: Type: CUSTOM (0x0)
; CHECK: Size: 25
; CHECK: Offset: 84
; CHECK: Offset: 90
; CHECK: Name: producers
; CHECK: }
44 changes: 22 additions & 22 deletions llvm/test/MC/WebAssembly/debug-info.ll
Original file line number Diff line number Diff line change
Expand Up @@ -7,37 +7,37 @@
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: TYPE (0x1)
; CHECK-NEXT: Size: 4
; CHECK-NEXT: Offset: 8
; CHECK-NEXT: Offset: 14
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: IMPORT (0x2)
; CHECK-NEXT: Size: 81
; CHECK-NEXT: Offset: 18
; CHECK-NEXT: Offset: 24
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: FUNCTION (0x3)
; CHECK-NEXT: Size: 2
; CHECK-NEXT: Offset: 105
; CHECK-NEXT: Offset: 111
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: ELEM (0x9)
; CHECK-NEXT: Size: 7
; CHECK-NEXT: Offset: 113
; CHECK-NEXT: Offset: 119
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: DATACOUNT (0xC)
; CHECK-NEXT: Size: 1
; CHECK-NEXT: Offset: 126
; CHECK-NEXT: Offset: 132
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CODE (0xA)
; CHECK-NEXT: Size: 4
; CHECK-NEXT: Offset: 133
; CHECK-NEXT: Offset: 139
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: DATA (0xB)
; CHECK-NEXT: Size: 19
; CHECK-NEXT: Offset: 143
; CHECK-NEXT: Offset: 149
; CHECK-NEXT: Segments [
; CHECK-NEXT: Segment {
; CHECK-NEXT: Name: .data.foo
Expand All @@ -54,91 +54,91 @@
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 86
; CHECK-NEXT: Offset: 168
; CHECK-NEXT: Offset: 174
; CHECK-NEXT: Name: .debug_abbrev
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 114
; CHECK-NEXT: Offset: 274
; CHECK-NEXT: Offset: 280
; CHECK-NEXT: Name: .debug_info
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 48
; CHECK-NEXT: Offset: 406
; CHECK-NEXT: Offset: 412
; CHECK-NEXT: Name: .debug_aranges
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 121
; CHECK-NEXT: Offset: 475
; CHECK-NEXT: Offset: 481
; CHECK-NEXT: Name: .debug_str
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 42
; CHECK-NEXT: Offset: 613
; CHECK-NEXT: Offset: 619
; CHECK-NEXT: Name: .debug_pubnames
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 26
; CHECK-NEXT: Offset: 677
; CHECK-NEXT: Offset: 683
; CHECK-NEXT: Name: .debug_pubtypes
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 56
; CHECK-NEXT: Offset: 725
; CHECK-NEXT: Offset: 731
; CHECK-NEXT: Name: .debug_line
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 91
; CHECK-NEXT: Offset: 799
; CHECK-NEXT: Offset: 805
; CHECK-NEXT: Name: linking
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 9
; CHECK-NEXT: Offset: 904
; CHECK-NEXT: Offset: 910
; CHECK-NEXT: Name: reloc.DATA
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 61
; CHECK-NEXT: Offset: 930
; CHECK-NEXT: Offset: 936
; CHECK-NEXT: Name: reloc..debug_info
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 18
; CHECK-NEXT: Offset: 1015
; CHECK-NEXT: Offset: 1021
; CHECK-NEXT: Name: reloc..debug_aranges
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 6
; CHECK-NEXT: Offset: 1060
; CHECK-NEXT: Offset: 1066
; CHECK-NEXT: Name: reloc..debug_pubnames
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 6
; CHECK-NEXT: Offset: 1094
; CHECK-NEXT: Offset: 1100
; CHECK-NEXT: Name: reloc..debug_pubtypes
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 6
; CHECK-NEXT: Offset: 1128
; CHECK-NEXT: Offset: 1134
; CHECK-NEXT: Name: reloc..debug_line
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 77
; CHECK-NEXT: Offset: 1158
; CHECK-NEXT: Offset: 1164
; CHECK-NEXT: Name: producers
; CHECK-NEXT: }
; CHECK-NEXT:]
Expand Down
46 changes: 23 additions & 23 deletions llvm/test/MC/WebAssembly/debug-info64.ll
Original file line number Diff line number Diff line change
Expand Up @@ -7,37 +7,37 @@
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: TYPE (0x1)
; CHECK-NEXT: Size: 4
; CHECK-NEXT: Offset: 8
; CHECK-NEXT: Offset: 14
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: IMPORT (0x2)
; CHECK-NEXT: Size: 81
; CHECK-NEXT: Offset: 18
; CHECK-NEXT: Offset: 24
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: FUNCTION (0x3)
; CHECK-NEXT: Size: 2
; CHECK-NEXT: Offset: 105
; CHECK-NEXT: Offset: 111
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: ELEM (0x9)
; CHECK-NEXT: Size: 7
; CHECK-NEXT: Offset: 113
; CHECK-NEXT: Offset: 119
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: DATACOUNT (0xC)
; CHECK-NEXT: Size: 1
; CHECK-NEXT: Offset: 126
; CHECK-NEXT: Offset: 132
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CODE (0xA)
; CHECK-NEXT: Size: 4
; CHECK-NEXT: Offset: 133
; CHECK-NEXT: Offset: 139
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: DATA (0xB)
; CHECK-NEXT: Size: 27
; CHECK-NEXT: Offset: 143
; CHECK-NEXT: Offset: 149
; CHECK-NEXT: Segments [
; CHECK-NEXT: Segment {
; CHECK-NEXT: Name: .data.foo
Expand All @@ -54,97 +54,97 @@
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 86
; CHECK-NEXT: Offset: 176
; CHECK-NEXT: Offset: 182
; CHECK-NEXT: Name: .debug_abbrev
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 130
; CHECK-NEXT: Offset: 282
; CHECK-NEXT: Offset: 288
; CHECK-NEXT: Name: .debug_info
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 80
; CHECK-NEXT: Offset: 430
; CHECK-NEXT: Offset: 436
; CHECK-NEXT: Name: .debug_aranges
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 121
; CHECK-NEXT: Offset: 531
; CHECK-NEXT: Offset: 537
; CHECK-NEXT: Name: .debug_str
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 42
; CHECK-NEXT: Offset: 669
; CHECK-NEXT: Offset: 675
; CHECK-NEXT: Name: .debug_pubnames
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 26
; CHECK-NEXT: Offset: 733
; CHECK-NEXT: Offset: 739
; CHECK-NEXT: Name: .debug_pubtypes
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 60
; CHECK-NEXT: Offset: 781
; CHECK-NEXT: Offset: 787
; CHECK-NEXT: Name: .debug_line
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 91
; CHECK-NEXT: Offset: 859
; CHECK-NEXT: Offset: 865
; CHECK-NEXT: Name: linking
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 9
; CHECK-NEXT: Offset: 964
; CHECK-NEXT: Offset: 970
; CHECK-NEXT: Name: reloc.DATA
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 61
; CHECK-NEXT: Offset: 990
; CHECK-NEXT: Offset: 996
; CHECK-NEXT: Name: reloc..debug_info
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 18
; CHECK-NEXT: Offset: 1075
; CHECK-NEXT: Offset: 1081
; CHECK-NEXT: Name: reloc..debug_aranges
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 6
; CHECK-NEXT: Offset: 1120
; CHECK-NEXT: Offset: 1126
; CHECK-NEXT: Name: reloc..debug_pubnames
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 6
; CHECK-NEXT: Offset: 1154
; CHECK-NEXT: Offset: 1160
; CHECK-NEXT: Name: reloc..debug_pubtypes
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 6
; CHECK-NEXT: Offset: 1188
; CHECK-NEXT: Offset: 1194
; CHECK-NEXT: Name: reloc..debug_line
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 77
; CHECK-NEXT: Offset: 1218
; CHECK-NEXT: Offset: 1224
; CHECK-NEXT: Name: producers
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 11
; CHECK-NEXT: Offset: 1311
; CHECK-NEXT: Offset: 1317
; CHECK-NEXT: Name: target_features
; CHECK-NEXT: }
; CHECK-NEXT: ]
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/MC/WebAssembly/tag-section.ll
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,4 @@ define i32 @test_throw1(ptr %p) {

; SEC: Type: TAG (0xD)
; SEC-NEXT: Size: 3
; SEC-NEXT: Offset: 63
; SEC-NEXT: Offset: 69
2 changes: 1 addition & 1 deletion llvm/test/tools/llvm-readobj/wasm/globals.test
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Sections:
# CHECK: Section {
# CHECK-NEXT: Type: DATA (0xB)
# CHECK-NEXT: Size: 7
# CHECK-NEXT: Offset: 8
# CHECK-NEXT: Offset: 14
# CHECK-NEXT: Segments [
# CHECK-NEXT: Segment {
# CHECK-NEXT: Size: 1
Expand Down

0 comments on commit 35a5df2

Please sign in to comment.