* keep the stack 16 byte aligned on winx64

* fixed some winx64 issues regarding exec

git-svn-id: trunk@3213 -
This commit is contained in:
florian 2006-04-15 16:49:18 +00:00
parent 2d3d4a66f6
commit 598853240c
6 changed files with 85 additions and 87 deletions

View File

@ -19,8 +19,6 @@ Const
Max_Path = 260;
Type
TWin32Handle = longint;
PWin32FileTime = ^TWin32FileTime;
TWin32FileTime = record
dwLowDateTime,
@ -44,7 +42,7 @@ Type
end;
Searchrec = Packed Record
FindHandle : TWin32Handle;
FindHandle : THandle;
W32FindData : TWin32FindData;
ExcludeAttr : longint;
time : longint;
@ -97,7 +95,7 @@ type
var
versioninfo : OSVERSIONINFO;
kernel32dll : TWin32Handle;
kernel32dll : THandle;
{******************************************************************************
--- Conversion ---
@ -259,8 +257,8 @@ end;
type
PProcessInformation = ^TProcessInformation;
TProcessInformation = record
hProcess: TWin32Handle;
hThread: TWin32Handle;
hProcess: THandle;
hThread: THandle;
dwProcessId: DWORD;
dwThreadId: DWORD;
end;
@ -271,24 +269,23 @@ type
lpCurrentDirectory: PChar; const lpStartupInfo: TStartupInfo;
var lpProcessInformation: TProcessInformation): longbool;
stdcall; external 'kernel32' name 'CreateProcessA';
function getExitCodeProcess(h:TWin32Handle;var code:longint):longbool;
function getExitCodeProcess(h:THandle;var code:longint):longbool;
stdcall; external 'kernel32' name 'GetExitCodeProcess';
function WaitForSingleObject(hHandle: TWin32Handle; dwMilliseconds: DWORD): DWORD;
function WaitForSingleObject(hHandle: THandle; dwMilliseconds: DWORD): DWORD;
stdcall; external 'kernel32' name 'WaitForSingleObject';
function CloseHandle(h : TWin32Handle) : longint;
function CloseHandle(h : THandle) : longint;
stdcall; external 'kernel32' name 'CloseHandle';
procedure exec(const path : pathstr;const comline : comstr);
var
SI: TStartupInfo;
PI: TProcessInformation;
Proc : TWin32Handle;
l : Longint;
CommandLine : array[0..511] of char;
AppParam : array[0..255] of char;
pathlocal : string;
begin
DosError := 0;
DosError:=0;
FillChar(SI, SizeOf(SI), 0);
SI.cb:=SizeOf(SI);
SI.wShowWindow:=1;
@ -315,13 +312,12 @@ begin
DosError:=Last2DosError(GetLastError);
exit;
end;
Proc:=PI.hProcess;
CloseHandle(PI.hThread);
if WaitForSingleObject(Proc, dword($ffffffff)) <> $ffffffff then
GetExitCodeProcess(Proc,l)
if WaitForSingleObject(PI.hProcess,dword($ffffffff))<>$ffffffff then
GetExitCodeProcess(PI.hProcess,l)
else
l:=-1;
CloseHandle(Proc);
CloseHandle(PI.hProcess);
CloseHandle(PI.hThread);
LastDosExitCode:=l;
end;
@ -421,11 +417,11 @@ end;
{ Needed kernel calls }
function FindFirstFile (lpFileName: PChar; var lpFindFileData: TWIN32FindData): TWin32Handle;
function FindFirstFile (lpFileName: PChar; var lpFindFileData: TWIN32FindData): THandle;
stdcall; external 'kernel32' name 'FindFirstFileA';
function FindNextFile (hFindFile: TWin32Handle; var lpFindFileData: TWIN32FindData): LongBool;
function FindNextFile (hFindFile: THandle; var lpFindFileData: TWIN32FindData): LongBool;
stdcall; external 'kernel32' name 'FindNextFileA';
function FindCloseFile (hFindFile: TWin32Handle): LongBool;
function FindCloseFile (hFindFile: THandle): LongBool;
stdcall; external 'kernel32' name 'FindClose';
Procedure StringToPchar (Var S : String);
@ -775,13 +771,13 @@ begin
end;
function FreeLibrary(hLibModule : TWin32Handle) : longbool;
function FreeLibrary(hLibModule : THandle) : longbool;
stdcall; external 'kernel32' name 'FreeLibrary';
function GetVersionEx(var VersionInformation:OSVERSIONINFO) : longbool;
stdcall; external 'kernel32' name 'GetVersionExA';
function LoadLibrary(lpLibFileName : pchar):TWin32Handle;
function LoadLibrary(lpLibFileName : pchar):THandle;
stdcall; external 'kernel32' name 'LoadLibraryA';
function GetProcAddress(hModule : TWin32Handle;lpProcName : pchar) : pointer;
function GetProcAddress(hModule : THandle;lpProcName : pchar) : pointer;
stdcall; external 'kernel32' name 'GetProcAddress';
var

