@@ -70,6 +70,7 @@ void Ctx::reset() {
7070 isPic = false ;
7171 legacyFunctionTable = false ;
7272 emitBssSegments = false ;
73+ sym = WasmSym{};
7374}
7475
7576namespace {
@@ -945,14 +946,14 @@ static void createSyntheticSymbols() {
945946 true };
946947 static llvm::wasm::WasmGlobalType mutableGlobalTypeI64 = {WASM_TYPE_I64,
947948 true };
948- WasmSym:: callCtors = symtab->addSyntheticFunction (
949+ ctx. sym . callCtors = symtab->addSyntheticFunction (
949950 " __wasm_call_ctors" , WASM_SYMBOL_VISIBILITY_HIDDEN,
950951 make<SyntheticFunction>(nullSignature, " __wasm_call_ctors" ));
951952
952953 bool is64 = ctx.arg .is64 .value_or (false );
953954
954955 if (ctx.isPic ) {
955- WasmSym:: stackPointer =
956+ ctx. sym . stackPointer =
956957 createUndefinedGlobal (" __stack_pointer" , ctx.arg .is64 .value_or (false )
957958 ? &mutableGlobalTypeI64
958959 : &mutableGlobalTypeI32);
@@ -962,51 +963,49 @@ static void createSyntheticSymbols() {
962963 // See:
963964 // https://github.com/WebAssembly/tool-conventions/blob/main/DynamicLinking.md
964965 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 ();
969970 } else {
970971 // 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 ();
973974 }
974975
975976 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 (
980981 " __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" ));
984984 }
985985}
986986
987987static void createOptionalSymbols () {
988988 if (ctx.arg .relocatable )
989989 return ;
990990
991- WasmSym:: dsoHandle = symtab->addOptionalDataSymbol (" __dso_handle" );
991+ ctx. sym . dsoHandle = symtab->addOptionalDataSymbol (" __dso_handle" );
992992
993993 if (!ctx.arg .shared )
994- WasmSym:: dataEnd = symtab->addOptionalDataSymbol (" __data_end" );
994+ ctx. sym . dataEnd = symtab->addOptionalDataSymbol (" __data_end" );
995995
996996 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" );
10041004 }
10051005
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 );
10101009
10111010 // For non-shared memory programs we still need to define __tls_base since we
10121011 // allow object files built with TLS to be linked into single threaded
@@ -1018,7 +1017,7 @@ static void createOptionalSymbols() {
10181017 // __tls_size and __tls_align are not needed in this case since they are only
10191018 // needed for __wasm_init_tls (which we do not create in this case).
10201019 if (!ctx.arg .sharedMemory )
1021- WasmSym:: tlsBase = createOptionalGlobal (" __tls_base" , false );
1020+ ctx. sym . tlsBase = createOptionalGlobal (" __tls_base" , false );
10221021}
10231022
10241023static void processStubLibrariesPreLTO () {
@@ -1393,9 +1392,9 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) {
13931392 // by libc/etc., because destructors are registered dynamically with
13941393 // `__cxa_atexit` and friends.
13951394 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 ())) {
13991398 if (Symbol *callDtors =
14001399 handleUndefined (" __wasm_call_dtors" , " <internal>" )) {
14011400 if (auto *callDtorsFunc = dyn_cast<DefinedFunction>(callDtors)) {
@@ -1404,7 +1403,7 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) {
14041403 !callDtorsFunc->signature ->Returns .empty ())) {
14051404 error (" __wasm_call_dtors must have no argument or return values" );
14061405 }
1407- WasmSym:: callDtors = callDtorsFunc;
1406+ ctx. sym . callDtors = callDtorsFunc;
14081407 } else {
14091408 error (" __wasm_call_dtors must be a function" );
14101409 }
@@ -1497,7 +1496,7 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) {
14971496 markLive ();
14981497
14991498 // Provide the indirect function table if needed.
1500- WasmSym:: indirectFunctionTable =
1499+ ctx. sym . indirectFunctionTable =
15011500 symtab->resolveIndirectFunctionTable (/* required =*/ false );
15021501
15031502 if (errorCount ())
0 commit comments