mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-21 10:10:19 +02:00
+ WebAssembly threads internal linker: create a global symbol for all AT_TLS data symbols
This commit is contained in:
parent
7e938ffafc
commit
d1348d17bf
@ -84,6 +84,7 @@ interface
|
|||||||
AliasOf: string;
|
AliasOf: string;
|
||||||
ExtraData: TWasmObjSymbolExtraData;
|
ExtraData: TWasmObjSymbolExtraData;
|
||||||
LinkingData: TWasmObjSymbolLinkingData;
|
LinkingData: TWasmObjSymbolLinkingData;
|
||||||
|
TlsGlobalSym: TWasmObjSymbol;
|
||||||
constructor create(AList:TFPHashObjectList;const AName:string);override;
|
constructor create(AList:TFPHashObjectList;const AName:string);override;
|
||||||
destructor Destroy;override;
|
destructor Destroy;override;
|
||||||
function IsAlias: Boolean;
|
function IsAlias: Boolean;
|
||||||
@ -4239,7 +4240,15 @@ implementation
|
|||||||
objsym:=TWasmObjSymbol(ObjData.CreateSymbol(SymName));
|
objsym:=TWasmObjSymbol(ObjData.CreateSymbol(SymName));
|
||||||
objsym.bind:=AB_EXTERNAL;
|
objsym.bind:=AB_EXTERNAL;
|
||||||
if (SymFlags and WASM_SYM_TLS)<>0 then
|
if (SymFlags and WASM_SYM_TLS)<>0 then
|
||||||
objsym.typ:=AT_TLS
|
begin
|
||||||
|
objsym.typ:=AT_TLS;
|
||||||
|
objsym.TlsGlobalSym:=TWasmObjSymbol(ObjData.CreateSymbol('GOT.mem.'+SymName));
|
||||||
|
objsym.TlsGlobalSym.bind:=AB_EXTERNAL;
|
||||||
|
objsym.TlsGlobalSym.typ:=AT_WASM_GLOBAL;
|
||||||
|
objsym.TlsGlobalSym.objsection:=nil;
|
||||||
|
objsym.TlsGlobalSym.offset:=0;
|
||||||
|
objsym.TlsGlobalSym.size:=1;
|
||||||
|
end
|
||||||
else
|
else
|
||||||
objsym.typ:=AT_DATA;
|
objsym.typ:=AT_DATA;
|
||||||
objsym.objsection:=nil;
|
objsym.objsection:=nil;
|
||||||
@ -4254,7 +4263,17 @@ implementation
|
|||||||
else
|
else
|
||||||
objsym.bind:=AB_GLOBAL;
|
objsym.bind:=AB_GLOBAL;
|
||||||
if (SymFlags and WASM_SYM_TLS)<>0 then
|
if (SymFlags and WASM_SYM_TLS)<>0 then
|
||||||
objsym.typ:=AT_TLS
|
begin
|
||||||
|
objsym.typ:=AT_TLS;
|
||||||
|
objsym.TlsGlobalSym:=TWasmObjSymbol(ObjData.CreateSymbol('GOT.mem.'+SymName));
|
||||||
|
objsym.TlsGlobalSym.bind:=objsym.bind;
|
||||||
|
objsym.TlsGlobalSym.typ:=AT_WASM_GLOBAL;
|
||||||
|
objsym.objsection:=ObjData.createsection('.wasm_globals.n_'+objsym.TlsGlobalSym.Name,1,[oso_Data,oso_load],true);
|
||||||
|
if objsym.objsection.Size=0 then
|
||||||
|
objsym.objsection.WriteZeros(1);
|
||||||
|
objsym.TlsGlobalSym.offset:=0;
|
||||||
|
objsym.TlsGlobalSym.size:=1;
|
||||||
|
end
|
||||||
else
|
else
|
||||||
objsym.typ:=AT_DATA;
|
objsym.typ:=AT_DATA;
|
||||||
objsym.objsection:=TObjSection(ObjData.ObjSectionList[FirstDataSegmentIdx+SymIndex]);
|
objsym.objsection:=TObjSection(ObjData.ObjSectionList[FirstDataSegmentIdx+SymIndex]);
|
||||||
|
Loading…
Reference in New Issue
Block a user