@@ -70,6 +70,7 @@ void Ctx::reset() {
70
70
isPic = false ;
71
71
legacyFunctionTable = false ;
72
72
emitBssSegments = false ;
73
+ sym = WasmSym{};
73
74
}
74
75
75
76
namespace {
@@ -945,14 +946,14 @@ static void createSyntheticSymbols() {
945
946
true };
946
947
static llvm::wasm::WasmGlobalType mutableGlobalTypeI64 = {WASM_TYPE_I64,
947
948
true };
948
- WasmSym:: callCtors = symtab->addSyntheticFunction (
949
+ ctx. sym . callCtors = symtab->addSyntheticFunction (
949
950
" __wasm_call_ctors" , WASM_SYMBOL_VISIBILITY_HIDDEN,
950
951
make<SyntheticFunction>(nullSignature, " __wasm_call_ctors" ));
951
952
952
953
bool is64 = ctx.arg .is64 .value_or (false );
953
954
954
955
if (ctx.isPic ) {
955
- WasmSym:: stackPointer =
956
+ ctx. sym . stackPointer =
956
957
createUndefinedGlobal (" __stack_pointer" , ctx.arg .is64 .value_or (false )
957
958
? &mutableGlobalTypeI64
958
959
: &mutableGlobalTypeI32);
@@ -962,51 +963,49 @@ static void createSyntheticSymbols() {
962
963
// See:
963
964
// https://github.com/WebAssembly/tool-conventions/blob/main/DynamicLinking.md
964
965
auto *globalType = is64 ? &globalTypeI64 : &globalTypeI32;
965
- WasmSym:: memoryBase = createUndefinedGlobal (" __memory_base" , globalType);
966
- WasmSym:: tableBase = createUndefinedGlobal (" __table_base" , globalType);
967
- WasmSym:: memoryBase->markLive ();
968
- WasmSym:: tableBase->markLive ();
966
+ ctx. sym . memoryBase = createUndefinedGlobal (" __memory_base" , globalType);
967
+ ctx. sym . tableBase = createUndefinedGlobal (" __table_base" , globalType);
968
+ ctx. sym . memoryBase ->markLive ();
969
+ ctx. sym . tableBase ->markLive ();
969
970
} else {
970
971
// For non-PIC code
971
- WasmSym:: stackPointer = createGlobalVariable (" __stack_pointer" , true );
972
- WasmSym:: stackPointer->markLive ();
972
+ ctx. sym . stackPointer = createGlobalVariable (" __stack_pointer" , true );
973
+ ctx. sym . stackPointer ->markLive ();
973
974
}
974
975
975
976
if (ctx.arg .sharedMemory ) {
976
- WasmSym:: tlsBase = createGlobalVariable (" __tls_base" , true );
977
- WasmSym:: tlsSize = createGlobalVariable (" __tls_size" , false );
978
- WasmSym:: tlsAlign = createGlobalVariable (" __tls_align" , false );
979
- WasmSym:: initTLS = symtab->addSyntheticFunction (
977
+ ctx. sym . tlsBase = createGlobalVariable (" __tls_base" , true );
978
+ ctx. sym . tlsSize = createGlobalVariable (" __tls_size" , false );
979
+ ctx. sym . tlsAlign = createGlobalVariable (" __tls_align" , false );
980
+ ctx. sym . initTLS = symtab->addSyntheticFunction (
980
981
" __wasm_init_tls" , WASM_SYMBOL_VISIBILITY_HIDDEN,
981
- make<SyntheticFunction>(
982
- is64 ? i64ArgSignature : i32ArgSignature,
983
- " __wasm_init_tls" ));
982
+ make<SyntheticFunction>(is64 ? i64ArgSignature : i32ArgSignature,
983
+ " __wasm_init_tls" ));
984
984
}
985
985
}
986
986
987
987
static void createOptionalSymbols () {
988
988
if (ctx.arg .relocatable )
989
989
return ;
990
990
991
- WasmSym:: dsoHandle = symtab->addOptionalDataSymbol (" __dso_handle" );
991
+ ctx. sym . dsoHandle = symtab->addOptionalDataSymbol (" __dso_handle" );
992
992
993
993
if (!ctx.arg .shared )
994
- WasmSym:: dataEnd = symtab->addOptionalDataSymbol (" __data_end" );
994
+ ctx. sym . dataEnd = symtab->addOptionalDataSymbol (" __data_end" );
995
995
996
996
if (!ctx.isPic ) {
997
- WasmSym:: stackLow = symtab->addOptionalDataSymbol (" __stack_low" );
998
- WasmSym:: stackHigh = symtab->addOptionalDataSymbol (" __stack_high" );
999
- WasmSym:: globalBase = symtab->addOptionalDataSymbol (" __global_base" );
1000
- WasmSym:: heapBase = symtab->addOptionalDataSymbol (" __heap_base" );
1001
- WasmSym:: heapEnd = symtab->addOptionalDataSymbol (" __heap_end" );
1002
- WasmSym:: definedMemoryBase = symtab->addOptionalDataSymbol (" __memory_base" );
1003
- WasmSym:: definedTableBase = symtab->addOptionalDataSymbol (" __table_base" );
997
+ ctx. sym . stackLow = symtab->addOptionalDataSymbol (" __stack_low" );
998
+ ctx. sym . stackHigh = symtab->addOptionalDataSymbol (" __stack_high" );
999
+ ctx. sym . globalBase = symtab->addOptionalDataSymbol (" __global_base" );
1000
+ ctx. sym . heapBase = symtab->addOptionalDataSymbol (" __heap_base" );
1001
+ ctx. sym . heapEnd = symtab->addOptionalDataSymbol (" __heap_end" );
1002
+ ctx. sym . definedMemoryBase = symtab->addOptionalDataSymbol (" __memory_base" );
1003
+ ctx. sym . definedTableBase = symtab->addOptionalDataSymbol (" __table_base" );
1004
1004
}
1005
1005
1006
- WasmSym::firstPageEnd =
1007
- symtab->addOptionalDataSymbol (" __wasm_first_page_end" );
1008
- if (WasmSym::firstPageEnd)
1009
- WasmSym::firstPageEnd->setVA (ctx.arg .pageSize );
1006
+ ctx.sym .firstPageEnd = symtab->addOptionalDataSymbol (" __wasm_first_page_end" );
1007
+ if (ctx.sym .firstPageEnd )
1008
+ ctx.sym .firstPageEnd ->setVA (ctx.arg .pageSize );
1010
1009
1011
1010
// For non-shared memory programs we still need to define __tls_base since we
1012
1011
// allow object files built with TLS to be linked into single threaded
@@ -1018,7 +1017,7 @@ static void createOptionalSymbols() {
1018
1017
// __tls_size and __tls_align are not needed in this case since they are only
1019
1018
// needed for __wasm_init_tls (which we do not create in this case).
1020
1019
if (!ctx.arg .sharedMemory )
1021
- WasmSym:: tlsBase = createOptionalGlobal (" __tls_base" , false );
1020
+ ctx. sym . tlsBase = createOptionalGlobal (" __tls_base" , false );
1022
1021
}
1023
1022
1024
1023
static void processStubLibrariesPreLTO () {
@@ -1393,9 +1392,9 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) {
1393
1392
// by libc/etc., because destructors are registered dynamically with
1394
1393
// `__cxa_atexit` and friends.
1395
1394
if (!ctx.arg .relocatable && !ctx.arg .shared &&
1396
- !WasmSym:: callCtors->isUsedInRegularObj &&
1397
- WasmSym:: callCtors->getName () != ctx.arg .entry &&
1398
- !ctx.arg .exportedSymbols .count (WasmSym:: callCtors->getName ())) {
1395
+ !ctx. sym . callCtors ->isUsedInRegularObj &&
1396
+ ctx. sym . callCtors ->getName () != ctx.arg .entry &&
1397
+ !ctx.arg .exportedSymbols .count (ctx. sym . callCtors ->getName ())) {
1399
1398
if (Symbol *callDtors =
1400
1399
handleUndefined (" __wasm_call_dtors" , " <internal>" )) {
1401
1400
if (auto *callDtorsFunc = dyn_cast<DefinedFunction>(callDtors)) {
@@ -1404,7 +1403,7 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) {
1404
1403
!callDtorsFunc->signature ->Returns .empty ())) {
1405
1404
error (" __wasm_call_dtors must have no argument or return values" );
1406
1405
}
1407
- WasmSym:: callDtors = callDtorsFunc;
1406
+ ctx. sym . callDtors = callDtorsFunc;
1408
1407
} else {
1409
1408
error (" __wasm_call_dtors must be a function" );
1410
1409
}
@@ -1497,7 +1496,7 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) {
1497
1496
markLive ();
1498
1497
1499
1498
// Provide the indirect function table if needed.
1500
- WasmSym:: indirectFunctionTable =
1499
+ ctx. sym . indirectFunctionTable =
1501
1500
symtab->resolveIndirectFunctionTable (/* required =*/ false );
1502
1501
1503
1502
if (errorCount ())
0 commit comments