Skip to content

Commit d705c2f

Browse files
committed
Revert "[WebAssembly] MC layer writes table symbols to object files"
This reverts commit d806618. Review: https://reviews.llvm.org/D92215 We had issues where older versions of wasm-ld were crashing on object files containing a table symbol. We decided that the best strategy going forward is to only generate these symbol if refernece types is enabled. Without reference types enabled we should never geneate a table symbol or a TABLE_NUMBER relocation. This revert is in addition to the one already reverted in https://reviews.llvm.org/D95005. The plan is to re-land these in updated form after the llvm 12 branch. Differential Revision: https://reviews.llvm.org/D95420
1 parent 84c6f32 commit d705c2f

File tree

8 files changed

+18
-71
lines changed

8 files changed

+18
-71
lines changed

llvm/lib/MC/WasmObjectWriter.cpp

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -519,13 +519,6 @@ void WasmObjectWriter::recordRelocation(MCAssembler &Asm,
519519
Sym->setUndefined();
520520
}
521521
Sym->setUsedInReloc();
522-
// Any time we have a TABLE_INDEX relocation against a function symbol, we
523-
// need to ensure that table itself is part of the final output too. In the
524-
// future we may want to define a new kind of reloc against both the
525-
// function and the table, so that the linker can see that the function
526-
// symbol keeps the table alive, but for now manually mark the table as
527-
// live.
528-
Sym->setNoStrip();
529522
Asm.registerSymbol(*Sym);
530523
}
531524

@@ -1678,6 +1671,10 @@ uint64_t WasmObjectWriter::writeOneObject(MCAssembler &Asm,
16781671
WS.setIndex(InvalidIndex);
16791672
continue;
16801673
}
1674+
if (WS.isTable() && WS.getName() == "__indirect_function_table") {
1675+
// For the moment, don't emit table symbols -- wasm-ld can't handle them.
1676+
continue;
1677+
}
16811678
LLVM_DEBUG(dbgs() << "adding to symtab: " << WS << "\n");
16821679

16831680
uint32_t Flags = 0;

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

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -89,44 +89,44 @@
8989
; CHECK-NEXT: }
9090
; CHECK-NEXT: Section {
9191
; CHECK-NEXT: Type: CUSTOM (0x0)
92-
; CHECK-NEXT: Size: 95
92+
; CHECK-NEXT: Size: 91
9393
; CHECK-NEXT: Offset: 731
9494
; CHECK-NEXT: Name: linking
9595
; CHECK-NEXT: }
9696
; CHECK-NEXT: Section {
9797
; CHECK-NEXT: Type: CUSTOM (0x0)
9898
; CHECK-NEXT: Size: 9
99-
; CHECK-NEXT: Offset: 840
99+
; CHECK-NEXT: Offset: 836
100100
; CHECK-NEXT: Name: reloc.DATA
101101
; CHECK-NEXT: }
102102
; CHECK-NEXT: Section {
103103
; CHECK-NEXT: Type: CUSTOM (0x0)
104104
; CHECK-NEXT: Size: 61
105-
; CHECK-NEXT: Offset: 866
105+
; CHECK-NEXT: Offset: 862
106106
; CHECK-NEXT: Name: reloc..debug_info
107107
; CHECK-NEXT: }
108108
; CHECK-NEXT: Section {
109109
; CHECK-NEXT: Type: CUSTOM (0x0)
110110
; CHECK-NEXT: Size: 6
111-
; CHECK-NEXT: Offset: 951
111+
; CHECK-NEXT: Offset: 947
112112
; CHECK-NEXT: Name: reloc..debug_pubnames
113113
; CHECK-NEXT: }
114114
; CHECK-NEXT: Section {
115115
; CHECK-NEXT: Type: CUSTOM (0x0)
116116
; CHECK-NEXT: Size: 6
117-
; CHECK-NEXT: Offset: 985
117+
; CHECK-NEXT: Offset: 981
118118
; CHECK-NEXT: Name: reloc..debug_pubtypes
119119
; CHECK-NEXT: }
120120
; CHECK-NEXT: Section {
121121
; CHECK-NEXT: Type: CUSTOM (0x0)
122122
; CHECK-NEXT: Size: 6
123-
; CHECK-NEXT: Offset: 1019
123+
; CHECK-NEXT: Offset: 1015
124124
; CHECK-NEXT: Name: reloc..debug_line
125125
; CHECK-NEXT: }
126126
; CHECK-NEXT: Section {
127127
; CHECK-NEXT: Type: CUSTOM (0x0)
128128
; CHECK-NEXT: Size: 77
129-
; CHECK-NEXT: Offset: 1049
129+
; CHECK-NEXT: Offset: 1045
130130
; CHECK-NEXT: Name: producers
131131
; CHECK-NEXT: }
132132
; CHECK-NEXT:]
@@ -238,16 +238,6 @@
238238
; CHECK-NEXT: ]
239239
; CHECK-NEXT: ElementIndex: 0xC
240240
; CHECK-NEXT: }
241-
; CHECK-NEXT: Symbol {
242-
; CHECK-NEXT: Name: __indirect_function_table
243-
; CHECK-NEXT: Type: TABLE (0x5)
244-
; CHECK-NEXT: Flags [ (0x90)
245-
; CHECK-NEXT: NO_STRIP (0x80)
246-
; CHECK-NEXT: UNDEFINED (0x10)
247-
; CHECK-NEXT: ]
248-
; CHECK-NEXT: ImportModule: env
249-
; CHECK-NEXT: ElementIndex: 0x0
250-
; CHECK-NEXT: }
251241
; CHECK-NEXT:]
252242

