Change WideString initialization to work correctly with indirect main information as well

rtl/inc/systemh.inc & rtl/java/jsystemh_types.inc:
  - TEntryInformation: remove WideInitTables
rtl/win/sysosh.inc:
  + TEntyrInformationOS: add WideInitTables
rtl/win/syswin.inc:
  * adjust WStrInitTablesTable, so that it is now a pointer and can be used both with direct and indirect main entry
  * InitWin32Widestrings: WStrInitTablesTable is now a pointer
rtl/win32/sysinit.inc:
  * WideInitTables has moved to the OS specific part of the entry information
rtl/win32/system.pp:
  * OsSetupEntryinformation: setup WStrInitTablesTable

git-svn-id: trunk@33571 -
This commit is contained in:
svenbarth 2016-04-29 13:13:14 +00:00
parent 26ef7b27e0
commit 788393c298
6 changed files with 12 additions and 13 deletions

View File

@ -606,9 +606,6 @@ type
ThreadvarTablesTable : Pointer;
ResourceStringTables : Pointer;
ResStrInitTables : Pointer;
{$ifndef FPC_WIDESTRING_EQUAL_UNICODESTRING}
WideInitTables : Pointer;
{$endif FPC_WIDESTRING_EQUAL_UNICODESTRING}
ResLocation : Pointer;
PascalMain : Procedure;
valgrind_used : boolean;

View File

@ -542,9 +542,6 @@ type
ThreadvarTablesTable : Pointer;
ResourceStringTables : Pointer;
ResStrInitTables : Pointer;
{$ifndef FPC_WIDESTRING_EQUAL_UNICODESTRING}
WideInitTables : Pointer;
{$endif FPC_WIDESTRING_EQUAL_UNICODESTRING}
ResLocation : Pointer;
PascalMain : Procedure;
valgrind_used : boolean;

View File

@ -55,6 +55,7 @@ type
asm_exit : Procedure;stdcall;
TlsKeyAddr : PDWord;
SysInstance: PLongInt;
WideInitTables : Pointer;
end;
{$endif Win32}

View File

@ -659,10 +659,13 @@ type
tables : packed array [1..32767] of PWStrInitEntry;
end;
{$if not(defined(VER2_2) or defined(VER2_4))}
var
WStrInitTablesTable: TWStrInitTablesTable; external name 'FPC_WIDEINITTABLES';
{$endif}
{$ifdef FPC_HAS_INDIRECT_MAIN_INFORMATION}
WStrInitTablesTable: PWStrInitTablesTable;
{$else FPC_HAS_INDIRECT_MAIN_INFORMATION}
WStrInitTablesTableVar: TWStrInitTablesTable; external name 'FPC_WIDEINITTABLES';
WStrInitTablesTable: PWStrInitTablesTable = @WStrInitTablesTableVar;
{$endif FPC_HAS_INDIRECT_MAIN_INFORMATION}
function GetACP:UINT; stdcall; external 'kernel32' name 'GetACP';
function GetConsoleCP:UINT; stdcall; external 'kernel32' name 'GetConsoleCP';
@ -686,9 +689,9 @@ procedure InitWin32Widestrings;
begin
{$if not(defined(VER2_2) or defined(VER2_4))}
{ assign initial values to global Widestring typed consts }
for i:=1 to WStrInitTablesTable.count do
for i:=1 to WStrInitTablesTable^.count do
begin
ptable:=WStrInitTablesTable.tables[i];
ptable:=WStrInitTablesTable^.tables[i];
while Assigned(ptable^.addr) do
begin
fpc_widestr_assign(ptable^.addr^, ptable^.data);

View File

@ -60,7 +60,6 @@
{$else FPC_HAS_RESSTRINITS}
ResStrInitTables : nil;
{$endif FPC_HAS_RESSTRINITS}
WideInitTables : @WideInitTables;
ResLocation : nil;
PascalMain : @PascalMain;
valgrind_used : false;
@ -68,6 +67,7 @@
asm_exit : @asm_exit;
TlsKeyAddr : @TlsKeyVar;
SysInstance : @SysInstance;
WideInitTables: @WideInitTables;
);
);
@ -79,10 +79,10 @@
EntryInformation.ThreadvarTablesTable:=@ThreadvarTablesTable;
EntryInformation.ResourceStringTables:=@ResourceStringTables;
EntryInformation.ResStrInitTables:=@ResStrInitTables;
EntryInformation.WideInitTables:=@WideInitTables;
EntryInformation.OS.asm_exit:=@asm_exit;
EntryInformation.OS.TlsKeyAddr:=@TlsKeyVar;
EntryInformation.OS.SysInstance:=@SysInstance;
EntryInformation.OS.WideInitTables:=@WideInitTables;
EntryInformation.PascalMain:=@PascalMain;}
SysInitEntryInformation.valgrind_used:=valgrind_used;
end;

View File

@ -137,6 +137,7 @@ procedure OsSetupEntryInformation(const info: TEntryInformation);
begin
TlsKey := info.OS.TlsKeyAddr;
FPCSysInstance := info.OS.SysInstance;
WStrInitTablesTable := info.OS.WideInitTables;
end;
{*****************************************************************************