* solaris updates

This commit is contained in:
peter 2005-02-14 16:32:41 +00:00
parent 852c88686f
commit f4011dabba
7 changed files with 306 additions and 88 deletions

View File

@ -1,10 +1,10 @@
# #
# Don't edit, this file is generated by FPCMake Version 1.9.8 [2005/01/31] # Don't edit, this file is generated by FPCMake Version 1.9.8 [2005/02/14]
# #
default: all default: all
MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-sunos i386-qnx i386-netware i386-openbsd i386-wdosx i386-emx i386-watcom i386-netwlibc 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-sunos x86_64-linux x86_64-freebsd arm-linux 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-emx i386-watcom i386-netwlibc 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 arm-linux
BSDs = freebsd netbsd openbsd darwin BSDs = freebsd netbsd openbsd darwin
UNIXs = linux $(BSDs) sunos qnx UNIXs = linux $(BSDs) solaris qnx
LIMIT83fs = go32v2 os2 emx watcom LIMIT83fs = go32v2 os2 emx watcom
FORCE: FORCE:
.PHONY: FORCE .PHONY: FORCE
@ -590,7 +590,7 @@ BATCHEXT=.sh
EXEEXT= EXEEXT=
SHORTSUFFIX=be SHORTSUFFIX=be
endif endif
ifeq ($(OS_TARGET),sunos) ifeq ($(OS_TARGET),solaris)
BATCHEXT=.sh BATCHEXT=.sh
EXEEXT= EXEEXT=
SHORTSUFFIX=sun SHORTSUFFIX=sun
@ -716,7 +716,7 @@ STATICLIBEXT=.a
EXEEXT= EXEEXT=
SHORTSUFFIX=be SHORTSUFFIX=be
endif endif
ifeq ($(OS_TARGET),sunos) ifeq ($(OS_TARGET),solaris)
BATCHEXT=.sh BATCHEXT=.sh
PPUEXT=.ppu PPUEXT=.ppu
ASMEXT=.s ASMEXT=.s
@ -1028,7 +1028,7 @@ export UPXPROG
ZIPOPT=-9 ZIPOPT=-9
ZIPEXT=.zip ZIPEXT=.zip
ifeq ($(USETAR),bz2) ifeq ($(USETAR),bz2)
TAROPT=vI TAROPT=vj
TAREXT=.tar.bz2 TAREXT=.tar.bz2
else else
TAROPT=vz TAROPT=vz

View File

