Skip to content

Commit 35a5df2

Browse files
authored
[WebAssembly][Object] Record section start offsets at start of payload (#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.
1 parent 0110245 commit 35a5df2

File tree

7 files changed

+58
-58
lines changed

7 files changed

+58
-58
lines changed

llvm/lib/Object/WasmObjectFile.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,14 +265,14 @@ static wasm::WasmTableType readTableType(WasmObjectFile::ReadContext &Ctx) {
265265

266266
static Error readSection(WasmSection &Section, WasmObjectFile::ReadContext &Ctx,
267267
WasmSectionOrderChecker &Checker) {
268-
Section.Offset = Ctx.Ptr - Ctx.Start;
269268
Section.Type = readUint8(Ctx);
270269
LLVM_DEBUG(dbgs() << "readSection type=" << Section.Type << "\n");
271270
// When reading the section's size, store the size of the LEB used to encode
272271
// it. This allows objcopy/strip to reproduce the binary identically.
273272
const uint8_t *PreSizePtr = Ctx.Ptr;
274273
uint32_t Size = readVaruint32(Ctx);
275274
Section.HeaderSecSizeEncodingLen = Ctx.Ptr - PreSizePtr;
275+
Section.Offset = Ctx.Ptr - Ctx.Start;
276276
if (Size == 0)
277277
return make_error<StringError>("zero length section",
278278
object_error::parse_failed);

llvm/test/MC/WebAssembly/custom-sections.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,18 @@ target triple = "wasm32-unknown-unknown"
1515
; CHECK: Section {
1616
; CHECK: Type: CUSTOM (0x0)
1717
; CHECK: Size: 3
18-
; CHECK: Offset: 38
18+
; CHECK: Offset: 44
1919
; CHECK: Name: red
2020
; CHECK: }
2121
; CHECK: Section {
2222
; CHECK: Type: CUSTOM (0x0)
2323
; CHECK: Size: 6
24-
; CHECK: Offset: 51
24+
; CHECK: Offset: 57
2525
; CHECK: Name: green
2626
; CHECK: }
2727
; CHECK: Section {
2828
; CHECK: Type: CUSTOM (0x0)
2929
; CHECK: Size: 25
30-
; CHECK: Offset: 84
30+
; CHECK: Offset: 90
3131
; CHECK: Name: producers
3232
; CHECK: }

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

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,37 +7,37 @@
77
; CHECK-NEXT: Section {
88
; CHECK-NEXT: Type: TYPE (0x1)
99
; CHECK-NEXT: Size: 4
10-
; CHECK-NEXT: Offset: 8
10+
; CHECK-NEXT: Offset: 14
1111
; CHECK-NEXT: }
1212
; CHECK-NEXT: Section {
1313
; CHECK-NEXT: Type: IMPORT (0x2)
1414
; CHECK-NEXT: Size: 81
15-
; CHECK-NEXT: Offset: 18
15+
; CHECK-NEXT: Offset: 24
1616
; CHECK-NEXT: }
1717
; CHECK-NEXT: Section {
1818
; CHECK-NEXT: Type: FUNCTION (0x3)
1919
; CHECK-NEXT: Size: 2
20-
; CHECK-NEXT: Offset: 105
20+
; CHECK-NEXT: Offset: 111
2121
; CHECK-NEXT: }
2222
; CHECK-NEXT: Section {
2323
; CHECK-NEXT: Type: ELEM (0x9)
2424
; CHECK-NEXT: Size: 7
25-
; CHECK-NEXT: Offset: 113
25+
; CHECK-NEXT: Offset: 119
2626
; CHECK-NEXT: }
2727
; CHECK-NEXT: Section {
2828
; CHECK-NEXT: Type: DATACOUNT (0xC)
2929
; CHECK-NEXT: Size: 1
30-
; CHECK-NEXT: Offset: 126
30+
; CHECK-NEXT: Offset: 132
3131
; CHECK-NEXT: }
3232
; CHECK-NEXT: Section {
3333
; CHECK-NEXT: Type: CODE (0xA)
3434
; CHECK-NEXT: Size: 4
35-
; CHECK-NEXT: Offset: 133
35+
; CHECK-NEXT: Offset: 139
3636
; CHECK-NEXT: }
3737
; CHECK-NEXT: Section {
3838
; CHECK-NEXT: Type: DATA (0xB)
3939
; CHECK-NEXT: Size: 19
40-
; CHECK-NEXT: Offset: 143
40+
; CHECK-NEXT: Offset: 149
4141
; CHECK-NEXT: Segments [
4242
; CHECK-NEXT: Segment {
4343
; CHECK-NEXT: Name: .data.foo
@@ -54,91 +54,91 @@
5454
; CHECK-NEXT: Section {
5555
; CHECK-NEXT: Type: CUSTOM (0x0)
5656
; CHECK-NEXT: Size: 86
57-
; CHECK-NEXT: Offset: 168
57+
; CHECK-NEXT: Offset: 174
5858
; CHECK-NEXT: Name: .debug_abbrev
5959
; CHECK-NEXT: }
6060
; CHECK-NEXT: Section {
6161
; CHECK-NEXT: Type: CUSTOM (0x0)
6262
; CHECK-NEXT: Size: 114
63-
; CHECK-NEXT: Offset: 274
63+
; CHECK-NEXT: Offset: 280
6464
; CHECK-NEXT: Name: .debug_info
6565
; CHECK-NEXT: }
6666
; CHECK-NEXT: Section {
6767
; CHECK-NEXT: Type: CUSTOM (0x0)
6868
; CHECK-NEXT: Size: 48
69-
; CHECK-NEXT: Offset: 406
69+
; CHECK-NEXT: Offset: 412
7070
; CHECK-NEXT: Name: .debug_aranges
7171
; CHECK-NEXT: }
7272
; CHECK-NEXT: Section {
7373
; CHECK-NEXT: Type: CUSTOM (0x0)
7474
; CHECK-NEXT: Size: 121
75-
; CHECK-NEXT: Offset: 475
75+
; CHECK-NEXT: Offset: 481
7676
; CHECK-NEXT: Name: .debug_str
7777
; CHECK-NEXT: }
7878
; CHECK-NEXT: Section {
7979
; CHECK-NEXT: Type: CUSTOM (0x0)
8080
; CHECK-NEXT: Size: 42
81-
; CHECK-NEXT: Offset: 613
81+
; CHECK-NEXT: Offset: 619
8282
; CHECK-NEXT: Name: .debug_pubnames
8383
; CHECK-NEXT: }
8484
; CHECK-NEXT: Section {
8585
; CHECK-NEXT: Type: CUSTOM (0x0)
8686
; CHECK-NEXT: Size: 26
87-
; CHECK-NEXT: Offset: 677
87+
; CHECK-NEXT: Offset: 683
8888
; CHECK-NEXT: Name: .debug_pubtypes
8989
; CHECK-NEXT: }
9090
; CHECK-NEXT: Section {
9191
; CHECK-NEXT: Type: CUSTOM (0x0)
9292
; CHECK-NEXT: Size: 56
93-
; CHECK-NEXT: Offset: 725
93+
; CHECK-NEXT: Offset: 731
9494
; CHECK-NEXT: Name: .debug_line
9595
; CHECK-NEXT: }
9696
; CHECK-NEXT: Section {
9797
; CHECK-NEXT: Type: CUSTOM (0x0)
9898
; CHECK-NEXT: Size: 91
99-
; CHECK-NEXT: Offset: 799
99+
; CHECK-NEXT: Offset: 805
100100
; CHECK-NEXT: Name: linking
101101
; CHECK-NEXT: }
102102
; CHECK-NEXT: Section {
103103
; CHECK-NEXT: Type: CUSTOM (0x0)
104104
; CHECK-NEXT: Size: 9
105-
; CHECK-NEXT: Offset: 904
105+
; CHECK-NEXT: Offset: 910
106106
; CHECK-NEXT: Name: reloc.DATA
107107
; CHECK-NEXT: }
108108
; CHECK-NEXT: Section {
109109
; CHECK-NEXT: Type: CUSTOM (0x0)
110110
; CHECK-NEXT: Size: 61
111-
; CHECK-NEXT: Offset: 930
111+
; CHECK-NEXT: Offset: 936
112112
; CHECK-NEXT: Name: reloc..debug_info
113113
; CHECK-NEXT: }
114114
; CHECK-NEXT: Section {
115115
; CHECK-NEXT: Type: CUSTOM (0x0)
116116
; CHECK-NEXT: Size: 18
117-
; CHECK-NEXT: Offset: 1015
117+
; CHECK-NEXT: Offset: 1021
118118
; CHECK-NEXT: Name: reloc..debug_aranges
119119
; CHECK-NEXT: }
120120
; CHECK-NEXT: Section {
121121
; CHECK-NEXT: Type: CUSTOM (0x0)
122122
; CHECK-NEXT: Size: 6
123-
; CHECK-NEXT: Offset: 1060
123+
; CHECK-NEXT: Offset: 1066
124124
; CHECK-NEXT: Name: reloc..debug_pubnames
125125
; CHECK-NEXT: }
126126
; CHECK-NEXT: Section {
127127
; CHECK-NEXT: Type: CUSTOM (0x0)
128128
; CHECK-NEXT: Size: 6
129-
; CHECK-NEXT: Offset: 1094
129+
; CHECK-NEXT: Offset: 1100
130130
; CHECK-NEXT: Name: reloc..debug_pubtypes
131131
; CHECK-NEXT: }
132132
; CHECK-NEXT: Section {
133133
; CHECK-NEXT: Type: CUSTOM (0x0)
134134
; CHECK-NEXT: Size: 6
135-
; CHECK-NEXT: Offset: 1128
135+
; CHECK-NEXT: Offset: 1134
136136
; CHECK-NEXT: Name: reloc..debug_line
137137
; CHECK-NEXT: }
138138
; CHECK-NEXT: Section {
139139
; CHECK-NEXT: Type: CUSTOM (0x0)
140140
; CHECK-NEXT: Size: 77
141-
; CHECK-NEXT: Offset: 1158
141+
; CHECK-NEXT: Offset: 1164
142142
; CHECK-NEXT: Name: producers
143143
; CHECK-NEXT: }
144144
; CHECK-NEXT:]

llvm/test/MC/WebAssembly/debug-info64.ll

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -7,37 +7,37 @@
77
; CHECK-NEXT: Section {
88
; CHECK-NEXT: Type: TYPE (0x1)
99
; CHECK-NEXT: Size: 4
10-
; CHECK-NEXT: Offset: 8
10+
; CHECK-NEXT: Offset: 14
1111
; CHECK-NEXT: }
1212
; CHECK-NEXT: Section {
1313
; CHECK-NEXT: Type: IMPORT (0x2)
1414
; CHECK-NEXT: Size: 81
15-
; CHECK-NEXT: Offset: 18
15+
; CHECK-NEXT: Offset: 24
1616
; CHECK-NEXT: }
1717
; CHECK-NEXT: Section {
1818
; CHECK-NEXT: Type: FUNCTION (0x3)
1919
; CHECK-NEXT: Size: 2
20-
; CHECK-NEXT: Offset: 105
20+
; CHECK-NEXT: Offset: 111
2121
; CHECK-NEXT: }
2222
; CHECK-NEXT: Section {
2323
; CHECK-NEXT: Type: ELEM (0x9)
2424
; CHECK-NEXT: Size: 7
25-
; CHECK-NEXT: Offset: 113
25+
; CHECK-NEXT: Offset: 119
2626
; CHECK-NEXT: }
2727
; CHECK-NEXT: Section {
2828
; CHECK-NEXT: Type: DATACOUNT (0xC)
2929
; CHECK-NEXT: Size: 1
30-
; CHECK-NEXT: Offset: 126
30+
; CHECK-NEXT: Offset: 132
3131
; CHECK-NEXT: }
3232
; CHECK-NEXT: Section {
3333
; CHECK-NEXT: Type: CODE (0xA)
3434
; CHECK-NEXT: Size: 4
35-
; CHECK-NEXT: Offset: 133
35+
; CHECK-NEXT: Offset: 139
3636
; CHECK-NEXT: }
3737
; CHECK-NEXT: Section {
3838
; CHECK-NEXT: Type: DATA (0xB)
3939
; CHECK-NEXT: Size: 27
40-
; CHECK-NEXT: Offset: 143
40+
; CHECK-NEXT: Offset: 149
4141
; CHECK-NEXT: Segments [
4242
; CHECK-NEXT: Segment {
4343
; CHECK-NEXT: Name: .data.foo
@@ -54,97 +54,97 @@
5454
; CHECK-NEXT: Section {
5555
; CHECK-NEXT: Type: CUSTOM (0x0)
5656
; CHECK-NEXT: Size: 86
57-
; CHECK-NEXT: Offset: 176
57+
; CHECK-NEXT: Offset: 182
5858
; CHECK-NEXT: Name: .debug_abbrev
5959
; CHECK-NEXT: }
6060
; CHECK-NEXT: Section {
6161
; CHECK-NEXT: Type: CUSTOM (0x0)
6262
; CHECK-NEXT: Size: 130
63-
; CHECK-NEXT: Offset: 282
63+
; CHECK-NEXT: Offset: 288
6464
; CHECK-NEXT: Name: .debug_info
6565
; CHECK-NEXT: }
6666
; CHECK-NEXT: Section {
6767
; CHECK-NEXT: Type: CUSTOM (0x0)
6868
; CHECK-NEXT: Size: 80
69-
; CHECK-NEXT: Offset: 430
69+
; CHECK-NEXT: Offset: 436
7070
; CHECK-NEXT: Name: .debug_aranges
7171
; CHECK-NEXT: }
7272
; CHECK-NEXT: Section {
7373
; CHECK-NEXT: Type: CUSTOM (0x0)
7474
; CHECK-NEXT: Size: 121
75-
; CHECK-NEXT: Offset: 531
75+
; CHECK-NEXT: Offset: 537
7676
; CHECK-NEXT: Name: .debug_str
7777
; CHECK-NEXT: }
7878
; CHECK-NEXT: Section {
7979
; CHECK-NEXT: Type: CUSTOM (0x0)
8080
; CHECK-NEXT: Size: 42
81-
; CHECK-NEXT: Offset: 669
81+
; CHECK-NEXT: Offset: 675
8282
; CHECK-NEXT: Name: .debug_pubnames
8383
; CHECK-NEXT: }
8484
; CHECK-NEXT: Section {
8585
; CHECK-NEXT: Type: CUSTOM (0x0)
8686
; CHECK-NEXT: Size: 26
87-
; CHECK-NEXT: Offset: 733
87+
; CHECK-NEXT: Offset: 739
8888
; CHECK-NEXT: Name: .debug_pubtypes
8989
; CHECK-NEXT: }
9090
; CHECK-NEXT: Section {
9191
; CHECK-NEXT: Type: CUSTOM (0x0)
9292
; CHECK-NEXT: Size: 60
93-
; CHECK-NEXT: Offset: 781
93+
; CHECK-NEXT: Offset: 787
9494
; CHECK-NEXT: Name: .debug_line
9595
; CHECK-NEXT: }
9696
; CHECK-NEXT: Section {
9797
; CHECK-NEXT: Type: CUSTOM (0x0)
9898
; CHECK-NEXT: Size: 91
99-
; CHECK-NEXT: Offset: 859
99+
; CHECK-NEXT: Offset: 865
100100
; CHECK-NEXT: Name: linking
101101
; CHECK-NEXT: }
102102
; CHECK-NEXT: Section {
103103
; CHECK-NEXT: Type: CUSTOM (0x0)
104104
; CHECK-NEXT: Size: 9
105-
; CHECK-NEXT: Offset: 964
105+
; CHECK-NEXT: Offset: 970
106106
; CHECK-NEXT: Name: reloc.DATA
107107
; CHECK-NEXT: }
108108
; CHECK-NEXT: Section {
109109
; CHECK-NEXT: Type: CUSTOM (0x0)
110110
; CHECK-NEXT: Size: 61
111-
; CHECK-NEXT: Offset: 990
111+
; CHECK-NEXT: Offset: 996
112112
; CHECK-NEXT: Name: reloc..debug_info
113113
; CHECK-NEXT: }
114114
; CHECK-NEXT: Section {
115115
; CHECK-NEXT: Type: CUSTOM (0x0)
116116
; CHECK-NEXT: Size: 18
117-
; CHECK-NEXT: Offset: 1075
117+
; CHECK-NEXT: Offset: 1081
118118
; CHECK-NEXT: Name: reloc..debug_aranges
119119
; CHECK-NEXT: }
120120
; CHECK-NEXT: Section {
121121
; CHECK-NEXT: Type: CUSTOM (0x0)
122122
; CHECK-NEXT: Size: 6
123-
; CHECK-NEXT: Offset: 1120
123+
; CHECK-NEXT: Offset: 1126
124124
; CHECK-NEXT: Name: reloc..debug_pubnames
125125
; CHECK-NEXT: }
126126
; CHECK-NEXT: Section {
127127
; CHECK-NEXT: Type: CUSTOM (0x0)
128128
; CHECK-NEXT: Size: 6
129-
; CHECK-NEXT: Offset: 1154
129+
; CHECK-NEXT: Offset: 1160
130130
; CHECK-NEXT: Name: reloc..debug_pubtypes
131131
; CHECK-NEXT: }
132132
; CHECK-NEXT: Section {
133133
; CHECK-NEXT: Type: CUSTOM (0x0)
134134
; CHECK-NEXT: Size: 6
135-
; CHECK-NEXT: Offset: 1188
135+
; CHECK-NEXT: Offset: 1194
136136
; CHECK-NEXT: Name: reloc..debug_line
137137
; CHECK-NEXT: }
138138
; CHECK-NEXT: Section {
139139
; CHECK-NEXT: Type: CUSTOM (0x0)
140140
; CHECK-NEXT: Size: 77
141-
; CHECK-NEXT: Offset: 1218
141+
; CHECK-NEXT: Offset: 1224
142142
; CHECK-NEXT: Name: producers
143143
; CHECK-NEXT: }
144144
; CHECK-NEXT: Section {
145145
; CHECK-NEXT: Type: CUSTOM (0x0)
146146
; CHECK-NEXT: Size: 11
147-
; CHECK-NEXT: Offset: 1311
147+
; CHECK-NEXT: Offset: 1317
148148
; CHECK-NEXT: Name: target_features
149149
; CHECK-NEXT: }
150150
; CHECK-NEXT: ]

llvm/test/MC/WebAssembly/tag-section.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,4 @@ define i32 @test_throw1(ptr %p) {
5353

5454
; SEC: Type: TAG (0xD)
5555
; SEC-NEXT: Size: 3
56-
; SEC-NEXT: Offset: 63
56+
; SEC-NEXT: Offset: 69

llvm/test/tools/llvm-readobj/wasm/globals.test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ Sections:
1919
# CHECK: Section {
2020
# CHECK-NEXT: Type: DATA (0xB)
2121
# CHECK-NEXT: Size: 7
22-
# CHECK-NEXT: Offset: 8
22+
# CHECK-NEXT: Offset: 14
2323
# CHECK-NEXT: Segments [
2424
# CHECK-NEXT: Segment {
2525
# CHECK-NEXT: Size: 1

0 commit comments

Comments
 (0)