253243
; generated from the following C code using: clang --target=wasm32 -g -O0 -S -emit-llvm test.c

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

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -89,44 +89,44 @@
8989
; CHECK-NEXT: }
9090
; CHECK-NEXT: Section {
9191
; CHECK-NEXT: Type: CUSTOM (0x0)
92-
; CHECK-NEXT: Size: 95
92+
; CHECK-NEXT: Size: 91
9393
; CHECK-NEXT: Offset: 759
9494
; CHECK-NEXT: Name: linking
9595
; CHECK-NEXT: }
9696
; CHECK-NEXT: Section {
9797
; CHECK-NEXT: Type: CUSTOM (0x0)
9898
; CHECK-NEXT: Size: 9
99-
; CHECK-NEXT: Offset: 868
99+
; CHECK-NEXT: Offset: 864
100100
; CHECK-NEXT: Name: reloc.DATA
101101
; CHECK-NEXT: }
102102
; CHECK-NEXT: Section {
103103
; CHECK-NEXT: Type: CUSTOM (0x0)
104104
; CHECK-NEXT: Size: 61
105-
; CHECK-NEXT: Offset: 894
105+
; CHECK-NEXT: Offset: 890
106106
; CHECK-NEXT: Name: reloc..debug_info
107107
; CHECK-NEXT: }
108108
; CHECK-NEXT: Section {
109109
; CHECK-NEXT: Type: CUSTOM (0x0)
110110
; CHECK-NEXT: Size: 6
111-
; CHECK-NEXT: Offset: 979
111+
; CHECK-NEXT: Offset: 975
112112
; CHECK-NEXT: Name: reloc..debug_pubnames
113113
; CHECK-NEXT: }
114114
; CHECK-NEXT: Section {
115115
; CHECK-NEXT: Type: CUSTOM (0x0)
116116
; CHECK-NEXT: Size: 6
117-
; CHECK-NEXT: Offset: 1013
117+
; CHECK-NEXT: Offset: 1009
118118
; CHECK-NEXT: Name: reloc..debug_pubtypes
119119
; CHECK-NEXT: }
120120
; CHECK-NEXT: Section {
121121
; CHECK-NEXT: Type: CUSTOM (0x0)
122122
; CHECK-NEXT: Size: 6
123-
; CHECK-NEXT: Offset: 1047
123+
; CHECK-NEXT: Offset: 1043
124124
; CHECK-NEXT: Name: reloc..debug_line
125125
; CHECK-NEXT: }
126126
; CHECK-NEXT: Section {
127127
; CHECK-NEXT: Type: CUSTOM (0x0)
128128
; CHECK-NEXT: Size: 77
129-
; CHECK-NEXT: Offset: 1077
129+
; CHECK-NEXT: Offset: 1073
130130
; CHECK-NEXT: Name: producers
131131
; CHECK-NEXT: }
132132
; CHECK-NEXT: ]
@@ -238,16 +238,6 @@
238238
; CHECK-NEXT: ]
239239
; CHECK-NEXT: ElementIndex: 0xC
240240
; CHECK-NEXT: }
241-
; CHECK-NEXT: Symbol {
242-
; CHECK-NEXT: Name: __indirect_function_table
243-
; CHECK-NEXT: Type: TABLE (0x5)
244-
; CHECK-NEXT: Flags [ (0x90)
245-
; CHECK-NEXT: NO_STRIP (0x80)
246-
; CHECK-NEXT: UNDEFINED (0x10)
247-
; CHECK-NEXT: ]
248-
; CHECK-NEXT: ImportModule: env
249-
; CHECK-NEXT: ElementIndex: 0x0
250-
; CHECK-NEXT: }
251241
; CHECK-NEXT: ]
252242