@ -15,7 +15,7 @@
***********************************************************************} ***********************************************************************}
{***********************************************************************} {***********************************************************************}
{ Base Unix Structures } { Base Unix Structures }
{***********************************************************************} {***********************************************************************}
{$IFDEF FPC_IS_SYSTEM} {$IFDEF FPC_IS_SYSTEM}
@ -29,7 +29,7 @@ CONST
wordsinfdset = FD_MAXFDSET DIV BITSINWORD; // words in fdset_t wordsinfdset = FD_MAXFDSET DIV BITSINWORD; // words in fdset_t
ln2bitsinword = 5; { 32bit : ln(32)/ln(2)=5 } ln2bitsinword = 5; { 32bit : ln(32)/ln(2)=5 }
ln2bitmask = 1 shl ln2bitsinword - 1; ln2bitmask = 1 shl ln2bitsinword - 1;
UTSNAME_LENGTH = 256; { 256 + 1 in pchar format } UTSNAME_LENGTH = 256; { 256 + 1 in pchar format }
UTSNAME_NODENAME_LENGTH = 256; UTSNAME_NODENAME_LENGTH = 256;
@ -38,7 +38,7 @@ CONST
TYPE TYPE
blksize_t = longint; blksize_t = longint;
blkcnt_t = longint; blkcnt_t = longint;
{ file characteristics services } { file characteristics services }
stat = packed record { verify the alignment of the members } stat = packed record { verify the alignment of the members }
st_dev : dev_t; st_dev : dev_t;
@ -63,9 +63,32 @@ TYPE
st_fstype : array[0..ST_FSTYPSZ-1] of char; st_fstype : array[0..ST_FSTYPSZ-1] of char;
st_pad4 : array[1..8] of longint; st_pad4 : array[1..8] of longint;
end; end;
TStat = Stat; TStat = Stat;
PStat = ^Stat; PStat = ^Stat;
flock = record
{$ifdef 64bitfs}
l_start : off64_t; { starting offset }
l_len : off64_t; { len = 0 means until end of file }
{$else}
l_start : off_t; { starting offset }
l_len : off_t; { len = 0 means until end of file }
{$endif}
l_pid : pid_t; { lock owner }
l_type : cshort; { lock type: read/write, etc. }
l_whence: cshort; { type of l_start }
end;
TFlock = flock;
pFlock = ^flock;
TFDSet = array[0..(FD_MAXFDSET div 32)-1] of Cardinal;
pFDSet = ^TFDSet;
timezone = packed record
tz_minuteswest,tz_dsttime:cint;
end;
ptimezone =^timezone;
TTimeZone = timezone;
{ system information services } { system information services }
utsname = packed record { don't forget to verify the alignment } utsname = packed record { don't forget to verify the alignment }
@ -76,6 +99,12 @@ TYPE
machine : array[0..UTSNAME_LENGTH] of char; machine : array[0..UTSNAME_LENGTH] of char;
end; end;
UTimBuf = Record
actime : time_t;
modtime : time_t;
end;
TUtimBuf = UtimBuf;
pUtimBuf = ^UtimBuf;
{ directory services } { directory services }
pdirent = ^dirent; pdirent = ^dirent;
@ -112,17 +141,17 @@ CONST
SEEK_END = 2; { seek from end of file } SEEK_END = 2; { seek from end of file }
{ open routine } { open routine }
{ File access modes for `open' and `fcntl'. } { File access modes for `open' and `fcntl'. }
O_RDONLY = 0; { Open read-only. } O_RDONLY = 0; { Open read-only. }
O_WRONLY = 1; { Open write-only. } O_WRONLY = 1; { Open write-only. }
O_RDWR = 2; { Open read/write. } O_RDWR = 2; { Open read/write. }
{ Bits OR'd into the second argument to open. } { Bits OR'd into the second argument to open. }
O_CREAT = $100; { Create file if it doesn't exist. } O_CREAT = $100; { Create file if it doesn't exist. }
O_EXCL = $400; { Fail if file already ??????. } O_EXCL = $400; { Fail if file already ??????. }
O_TRUNC = $200; { Truncate file to zero length. } O_TRUNC = $200; { Truncate file to zero length. }
O_NOCTTY = $800; { Don't assign a controlling terminal. } O_NOCTTY = $800; { Don't assign a controlling terminal. }
{ File status flags for `open' and `fcntl'. } { File status flags for `open' and `fcntl'. }
O_APPEND = $08; { Writes append to the file. } O_APPEND = $08; { Writes append to the file. }
O_NONBLOCK = $80; { Non-blocking I/O. } O_NONBLOCK = $80; { Non-blocking I/O. }
{ mode_t possible values } { mode_t possible values }
@ -164,7 +193,10 @@ CONST
{ {
$Log$ $Log$
Revision 1.2 2005-02-13 22:13:20 peter Revision 1.3 2005-02-14 16:32:41 peter
* solaris updates
Revision 1.2 2005/02/13 22:13:20 peter
* get solaris back in shape * get solaris back in shape
Revision 1.1 2005/02/10 17:30:54 peter Revision 1.1 2005/02/10 17:30:54 peter

View File

@ -16,56 +16,76 @@
**********************************************************************} **********************************************************************}
const const
{************************ signals *****************************} {************************ signals *****************************}
{ more can be provided. Herein are only included the required } { more can be provided. Herein are only included the required }
{ values. } { values. }
{**************************************************************} {**************************************************************}
SIGABRT = 6; { abnormal termination } SIGABRT = 6; { abnormal termination }
SIGALRM = 14; { alarm clock (used with alarm() } SIGALRM = 14; { alarm clock (used with alarm() }
SIGFPE = 8; { illegal arithmetic operation } SIGFPE = 8; { illegal arithmetic operation }
SIGHUP = 1; { Hangup } SIGHUP = 1; { Hangup }
SIGILL = 4; { Illegal instruction } SIGILL = 4; { Illegal instruction }
SIGINT = 2; { Interactive attention signal } SIGINT = 2; { Interactive attention signal }
SIGKILL = 9; { Kill, cannot be caught } SIGKILL = 9; { Kill, cannot be caught }
SIGPIPE = 13; { Broken pipe signal } SIGPIPE = 13; { Broken pipe signal }
SIGQUIT = 3; { Interactive termination signal } SIGQUIT = 3; { Interactive termination signal }
SIGSEGV = 11; { Detection of invalid memory reference } SIGSEGV = 11; { Detection of invalid memory reference }
SIGTERM = 15; { Termination request } SIGTERM = 15; { Termination request }
SIGUSR1 = 16; { Application defined signal 1 } SIGUSR1 = 16; { Application defined signal 1 }
SIGUSR2 = 17; { Application defined signal 2 } SIGUSR2 = 17; { Application defined signal 2 }
SIGCHLD = 18; { Child process terminated / stopped } SIGCHLD = 18; { Child process terminated / stopped }
SIGCONT = 25; { Continue if stopped } SIGCONT = 25; { Continue if stopped }
SIGSTOP = 23; { Stop signal. cannot be cuaght } SIGSTOP = 23; { Stop signal. cannot be cuaght }
SIGSTP = 24; { Interactive stop signal } SIGSTP = 24; { Interactive stop signal }
SIGTTIN = 26; { Background read from TTY } SIGTTIN = 26; { Background read from TTY }
SIGTTOU = 27; { Background write to TTY } SIGTTOU = 27; { Background write to TTY }
SIGBUS = 10; { Access to undefined memory } SIGBUS = 10; { Access to undefined memory }
{ Solaris specific signals } { Solaris specific signals }
SIGTRAP = 5; { trace trap (not reset when caught) } SIGTRAP = 5; { trace trap (not reset when caught) }
SIGIOT = 6; { IOT instruction } SIGIOT = 6; { IOT instruction }
SIGEMT = 7; { EMT instruction } SIGEMT = 7; { EMT instruction }
SIGSYS = 12; { bad argument to system call } SIGSYS = 12; { bad argument to system call }
SIGCLD = 18; { child status change } SIGCLD = 18; { child status change }
SIGPWR = 19; { power-fail restart } SIGPWR = 19; { power-fail restart }
SIGWINCH = 20; { window size change } SIGWINCH = 20; { window size change }
SIGURG = 21; { urgent socket condition } SIGURG = 21; { urgent socket condition }
SIGPOLL = 22; { pollable event occured } SIGPOLL = 22; { pollable event occured }
SIGIO = SIGPOLL;{ socket I/O possible (SIGPOLL alias) } SIGIO = SIGPOLL;{ socket I/O possible (SIGPOLL alias) }
SIGVTALRM = 28; { virtual timer expired } SIGVTALRM = 28; { virtual timer expired }
SIGPROF = 29; { profiling timer expired } SIGPROF = 29; { profiling timer expired }
SIGXCPU = 30; { exceeded cpu limit } SIGXCPU = 30; { exceeded cpu limit }
SIGXFSZ = 31; { exceeded file size limit } SIGXFSZ = 31; { exceeded file size limit }
SIGWAITING = 32; { process's lwps are blocked } SIGWAITING = 32; { process's lwps are blocked }
SIGLWP = 33; { special signal used by thread library } SIGLWP = 33; { special signal used by thread library }
SIGFREEZE = 34; { special signal used by CPR } SIGFREEZE = 34; { special signal used by CPR }
SIGTHAW = 35; { special signal used by CPR } SIGTHAW = 35; { special signal used by CPR }
SIGCANCEL = 36; { thread cancellation signal used by libthread } SIGCANCEL = 36; { thread cancellation signal used by libthread }
SIGLOST = 37; { resource lost (eg, record-lock lost) } SIGLOST = 37; { resource lost (eg, record-lock lost) }
const SIG_BLOCK = 0;
SI_PAD_SIZE = ((128 div sizeof(longint)) - 3); SIG_UNBLOCK = 1;
SIG_SETMASK = 2;
SIG_DFL = 0 ;
SIG_IGN = 1 ;
SIG_ERR = -1 ;
{ definitions for the sa_flags field }
SA_ONSTACK = $00000001;
SA_RESETHAND = $00000002;
SA_RESTART = $00000004;
SA_SIGINFO = $00000008;
SA_NODEFER = $00000010;
SA_NOCLDWAIT = $00010000;
SA_WAITSIG = $00010000;
{$ifdef cpu64}
SI_PAD_SIZE = ((256 div sizeof(cint)) - 4);
{$else}
SI_PAD_SIZE = ((128 div sizeof(cint)) - 3);
{$endif}
type type
SigSet = array[0..wordsinsigset-1] of cint; SigSet = array[0..wordsinsigset-1] of cint;
@ -76,9 +96,12 @@ type
psiginfo = ^tsiginfo; psiginfo = ^tsiginfo;
tsiginfo = record tsiginfo = record
si_signo : longint; si_signo : cint;
si_errno : longint; si_errno : cint;
si_code : longint; si_code : cint;
{$ifdef cpu64}
si_pad : cint;
{$endif cpu64}
_sifields : record _sifields : record
case longint of case longint of
0 : ( _pad : array[0..(SI_PAD_SIZE)-1] of longint ); 0 : ( _pad : array[0..(SI_PAD_SIZE)-1] of longint );
@ -104,6 +127,8 @@ type
end ); end );
5 : ( _sigfault : record 5 : ( _sigfault : record
_addr : pointer; _addr : pointer;
_trapno : cint;
_pc : pointer;
end ); end );
6 : ( _sigpoll : record 6 : ( _sigpoll : record
_band : longint; _band : longint;
@ -133,7 +158,10 @@ type
{ {
$Log$ $Log$
Revision 1.3 2005-02-13 22:13:20 peter Revision 1.4 2005-02-14 16:32:41 peter
* solaris updates
Revision 1.3 2005/02/13 22:13:20 peter
* get solaris back in shape * get solaris back in shape
Revision 1.2 2005/02/10 17:30:54 peter Revision 1.2 2005/02/10 17:30:54 peter

148
rtl/solaris/sparc/start.inc Normal file
View File

@ -0,0 +1,148 @@
{
$Id$
This file is part of the Free Pascal run time library.
Copyright (c) 1999-2000 by Michael Van Canneyt,
member of the Free Pascal development team.
Program startup
See the file COPYING.FPC, included in this distribution,
for details about the copyright.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************}
type
TCdeclProcedure = procedure; cdecl;
function atexit(proc:TCdeclProcedure):longint;cdecl;external 'c' name 'atexit';
procedure _cleanup;cdecl;external 'c' name '_cleanup';
procedure _DYNAMIC;cdecl;external 'c' name '_DYNAMIC';
procedure __fpstart;cdecl;external 'c' name '__fpstart';
procedure PascalMain;cdecl;external name 'PASCALMAIN';
procedure _start;assembler;nostackframe;public name '_start';
asm
// Terminate the stack frame, and reserve space for functions to
// drop their arguments.
mov %g0, %fp
sub %sp, 6*4, %sp
// Extract the arguments and environment as encoded on the stack. The
// argument info starts after one register window (16 words) past the SP.
ld [%sp+22*4], %o2
sethi %hi(argc),%o1
or %o1,%lo(argc),%o1
st %o2, [%o1]
add %sp, 23*4, %o0
sethi %hi(argv),%o1
or %o1,%lo(argv),%o1
st %o0, [%o1]
// envp=(argc+1)*4+argv
inc %o2
sll %o2, 2, %o2
add %o2, %o0, %o2
sethi %hi(envp),%o1
or %o1,%lo(envp),%o1
st %o2, [%o1]
// Check to see if there is an _cleanup() function linked in, and if
// so, register it with atexit() as the last thing to be run by
// atexit().
sethi %hi(_cleanup), %o0
or %o0, %lo(_cleanup), %o0
cmp %o0,%g0
be .L1
nop
call atexit
nop
.L1:
// Now check to see if we have an _DYNAMIC table, and if so then
// we need to register the function pointer previously in %edx, but
// now conveniently saved on the stack as the argument to pass to
// atexit().
sethi %hi(_DYNAMIC), %o0
or %o0, %lo(_DYNAMIC), %o0
cmp %o0,%g0
be .L2
nop
call atexit
nop
.L2:
// Register _fini() with atexit(). We will take care of calling _init()
// directly.
//
// sethi %hi(_fini), %o0
// or %o0, %lo(_fini), %o0
// call atexit
// Call _init(argc, argv, environ), _fpstart(argc, argv, environ), and
// main(argc, argv, environ).
ld [%sp+22*4], %o0
add %sp, 23*4, %o1
add %o0, 1, %o2
sll %o2, 2, %o2
add %o2, %o1, %o2
call __fpstart
nop
call PASCALMAIN
nop
// Die very horribly if exit returns
unimp
end;
{
$Log$
Revision 1.1 2005-02-14 16:32:41 peter
* solaris updates
Revision 1.1 2005/02/13 22:13:20 peter
* get solaris back in shape
Revision 1.8 2005/02/05 23:46:12 peter
* set addr:=nil for other signals
Revision 1.7 2005/02/05 23:45:38 peter
* sigcontext is invalid, use siginfo only
Revision 1.6 2005/01/30 18:01:15 peter
* signal cleanup for linux
* sigactionhandler instead of tsigaction for bsds
* sigcontext moved to cpu dir
Revision 1.5 2004/11/06 22:48:16 florian
* fixed errno setting in mt sparc/linux mt programs
Revision 1.4 2004/08/04 19:27:10 florian
* fixed floating point and integer exception handling on sparc/linux
Revision 1.3 2004/05/31 20:25:04 peter
* removed warnings
Revision 1.2 2003/11/06 16:28:52 peter
* compile fix
Revision 1.1 2003/11/06 16:22:01 peter
* sparc
Revision 1.1 2003/11/02 14:53:06 jonas
+ sighand and associated record definitions for ppc. Untested.
Revision 1.2 2003/11/01 01:58:11 marco
* more small fixes.
Revision 1.1 2003/11/01 01:27:20 marco
* initial version from 1.0.x branch
}

View File

@ -23,6 +23,11 @@ interface
{$I sysunixh.inc} {$I sysunixh.inc}
var argc:longint;
argv:PPchar;
envp:PPchar;
implementation implementation
{ OS independant parts} { OS independant parts}
@ -33,6 +38,8 @@ implementation
Misc. System Dependent Functions Misc. System Dependent Functions
*****************************************************************************} *****************************************************************************}
{$i start.inc}
procedure System_exit; procedure System_exit;
begin begin
Fpexit(cint(ExitCode)); Fpexit(cint(ExitCode));
@ -118,7 +125,6 @@ begin
FillChar(act, sizeof(SigActionRec),0); FillChar(act, sizeof(SigActionRec),0);
{ initialize handler } { initialize handler }
act.sa_handler :=@SignalToRunError; act.sa_handler :=@SignalToRunError;
{$warning TODO SIGINFO}
act.sa_flags:=SA_SIGINFO; act.sa_flags:=SA_SIGINFO;
FpSigAction(SIGFPE,act,oldact); FpSigAction(SIGFPE,act,oldact);
FpSigAction(SIGSEGV,act,oldact); FpSigAction(SIGSEGV,act,oldact);
@ -202,19 +208,6 @@ begin
end; end;
procedure pascalmain; external name 'PASCALMAIN';
{ Main entry point in C style, needed to capture program parameters. }
procedure main(argcparam: Longint; argvparam: ppchar; envpparam: ppchar); cdecl; [public];
begin
argc:= argcparam;
argv:= argvparam;
envp:= envpparam;
pascalmain; {run the pascal main program}
end;
Begin Begin
IsConsole := TRUE; IsConsole := TRUE;
IsLibrary := FALSE; IsLibrary := FALSE;
@ -242,7 +235,10 @@ End.
{ {
$Log$ $Log$
Revision 1.4 2005-02-13 22:13:20 peter Revision 1.5 2005-02-14 16:32:41 peter
* solaris updates
Revision 1.4 2005/02/13 22:13:20 peter
* get solaris back in shape * get solaris back in shape
Revision 1.3 2005/02/13 21:47:56 peter Revision 1.3 2005/02/13 21:47:56 peter

View File

@ -17,6 +17,7 @@
{$ifdef INTERNCONSTINTF} {$ifdef INTERNCONSTINTF}
{$ifndef FPC_SYSTEM_HAS_ABS}
{$define FPC_SYSTEM_HAS_ABS} {$define FPC_SYSTEM_HAS_ABS}
function fpc_abs_real(d : valreal) : valreal;compilerproc; function fpc_abs_real(d : valreal) : valreal;compilerproc;
begin begin
@ -24,7 +25,9 @@
runerror(207); runerror(207);
result:=0; result:=0;
end; end;
{$endif}
{$ifndef FPC_SYSTEM_HAS_SQR}
{$define FPC_SYSTEM_HAS_SQR} {$define FPC_SYSTEM_HAS_SQR}
function fpc_sqr_real(d : valreal) : valreal;compilerproc; function fpc_sqr_real(d : valreal) : valreal;compilerproc;
begin begin
@ -32,7 +35,9 @@
runerror(207); runerror(207);
result:=0; result:=0;
end; end;
{$endif}
{$ifndef FPC_SYSTEM_HAS_SQRT}
{$define FPC_SYSTEM_HAS_SQRT} {$define FPC_SYSTEM_HAS_SQRT}
function fpc_sqrt_real(d : valreal) : valreal;compilerproc; function fpc_sqrt_real(d : valreal) : valreal;compilerproc;
begin begin
@ -40,6 +45,7 @@
runerror(207); runerror(207);
result:=0; result:=0;
end; end;
{$endif}
{$else} {$else}
@ -56,7 +62,10 @@
{ {
$Log$ $Log$
Revision 1.12 2004-11-21 19:11:33 peter Revision 1.13 2005-02-14 16:32:41 peter
* solaris updates
Revision 1.12 2004/11/21 19:11:33 peter
* fix bootstrapping * fix bootstrapping
Revision 1.11 2004/11/21 15:35:23 peter Revision 1.11 2004/11/21 15:35:23 peter

View File

@ -45,15 +45,20 @@ const
sLineBreak = LineEnding; sLineBreak = LineEnding;
DefaultTextLineBreakStyle : TTextLineBreakStyle = tlbsLF; DefaultTextLineBreakStyle : TTextLineBreakStyle = tlbsLF;
{$ifndef Solaris}
{$ifndef Darwin} {$ifndef Darwin}
var argc:longint;external name 'operatingsystem_parameter_argc'; var argc:longint;external name 'operatingsystem_parameter_argc';
argv:PPchar;external name 'operatingsystem_parameter_argv'; argv:PPchar;external name 'operatingsystem_parameter_argv';
envp:PPchar;external name 'operatingsystem_parameter_envp'; envp:PPchar;external name 'operatingsystem_parameter_envp';
{$endif} {$endif}
{$endif}
{ {
$Log$ $Log$
Revision 1.23 2005-02-06 11:20:52 peter Revision 1.24 2005-02-14 16:32:41 peter
* solaris updates
Revision 1.23 2005/02/06 11:20:52 peter
* threading in system unit * threading in system unit
* removed systhrds unit * removed systhrds unit