View File

@ -15,10 +15,10 @@
const
{ constants for GetStdHandle }
STD_INPUT_HANDLE = longint($fffffff6);
STD_OUTPUT_HANDLE = longint($fffffff5);
STD_ERROR_HANDLE = longint($fffffff4);
INVALID_HANDLE_VALUE = longint($ffffffff);
STD_INPUT_HANDLE = dword($fffffff6);
STD_OUTPUT_HANDLE = dword($fffffff5);
STD_ERROR_HANDLE = dword($fffffff4);
INVALID_HANDLE_VALUE = dword($ffffffff);
IGNORE = 0; { Ignore signal }
INFINITE = longint($FFFFFFFF); { Infinite timeout }

View File

@ -756,7 +756,7 @@ function ExecuteProcess(Const Path: AnsiString; Const ComLine: AnsiString):integ
var
SI: TStartupInfo;
PI: TProcessInformation;
Proc : TWin32Handle;
Proc : THandle;
l : DWord;
CommandLine : ansistring;
e : EOSError;
@ -788,11 +788,11 @@ begin
raise e;
end;
Proc:=PI.hProcess;
CloseHandle(PI.hThread);
if WaitForSingleObject(Proc, dword($ffffffff)) <> $ffffffff then
begin
GetExitCodeProcess(Proc,l);
CloseHandle(Proc);
CloseHandle(PI.hThread);
result:=l;
end
else
@ -800,6 +800,7 @@ begin
e:=EOSError.CreateFmt(SExecuteProcessFailed,[CommandLine,GetLastError]);
e.ErrorCode:=GetLastError;
CloseHandle(Proc);
CloseHandle(PI.hThread);
raise e;
end;
end;

View File

@ -1,5 +1,5 @@
#
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2006/04/02]
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2006/04/04]
#
default: all
MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos powerpc-linux powerpc-netbsd powerpc-macos powerpc-darwin powerpc-morphos sparc-linux sparc-netbsd sparc-solaris x86_64-linux x86_64-freebsd x86_64-win64 arm-linux arm-palmos arm-wince powerpc64-linux
@ -246,121 +246,121 @@ endif
OBJPASDIR=$(RTL)/objpas
WINDOWS_SOURCE_FILES=$(addprefix $(WININC)/,$(addsuffix .inc,$(WINDOWS_FILES)))
ifeq ($(FULL_TARGET),i386-linux)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),i386-go32v2)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),i386-win32)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),i386-os2)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),i386-freebsd)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),i386-beos)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),i386-netbsd)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),i386-solaris)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),i386-qnx)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),i386-netware)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),i386-openbsd)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),i386-wdosx)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),i386-darwin)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),i386-emx)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),i386-watcom)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),i386-netwlibc)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),i386-wince)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),m68k-linux)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),m68k-freebsd)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),m68k-netbsd)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),m68k-amiga)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),m68k-atari)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),m68k-openbsd)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),m68k-palmos)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),powerpc-linux)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),powerpc-netbsd)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),powerpc-macos)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),powerpc-darwin)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),powerpc-morphos)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),sparc-linux)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),sparc-netbsd)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),sparc-solaris)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),x86_64-linux)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),x86_64-freebsd)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),x86_64-win64)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),arm-linux)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),arm-palmos)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),arm-wince)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),powerpc64-linux)
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix windows winsock cmem dos objects rtlconsts sysconst sysutils math types strutils convutils dateutils
override TARGET_UNITS+=system ctypes objpas macpas strings lineinfo heaptrc matrix dos objects windows winsock cmem rtlconsts sysconst sysutils math types strutils convutils dateutils
endif
ifeq ($(FULL_TARGET),i386-linux)
override TARGET_LOADERS+=$(LOADERS)