253243
; generated from the following C code using: clang --target=wasm64 -g -O0 -S -emit-llvm test.c

llvm/test/MC/WebAssembly/function-alias.ll

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,4 @@ define i8* @func() {
4141
; CHECK-NEXT: ]
4242
; CHECK-NEXT: ElementIndex: 0x0
4343
; CHECK-NEXT: }
44-
; CHECK-NEXT: Symbol {
45-
; CHECK-NEXT: Name: __indirect_function_table
46-
; CHECK-NEXT: Type: TABLE (0x5)
47-
; CHECK-NEXT: Flags [ (0x90)
48-
; CHECK-NEXT: NO_STRIP (0x80)
49-
; CHECK-NEXT: UNDEFINED (0x10)
50-
; CHECK-NEXT: ]
51-
; CHECK-NEXT: ImportModule: env
52-
; CHECK-NEXT: ElementIndex: 0x0
53-
; CHECK-NEXT: }
5444
; CHECK-NEXT: ]

llvm/test/MC/WebAssembly/global-ctor-dtor.ll

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -170,11 +170,6 @@ declare void @func3()
170170
; CHECK-NEXT: Name: func0
171171
; CHECK-NEXT: Flags: [ UNDEFINED ]
172172
; CHECK-NEXT: Function: 4
173-
; CHECK-NEXT: - Index: 11
174-
; CHECK-NEXT: Kind: TABLE
175-
; CHECK-NEXT: Name: __indirect_function_table
176-
; CHECK-NEXT: Flags: [ UNDEFINED, NO_STRIP ]
177-
; CHECK-NEXT: Table: 0
178173
; CHECK-NEXT: SegmentInfo:
179174
; CHECK-NEXT: - Index: 0
180175
; CHECK-NEXT: Name: .data.global1

llvm/test/MC/WebAssembly/reloc-pic.s

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -190,11 +190,6 @@ hidden_func:
190190
# CHECK-NEXT: Name: hidden_func
191191
# CHECK-NEXT: Flags: [ BINDING_LOCAL ]
192192
# CHECK-NEXT: Function: 5
193-
# CHECK-NEXT: - Index: 10
194-
# CHECK-NEXT: Kind: TABLE
195-
# CHECK-NEXT: Name: __indirect_function_table
196-
# CHECK-NEXT: Flags: [ UNDEFINED, NO_STRIP ]
197-
# CHECK-NEXT: Table: 0
198193
# CHECK-NEXT: SegmentInfo:
199194
# CHECK-NEXT: - Index: 0
200195
# CHECK-NEXT: Name: .rodata.hidden_data

llvm/test/MC/WebAssembly/type-index.s

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,4 @@ test0:
6666
# BIN-NEXT: Name: test0
6767
# BIN-NEXT: Flags: [ BINDING_LOCAL ]
6868
# BIN-NEXT: Function: 0
69-
# BIN-NEXT: - Index: 1
70-
# BIN-NEXT: Kind: TABLE
71-
# BIN-NEXT: Name: __indirect_function_table
72-
# BIN-NEXT: Flags: [ UNDEFINED, NO_STRIP ]
73-
# BIN-NEXT: Table: 0
7469
# BIN-NEXT: ...

llvm/test/MC/WebAssembly/weak-alias.s

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -227,11 +227,6 @@ alias_address:
227227
# CHECK-NEXT: Flags: [ BINDING_WEAK, VISIBILITY_HIDDEN, NO_STRIP ]
228228
# CHECK-NEXT: Segment: 0
229229
# CHECK-NEXT: Size: 4
230-
# CHECK-NEXT: - Index: 10
231-
# CHECK-NEXT: Kind: TABLE
232-
# CHECK-NEXT: Name: __indirect_function_table
233-
# CHECK-NEXT: Flags: [ UNDEFINED, NO_STRIP ]
234-
# CHECK-NEXT: Table: 0
235230
# CHECK-NEXT: SegmentInfo:
236231
# CHECK-NEXT: - Index: 0
237232
# CHECK-NEXT: Name: .data.bar

0 commit comments

Comments
 (0)