summaryrefslogtreecommitdiff
path: root/rtl/win32
diff options
context:
space:
mode:
authorsvenbarth <svenbarth@3ad0048d-3df7-0310-abae-a5850022a9f2>2016-02-19 16:22:20 +0000
committersvenbarth <svenbarth@3ad0048d-3df7-0310-abae-a5850022a9f2>2016-02-19 16:22:20 +0000
commita96a0b94cd008b3ec0c828a25cf817ff788b1e62 (patch)
tree43ddfbc26a7f0f169433f65768fcaa166d5dba0a /rtl/win32
parent7d710dfcd0b5c570b2b27c7da5d3c0f66a47cb85 (diff)
downloadfpc-a96a0b94cd008b3ec0c828a25cf817ff788b1e62.tar.gz
Adjust SysInstance so that it is correctly handled with the indirect entry information on Win32
win/sysosh.inc, TEntryInformationOS: + new field SysInstance that will hold the address to the main program's SysInstance variable win32/system.pp: * rename SysInstance to FPCSysInstance and make it a PLongInt * OsSetupEntryInformation: setup FPCSysInstance * adjust initialization of SysInstance to use FPCSysInstance instead win32/sysinit.inc: * SysInstance is no longer an external * initialize the OS.SysInstance field of EntryInformation win64/system.pp: * add a FPCSysInstance that's a pointer to SysInstance win/winres.inc: * SysInstance is now a pointer and has the same name on both Win32 and Win64 git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@33107 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'rtl/win32')
-rw-r--r--rtl/win32/sysinit.inc4
-rw-r--r--rtl/win32/system.pp7
2 files changed, 7 insertions, 4 deletions
diff --git a/rtl/win32/sysinit.inc b/rtl/win32/sysinit.inc
index e78fbf35f7..d4b7db6631 100644
--- a/rtl/win32/sysinit.inc
+++ b/rtl/win32/sysinit.inc
@@ -15,7 +15,7 @@
**********************************************************************}
var
- SysInstance : Longint;external name '_FPC_SysInstance';
+ SysInstance : LongInt;
TlsKeyVar: DWord = $ffffffff;
InitFinalTable : record end; external name 'INITFINAL';
@@ -67,6 +67,7 @@
OS : (
asm_exit : @asm_exit;
TlsKeyAddr : @TlsKeyVar;
+ SysInstance : @SysInstance;
);
);
@@ -81,6 +82,7 @@
EntryInformation.WideInitTables:=@WideInitTables;
EntryInformation.OS.asm_exit:=@asm_exit;
EntryInformation.OS.TlsKeyAddr:=@TlsKeyVar;
+ EntryInformation.OS.SysInstance:=@SysInstance;
EntryInformation.PascalMain:=@PascalMain;}
SysInitEntryInformation.valgrind_used:=valgrind_used;
end;
diff --git a/rtl/win32/system.pp b/rtl/win32/system.pp
index 60b4c1f82a..1bec9136ce 100644
--- a/rtl/win32/system.pp
+++ b/rtl/win32/system.pp
@@ -111,7 +111,7 @@ Const
implementation
var
- SysInstance : Longint;public name '_FPC_SysInstance';
+ FPCSysInstance : PLongint;public name '_FPC_SysInstance';
{$define FPC_SYSTEM_HAS_OSSETUPENTRYINFORMATION}
procedure OsSetupEntryInformation(const info: TEntryInformation); forward;
@@ -136,6 +136,7 @@ end;
procedure OsSetupEntryInformation(const info: TEntryInformation);
begin
TlsKey := info.OS.TlsKeyAddr;
+ FPCSysInstance := info.OS.SysInstance;
end;
{*****************************************************************************
@@ -650,9 +651,9 @@ begin
GetStartupInfo(@startupinfo);
{ some misc Win32 stuff }
if not IsLibrary then
- SysInstance:=getmodulehandle(nil);
+ FPCSysInstance^:=getmodulehandle(nil);
- MainInstance:=SysInstance;
+ MainInstance:=FPCSysInstance^;
{ pass dummy value }
StackLength := CheckInitialStkLen($1000000);