View File

@ -9,8 +9,8 @@ main=rtl
loaders=$(LOADERS)
units=system ctypes objpas macpas strings \
lineinfo heaptrc matrix \
windows winsock cmem \
dos objects \
windows winsock cmem \
rtlconsts sysconst sysutils math types \
strutils convutils dateutils
# varutils variants typinfo classes \

View File

@ -62,7 +62,7 @@ const
System_exception_frame : PEXCEPTION_FRAME =nil;
type
TStartupInfo=packed record
TStartupInfo = record
cb : longint;
lpReserved : Pointer;
lpDesktop : Pointer;
@ -78,9 +78,9 @@ type
wShowWindow : Word;
cbReserved2 : Word;
lpReserved2 : Pointer;
hStdInput : longint;
hStdOutput : longint;
hStdError : longint;
hStdInput : THandle;
hStdOutput : THandle;
hStdError : THandle;
end;
var
@ -391,6 +391,7 @@ var
procedure Exe_entry;[public,alias:'_FPC_EXE_Entry'];
var
ST : pointer;
EBP : pointer;
begin
IsLibrary:=false;
{ install the handlers for exe only ?
@ -401,17 +402,19 @@ procedure Exe_entry;[public,alias:'_FPC_EXE_Entry'];
ExitCode:=0;
asm
{ allocate space for an exception frame }
pushl $0
pushl %fs:(0)
pushq $0
pushq %fs:(0)
{ movl %esp,%fs:(0)
but don't insert it as it doesn't
point to anything yet
this will be used in signals unit }
movl %esp,%eax
movl %eax,System_exception_frame
pushl %ebp
movl %esp,%eax
movl %eax,st
{ keep stack aligned }
pushq $0
pushq %rbp
movq %rsp,%rax
movq %rax,st
end;
StackTop:=st;
asm
@ -419,9 +422,10 @@ procedure Exe_entry;[public,alias:'_FPC_EXE_Entry'];
movw %ss,%ax
movl %eax,_SS
call SysResetFPU
xorl %ebp,%ebp
xorl %rbp,%rbp
call PASCALMAIN
popl %ebp
popq %rbp
popq %rax
end;
{ if we pass here there was no error ! }
system_exit;
@ -991,9 +995,6 @@ procedure fpc_cpucodeinit;
begin
end;
{****************************************************************************
OS dependend widestrings
****************************************************************************}
@ -1150,9 +1151,9 @@ procedure SysInitStdIO;
begin
{ Setup stdin, stdout and stderr, for GUI apps redirect stderr,stdout to be
displayed in a messagebox }
StdInputHandle:=longint(GetStdHandle(cardinal(STD_INPUT_HANDLE)));
StdOutputHandle:=longint(GetStdHandle(cardinal(STD_OUTPUT_HANDLE)));
StdErrorHandle:=longint(GetStdHandle(cardinal(STD_ERROR_HANDLE)));
StdInputHandle:=THandle(GetStdHandle(STD_INPUT_HANDLE));
StdOutputHandle:=THandle(GetStdHandle(STD_OUTPUT_HANDLE));
StdErrorHandle:=THandle(GetStdHandle(STD_ERROR_HANDLE));
if not IsConsole then
begin
AssignError(stderr);
@ -1220,5 +1221,5 @@ begin
errno:=0;
initvariantmanager;
initwidestringmanager;
InitWin32Widestrings
InitWin32Widestrings;
end.