mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-23 01:49:26 +02:00
Fix threadvar handling. Basically a merge of r31913 of my packages branch.
rtl/inc/system.inc: * provide a public alias for SetupEntryInformation so that it can be used in SysInit as well without globally exporting it rtl/win/systlsdir.inc: * Exec_tls_callback: call SetupEntryInformation before initalizing the heap and multithreading so that the threadvar tables can be referenced correctly git-svn-id: trunk@33035 -
This commit is contained in:
parent
191a293e4a
commit
1951b8aaaa
rtl
@ -121,7 +121,7 @@ var
|
||||
{$endif FPC_HAS_INDIRECT_MAIN_INFORMATION}
|
||||
|
||||
{$ifdef FPC_HAS_INDIRECT_MAIN_INFORMATION}
|
||||
procedure SetupEntryInformation(const info: TEntryInformation);
|
||||
procedure SetupEntryInformation(const info: TEntryInformation);[public,alias:'_FPC_SetupEntryInformation'];
|
||||
begin
|
||||
EntryInformation := info;
|
||||
FPCResStrInitTables := info.ResStrInitTables;
|
||||
|
@ -21,6 +21,11 @@
|
||||
{ This is only useful for executables
|
||||
for DLLs, DLL_Entry gets called. PM }
|
||||
{$ifdef FPC_INSSIDE_SYSINIT}
|
||||
|
||||
{$ifdef win32}
|
||||
{$define FPC_HAS_INDIRECT_MAIN_INFORMATION}
|
||||
{$endif win32}
|
||||
|
||||
Const
|
||||
DLL_PROCESS_ATTACH = 1;
|
||||
DLL_THREAD_ATTACH = 2;
|
||||
@ -45,6 +50,11 @@ function TlsGetValue(dwTlsIndex : DWord) : pointer; stdcall;
|
||||
procedure InitSystemThreads; external name '_FPC_InitSystemThreads';
|
||||
procedure SysAllocateThreadVars; external name '_FPC_SysAllocateThreadVars';
|
||||
procedure InitHeap; external name '_FPC_InitHeap';
|
||||
|
||||
{$ifdef FPC_HAS_INDIRECT_MAIN_INFORMATION}
|
||||
procedure SetupEntryInformation(const info: TEntryInformation); external name '_FPC_SetupEntryInformation';
|
||||
{$endif FPC_HAS_INDIRECT_MAIN_INFORMATION}
|
||||
|
||||
{$endif FPC_INSSIDE_SYSINIT}
|
||||
|
||||
procedure Exec_Tls_callback(Handle : pointer; reason : Dword; Reserved : pointer);
|
||||
@ -67,6 +77,12 @@ procedure Exec_Tls_callback(Handle : pointer; reason : Dword; Reserved : pointer
|
||||
and the EntryInformation is a constant which sholud prevent troubles }
|
||||
DLL_PROCESS_ATTACH:
|
||||
begin
|
||||
{$ifdef FPC_HAS_INDIRECT_MAIN_INFORMATION}
|
||||
{ since this procedure is called before SetupEntryInformation and thus
|
||||
before EXE_Entry we need to setup the entry information here so that
|
||||
the threadvar handling can be correctly initialized }
|
||||
SetupEntryInformation(SysInitEntryInformation);
|
||||
{$endif FPC_HAS_INDIRECT_MAIN_INFORMATION}
|
||||
InitHeap;
|
||||
InitSystemThreads;
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user