- Do not call DLL hooks from exe callback handler.
- Do not call SysInitMultitheading from DLL_THREAD_ATTACH handler, it may only be called from the main thread. See comments in syswin.inc for details. Reverts rev. 17892.
+ To guarantee that SysInitMultithreading is called from the main thread, assume executables always multithreaded, just like DLLs are.
- Also removed all checks with MainThreadIdWin32, except checks for double DLL_PROCESS_DETACH in DLLs. They duplicate what Windows already does (the main thread invokes only PROCESS_ATTACH/PROCESS_DETACH and never THREAD_ATTACH/THREAD_DETACH callbacks).
* Attempts to avoid double initialization/finalization (once in callback, second time in normal control flow).
* Net result: webtbs/tw2423 and webtbs/tw15530 fixed, webtbs/tw3661 broken (because heaptrc does not support checking pointers in TLS area, and with 'always multithreaded' apps the Output varible moves into TLS).
git-svn-id: trunk@17938 -
Used to support TlsCallbacks.
Tls callback code added inside
ifdef FPC_USE_TLS_DIRECTORY.
NOTE: This code needs compiler changes also to work.
* win/systhread.inc:
Exec_Tls_callback: Callback for main executable.
Several new external variables:
FreePascal_TLS_callback, FreePascal_end_of_TLS_callback
need to be placed into .CRT$XL* section,
using name '.section .CRT$XLFPC __FPC_tls_callbacks'
extension to be provided by compiler change.
tls_callbacks : pointer; external name '___crt_xl_start__';
tls_data_start : pointer; external name '___tls_start__';
tls_data_end : pointer; external name '___tls_end__';
provided by linker script.
tls_index : DWord that will contain the automatic
TlsIndex generated by executable launch code (not used by
FPC code, but might be used by code from loaded objects).
_tls_used: TTlsdirectory record.
* win32/system.pp and win64/system.pp:
Code to force loading of _tls_used record.
git-svn-id: trunk@17893 -