mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-07 05:08:06 +02:00
* Old BSD directory killed
This commit is contained in:
parent
9ca9df4a7f
commit
2248b9a247
1202
rtl/bsd/Makefile
1202
rtl/bsd/Makefile
File diff suppressed because it is too large
Load Diff
@ -1,181 +0,0 @@
|
||||
#
|
||||
# Makefile.fpc for Free Pascal FreeBSD RTL
|
||||
#
|
||||
|
||||
[targets]
|
||||
loaders=prt0 cprt0
|
||||
units=$(SYSTEMUNIT) objpas strings \
|
||||
linux initc \
|
||||
dos crt objects printer \
|
||||
sysutils typinfo math \
|
||||
cpu mmx getopts heaptrc lineinfo \
|
||||
errors sockets gpm ipc
|
||||
rst=math
|
||||
|
||||
[require]
|
||||
rtl=0
|
||||
|
||||
[defaults]
|
||||
defaulttarget=linux
|
||||
defaultcpu=i386
|
||||
|
||||
[install]
|
||||
unitsubdir=rtl
|
||||
|
||||
[dirs]
|
||||
fpcdir=.
|
||||
incdir=$(INC) $(PROCINC)
|
||||
targetdir=.
|
||||
|
||||
[libs]
|
||||
libname=libfprtl.so
|
||||
libversion=1.0
|
||||
libunits=$(SYSTEMUNIT) objpas strings \
|
||||
linux \
|
||||
dos crt objects printer \
|
||||
sysutils typinfo math \
|
||||
cpu mmx getopts heaptrc \
|
||||
errors sockets ipc
|
||||
|
||||
|
||||
[presettings]
|
||||
RTL=..
|
||||
INC=$(RTL)/inc
|
||||
PROCINC=$(RTL)/$(CPU_TARGET)
|
||||
|
||||
UNITPREFIX=rtl
|
||||
|
||||
# Paths
|
||||
OBJPASDIR=$(RTL)/objpas
|
||||
GRAPHDIR=$(INC)/graph
|
||||
|
||||
# Define Go32v2 Units
|
||||
SYSTEMUNIT=syslinux
|
||||
|
||||
# Use new graph unit ?
|
||||
# NEWGRAPH=YES
|
||||
# Use LibGGI ?
|
||||
# Use
|
||||
#
|
||||
ifndef USELIBGGI
|
||||
USELIBGGI=NO
|
||||
endif
|
||||
|
||||
|
||||
[postsettings]
|
||||
SYSTEMPPU=$(addsuffix $(PPUEXT),$(SYSTEMUNIT))
|
||||
|
||||
# Get the system independent include file names.
|
||||
# This will set the following variables :
|
||||
# SYSINCNAMES
|
||||
include $(INC)/makefile.inc
|
||||
SYSINCDEPS=$(addprefix $(INC)/,$(SYSINCNAMES))
|
||||
|
||||
# Get the processor dependent include file names.
|
||||
# This will set the following variables :
|
||||
# CPUINCNAMES
|
||||
include $(PROCINC)/makefile.cpu
|
||||
SYSCPUDEPS=$(addprefix $(PROCINC)/,$(CPUINCNAMES))
|
||||
|
||||
# Put system unit dependencies together.
|
||||
SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS)
|
||||
|
||||
|
||||
[rules]
|
||||
vpath %$(PASEXT) $(INC) $(PROCINC)
|
||||
|
||||
#
|
||||
# Loaders
|
||||
#
|
||||
|
||||
prt0$(OEXT) : $(CPU_TARGET)/prt0.as
|
||||
$(AS) -o prt0$(OEXT) $(CPU_TARGET)/prt0.as
|
||||
|
||||
cprt0$(OEXT) : $(CPU_TARGET)/cprt0.as
|
||||
$(AS) -o cprt0$(OEXT) $(CPU_TARGET)/cprt0.as
|
||||
|
||||
|
||||
|
||||
|
||||
#
|
||||
# System Units (System, Objpas, Strings)
|
||||
#
|
||||
|
||||
$(SYSTEMPPU) : syslinux.pp sysconst.inc systypes.inc syscalls.inc $(SYSDEPS)
|
||||
$(COMPILER) -Us -Sg syslinux.pp $(REDIR)
|
||||
|
||||
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMPPU)
|
||||
$(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/objpas.pp $(REDIR)
|
||||
|
||||
strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc\
|
||||
$(PROCINC)/strings.inc $(PROCINC)/stringss.inc\
|
||||
$(SYSTEMPPU)
|
||||
|
||||
#
|
||||
# System Dependent Units
|
||||
#
|
||||
|
||||
linux$(PPUEXT) : linux.pp strings$(PPUEXT) $(INC)/textrec.inc $(INC)/filerec.inc \
|
||||
syscalls.inc systypes.inc sysconst.inc timezone.inc $(SYSTEMPPU) \
|
||||
linsysca.inc
|
||||
|
||||
|
||||
#
|
||||
# TP7 Compatible RTL Units
|
||||
#
|
||||
|
||||
dos$(PPUEXT) : dos.pp $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) \
|
||||
linux$(PPUEXT) $(SYSTEMPPU)
|
||||
|
||||
crt$(PPUEXT) : crt.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMPPU)
|
||||
|
||||
objects$(PPUEXT) : $(INC)/objects.pp objinc.inc $(SYSTEMPPU)
|
||||
|
||||
printer$(PPUEXT) : printer.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMPPU)
|
||||
|
||||
#
|
||||
# Graph
|
||||
#
|
||||
|
||||
#
|
||||
# Delphi Compatible Units
|
||||
#
|
||||
|
||||
sysutils$(PPUEXT) : sysutils.pp $(wildcard $(OBJPASDIR)/*.inc) \
|
||||
objpas$(PPUEXT) linux$(PPUEXT) errors$(PPUEXT)
|
||||
$(COMPILER) -I$(OBJPASDIR) sysutils.pp $(REDIR)
|
||||
|
||||
typinfo$(PPUEXT): $(OBJPASDIR)/typinfo.pp objpas$(PPUEXT)
|
||||
$(COMPILER) -Sg $(OBJPASDIR)/typinfo.pp $(REDIR)
|
||||
|
||||
math$(PPUEXT): $(OBJPASDIR)/math.pp objpas$(PPUEXT) sysutils$(PPUEXT)
|
||||
$(COMPILER) $(OBJPASDIR)/math.pp $(REDIR)
|
||||
|
||||
gettext$(PPUEXT): $(OBJPASDIR)/gettext.pp objpas$(PPUEXT) sysutils$(PPUEXT)
|
||||
$(COMPILER) $(OBJPASDIR)/gettext.pp $(REDIR)
|
||||
|
||||
#
|
||||
# Other system-independent RTL Units
|
||||
#
|
||||
|
||||
cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMPPU)
|
||||
|
||||
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMPPU)
|
||||
|
||||
getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMPPU)
|
||||
|
||||
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMPPU)
|
||||
$(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
|
||||
|
||||
lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMPPU)
|
||||
|
||||
#
|
||||
# Other system-dependent RTL Units
|
||||
#
|
||||
|
||||
sockets$(PPUEXT) : sockets.pp $(INC)/textrec.inc $(INC)/filerec.inc \
|
||||
linux$(PPUEXT) $(SYSTEMPPU)
|
||||
|
||||
errors$(PPUEXT) : errors.pp strings$(PPUEXT) $(SYSTEMPPU)
|
||||
|
||||
ipc$(PPUEXT) : ipc.pp linux$(PPUEXT) $(SYSTEMPPU)
|
@ -1,224 +0,0 @@
|
||||
$Id$
|
||||
|
||||
Comments, mistakes and suggestions to Marco@freepascal.org
|
||||
|
||||
1 FreeBSD status and notes. (kept on CVS because I work on several places)
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
Please read these before running a FreeBSD snapshot.
|
||||
|
||||
- Supported are FreeBSD 3.x (3.2, 3.4 and 4.0-release (quickly) tested. I never
|
||||
tested on 3.0). NON-ELF (2.x) versions are not supported.
|
||||
|
||||
- This is alpha software. I didn't have data-loss using it, but you
|
||||
use this on your own responsability. Use a scratch, or well backup'ed
|
||||
system.
|
||||
|
||||
- The FreeBSD/FPC port is now in its second stage. Some more stuff then what
|
||||
is required to recompile is now implemented (Clone, Sockets, Signals).
|
||||
Plans to create an (Alpha) release distribution are being made.
|
||||
(linking to external libs worked in the 16 april version already, even
|
||||
though the bsdport.txt of that date said it didn't)
|
||||
|
||||
- IMPORTANT:
|
||||
!!! An explicite warning: Not all procedures and structures in Linux are
|
||||
checked, so even if they are not commented out, they can be not implemented!!!
|
||||
This specially applies to linux specific stuff. In case of doubt, use a
|
||||
scratch system, view the source, or mail the maintainer.
|
||||
|
||||
- The pre alpha version's READDIR problem is fixed with a "hack", which
|
||||
means that searchpath (-Fx) and FindFirst/FindNext are more or less
|
||||
working.
|
||||
I don't know how good that hack is,I hope to replace it later this week
|
||||
by a port of freebsd's libc opendir/readdir/closedir/telldir/seekdir code,
|
||||
just to make sure.( Libc does some complex scanning and sorting for
|
||||
duplicate names, but I don't know if that is something archaic or not.
|
||||
Probably related to hardlinks, so don't use findfirst in /dev for now)
|
||||
|
||||
These packages have more or less been tested with ncurses:
|
||||
- RTL, (NOT the Crt unit. Use ncrt for now!)
|
||||
- compiler can rebuild (see below)
|
||||
- packages/inet,
|
||||
- packages/zlib
|
||||
- packages/x11
|
||||
- fcl/
|
||||
- ncurses/panel.
|
||||
- (reported by somebody else) XForms.
|
||||
- fpgui's "hello world" demo (the other ones needed a FPC 1.1 compiler, I
|
||||
only tested 1.0.1 with FreeBSD)
|
||||
|
||||
2 Syscalls.
|
||||
-----------
|
||||
|
||||
The bulk of the linux syscalls are implemented.
|
||||
|
||||
Some that aren't implemented:
|
||||
|
||||
NI = not implemented yet
|
||||
req = required for compiler
|
||||
noreq? = not required, but not checked.
|
||||
Ever? (y/n)
|
||||
|
||||
syscall status Ever? comment
|
||||
------------------------------------------------------------------------
|
||||
Readdir I req implemented from scratch, working. (this
|
||||
call doesn't exist on FreeBSD and FindFirst is
|
||||
based on it)
|
||||
|
||||
ioperm NI noreq n IO via port access impossible under FreeBSD
|
||||
(so: no ports unit, port[] support)
|
||||
(got some reports that port access is possible under
|
||||
FreeBSD. Probably the same way it slipped into Linux;
|
||||
dos emulation)
|
||||
|
||||
ipc NI ? The IPC is System V thingy, and only supported
|
||||
under FreeBSD with certain kernel parameters.
|
||||
|
||||
Clone() I noreq Not implemented as syscall, based on linuxthread
|
||||
assembler routine. Untested. Somebody has a good
|
||||
test program? Or that tests the FCL threading
|
||||
routines based on it?
|
||||
|
||||
sysinfo NI noreq Not supported under BSD, not even by emulator
|
||||
uname NI noreq " " " " " " " "
|
||||
(procedures based on this call are also commented
|
||||
(get* procs))
|
||||
|
||||
signal I noreq A *lot* of emulation code.
|
||||
alarm NI noreq? Could be possible to port. (crt.delay?)
|
||||
pause NI noreq? Also possible I think. Uses process information
|
||||
in linux-emu, that is why I didn't port directly.
|
||||
|
||||
3 How to build a FreeBSD compiler/RTL ?
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
(You'll probably need CVS sources dated after April 16th for basic support, or
|
||||
after the major updates on 10 september for signals and sockets.)
|
||||
|
||||
To rebuild the compiler, you need a starting compiler.
|
||||
- Start compiler on other OS? (tested is Linux) -> check 3a
|
||||
- Already a 1.0.x startcompiler on FreeBSD (e.g. from a snapshot) -> 3b is much
|
||||
easier.
|
||||
|
||||
3a How to build a FreeBSD system starting on Linux or using the Linux emu of
|
||||
FreeBSD? (Bootstrapping)
|
||||
|
||||
The FreeBSD port is experimental atm, though valid native binaries can be
|
||||
obtained.
|
||||
|
||||
The procedure here is verbose, and for the most akward case.
|
||||
If you have linux support on on your FreeBSD machine, or operate on NFS or Samba
|
||||
share (so that copying and using the sources in two systems is easier)
|
||||
some steps can be omitted or simplified. Just play with it.
|
||||
|
||||
STEP A: create the RTL assembler files.
|
||||
|
||||
1. Copy all linux files to a new directory. (here called BSDBUILD), and
|
||||
2. Copy all bsd files over them.
|
||||
2b. Run fpcmake if you can. This will eliminate problems with Makefile being
|
||||
out of sync or containing dos lfns.
|
||||
3. Execute make OPT='-Tlinux -dBSD -a -s -OG3p3' (with any i386 FPC
|
||||
compiler) in directory BSDBUILD. This failed with some go32v2 versions
|
||||
(which wanted to assemble anyway), but worked with several win32 and
|
||||
linux' snapshots. On go32v2 you can try to add -Aas.
|
||||
|
||||
You now have .ppu's and .s 's for the RTL hopefully. Don't forget
|
||||
i386/prt0.as (which is in fact a .s file)!
|
||||
|
||||
STEP B: Create the compiler assembler (.s) sources;
|
||||
|
||||
4. Compile with
|
||||
./bsdcompile -Fu/full_path_to_BSDBUILD -a -s
|
||||
|
||||
(steps 5 and 6 are only needed for the very first FreeBSD snapshot, which
|
||||
is no longer available)
|
||||
|
||||
STEP C: Building the binary
|
||||
|
||||
7. Copy all necessary files
|
||||
(- all *.s *.ppu files, both from compiler and BSDBUILD dir,
|
||||
- compiler/link.res and
|
||||
- compiler/ppas.sh
|
||||
- Cut and paste of the DO_S script at the end of this document to file
|
||||
- rtl/bsd/i386/*.as files.
|
||||
)
|
||||
to a directory on the BSD machine.
|
||||
8a. Change to the directory on the BSD machine, and run the script DO_S to
|
||||
assemble all .s files to .o files.
|
||||
8b. Assemble the stub with as prt0.as -o prt0.o
|
||||
9. Adapt link.res so that all paths are right.
|
||||
(remove all paths in front of all .o files, remove the -l lines and their
|
||||
parentheses)
|
||||
10a. Edit ppas.sh, and keep only #!/bin/sh and the line starting with ld.
|
||||
b Remove any -l=ld-linux.so.1 (or similar) option from the ld line.
|
||||
c run ppas.sh to build the compiler
|
||||
|
||||
11. Have fun :-) The compiler is called "pp"
|
||||
|
||||
12. If you have a heavy machine (pentium 100 and 32MB+) execute 3b to make
|
||||
sure everything is up to date.
|
||||
|
||||
------------
|
||||
|
||||
3b How to update FPC compiler on FreeBSD from fresh CVS sources with a snapshot
|
||||
installed.
|
||||
|
||||
(To create a compiler for the 1.0 branch, you need a 1.0.x compiler, and to
|
||||
create a 1.1 (development branch) compiler you need a 1.1.x snapshot.
|
||||
You can check the version of your snapshot with ppc386 -i)
|
||||
|
||||
(assuming ppc386 in the PATH, and a rtl/ and compiler/ directory obtained
|
||||
from snapshot zips, with non mangled makefiles)
|
||||
|
||||
1a Rename the rtl/linux to something else. (here: rtl/linuxorg)
|
||||
1b create a new rtl/linux dir
|
||||
1c copy rtl/linuxorg/* to rtl/linux
|
||||
1d copy rtl/bsd/* to rtl/linux RECURSIVELY
|
||||
1e (optionally) Run fpcmake if you have it installed. This is a good
|
||||
habit!
|
||||
2 switch to compiler/
|
||||
3 gmake cycle OPT='-OG3p3 -dBSD' will generate a new compiler.
|
||||
|
||||
Be patient! FreeBSD has slower disk-io than Linux :-)
|
||||
|
||||
Rest is like Linux, except that I strongly advise to create the fpc
|
||||
directory always in /usr/local/lib/ instead of /usr/lib.
|
||||
This habit is still fashionable on FreeBSD.
|
||||
|
||||
The same with other packages. Like Linux :-)
|
||||
|
||||
4 Linking to external libraries
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
Same as on Linux, except use the
|
||||
|
||||
|
||||
------------------
|
||||
The DO_S script. (C) El Znorro
|
||||
------------------
|
||||
#!/bin/sh
|
||||
|
||||
for i in *.s; do
|
||||
flup=`basename $i .s`
|
||||
as $i -o $flup.o
|
||||
echo $i
|
||||
echo $flup
|
||||
done
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.3 2000-09-11 14:38:09 marco
|
||||
* 14 april version killed, and replaced by newer fixes branch version
|
||||
|
||||
Revision 1.1.2.1 2000/09/10 16:12:14 marco
|
||||
Initial signals, sockets and clone
|
||||
|
||||
Revision 1.1 2000/07/13 06:30:32 michael
|
||||
+ Initial import
|
||||
|
||||
Revision 1.3 2000/04/16 16:11:33 marco
|
||||
* Severe updates for now *working* status
|
||||
|
||||
Revision 1.2 2000/04/10 15:46:51 marco
|
||||
* worked all day. probably a lot changed
|
||||
}
|
@ -1,176 +0,0 @@
|
||||
{******************************************************************************
|
||||
Basic Socket Functions
|
||||
******************************************************************************}
|
||||
|
||||
Function socket(Domain,SocketType,Protocol:Longint):Longint;
|
||||
begin
|
||||
Socket:=Do_Syscall(syscall_nr_socket,Domain,SocketType,Protocol);
|
||||
end;
|
||||
|
||||
Function Send(Sock:Longint;Var Addr;AddrLen,Flags:Longint):Longint;
|
||||
begin
|
||||
Send:=do_syscall(syscall_nr_sendto,Sock,Longint(@Addr),AddrLen,Flags,0,0);
|
||||
end;
|
||||
|
||||
Function Recv(Sock:Longint;Var Addr;AddrLen,Flags:Longint):Longint;
|
||||
begin
|
||||
Recv:=do_syscall(syscall_nr_Recvfrom,Sock,Longint(@Addr),AddrLen,Flags,0,0);
|
||||
end;
|
||||
|
||||
Function Bind(Sock:Longint;Var Addr;AddrLen:Longint):Boolean;
|
||||
begin
|
||||
Bind:=(do_syscall(syscall_nr_Bind,Sock,Longint(@Addr),AddrLen)=0);
|
||||
end;
|
||||
|
||||
Function Listen(Sock,MaxConnect:Longint):Boolean;
|
||||
begin
|
||||
Listen:=(do_syscall(syscall_nr_Listen,Sock,MaxConnect,0)=0);
|
||||
end;
|
||||
|
||||
Function Accept(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
|
||||
begin
|
||||
Accept:=do_syscall(syscall_nr_accept,Sock,longint(@Addr),longint(@AddrLen));
|
||||
If Accept<0 Then
|
||||
Accept:=-1;
|
||||
end;
|
||||
|
||||
Function Connect(Sock:Longint;Var Addr;Addrlen:Longint): boolean;
|
||||
|
||||
begin
|
||||
Connect:=do_syscall(syscall_nr_connect,Sock,longint(@Addr),AddrLen)=0;
|
||||
end;
|
||||
|
||||
|
||||
Function Shutdown(Sock:Longint;How:Longint):Longint;
|
||||
begin
|
||||
ShutDown:=do_syscall(syscall_nr_shutdown,Sock,How);
|
||||
end;
|
||||
|
||||
|
||||
Function GetSocketName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
|
||||
begin
|
||||
GetSocketName:=do_syscall(syscall_nr_GetSockName,Sock,longint(@Addr),longint(@AddrLen));
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function GetPeerName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
|
||||
begin
|
||||
GetPeerName:=do_syscall(syscall_nr_GetPeerName,Sock,longint(@Addr),longint(@AddrLen));
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function SetSocketOptions(Sock,Level,OptName:Longint;Var OptVal;optlen:longint):Longint;
|
||||
begin
|
||||
SetSocketOptions:=do_syscall(syscall_nr_SetSockOpt,Sock,Level,OptName,Longint(@OptVal),OptLen,0);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function GetSocketOptions(Sock,Level,OptName:Longint;Var OptVal;Var optlen:longint):Longint;
|
||||
begin
|
||||
GetSocketOptions:=do_syscall(syscall_nr_GetSockOpt,Sock,Level,OptName,Longint(@OptVal),OptLen,0);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function SocketPair(Domain,SocketType,Protocol:Longint;var Pair:TSockArray):Longint;
|
||||
begin
|
||||
SocketPair:=do_syscall(syscall_nr_SocketPair,Domain,SocketType,Protocol,longint(@Pair),0,0);
|
||||
end;
|
||||
|
||||
{******************************************************************************
|
||||
UnixSock
|
||||
******************************************************************************}
|
||||
|
||||
Procedure Str2UnixSockAddr(const addr:string;var t:TUnixSockAddr;var len:longint);
|
||||
begin
|
||||
Move(Addr[1],t.Path,length(Addr));
|
||||
t.Family:=AF_UNIX;
|
||||
t.Path[length(Addr)]:=#0;
|
||||
Len:=Length(Addr)+3;
|
||||
end;
|
||||
|
||||
|
||||
Function Bind(Sock:longint;const addr:string):boolean;
|
||||
var
|
||||
UnixAddr : TUnixSockAddr;
|
||||
AddrLen : longint;
|
||||
begin
|
||||
Str2UnixSockAddr(addr,UnixAddr,AddrLen);
|
||||
Bind(Sock,UnixAddr,AddrLen);
|
||||
Bind:=(SocketError=0);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function DoAccept(Sock:longint;var addr:string):longint;
|
||||
var
|
||||
UnixAddr : TUnixSockAddr;
|
||||
AddrLen : longint;
|
||||
begin
|
||||
AddrLen:=length(addr)+3;
|
||||
DoAccept:=Accept(Sock,UnixAddr,AddrLen);
|
||||
Move(UnixAddr.Path,Addr[1],AddrLen);
|
||||
SetLength(Addr,AddrLen);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function DoConnect(Sock:longint;const addr:string):Boolean;
|
||||
var
|
||||
UnixAddr : TUnixSockAddr;
|
||||
AddrLen : longint;
|
||||
begin
|
||||
Str2UnixSockAddr(addr,UnixAddr,AddrLen);
|
||||
DoConnect:=Connect(Sock,UnixAddr,AddrLen);
|
||||
end;
|
||||
|
||||
Function Accept(Sock:longint;var addr:string;var SockIn,SockOut:text):Boolean;
|
||||
var
|
||||
s : longint;
|
||||
begin
|
||||
S:=DoAccept(Sock,addr);
|
||||
if S>0 then
|
||||
begin
|
||||
Sock2Text(S,SockIn,SockOut);
|
||||
Accept:=true;
|
||||
end
|
||||
else
|
||||
Accept:=false;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function Accept(Sock:longint;var addr:string;var SockIn,SockOut:File):Boolean;
|
||||
var
|
||||
s : longint;
|
||||
begin
|
||||
S:=DoAccept(Sock,addr);
|
||||
if S>0 then
|
||||
begin
|
||||
Sock2File(S,SockIn,SockOut);
|
||||
Accept:=true;
|
||||
end
|
||||
else
|
||||
Accept:=false;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function Connect(Sock:longint;const addr:string;var SockIn,SockOut:text):Boolean;
|
||||
begin
|
||||
Connect:=DoConnect(Sock,addr);
|
||||
If Connect then
|
||||
Sock2Text(Sock,SockIn,SockOut);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function Connect(Sock:longint;const addr:string;var SockIn,SockOut:file):Boolean;
|
||||
begin
|
||||
Connect:=DoConnect(Sock,addr);
|
||||
if Connect then
|
||||
Sock2File(Sock,SockIn,SockOut);
|
||||
end;
|
@ -1,141 +0,0 @@
|
||||
#
|
||||
# $Id$
|
||||
# This file is part of the Free Pascal run time library.
|
||||
# Copyright (c) 1999-2000 by Marco van de Voort, Michael Van Canneyt
|
||||
# and Peter Vreman
|
||||
# members of the Free Pascal development team.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#**********************************************************************}
|
||||
#
|
||||
# FreeBSD ELF startup code for Free Pascal for dynamical linking to libc.
|
||||
#
|
||||
|
||||
.file "cprt0.as"
|
||||
.version "01.01"
|
||||
gcc2_compiled.:
|
||||
.globl __progname
|
||||
.section .rodata
|
||||
.LC0:
|
||||
.ascii "\0"
|
||||
.data
|
||||
.p2align 2
|
||||
.type __progname,@object
|
||||
.size __progname,4
|
||||
__progname:
|
||||
.long .LC0
|
||||
.align 4
|
||||
___fpucw:
|
||||
.long 0x1332
|
||||
|
||||
.globl ___fpc_brk_addr /* heap management */
|
||||
.type ___fpc_brk_addr,@object
|
||||
.size ___fpc_brk_addr,4
|
||||
___fpc_brk_addr:
|
||||
.long 0
|
||||
|
||||
|
||||
.text
|
||||
.p2align 2
|
||||
.globl _start
|
||||
.type _start,@function
|
||||
_start:
|
||||
pushl %ebp
|
||||
movl %esp,%ebp
|
||||
pushl %edi
|
||||
pushl %esi
|
||||
pushl %ebx
|
||||
#APP
|
||||
movl %edx,%edx
|
||||
#NO_APP
|
||||
leal 8(%ebp),%edi
|
||||
movl %edi,U_SYSLINUX_ARGV
|
||||
mov -4(%edi),%eax
|
||||
movl %eax,U_SYSLINUX_ARGC
|
||||
movl 4(%ebp),%ebx
|
||||
leal 12(%ebp,%ebx,4),%esi
|
||||
movl %esi,U_SYSLINUX_ENVP
|
||||
movl %esi,environ
|
||||
testl %ebx,%ebx
|
||||
jle .L2
|
||||
movl 8(%ebp),%eax
|
||||
testl %eax,%eax
|
||||
je .L2
|
||||
movl %eax,__progname
|
||||
cmpb $0,(%eax)
|
||||
je .L2
|
||||
.p2align 2,0x90
|
||||
.L6:
|
||||
cmpb $47,(%eax)
|
||||
jne .L5
|
||||
leal 1(%eax),%ecx
|
||||
movl %ecx,__progname
|
||||
.L5:
|
||||
incl %eax
|
||||
cmpb $0,(%eax)
|
||||
jne .L6
|
||||
.L2:
|
||||
movl $_DYNAMIC,%eax
|
||||
testl %eax,%eax
|
||||
je .L9
|
||||
pushl %edx
|
||||
call atexit
|
||||
addl $4,%esp
|
||||
.L9:
|
||||
pushl $_fini
|
||||
call atexit
|
||||
call _init
|
||||
# pushl %esi
|
||||
# pushl %edi
|
||||
# pushl %ebx
|
||||
# call main
|
||||
# pushl %eax
|
||||
# call exit
|
||||
|
||||
|
||||
finit /* initialize fpu */
|
||||
fwait
|
||||
fldcw ___fpucw
|
||||
|
||||
xorl %ebp,%ebp
|
||||
|
||||
call main
|
||||
pushl %eax
|
||||
jmp _haltproc
|
||||
|
||||
.p2align 2,0x90
|
||||
|
||||
.globl _haltproc
|
||||
.type _haltproc,@function
|
||||
|
||||
_haltproc:
|
||||
mov $1,%eax
|
||||
movzwl U_SYSLINUX_EXITCODE,%ebx
|
||||
pushl %ebx
|
||||
call .Lactualsyscall
|
||||
addl $4,%esp
|
||||
jmp _haltproc
|
||||
|
||||
.Lactualsyscall:
|
||||
int $0x80
|
||||
jb .LErrorcode
|
||||
xor %ebx,%ebx
|
||||
ret
|
||||
.LErrorcode:
|
||||
mov %eax,%ebx
|
||||
mov $-1,%eax
|
||||
ret
|
||||
.p2align 2,0x90
|
||||
.Lfe1:
|
||||
|
||||
|
||||
.size _start,.Lfe1-_start
|
||||
.comm environ,4,4
|
||||
.weak _DYNAMIC
|
||||
.ident "GCC: (GNU) 2.7.2.1"
|
@ -1,124 +0,0 @@
|
||||
#
|
||||
# $Id$
|
||||
# This file is part of the Free Pascal run time library.
|
||||
# Copyright (c) 1999-2000 by Marco van de Voort, Michael Van Canneyt
|
||||
# and Peter Vreman
|
||||
# members of the Free Pascal development team.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#**********************************************************************}
|
||||
#
|
||||
# FreeBSD standard (static) ELF startup code for Free Pascal
|
||||
#
|
||||
|
||||
.file "prt1.as"
|
||||
.version "01.01"
|
||||
gcc2_compiled.:
|
||||
.globl __progname
|
||||
.section .rodata
|
||||
.LC0:
|
||||
.ascii "\0"
|
||||
.data
|
||||
.p2align 2
|
||||
.type __progname,@object
|
||||
.size __progname,4
|
||||
__progname:
|
||||
.long .LC0
|
||||
.align 4
|
||||
___fpucw:
|
||||
.long 0x1332
|
||||
|
||||
.globl ___fpc_brk_addr /* heap management */
|
||||
.type ___fpc_brk_addr,@object
|
||||
.size ___fpc_brk_addr,4
|
||||
___fpc_brk_addr:
|
||||
.long 0
|
||||
|
||||
|
||||
.text
|
||||
.p2align 2
|
||||
.globl _start
|
||||
.type _start,@function
|
||||
_start:
|
||||
pushl %ebp
|
||||
movl %esp,%ebp
|
||||
pushl %edi
|
||||
pushl %esi
|
||||
pushl %ebx
|
||||
#APP
|
||||
movl %edx,%edx
|
||||
#NO_APP
|
||||
leal 8(%ebp),%edi
|
||||
movl %edi,U_SYSLINUX_ARGV
|
||||
mov -4(%edi),%eax
|
||||
movl %eax,U_SYSLINUX_ARGC
|
||||
movl 4(%ebp),%ebx
|
||||
leal 12(%ebp,%ebx,4),%esi
|
||||
movl %esi,U_SYSLINUX_ENVP
|
||||
movl %esi,environ
|
||||
testl %ebx,%ebx
|
||||
jle .L2
|
||||
movl 8(%ebp),%eax
|
||||
testl %eax,%eax
|
||||
je .L2
|
||||
movl %eax,__progname
|
||||
cmpb $0,(%eax)
|
||||
je .L2
|
||||
.p2align 2,0x90
|
||||
.L6:
|
||||
cmpb $47,(%eax)
|
||||
jne .L5
|
||||
leal 1(%eax),%ecx
|
||||
movl %ecx,__progname
|
||||
.L5:
|
||||
incl %eax
|
||||
cmpb $0,(%eax)
|
||||
jne .L6
|
||||
.L2:
|
||||
.L9:
|
||||
|
||||
# copied from linux
|
||||
|
||||
finit /* initialize fpu */
|
||||
fwait
|
||||
fldcw ___fpucw
|
||||
|
||||
xorl %ebp,%ebp
|
||||
|
||||
call main
|
||||
pushl %eax
|
||||
jmp _haltproc
|
||||
|
||||
.p2align 2,0x90
|
||||
.globl _haltproc
|
||||
.type _haltproc,@function
|
||||
|
||||
_haltproc:
|
||||
mov $1,%eax
|
||||
movzwl U_SYSLINUX_EXITCODE,%ebx
|
||||
pushl %ebx
|
||||
call _actualsyscall
|
||||
addl $4,%esp
|
||||
jmp _haltproc
|
||||
|
||||
_actualsyscall:
|
||||
int $0x80
|
||||
jb .LErrorcode
|
||||
xor %ebx,%ebx
|
||||
ret
|
||||
.LErrorcode:
|
||||
mov %eax,%ebx
|
||||
mov $-1,%eax
|
||||
ret
|
||||
.p2align 2,0x90
|
||||
.Lfe1:
|
||||
.size _start,.Lfe1-_start
|
||||
.comm environ,4,4
|
||||
.weak _DYNAMIC
|
||||
.ident "GCC: (GNU) 2.7.2.1"
|
@ -1,167 +0,0 @@
|
||||
{
|
||||
$Id$
|
||||
This file is part of the Free Pascal run time library.
|
||||
Copyright (c) 1999-2000 by Jonas Maebe,
|
||||
member of the Free Pascal development team.
|
||||
|
||||
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.
|
||||
|
||||
**********************************************************************}
|
||||
|
||||
|
||||
Const { For sending a signal }
|
||||
|
||||
SA_NOCLDSTOP = 8;
|
||||
SA_ONSTACK = $001; { take signal on signal stack }
|
||||
SA_RESTART = $002; { restart system call on signal return }
|
||||
SA_RESETHAND = $004; { reset to SIG_DFL when taking signal }
|
||||
SA_NODEFER = $010; { don't mask the signal we're delivering }
|
||||
SA_NOCLDWAIT = $020; { don't keep zombies around }
|
||||
SA_SIGINFO = $040; { signal handler with SA_SIGINFO args }
|
||||
SA_USERTRAMP = $100; { SUNOS compat: Do not bounce off kernel's sigtramp }
|
||||
|
||||
SIG_BLOCK = 1;
|
||||
SIG_UNBLOCK = 2;
|
||||
SIG_SETMASK = 3;
|
||||
|
||||
{BSD Checked}
|
||||
SIG_DFL = 0 ;
|
||||
SIG_IGN = 1 ;
|
||||
SIG_ERR = -1 ;
|
||||
|
||||
SIGHUP = 1;
|
||||
SIGINT = 2;
|
||||
SIGQUIT = 3;
|
||||
SIGILL = 4;
|
||||
SIGTRAP = 5;
|
||||
SIGABRT = 6;
|
||||
SIGIOT = 6;
|
||||
SIGEMT = 7;
|
||||
SIGFPE = 8;
|
||||
SIGKILL = 9;
|
||||
SIGBUS = 10;
|
||||
SIGSEGV = 11;
|
||||
SIGSYS = 12;
|
||||
SIGPIPE = 13;
|
||||
SIGALRM = 14;
|
||||
SIGTERM = 15;
|
||||
SIGURG = 16;
|
||||
SIGSTOP = 17;
|
||||
SIGTSTP = 18;
|
||||
SIGCONT = 19;
|
||||
SIGCHLD = 20;
|
||||
SIGTTIN = 21;
|
||||
SIGTTOU = 22;
|
||||
SIGIO = 23;
|
||||
SIGXCPU = 24;
|
||||
SIGXFSZ = 25;
|
||||
SIGVTALRM = 26;
|
||||
SIGPROF = 27;
|
||||
SIGWINCH = 28;
|
||||
SIGINFO = 29;
|
||||
SIGUSR1 = 30;
|
||||
SIGUSR2 = 31;
|
||||
|
||||
|
||||
{$packrecords C}
|
||||
const
|
||||
SI_PAD_SIZE = ((128/sizeof(longint)) - 3);
|
||||
|
||||
{
|
||||
* The sequence of the fields/registers in struct sigcontext should match
|
||||
* those in mcontext_t.
|
||||
}
|
||||
|
||||
type sigset_t = cardinal;
|
||||
|
||||
PSigContextRec = ^SigContextRec;
|
||||
SigContextRec = record
|
||||
sc_mask : sigset_t; { signal mask to restore }
|
||||
sc_onstack : longint; { sigstack state to restore }
|
||||
|
||||
sc_gs : longint; { machine state (struct trapframe): }
|
||||
sc_fs : longint;
|
||||
sc_es : longint;
|
||||
sc_ds : longint;
|
||||
sc_edi : longint;
|
||||
sc_esi : longint;
|
||||
sc_ebp : longint;
|
||||
sc_isp : longint;
|
||||
sc_ebx : longint;
|
||||
sc_edx : longint;
|
||||
sc_ecx : longint;
|
||||
sc_eax : longint;
|
||||
sc_trapno : longint;
|
||||
sc_err : longint;
|
||||
sc_eip : longint;
|
||||
sc_cs : longint;
|
||||
sc_efl : longint;
|
||||
sc_esp : longint;
|
||||
sc_ss : longint;
|
||||
{
|
||||
* XXX FPU state is 27 * 4 bytes h/w, 1 * 4 bytes s/w (probably not
|
||||
* needed here), or that + 16 * 4 bytes for emulators (probably all
|
||||
* needed here). The "spare" bytes are mostly not spare.
|
||||
}
|
||||
en_cw : cardinal; { control word (16bits used) }
|
||||
en_sw : cardinal; { status word (16bits) }
|
||||
en_tw : cardinal; { tag word (16bits) }
|
||||
en_fip : cardinal; { floating point instruction pointer }
|
||||
en_fcs : word; { floating code segment selector }
|
||||
en_opcode : word; { opcode last executed (11 bits ) }
|
||||
en_foo : cardinal; { floating operand offset }
|
||||
en_fos : cardinal; { floating operand segment selector }
|
||||
fpr_acc : array[0..79] of char;
|
||||
fpr_ex_sw : cardinal;
|
||||
fpr_pad : array[0..63] of char;
|
||||
end;
|
||||
|
||||
SignalHandler = Procedure(Sig : Longint);cdecl;
|
||||
PSignalHandler = ^SignalHandler;
|
||||
SignalRestorer = Procedure;cdecl;
|
||||
PSignalRestorer = ^SignalRestorer;
|
||||
TSigAction = procedure(Sig: Longint; SigContext: SigContextRec;someptr:pointer);cdecl;
|
||||
|
||||
Sigset=sigset_t;
|
||||
PSigSet = ^SigSet;
|
||||
|
||||
SigActionRec = packed record
|
||||
Handler : record
|
||||
case byte of
|
||||
0: (Sh: SignalHandler);
|
||||
1: (Sa: TSigAction);
|
||||
end;
|
||||
Sa_Flags : Longint;
|
||||
Sa_Mask : SigSet;
|
||||
end;
|
||||
PSigActionRec = ^SigActionRec;
|
||||
|
||||
{
|
||||
Change action of process upon receipt of a signal.
|
||||
Signum specifies the signal (all except SigKill and SigStop).
|
||||
If Act is non-nil, it is used to specify the new action.
|
||||
If OldAct is non-nil the previous action is saved there.
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.2 2000-09-11 14:38:10 marco
|
||||
* 14 april version killed, and replaced by newer fixes branch version
|
||||
|
||||
Revision 1.1.2.1 2000/09/10 16:18:41 marco
|
||||
initial version
|
||||
|
||||
Revision 1.2 2000/03/31 23:11:23 pierre
|
||||
* TSigAction Context param is the full record not a pointer
|
||||
|
||||
Revision 1.1 2000/03/31 13:24:28 jonas
|
||||
* signal handling using sigaction when compiled with -dnewsignal
|
||||
(allows multiple signals to be received in one run)
|
||||
|
||||
}
|
@ -1,511 +0,0 @@
|
||||
{
|
||||
$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.
|
||||
|
||||
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.
|
||||
|
||||
**********************************************************************}
|
||||
|
||||
{BSD version of the syscalls required to implement SysLinux.}
|
||||
|
||||
{No debugging for syslinux include !}
|
||||
{$IFDEF SYS_LINUX}
|
||||
{$UNDEF SYSCALL_DEBUG}
|
||||
{$ENDIF SYS_LINUX}
|
||||
|
||||
{*****************************************************************************
|
||||
--- Main:The System Call Self ---
|
||||
*****************************************************************************}
|
||||
|
||||
{ The system designed for Linux can't be used for FreeBSD so easily, since
|
||||
FreeBSD pushes arguments, instead of loading them to registers.
|
||||
|
||||
For now I do them in assembler, which makes it easier to test them (copy and
|
||||
paste to and AS source). Ultimately I hope to design something like this}
|
||||
|
||||
{actualsyscall:
|
||||
_actualsyscall : int $0x80
|
||||
jb someerror
|
||||
ret
|
||||
someerror: storeerrorsomewhere
|
||||
ret
|
||||
}
|
||||
|
||||
{
|
||||
procedure actualsyscall; cdecl; EXTERNAL NAME '_actualsyscall';
|
||||
}
|
||||
|
||||
procedure actualsyscall; assembler;
|
||||
asm
|
||||
int $0x80
|
||||
jb .LErrorcode
|
||||
xor %ebx,%ebx
|
||||
ret
|
||||
.LErrorcode:
|
||||
mov %eax,%ebx
|
||||
mov $-1,%eax
|
||||
end;
|
||||
|
||||
|
||||
function Do_SysCall(sysnr:LONGINT):longint; assembler;
|
||||
|
||||
asm
|
||||
movl sysnr,%eax
|
||||
call actualsyscall
|
||||
movw %bx,Errno
|
||||
end;
|
||||
|
||||
function Do_SysCall(sysnr,param1:longint):longint; assembler;
|
||||
|
||||
asm
|
||||
movl sysnr,%eax
|
||||
pushl Param1
|
||||
call actualsyscall
|
||||
addl $4,%esp
|
||||
movw %bx,Errno
|
||||
end;
|
||||
|
||||
function Do_SysCall(sysnr,param1:integer):longint; assembler;
|
||||
|
||||
asm
|
||||
movl sysnr,%eax
|
||||
pushw Param1
|
||||
call actualsyscall
|
||||
addw $2,%esp
|
||||
movw %bx,Errno
|
||||
end;
|
||||
|
||||
|
||||
function Do_SysCall(sysnr,param1,param2:LONGINT):longint; assembler;
|
||||
|
||||
asm
|
||||
movl sysnr,%eax
|
||||
pushl param2
|
||||
pushl Param1
|
||||
call actualsyscall
|
||||
addl $8,%esp
|
||||
movw %bx,Errno
|
||||
end;
|
||||
|
||||
function Do_SysCall(sysnr,param1,param2,param3:LONGINT):longint; assembler;
|
||||
|
||||
asm
|
||||
movl sysnr,%eax
|
||||
pushl param3
|
||||
pushl param2
|
||||
pushl Param1
|
||||
call actualsyscall
|
||||
addl $12,%esp
|
||||
movw %bx,Errno
|
||||
end;
|
||||
|
||||
function Do_SysCall(sysnr,param1,param2,param3,param4:LONGINT):longint; assembler;
|
||||
|
||||
asm
|
||||
movl sysnr,%eax
|
||||
pushl param4
|
||||
pushl param3
|
||||
pushl param2
|
||||
pushl Param1
|
||||
call actualsyscall
|
||||
addl $16,%esp
|
||||
movw %bx,Errno
|
||||
end;
|
||||
|
||||
|
||||
function Do_SysCall(sysnr,param1,param2,param3,param4,param5:LONGINT):longint; assembler;
|
||||
|
||||
asm
|
||||
movl sysnr,%eax
|
||||
pushl param5
|
||||
pushl param4
|
||||
pushl param3
|
||||
pushl param2
|
||||
pushl Param1
|
||||
call actualsyscall
|
||||
addl $20,%esp
|
||||
movw %bx,Errno
|
||||
end;
|
||||
|
||||
function Do_SysCall(sysnr,param1,param2,param3,param4,param5,param6:LONGINT):longint; assembler;
|
||||
|
||||
asm
|
||||
movl sysnr,%eax
|
||||
pushl param6
|
||||
pushl param5
|
||||
pushl param4
|
||||
pushl param3
|
||||
pushl param2
|
||||
pushl Param1
|
||||
call actualsyscall
|
||||
addl $24,%esp
|
||||
movw %bx,Errno
|
||||
end;
|
||||
|
||||
|
||||
function Do_SysCall(sysnr,param1,param2,param3,param4,param5,param6,param7:LONGINT):longint; assembler;
|
||||
|
||||
asm
|
||||
movl sysnr,%eax
|
||||
pushl param7
|
||||
pushl param6
|
||||
pushl param5
|
||||
pushl param4
|
||||
pushl param3
|
||||
pushl param2
|
||||
pushl Param1
|
||||
call actualsyscall
|
||||
addl $28,%esp
|
||||
movw %bx,Errno
|
||||
end;
|
||||
|
||||
Function Sys_Time:longint;
|
||||
|
||||
VAR tv : timeval;
|
||||
tz : timezone;
|
||||
retval : longint;
|
||||
|
||||
begin
|
||||
Retval:=do_syscall(116,longint(@tv),longint(@tz));
|
||||
If retval=-1 then
|
||||
sys_time:=-1
|
||||
else
|
||||
sys_time:=tv.sec;
|
||||
end;
|
||||
|
||||
{*****************************************************************************
|
||||
--- File:File handling related calls ---
|
||||
*****************************************************************************}
|
||||
|
||||
|
||||
Function Sys_Open(f:pchar;flags:longint;mode:integer):longint;
|
||||
|
||||
Begin
|
||||
sys_open:=do_syscall(syscall_nr_open,longint(f),flags,mode);
|
||||
End;
|
||||
|
||||
Function Sys_Close(f:longint):longint;
|
||||
|
||||
begin
|
||||
sys_close:=do_syscall(syscall_nr_close,f);
|
||||
end;
|
||||
|
||||
{
|
||||
Function Sys_Lseek(F:longint;Off:longint;Whence:longint):longint;
|
||||
|
||||
var returnvalue64 : array[0..1] of longint;
|
||||
|
||||
begin
|
||||
{Lseek's offset is 64-bit, the highword is the 0}
|
||||
do_syscall(syscall_nr_lseek,longint(@returnvalue64),F,Off,0,Whence);
|
||||
sys_lseek:=returnvalue64[0];
|
||||
end;
|
||||
|
||||
}
|
||||
|
||||
Function Sys_Lseek(F:longint;Off:longint;Whence:longint):longint; assembler;
|
||||
|
||||
{this one is special for the return value being 64-bit..}
|
||||
|
||||
asm
|
||||
pushl Whence
|
||||
pushl $0 // high dword
|
||||
pushl Off
|
||||
pushl $0
|
||||
pushl F
|
||||
pushl $0 // Your guess is as good as mine.
|
||||
pushl $0xc7 // Actual lseek syscall number.
|
||||
movl $0xc6,%eax
|
||||
call actualsyscall
|
||||
addl $28,%esp
|
||||
mov %ebx,Errno
|
||||
end;
|
||||
|
||||
Function Sys_Read(f:longint;buffer:pchar;count:longint):longint;
|
||||
|
||||
begin
|
||||
sys_read:=do_syscall(syscall_nr_read,F,longint(buffer),count);
|
||||
end;
|
||||
|
||||
Function Sys_Write(f:longint;buffer:pchar;count:longint):longint;
|
||||
|
||||
begin
|
||||
sys_write:=do_syscall(syscall_nr_write,F,longint(buffer),count);
|
||||
end;
|
||||
|
||||
Function Sys_Unlink(Filename:pchar):longint;
|
||||
|
||||
begin
|
||||
sys_unlink:=do_syscall(syscall_nr_unlink,longint(Filename));
|
||||
end;
|
||||
|
||||
Function Sys_Rename(Oldname,Newname:pchar):longint;
|
||||
|
||||
begin
|
||||
sys_rename:=do_syscall(syscall_nr_rename,longint(oldname),longint(newname));
|
||||
end;
|
||||
|
||||
Function Sys_Stat(Filename:pchar;var Buffer: stat):longint;
|
||||
{
|
||||
We need this for getcwd
|
||||
}
|
||||
|
||||
begin
|
||||
sys_stat:=do_syscall(syscall_nr_stat,longint(filename),longint(@buffer));
|
||||
end;
|
||||
|
||||
Function Sys_Symlink(oldname,newname:pchar):longint;
|
||||
{
|
||||
We need this for erase
|
||||
}
|
||||
|
||||
begin
|
||||
sys_symlink:=do_syscall(syscall_nr_symlink,longint(oldname),longint(newname));
|
||||
end;
|
||||
|
||||
|
||||
Function Sys_ReadLink(name,linkname:pchar;maxlen:longint):longint;
|
||||
|
||||
begin
|
||||
sys_readlink:=do_syscall(syscall_nr_readlink, longint(name),longint(linkname),maxlen);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
{*****************************************************************************
|
||||
--- Directory:Directory related calls ---
|
||||
*****************************************************************************}
|
||||
|
||||
Function Sys_Chdir(Filename:pchar):longint;
|
||||
|
||||
begin
|
||||
sys_chdir:=do_syscall(syscall_nr_chdir,longint(filename));
|
||||
end;
|
||||
|
||||
Function Sys_Mkdir(Filename:pchar;mode:longint):longint;
|
||||
|
||||
begin {Mode is 16-bit on F-BSD}
|
||||
sys_mkdir:=do_syscall(syscall_nr_mkdir,longint(filename),mode shl 8);
|
||||
end;
|
||||
|
||||
Function Sys_Rmdir(Filename:pchar):longint;
|
||||
|
||||
begin
|
||||
sys_rmdir:=do_syscall(syscall_nr_rmdir,longint(filename));
|
||||
end;
|
||||
|
||||
|
||||
const DIRBLKSIZ=1024;
|
||||
|
||||
|
||||
{ we need this for getcwd, NOT touched for BSD version }
|
||||
Function OpenDir(f:pchar):pdir;
|
||||
|
||||
var
|
||||
fd:longint;
|
||||
st:stat;
|
||||
ptr:pdir;
|
||||
begin
|
||||
opendir:=nil;
|
||||
if sys_stat(f,st)<0 then
|
||||
exit;
|
||||
{ Is it a dir ? }
|
||||
if not((st.mode and $f000)=$4000)then
|
||||
begin
|
||||
errno:=sys_enotdir;
|
||||
exit
|
||||
end;
|
||||
{ Open it}
|
||||
fd:=sys_open(f,OPEN_RDONLY,438);
|
||||
if fd<0 then
|
||||
exit;
|
||||
new(ptr);
|
||||
if ptr=nil then
|
||||
exit;
|
||||
Getmem(ptr^.buf,2*DIRBLKSIZ);
|
||||
if ptr^.buf=nil then
|
||||
exit;
|
||||
ptr^.fd:=fd;
|
||||
ptr^.loc:=-1;
|
||||
ptr^.rewind:=longint(ptr^.buf);
|
||||
ptr^.size:=0;
|
||||
// ptr^.dd_max:=sizeof(ptr^.buf^);
|
||||
opendir:=ptr;
|
||||
end;
|
||||
|
||||
function CloseDir(p:pdir):integer;
|
||||
begin
|
||||
closedir:=sys_close(p^.fd);
|
||||
Freemem(p^.buf);
|
||||
dispose(p);
|
||||
end;
|
||||
|
||||
|
||||
Function Sys_ReadDir(p:pdir):pdirent;
|
||||
{Different from Linux, Readdir on BSD is based on Getdents, due to the
|
||||
missing of the readdir syscall.
|
||||
Getdents requires the buffer to be larger than the blocksize.
|
||||
This usually the sectorsize =512 bytes, but maybe tapedrives and harddisks
|
||||
with blockmode have this higher?}
|
||||
|
||||
function readbuffer:longint;
|
||||
|
||||
var retval :longint;
|
||||
|
||||
begin
|
||||
retval:=do_syscall(syscall_nr_getdents,longint(p^.fd),longint(@p^.buf^),DIRBLKSIZ {sizeof(getdentsbuffer)});
|
||||
p^.rewind:=longint(p^.buf);
|
||||
if retval=0 then
|
||||
begin
|
||||
p^.rewind:=0;
|
||||
p^.loc:=0;
|
||||
end
|
||||
else
|
||||
P^.loc:=retval;
|
||||
readbuffer:=retval;
|
||||
end;
|
||||
|
||||
var
|
||||
l : pdirent;
|
||||
novalid : boolean;
|
||||
|
||||
begin
|
||||
if (p^.buf=nil) or (p^.loc=0) THEN
|
||||
exit(nil);
|
||||
if p^.loc=-1 then {First readdir on this pdir. Initial fill of buffer}
|
||||
begin
|
||||
if readbuffer()=0 Then {nothing to be read}
|
||||
exit(nil)
|
||||
end;
|
||||
l:=nil;
|
||||
repeat
|
||||
novalid:=false;
|
||||
if (pdirent(p^.rewind)^.reclen<>0) then
|
||||
begin {valid direntry?}
|
||||
if pdirent(P^.rewind)^.ino<>0 then
|
||||
l:=pdirent(p^.rewind);
|
||||
inc(p^.rewind,pdirent(p^.rewind)^.reclen);
|
||||
if p^.rewind>=(longint(p^.buf)+dirblksiz) then
|
||||
novalid:=true;
|
||||
end
|
||||
else
|
||||
novalid:=true;
|
||||
if novalid then
|
||||
begin {block entirely searched or reclen=0}
|
||||
if p^.loc<>0 THEN {blocks left?}
|
||||
if readbuffer()<>0 then {succesful read?}
|
||||
novalid:=false;
|
||||
end;
|
||||
until (l<>nil) or novalid;
|
||||
Sys_ReadDir:=l;
|
||||
end;
|
||||
|
||||
|
||||
{*****************************************************************************
|
||||
--- Process:Process & program handling - related calls ---
|
||||
*****************************************************************************}
|
||||
|
||||
|
||||
Function sys_GetPid:LongInt;
|
||||
{
|
||||
Get Process ID.
|
||||
}
|
||||
|
||||
begin
|
||||
sys_GetPID:=do_syscall(syscall_nr_getpid);
|
||||
end;
|
||||
|
||||
Procedure Sys_Exit(ExitCode:longint);
|
||||
|
||||
begin
|
||||
do_syscall(syscall_nr_exit,exitcode);
|
||||
end;
|
||||
|
||||
{
|
||||
Change action of process upon receipt of a signal.
|
||||
Signum specifies the signal (all except SigKill and SigStop).
|
||||
If Act is non-nil, it is used to specify the new action.
|
||||
If OldAct is non-nil the previous action is saved there.
|
||||
}
|
||||
|
||||
|
||||
|
||||
Procedure SigAction(Signum:longint;Act,OldAct:PSigActionRec );
|
||||
{
|
||||
Change action of process upon receipt of a signal.
|
||||
Signum specifies the signal (all except SigKill and SigStop).
|
||||
If Act is non-nil, it is used to specify the new action.
|
||||
If OldAct is non-nil the previous action is saved there.
|
||||
}
|
||||
|
||||
begin
|
||||
do_syscall(syscall_nr_sigaction,longint(signum),longint(act),longint(oldact));
|
||||
{$ifdef linuxunit}
|
||||
LinuxError:=Errno;
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.4 2000-09-11 14:38:10 marco
|
||||
* 14 april version killed, and replaced by newer fixes branch version
|
||||
|
||||
Revision 1.1.2.1 2000/09/10 16:12:14 marco
|
||||
Initial signals, sockets and clone
|
||||
|
||||
Revision 1.1 2000/07/13 06:30:32 michael
|
||||
+ Initial import
|
||||
|
||||
Revision 1.15 2000/04/16 16:08:53 marco
|
||||
* Fixes (mainly opendir/Readdir/closedir)
|
||||
|
||||
Revision 1.14 2000/04/14 17:04:13 marco
|
||||
* Working!
|
||||
|
||||
Revision 1.13 2000/04/10 15:46:52 marco
|
||||
* worked all day. probably a lot changed
|
||||
|
||||
Revision 1.11 2000/04/05 13:58:40 marco
|
||||
* syscall variablenames reintroduced.
|
||||
|
||||
Revision 1.10 2000/03/16 16:18:12 marco
|
||||
* Last changes before next test. ppc386 -h works with these srcs.
|
||||
|
||||
Revision 1.9 2000/03/02 15:34:07 marco
|
||||
* added a syscall for 5 longints
|
||||
|
||||
Revision 1.8 2000/03/01 20:03:57 marco
|
||||
* small fixes for syslinux
|
||||
|
||||
Revision 1.7 2000/03/01 17:28:40 marco
|
||||
* some changes due to updating linux.pp to new syscall
|
||||
|
||||
Revision 1.6 2000/02/27 23:45:39 marco
|
||||
* Redone the syscalls
|
||||
|
||||
Revision 1.5 2000/02/04 16:53:26 marco
|
||||
* Finished Linux (and rest syscalls) roughly. Some things still need to be
|
||||
tested, and checked (off_t calls specially)
|
||||
|
||||
Revision 1.4 2000/02/03 17:04:47 marco
|
||||
* additions fixes due to port linux
|
||||
|
||||
Revision 1.3 2000/02/02 18:07:27 marco
|
||||
* Ported except for readdir which is 200 lines C code in FBSD linux
|
||||
emulator
|
||||
|
||||
Revision 1.2 2000/02/02 16:35:10 marco
|
||||
* Ported more functions. Half done now.
|
||||
|
||||
Revision 1.1 2000/02/02 15:41:56 marco
|
||||
* Initial BSD version. Still needs a lot of work.
|
||||
|
||||
}
|
@ -1,119 +0,0 @@
|
||||
{
|
||||
$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.
|
||||
|
||||
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.
|
||||
|
||||
**********************************************************************}
|
||||
|
||||
{BSD version, only the blocks with BSD in the comment are updated}
|
||||
|
||||
Const
|
||||
{ Things for LSEEK call, same in linux and BSD }
|
||||
Seek_set = 0;
|
||||
Seek_Cur = 1;
|
||||
Seek_End = 2;
|
||||
{ Things for OPEN call - after include/sys/fcntl.h, BSD updated.
|
||||
BSD specifies these constants in hex }
|
||||
Open_Accmode = 3;
|
||||
Open_RdOnly = 0;
|
||||
Open_WrOnly = 1;
|
||||
Open_RdWr = 2;
|
||||
Open_NonBlock = 4;
|
||||
Open_Append = 8;
|
||||
Open_ShLock = $10;
|
||||
Open_ExLock = $20;
|
||||
Open_ASync = $40;
|
||||
Open_FSync = $80;
|
||||
Open_NoFollow = $100;
|
||||
Open_Create = $200; {BSD convention}
|
||||
Open_Creat = $200; {Linux convention}
|
||||
Open_Trunc = $400;
|
||||
Open_Excl = $800;
|
||||
|
||||
|
||||
{ The waitpid uses the following options:}
|
||||
Wait_NoHang = 1;
|
||||
Wait_UnTraced = 2;
|
||||
Wait_Any = -1;
|
||||
Wait_MyPGRP = 0;
|
||||
{ Constants to check stat.mode - checked all STAT constants with BSD}
|
||||
STAT_IFMT = $f000; {00170000 }
|
||||
STAT_IFSOCK = $c000; {0140000 }
|
||||
STAT_IFLNK = $a000; {0120000 }
|
||||
STAT_IFREG = $8000; {0100000 }
|
||||
STAT_IFBLK = $6000; {0060000 }
|
||||
STAT_IFDIR = $4000; {0040000 }
|
||||
STAT_IFCHR = $2000; {0020000 }
|
||||
STAT_IFIFO = $1000; {0010000 }
|
||||
STAT_ISUID = $0800; {0004000 }
|
||||
STAT_ISGID = $0400; {0002000 }
|
||||
STAT_ISVTX = $0200; {0001000}
|
||||
{ Constants to check permissions all }
|
||||
STAT_IRWXO = $7;
|
||||
STAT_IROTH = $4;
|
||||
STAT_IWOTH = $2;
|
||||
STAT_IXOTH = $1;
|
||||
|
||||
STAT_IRWXG = STAT_IRWXO shl 3;
|
||||
STAT_IRGRP = STAT_IROTH shl 3;
|
||||
STAT_IWGRP = STAT_IWOTH shl 3;
|
||||
STAT_IXGRP = STAT_IXOTH shl 3;
|
||||
|
||||
STAT_IRWXU = STAT_IRWXO shl 6;
|
||||
STAT_IRUSR = STAT_IROTH shl 6;
|
||||
STAT_IWUSR = STAT_IWOTH shl 6;
|
||||
STAT_IXUSR = STAT_IXOTH shl 6;
|
||||
|
||||
{ Constants to test the type of filesystem }
|
||||
fs_old_ext2 = $ef51;
|
||||
fs_ext2 = $ef53;
|
||||
fs_ext = $137d;
|
||||
fs_iso = $9660;
|
||||
fs_minix = $137f;
|
||||
fs_minix_30 = $138f;
|
||||
fs_minux_V2 = $2468;
|
||||
fs_msdos = $4d44;
|
||||
fs_nfs = $6969;
|
||||
fs_proc = $9fa0;
|
||||
fs_xia = $012FD16D;
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.4 2000-09-11 14:38:10 marco
|
||||
* 14 april version killed, and replaced by newer fixes branch version
|
||||
|
||||
Revision 1.1 2000/07/13 06:30:33 michael
|
||||
+ Initial import
|
||||
|
||||
Revision 1.5 2000/04/10 15:46:52 marco
|
||||
* worked all day. probably a lot changed
|
||||
|
||||
Revision 1.3 2000/02/03 17:05:13 marco
|
||||
* fixes and updates due to linux unit porting
|
||||
|
||||
Revision 1.2 2000/02/02 16:35:29 marco
|
||||
* Checked stat constants
|
||||
|
||||
Revision 1.1 2000/02/02 15:41:28 marco
|
||||
* initial BSD version.
|
||||
|
||||
Revision 1.4 2000/01/07 16:41:41 daniel
|
||||
* copyright 2000
|
||||
|
||||
Revision 1.3 2000/01/07 16:32:28 daniel
|
||||
* copyright 2000 added
|
||||
|
||||
Revision 1.2 1998/05/06 12:38:22 michael
|
||||
+ Removed log from before restored version.
|
||||
|
||||
Revision 1.1.1.1 1998/03/25 11:18:43 root
|
||||
* Restored version
|
||||
}
|
@ -1,345 +0,0 @@
|
||||
{
|
||||
$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.
|
||||
|
||||
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.
|
||||
|
||||
**********************************************************************}
|
||||
|
||||
const
|
||||
{ Crude converted FreeBSD 4.0-release syscall.h. Copy and paste if you
|
||||
checked the function.
|
||||
syscall_nr_syscall = 0;
|
||||
syscall_nr_exit = 1;
|
||||
syscall_nr_fork = 2;
|
||||
syscall_nr_read = 3;
|
||||
syscall_nr_write = 4;
|
||||
syscall_nr_open = 5;
|
||||
syscall_nr_close = 6;
|
||||
syscall_nr_wait4 = 7;
|
||||
syscall_nr_link = 9;
|
||||
syscall_nr_unlink = 10;
|
||||
syscall_nr_chdir = 12;
|
||||
syscall_nr_fchdir = 13;
|
||||
syscall_nr_mknod = 14;
|
||||
syscall_nr_chmod = 15;
|
||||
syscall_nr_chown = 16;
|
||||
syscall_nr_break = 17;
|
||||
syscall_nr_getfsstat = 18;
|
||||
syscall_nr_getpid = 20;
|
||||
syscall_nr_mount = 21;
|
||||
syscall_nr_unmount = 22;
|
||||
syscall_nr_setuid = 23;
|
||||
syscall_nr_getuid = 24;
|
||||
syscall_nr_geteuid = 25;
|
||||
syscall_nr_ptrace = 26;
|
||||
syscall_nr_recvmsg = 27;
|
||||
syscall_nr_sendmsg = 28;
|
||||
syscall_nr_getpeername = 31;
|
||||
syscall_nr_getsockname = 32;
|
||||
syscall_nr_access = 33;
|
||||
syscall_nr_chflags = 34;
|
||||
syscall_nr_fchflags = 35;
|
||||
syscall_nr_sync = 36;
|
||||
syscall_nr_kill = 37;
|
||||
syscall_nr_getppid = 39;
|
||||
syscall_nr_dup = 41;
|
||||
syscall_nr_pipe = 42;
|
||||
syscall_nr_getegid = 43;
|
||||
syscall_nr_profil = 44;
|
||||
syscall_nr_ktrace = 45;
|
||||
syscall_nr_getgid = 47;
|
||||
syscall_nr_getlogin = 49;
|
||||
syscall_nr_setlogin = 50;
|
||||
syscall_nr_acct = 51;
|
||||
syscall_nr_sigaltstack = 53;
|
||||
syscall_nr_ioctl = 54;
|
||||
syscall_nr_reboot = 55;
|
||||
syscall_nr_revoke = 56;
|
||||
syscall_nr_symlink = 57;
|
||||
syscall_nr_readlink = 58;
|
||||
syscall_nr_execve = 59;
|
||||
syscall_nr_umask = 60;
|
||||
syscall_nr_chroot = 61;
|
||||
syscall_nr_msync = 65;
|
||||
syscall_nr_vfork = 66;
|
||||
syscall_nr_sbrk = 69;
|
||||
syscall_nr_sstk = 70;
|
||||
syscall_nr_vadvise = 72;
|
||||
syscall_nr_mprotect = 74;
|
||||
syscall_nr_madvise = 75;
|
||||
syscall_nr_mincore = 78;
|
||||
syscall_nr_getgroups = 79;
|
||||
syscall_nr_setgroups = 80;
|
||||
syscall_nr_getpgrp = 81;
|
||||
syscall_nr_setpgid = 82;
|
||||
syscall_nr_setitimer = 83;
|
||||
syscall_nr_swapon = 85;
|
||||
syscall_nr_getitimer = 86;
|
||||
syscall_nr_getdtablesize = 89;
|
||||
syscall_nr_dup2 = 90;
|
||||
syscall_nr_fcntl = 92;
|
||||
syscall_nr_select = 93;
|
||||
syscall_nr_fsync = 95;
|
||||
syscall_nr_setpriority = 96;
|
||||
syscall_nr_connect = 98;
|
||||
syscall_nr_getpriority =100;
|
||||
syscall_nr_setsockopt =105;
|
||||
syscall_nr_gettimeofday =116;
|
||||
syscall_nr_getrusage =117;
|
||||
syscall_nr_readv =120;
|
||||
syscall_nr_writev =121;
|
||||
syscall_nr_settimeofday =122;
|
||||
syscall_nr_fchown =123;
|
||||
syscall_nr_fchmod =124;
|
||||
syscall_nr_setreuid =126;
|
||||
syscall_nr_setregid =127;
|
||||
syscall_nr_rename =128;
|
||||
syscall_nr_flock =131;
|
||||
syscall_nr_mkfifo =132;
|
||||
syscall_nr_mkdir =136;
|
||||
syscall_nr_rmdir =137;
|
||||
syscall_nr_utimes =138;
|
||||
syscall_nr_adjtime =140;
|
||||
syscall_nr_setsid =147;
|
||||
syscall_nr_quotactl =148;
|
||||
syscall_nr_nfssvc =155;
|
||||
syscall_nr_statfs =157;
|
||||
syscall_nr_fstatfs =158;
|
||||
syscall_nr_getfh =161;
|
||||
syscall_nr_getdomainname =162;
|
||||
syscall_nr_setdomainname =163;
|
||||
syscall_nr_uname =164;
|
||||
syscall_nr_sysarch =165;
|
||||
syscall_nr_rtprio =166;
|
||||
syscall_nr_semsys =169;
|
||||
syscall_nr_msgsys =170;
|
||||
syscall_nr_shmsys =171;
|
||||
syscall_nr_pread =173;
|
||||
syscall_nr_pwrite =174;
|
||||
syscall_nr_ntp_adjtime =176;
|
||||
syscall_nr_setgid =181;
|
||||
syscall_nr_setegid =182;
|
||||
syscall_nr_seteuid =183;
|
||||
syscall_nr_stat =188;
|
||||
syscall_nr_fstat =189;
|
||||
syscall_nr_lstat =190;
|
||||
syscall_nr_pathconf =191;
|
||||
syscall_nr_fpathconf =192;
|
||||
syscall_nr_getrlimit =194;
|
||||
syscall_nr_setrlimit =195;
|
||||
syscall_nr_getdirentries =196;
|
||||
syscall_nr_mmap =197;
|
||||
syscall_nr___syscall =198;
|
||||
syscall_nr_lseek =199;
|
||||
syscall_nr_truncate =200;
|
||||
syscall_nr_ftruncate =201;
|
||||
syscall_nr___sysctl =202;
|
||||
syscall_nr_mlock =203;
|
||||
syscall_nr_munlock =204;
|
||||
syscall_nr_undelete =205;
|
||||
syscall_nr_futimes =206;
|
||||
syscall_nr_getpgid =207;
|
||||
syscall_nr_poll =209;
|
||||
syscall_nr___semctl =220;
|
||||
syscall_nr_semget =221;
|
||||
syscall_nr_semop =222;
|
||||
syscall_nr_semconfig =223;
|
||||
syscall_nr_msgctl =224;
|
||||
syscall_nr_msgget =225;
|
||||
syscall_nr_msgsnd =226;
|
||||
syscall_nr_msgrcv =227;
|
||||
syscall_nr_shmat =228;
|
||||
syscall_nr_shmctl =229;
|
||||
syscall_nr_shmdt =230;
|
||||
syscall_nr_shmget =231;
|
||||
syscall_nr_clock_gettime =232;
|
||||
syscall_nr_clock_settime =233;
|
||||
syscall_nr_clock_getres =234;
|
||||
syscall_nr_nanosleep =240;
|
||||
syscall_nr_minherit =250;
|
||||
syscall_nr_openbsd_poll =252;
|
||||
syscall_nr_issetugid =253;
|
||||
syscall_nr_lchown =254;
|
||||
syscall_nr_getdents =272;
|
||||
syscall_nr_lchmod =274;
|
||||
syscall_nr_netbsd_lchown =275;
|
||||
syscall_nr_lutimes =276;
|
||||
syscall_nr_netbsd_msync =277;
|
||||
syscall_nr_nstat =278;
|
||||
syscall_nr_nfstat =279;
|
||||
syscall_nr_nlstat =280;
|
||||
syscall_nr_fhstatfs =297;
|
||||
syscall_nr_fhopen =298;
|
||||
syscall_nr_fhstat =299;
|
||||
syscall_nr_modnext =300;
|
||||
syscall_nr_modstat =301;
|
||||
syscall_nr_modfnext =302;
|
||||
syscall_nr_modfind =303;
|
||||
syscall_nr_kldload =304;
|
||||
syscall_nr_kldunload =305;
|
||||
syscall_nr_kldfind =306;
|
||||
syscall_nr_kldnext =307;
|
||||
syscall_nr_kldstat =308;
|
||||
syscall_nr_kldfirstmod =309;
|
||||
syscall_nr_getsid =310;
|
||||
syscall_nr_setresuid =311;
|
||||
syscall_nr_setresgid =312;
|
||||
syscall_nr_aio_return =314;
|
||||
syscall_nr_aio_suspend =315;
|
||||
syscall_nr_aio_cancel =316;
|
||||
syscall_nr_aio_error =317;
|
||||
syscall_nr_aio_read =318;
|
||||
syscall_nr_aio_write =319;
|
||||
syscall_nr_lio_listio =320;
|
||||
syscall_nr_yield =321;
|
||||
syscall_nr_thr_sleep =322;
|
||||
syscall_nr_thr_wakeup =323;
|
||||
syscall_nr_mlockall =324;
|
||||
syscall_nr_munlockall =325;
|
||||
syscall_nr___getcwd =326;
|
||||
syscall_nr_sched_setparam =327;
|
||||
syscall_nr_sched_getparam =328;
|
||||
syscall_nr_sched_setscheduler =329;
|
||||
syscall_nr_sched_getscheduler =330;
|
||||
syscall_nr_sched_yield =331;
|
||||
syscall_nr_sched_get_priority_max =332;
|
||||
syscall_nr_sched_get_priority_min =333;
|
||||
syscall_nr_sched_rr_get_interval =334;
|
||||
syscall_nr_utrace =335;
|
||||
syscall_nr_sendfile =336;
|
||||
syscall_nr_kldsym =337;
|
||||
syscall_nr_jail =338;
|
||||
syscall_nr_sigprocmask =340;
|
||||
syscall_nr_sigsuspend =341;
|
||||
syscall_nr_sigaction =342;
|
||||
syscall_nr_sigpending =343;
|
||||
syscall_nr_sigreturn =344;
|
||||
syscall_nr___acl_get_file =347;
|
||||
syscall_nr___acl_set_file =348;
|
||||
syscall_nr___acl_get_fd =349;
|
||||
syscall_nr___acl_set_fd =350;
|
||||
syscall_nr___acl_delete_file =351;
|
||||
syscall_nr___acl_delete_fd =352;
|
||||
syscall_nr___acl_aclcheck_file =353;
|
||||
syscall_nr___acl_aclcheck_fd =354;
|
||||
syscall_nr_extattrctl =355;
|
||||
syscall_nr_extattr_set_file =356;
|
||||
syscall_nr_extattr_get_file =357;
|
||||
syscall_nr_extattr_delete_file =358;
|
||||
syscall_nr_aio_waitcomplete =359;
|
||||
syscall_nr_getresuid =360;
|
||||
syscall_nr_getresgid =361;
|
||||
syscall_nr_MAXSYSCALL =362;
|
||||
|
||||
}
|
||||
|
||||
{More or less checked BSD syscalls}
|
||||
|
||||
syscall_nr_accept = 30;
|
||||
syscall_nr_access = 33;
|
||||
syscall_nr_bind = 104;
|
||||
syscall_nr_chdir = 12;
|
||||
syscall_nr_chmod = 15;
|
||||
syscall_nr_chown = 16;
|
||||
syscall_nr_close = 6;
|
||||
syscall_nr_connect = 98;
|
||||
syscall_nr_dup = 41;
|
||||
syscall_nr_dup2 = 90;
|
||||
syscall_nr_execve = 59;
|
||||
syscall_nr_exit = 1;
|
||||
syscall_nr_fcntl = 92;
|
||||
syscall_nr_flock = 131;
|
||||
syscall_nr_fork = 2;
|
||||
syscall_nr_fstat = 189;
|
||||
syscall_nr_fstatfs = 158;
|
||||
syscall_nr_fsync = 95;
|
||||
syscall_nr_ftruncate = 201;
|
||||
syscall_nr_getdents = 272;
|
||||
syscall_nr_getegid = 43;
|
||||
syscall_nr_geteuid = 25;
|
||||
syscall_nr_getgid = 47;
|
||||
syscall_nr_getpeername = 31;
|
||||
syscall_nr_getpid = 20;
|
||||
syscall_nr_getppid = 39;
|
||||
syscall_nr_getpriority = 100;
|
||||
syscall_nr_getsockname = 32;
|
||||
syscall_nr_gettimeofday = 116;
|
||||
syscall_nr_getuid = 24;
|
||||
syscall_nr_ioctl = 54;
|
||||
syscall_nr_kill = 37;
|
||||
syscall_nr_link = 9;
|
||||
syscall_nr_listen = 106;
|
||||
syscall_nr_lseek = 199;
|
||||
syscall_nr_lstat = 190;
|
||||
syscall_nr_mkdir = 136;
|
||||
syscall_nr_mknod = 14;
|
||||
syscall_nr_mmap = 197;
|
||||
syscall_nr_open = 5;
|
||||
syscall_nr_pipe = 42;
|
||||
syscall_nr_read = 3;
|
||||
syscall_nr_readlink = 58;
|
||||
syscall_nr_recvfrom = 29;
|
||||
syscall_nr_rename = 128;
|
||||
syscall_nr_rmdir = 137;
|
||||
syscall_nr_select = 93;
|
||||
syscall_nr_sendto = 133;
|
||||
syscall_nr_setpriority = 96;
|
||||
syscall_nr_setsockopt = 105;
|
||||
syscall_nr_shutdown = 134;
|
||||
syscall_nr_sigaction = 342;
|
||||
syscall_nr_sigpending = 343;
|
||||
syscall_nr_sigprocmask = 340;
|
||||
syscall_nr_sigsuspend = 341;
|
||||
syscall_nr_socket = 97;
|
||||
syscall_nr_socketpair = 135;
|
||||
syscall_nr_stat = 188;
|
||||
syscall_nr_statfs = 157;
|
||||
syscall_nr_symlink = 57;
|
||||
syscall_nr_umask = 60;
|
||||
syscall_nr_unlink = 10;
|
||||
syscall_nr_utimes = 138;
|
||||
syscall_nr_waitpid = 7;
|
||||
syscall_nr_write = 4;
|
||||
syscall_nr_munmap = 73;
|
||||
syscall_nr_getsockopt =118;
|
||||
syscall_nr_rfork =251;
|
||||
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.4 2000-09-11 14:38:10 marco
|
||||
* 14 april version killed, and replaced by newer fixes branch version
|
||||
|
||||
Revision 1.1.2.1 2000/09/10 16:12:14 marco
|
||||
Initial signals, sockets and clone
|
||||
|
||||
Revision 1.1 2000/07/13 06:30:33 michael
|
||||
+ Initial import
|
||||
|
||||
Revision 1.4 2000/04/10 15:46:52 marco
|
||||
* worked all day. probably a lot changed
|
||||
|
||||
Revision 1.2 2000/04/05 13:59:10 marco
|
||||
* added constants for syscall.inc
|
||||
|
||||
Revision 1.1 2000/04/05 13:06:24 marco
|
||||
* Initial version. (copied from linux.) Patch for BSD not ready yeT
|
||||
|
||||
Revision 1.5 2000/02/09 16:59:32 peter
|
||||
* truncated log
|
||||
|
||||
Revision 1.4 2000/01/07 16:41:41 daniel
|
||||
* copyright 2000
|
||||
|
||||
Revision 1.3 2000/01/07 16:32:28 daniel
|
||||
* copyright 2000 added
|
||||
|
||||
}
|
@ -1,186 +0,0 @@
|
||||
{
|
||||
$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.
|
||||
|
||||
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
|
||||
|
||||
{
|
||||
Linux system calls take arguments as follows :
|
||||
|
||||
i386/m68k:
|
||||
|
||||
%eax/%d0 : System call number
|
||||
%ebx/%d1 : first argument
|
||||
%ecx/%d2 : second argument
|
||||
%edx/%d3 : third argumens
|
||||
%esi/%d3 : fourth argument
|
||||
%edi/%d4 : fifth argument
|
||||
|
||||
That is why we define a special type, with only these arguments
|
||||
To make it processor independent, we don't give any system dependent
|
||||
names, but the rather abstract reg1,reg2 etc;
|
||||
|
||||
SysCallRegs=record
|
||||
reg1,reg2,reg3,reg4,reg5,reg6 : longint;
|
||||
end;
|
||||
PSysCallRegs=^SysCallRegs;
|
||||
TSysCallRegs=SysCallRegs;
|
||||
}
|
||||
{ The following are records for system calls BSD updated }
|
||||
dirent = packed record
|
||||
ino : cardinal; { This is not inode number, but "a number
|
||||
unique for each file on a filesystem"}
|
||||
reclen : word;
|
||||
d_type,
|
||||
namlen : byte;
|
||||
name : array [0..255] of char;
|
||||
end;
|
||||
|
||||
pdirent =^dirent;
|
||||
TDirEnt = dirent;
|
||||
|
||||
TDir= packed record {BSD libc record.}
|
||||
fd : longint; { file descriptor associated with directory }
|
||||
loc, { offset in current buffer }
|
||||
size : cardinal; { amount of data returned by getdirentries}
|
||||
buf : pdirent; { data buffer, actually a pchar}
|
||||
len : longint; { size of data buffer }
|
||||
seek, { magic cookie returned by getdirentries}
|
||||
rewind: cardinal; { magic cookie for rewinding}
|
||||
flags : longint; { flags for readdir }
|
||||
end;
|
||||
|
||||
{ Linux kernel record
|
||||
TDir = packed record
|
||||
fd : longint;
|
||||
loc : longint;
|
||||
size : integer;
|
||||
buf : pdirent;
|
||||
{The following are used in libc, but NOT in the linux kernel sources ??}
|
||||
nextoff: longint;
|
||||
dd_max : integer; {size of buf. Irrelevant, as buf is of type dirent}
|
||||
lock : pointer;
|
||||
dummy : array[0..1023] of char;
|
||||
end;}
|
||||
|
||||
PDir =^TDir;
|
||||
|
||||
{$packrecords C}
|
||||
Stat =record {BSD version}
|
||||
dev, { inode's device }
|
||||
ino : cardinal; { inode's number }
|
||||
mode, { inode protection mode }
|
||||
nlink : word; { number of hard links }
|
||||
uid, { user ID of the file's owner }
|
||||
gid, { group ID of the file's group }
|
||||
dev_t : cardinal; { device type }
|
||||
atime, { time of last access }
|
||||
atime_nsec, { nsec of last access }
|
||||
mtime, { time of last data modification }
|
||||
mtime_nsec, { nsec of last data modification }
|
||||
ctime, { time of last file status change }
|
||||
ctime_nsec : longint; { nsec of last file status change }
|
||||
size, { file size, in bytes }
|
||||
blocks : Int64; { blocks allocated for file }
|
||||
blksze, { optimal blocksize for I/O }
|
||||
flags, { user defined flags for file }
|
||||
filegen : cardinal; { file generation number }
|
||||
lspare : longint;
|
||||
qspare : array[0..1] of int64;
|
||||
end;
|
||||
|
||||
PStat=^Stat;
|
||||
TStat=Stat;
|
||||
|
||||
Statfs = packed record
|
||||
spare2, { place holder}
|
||||
bsize, { fundamental block size}
|
||||
iosize, { optimal block size }
|
||||
blocks, { total blocks}
|
||||
bfree, { blocks free}
|
||||
bavail, { block available for mortal users}
|
||||
files, { Total file nodes}
|
||||
ffree : longint; { file nodes free}
|
||||
fsid : array[0..1] of longint;
|
||||
fowner : longint; {mounter uid}
|
||||
ftype : longint;
|
||||
fflags : longint; {copy of mount flags}
|
||||
spare : array [0..1] of longint; { For later use }
|
||||
fstypename : array[0..15] of char;
|
||||
mountpoint : array[0..89] of char;
|
||||
mnfromname : array[0..89] of char;
|
||||
end;
|
||||
PStatFS=^StatFS;
|
||||
TStatFS=StatFS;
|
||||
|
||||
fdSet=array[0..7] of longint;{=256 bits}
|
||||
pfdset=^fdset;
|
||||
TFDSet=fdset;
|
||||
|
||||
timeval = packed record
|
||||
sec,usec:int64;
|
||||
end;
|
||||
ptimeval=^timeval;
|
||||
TTimeVal=timeval;
|
||||
|
||||
timezone = packed record
|
||||
minuteswest,dsttime:longint;
|
||||
end;
|
||||
ptimezone =^timezone;
|
||||
TTimeZone = timezone;
|
||||
|
||||
utsname = packed record
|
||||
sysname,
|
||||
nodename,
|
||||
release,
|
||||
version,
|
||||
machine,
|
||||
domainname : Array[0..64] of char;
|
||||
end;
|
||||
PUTSName=^UTSName;
|
||||
TUTSName=UTSName;
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.4 2000-09-11 14:38:10 marco
|
||||
* 14 april version killed, and replaced by newer fixes branch version
|
||||
|
||||
Revision 1.1.2.1 2000/09/10 16:12:14 marco
|
||||
Initial signals, sockets and clone
|
||||
|
||||
Revision 1.1 2000/07/13 06:30:33 michael
|
||||
+ Initial import
|
||||
|
||||
Revision 1.8 2000/04/16 16:08:30 marco
|
||||
* Updated PDir to BSD libc layout. (which is totally different from Linux)
|
||||
|
||||
Revision 1.7 2000/04/10 15:46:52 marco
|
||||
* worked all day. probably a lot changed
|
||||
|
||||
Revision 1.5 2000/03/17 12:58:57 marco
|
||||
* some changes to ftruncate based procs. Added a "0" as extra parameter
|
||||
|
||||
Revision 1.4 2000/02/04 16:55:47 marco
|
||||
* Fixed tdir, some params need to be 32-bit
|
||||
|
||||
Revision 1.3 2000/02/03 17:05:55 marco
|
||||
|
||||
* Some types fixed/ported.
|
||||
|
||||
Revision 1.2 2000/02/02 16:45:38 marco
|
||||
* Typo in STAT record
|
||||
|
||||
Revision 1.1 2000/02/02 16:36:09 marco
|
||||
* Initial version. Copy of linux version, with BSD stat.
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user