Skip to content

Commit d6ef8da

Browse files
committed
[WebAssembly] Add symbol flag to the binary format llvm.used
Summary: Rather than add a new attribute See WebAssembly/tool-conventions#64 Subscribers: dschuff, jgravelle-google, aheejin, sunfish, rupprecht, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D57864 llvm-svn: 353360
1 parent 40b1c07 commit d6ef8da

File tree

8 files changed

+38
-0
lines changed

8 files changed

+38
-0
lines changed

llvm/include/llvm/BinaryFormat/Wasm.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,7 @@ const unsigned WASM_SYMBOL_BINDING_LOCAL = 0x2;
289289
const unsigned WASM_SYMBOL_VISIBILITY_DEFAULT = 0x0;
290290
const unsigned WASM_SYMBOL_VISIBILITY_HIDDEN = 0x4;
291291
const unsigned WASM_SYMBOL_UNDEFINED = 0x10;
292+
const unsigned WASM_SYMBOL_EXPORTED = 0x20;
292293

293294
#define WASM_RELOC(name, value) name = value,
294295

llvm/include/llvm/MC/MCSymbolWasm.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,13 @@ class MCSymbolWasm : public MCSymbol {
4646
wasm::WasmSymbolType getType() const { return Type; }
4747
void setType(wasm::WasmSymbolType type) { Type = type; }
4848

49+
bool isExported() const {
50+
return getFlags() & wasm::WASM_SYMBOL_EXPORTED;
51+
}
52+
void setExported() const {
53+
modifyFlags(wasm::WASM_SYMBOL_EXPORTED, wasm::WASM_SYMBOL_EXPORTED);
54+
}
55+
4956
bool isWeak() const { return IsWeak; }
5057
void setWeak(bool isWeak) { IsWeak = isWeak; }
5158

llvm/lib/MC/MCAsmInfoWasm.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ void MCAsmInfoWasm::anchor() {}
1818

1919
MCAsmInfoWasm::MCAsmInfoWasm() {
2020
HasIdentDirective = true;
21+
HasNoDeadStrip = true;
2122
WeakRefDirective = "\t.weak\t";
2223
PrivateGlobalPrefix = ".L";
2324
PrivateLabelPrefix = ".L";

llvm/lib/MC/MCWasmStreamer.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,10 @@ bool MCWasmStreamer::EmitSymbolAttribute(MCSymbol *S, MCSymbolAttr Attribute) {
121121
case MCSA_Cold:
122122
break;
123123

124+
case MCSA_NoDeadStrip:
125+
Symbol->setExported();
126+
break;
127+
124128
default:
125129
// unrecognized directive
126130
llvm_unreachable("unexpected MCSymbolAttr");

llvm/lib/MC/WasmObjectWriter.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1454,6 +1454,8 @@ uint64_t WasmObjectWriter::writeObject(MCAssembler &Asm,
14541454
Flags |= wasm::WASM_SYMBOL_BINDING_LOCAL;
14551455
if (WS.isUndefined())
14561456
Flags |= wasm::WASM_SYMBOL_UNDEFINED;
1457+
if (WS.isExported())
1458+
Flags |= wasm::WASM_SYMBOL_EXPORTED;
14571459

14581460
wasm::WasmSymbolInfo Info;
14591461
Info.Name = WS.getName();

llvm/lib/ObjectYAML/WasmYAML.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,7 @@ void ScalarBitSetTraits<WasmYAML::SymbolFlags>::bitset(
486486
// BCaseMask(VISIBILITY_MASK, VISIBILITY_DEFAULT);
487487
BCaseMask(VISIBILITY_MASK, VISIBILITY_HIDDEN);
488488
BCaseMask(UNDEFINED, UNDEFINED);
489+
BCaseMask(EXPORTED, EXPORTED);
489490
#undef BCaseMask
490491
}
491492

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
; RUN: llc -filetype=obj -wasm-keep-registers %s -o - | llvm-readobj --symbols | FileCheck %s
2+
3+
target triple = "wasm32-unknown-unknown"
4+
5+
@llvm.used = appending global [1 x i8*] [i8* bitcast (i32 ()* @foo to i8*)], section "llvm.metadata"
6+
7+
define i32 @foo() {
8+
entry:
9+
ret i32 0
10+
}
11+
12+
; CHECK: Symbols [
13+
; CHECK-NEXT: Symbol {
14+
; CHECK-NEXT: Name: foo
15+
; CHECK-NEXT: Type: FUNCTION (0x0)
16+
; CHECK-NEXT: Flags [ (0x20)
17+
; CHECK-NEXT: EXPORTED (0x20)
18+
; CHECK-NEXT: ]
19+
; CHECK-NEXT: ElementIndex: 0x0
20+
; CHECK-NEXT: }
21+
; CHECK-NEXT: ]

llvm/tools/llvm-readobj/WasmDumper.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ static const EnumEntry<unsigned> WasmSymbolFlags[] = {
4949
ENUM_ENTRY(VISIBILITY_DEFAULT),
5050
ENUM_ENTRY(VISIBILITY_HIDDEN),
5151
ENUM_ENTRY(UNDEFINED),
52+
ENUM_ENTRY(EXPORTED),
5253
#undef ENUM_ENTRY
5354
};
5455

0 commit comments

Comments
 (0)