|
@@ -57,6 +57,42 @@ procedure init_threadvar(var offset : dword;size : dword);[public,alias: 'FPC_IN
|
|
|
offset:=threadvarblocksize;
|
|
|
inc(threadvarblocksize,size);
|
|
|
end;
|
|
|
+
|
|
|
+
|
|
|
+type ltvInitEntry =
|
|
|
+ record
|
|
|
+ varaddr : pdword;
|
|
|
+ size : longint;
|
|
|
+ end;
|
|
|
+ pltvInitEntry = ^ltvInitEntry;
|
|
|
+
|
|
|
+procedure init_unit_threadvars (tableEntry : pltvInitEntry);
|
|
|
+begin
|
|
|
+ while tableEntry^.varaddr <> nil do
|
|
|
+ begin
|
|
|
+ init_threadvar (tableEntry^.varaddr^, tableEntry^.size);
|
|
|
+ inc (pchar (tableEntry), sizeof (tableEntry^));
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+type TltvInitTablesTable =
|
|
|
+ record
|
|
|
+ count : dword;
|
|
|
+ tables: array [1..32767] of pltvInitEntry;
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ ThreadvarTablesTable : TltvInitTablesTable; external name 'FPC_LOCALTHREADVARTABLES';
|
|
|
+
|
|
|
+procedure init_all_unit_threadvars; [public,alias: 'FPC_INITIALIZELOCALTHREADVARS'];
|
|
|
+var i : integer;
|
|
|
+begin
|
|
|
+ {$ifdef DEBUG_MT}
|
|
|
+ WriteLn ('init_all_unit_threadvars (%d) units',ThreadvarTablesTable.count);
|
|
|
+ {$endif}
|
|
|
+ for i := 1 to ThreadvarTablesTable.count do
|
|
|
+ init_unit_threadvars (ThreadvarTablesTable.tables[i]);
|
|
|
+end;
|
|
|
|
|
|
|
|
|
function relocate_threadvar(offset : dword) : pointer;[public,alias: 'FPC_RELOCATE_THREADVAR'];
|
|
@@ -213,7 +249,10 @@ procedure LeaveCriticalSection(var cs : TRTLCriticalSection);
|
|
|
|
|
|
{
|
|
|
$Log$
|
|
|
- Revision 1.6 2001-10-23 21:51:03 peter
|
|
|
+ Revision 1.7 2002-03-28 16:31:35 armin
|
|
|
+ + initialize threadvars defined local in units
|
|
|
+
|
|
|
+ Revision 1.6 2001/10/23 21:51:03 peter
|
|
|
* criticalsection renamed to rtlcriticalsection for kylix compatibility
|
|
|
|
|
|
Revision 1.5 2001/10/09 02:38:39 carl
|