* fixed rtl compilation with -dFPC_USE_LIBC by providing a more generic fpprctl() call (including libc variant) and moving related constants slightly

git-svn-id: trunk@6134 -
This commit is contained in:
tom_at_work 2007-01-22 22:21:32 +00:00
parent 216150e2e1
commit 704f8dae14
4 changed files with 20 additions and 19 deletions

View File

@ -581,24 +581,9 @@ end;
{$endif}
{$if defined(cpupowerpc)}
const
{ FP exception related constants for prctl(); PowerPC specific }
PR_GET_FPEXC = 11; { get floating point exception mode }
PR_SET_FPEXC = 12; { set floating point exception mode }
PR_FP_EXC_DISABLED = 0; { FP exceptions disabled }
PR_FP_EXC_NONREC = 1; { async non-recoverable exc. mode }
PR_FP_EXC_ASYNC = 2; { async recoverable exc. mode }
PR_FP_EXC_PRECISE = 3; { precise exception mode }
{ prctl() call to get FP exception mode }
function prctl_get_fpexc(var mode : cint): cint;
{ fpprctl() call }
function fpprctl(option : cint; const arg : ptrint) : cint;
begin
prctl_get_fpexc := do_syscall(syscall_nr_prctl, PR_GET_FPEXC, ptrint(@mode));
end;
{ prctl() call to set FP exception mode }
function prctl_set_fpexc(const mode : cint): cint;
begin
prctl_set_fpexc := do_syscall(syscall_nr_prctl, PR_SET_FPEXC, mode);
fpprctl := do_syscall(syscall_nr_prctl, option, arg);
end;
{$endif}

View File

@ -280,6 +280,18 @@ type
tiovec=iovec;
piovec=^tiovec;
{$if defined(cpupowerpc)}
const
{ FP exception related constants for prctl(); PowerPC specific }
PR_GET_FPEXC = 11; { get floating point exception mode }
PR_SET_FPEXC = 12; { set floating point exception mode }
PR_FP_EXC_DISABLED = 0; { FP exceptions disabled }
PR_FP_EXC_NONREC = 1; { async non-recoverable exc. mode }
PR_FP_EXC_ASYNC = 2; { async recoverable exc. mode }
PR_FP_EXC_PRECISE = 3; { precise exception mode }
{$endif}
{*************************************************************************}
{ SIGNALS }
{*************************************************************************}

View File

@ -304,7 +304,7 @@ begin
{$if defined(cpupowerpc)}
// some PPC kernels set the exception bits FE0/FE1 in the MSR to zero,
// disabling all FPU exceptions. Enable them again.
prctl_set_fpexc(PR_FP_EXC_PRECISE);
fpprctl(PR_SET_FPEXC, PR_FP_EXC_PRECISE);
{$endif}
IsConsole := TRUE;
StackLength := CheckInitialStkLen(initialStkLen);

View File

@ -117,3 +117,7 @@ Type TGrpArr = Array [0..0] of TGid; { C style array workarounds}
function FpReadV (fd: cint; const iov : piovec; iovcnt : cint):TSSize; cdecl; external clib name 'readv';
Function FpPWrite (fd : cInt; buf:pChar; nbytes : TSize; offset:Toff): TSSize; cdecl; external clib name 'pwrite';
function FpWriteV (fd: cint; const iov : piovec; iovcnt : cint):TSSize; cdecl; external clib name 'writev';
{$ifdef linux}
function FpPrCtl(options : cInt; const args : ptrint) : cint; cdecl; external clib name 'prctl';
{$endif}