mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-12-10 00:07:23 +01:00
* Killed old (14apr) BSD port, to be updated by new without merging
This commit is contained in:
parent
d36f066e6a
commit
971afad12f
1347
rtl/bsd/Makefile
1347
rtl/bsd/Makefile
File diff suppressed because it is too large
Load Diff
@ -1,196 +0,0 @@
|
||||
#
|
||||
# Makefile.fpc for Free Pascal Linux RTL
|
||||
#
|
||||
|
||||
[targets]
|
||||
loaders=prt0 cprt0 gprt0 cprt21 gprt21
|
||||
units=$(SYSTEMUNIT) objpas strings \
|
||||
linux initc \
|
||||
dos crt objects printer graph ggigraph \
|
||||
sysutils typinfo math \
|
||||
cpu mmx getopts heaptrc lineinfo \
|
||||
errors gpm
|
||||
|
||||
[require]
|
||||
rtl=0
|
||||
|
||||
[defaults]
|
||||
defaulttarget=linux
|
||||
defaultcpu=i386
|
||||
|
||||
[install]
|
||||
unitsubdir=rtl
|
||||
|
||||
[dirs]
|
||||
fpcdir=.
|
||||
incdir=$(INC) $(PROCINC)
|
||||
targetdir=.
|
||||
|
||||
[libs]
|
||||
libname=fprtl
|
||||
libunits=$(SYSTEMUNIT) objpas strings \
|
||||
linux \
|
||||
dos crt objects printer \
|
||||
sysutils typinfo math \
|
||||
cpu mmx getopts heaptrc \
|
||||
errors
|
||||
|
||||
|
||||
[presettings]
|
||||
RTL=..
|
||||
INC=$(RTL)/inc
|
||||
PROCINC=$(RTL)/$(CPU_TARGET)
|
||||
|
||||
UNITPREFIX=rtl
|
||||
|
||||
# Paths
|
||||
OBJPASDIR=$(RTL)/objpas
|
||||
GRAPHDIR=$(INC)/graph
|
||||
LINUXDIR=$(RTL)/linux
|
||||
|
||||
|
||||
# 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
|
||||
|
||||
gprt0$(OEXT) : $(CPU_TARGET)/gprt0.as
|
||||
$(AS) -o gprt0$(OEXT) $(CPU_TARGET)/gprt0.as
|
||||
|
||||
cprt0$(OEXT) : $(CPU_TARGET)/cprt0.as
|
||||
$(AS) -o cprt0$(OEXT) $(CPU_TARGET)/cprt0.as
|
||||
|
||||
cprt21$(OEXT) : $(CPU_TARGET)/cprt21.as
|
||||
$(AS) -o cprt21$(OEXT) $(CPU_TARGET)/cprt21.as
|
||||
|
||||
# still need to use gprt1, because gprt21 crashes
|
||||
gprt21$(OEXT) : $(CPU_TARGET)/gprt0.as
|
||||
$(AS) -o gprt21$(OEXT) $(CPU_TARGET)/gprt0.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) : $(LINUXDIR)/linux.pp strings$(PPUEXT) $(INC)/textrec.inc $(INC)/filerec.inc \
|
||||
syscalls.inc systypes.inc sysconst.inc timezone.inc $(SYSTEMPPU)
|
||||
|
||||
ports$(PPUEXT) : ports.pp linux$(PPUEXT) objpas$(PPUEXT)
|
||||
|
||||
#
|
||||
# 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
|
||||
#
|
||||
include $(GRAPHDIR)/makefile.inc
|
||||
GRAPHINCDEPS=$(addprefix $(GRAPHDIR)/,$(GRAPHINCNAMES))
|
||||
|
||||
graph$(PPUEXT) : graph.pp linux$(PPUEXT) $(SYSTEMPPU) \
|
||||
$(GRAPHINCDEPS) vgagraph16.inc
|
||||
$(COMPILER) -I$(GRAPHDIR) graph.pp $(REDIR)
|
||||
|
||||
ggigraph$(PPUEXT) : ggigraph.pp linux$(PPUEXT) $(SYSTEMPPU) \
|
||||
$(GRAPHINCDEPS)
|
||||
$(COMPILER) -I$(GRAPHDIR) ggigraph.pp $(REDIR)
|
||||
|
||||
#
|
||||
# Delphi Compatible Units
|
||||
#
|
||||
|
||||
sysutils$(PPUEXT) : $(OBJPASDIR)/sysutils.pp $(wildcard $(OBJPASDIR)/*.inc) \
|
||||
filutil.inc disk.inc objpas$(PPUEXT) linux$(PPUEXT)
|
||||
$(COMPILER) -I$(OBJPASDIR) $(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
|
||||
#
|
||||
|
||||
errors$(PPUEXT) : errors.pp strings$(PPUEXT) $(SYSTEMPPU)
|
||||
|
||||
ipc$(PPUEXT) : ipc.pp linux$(PPUEXT) $(SYSTEMPPU)
|
||||
@ -1,179 +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-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.
|
||||
|
||||
- FPC for FreeBSD is initially working, but only the most basic functionality
|
||||
is implemented.(to rebuild the compiler)
|
||||
That however could be enough for CGI, stdio and environment support seems to
|
||||
be working.
|
||||
Therefore, I decided to put a first alpha snapshot on the Net.
|
||||
|
||||
- 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!!!
|
||||
|
||||
- The initial version's READDIR problem is fixed with a quick 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.
|
||||
The hack may fail the first time you use it, or only when
|
||||
you use hardlinks. (iow, I don't know why libc sorts the directory list
|
||||
to find duplicate names. Just because of hardlinks or because due to heavy
|
||||
deletion/insertion duplicate dir entries can exist?)
|
||||
|
||||
- external lib linking is not ready yet.
|
||||
|
||||
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 FBSD and FindFirst is
|
||||
based on it)
|
||||
|
||||
ioperm NI noreq n IO via port access impossible under FreeBSD
|
||||
(so: no ports unit, port[] support)
|
||||
|
||||
ipc NI n The IPC is an System V thingy, and not supported
|
||||
under BSD.
|
||||
|
||||
Clone() NI noreq Emu code looks awfully complicated, amd maybe not
|
||||
possible in user space. Should be based
|
||||
on RFork if possible
|
||||
Some developper confirmed there will be no fully kernel
|
||||
level thread system. The implementation (after BSDI
|
||||
mergure) will be mixed kernel-userland space.
|
||||
|
||||
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 NI noreq? A *lot* of emulation code.
|
||||
alarm NI noreq? Could be possible to port.
|
||||
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 this.
|
||||
|
||||
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.
|
||||
|
||||
1a. Copy all linux files to a new directory. (here called BSDBUILD), and
|
||||
1b. edit the makefile to NOT compile the i386 directory. (we do that by
|
||||
hand for now) I do this by emptying the LOADEROBJECTS= line, and kill
|
||||
all references to the ports unit
|
||||
2. Copy all bsd files over them.
|
||||
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.
|
||||
|
||||
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
|
||||
|
||||
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/*.s 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 to the BSD machine 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"
|
||||
|
||||
------------
|
||||
|
||||
3b How to update FPC compiler on FreeBSD from fresh CVS sources with a snapshot
|
||||
installed.
|
||||
|
||||
(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
|
||||
2 switch to compiler/
|
||||
3 gmake cycle OPT='-OG3p3 -dBSD' will generate a new compiler.
|
||||
Be patient! FreeBSD has slower disk-io than Linux :-)
|
||||
|
||||
Do you see why I recommend snapshots?
|
||||
|
||||
------------------
|
||||
The DO_S script.
|
||||
------------------
|
||||
#!/bin/sh
|
||||
|
||||
for i in *.s; do
|
||||
flup=`basename $i .s`
|
||||
as $i -o $flup.o
|
||||
echo $i
|
||||
echo $flup
|
||||
done
|
||||
|
||||
{
|
||||
$Log$
|
||||
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,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,420 +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,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;
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.2 2000-07-13 11:33:37 michael
|
||||
+ removed logs
|
||||
|
||||
}
|
||||
@ -1,93 +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.2 2000-07-13 11:33:37 michael
|
||||
+ removed logs
|
||||
|
||||
}
|
||||
@ -1,373 +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
|
||||
{ Unverified calls.
|
||||
syscall_nr_setup = 0;
|
||||
syscall_nr_creat = 8;
|
||||
syscall_nr_time = 13;
|
||||
syscall_nr_break = 17;
|
||||
syscall_nr_oldstat = 18;
|
||||
syscall_nr_mount = 21;
|
||||
syscall_nr_umount = 22;
|
||||
syscall_nr_setuid = 23;
|
||||
syscall_nr_stime = 25;
|
||||
syscall_nr_ptrace = 26;
|
||||
syscall_nr_alarm = 27;
|
||||
syscall_nr_oldfstat = 28;
|
||||
syscall_nr_pause = 29;
|
||||
syscall_nr_stty = 31;
|
||||
syscall_nr_gtty = 32;
|
||||
syscall_nr_nice = 34;
|
||||
syscall_nr_ftime = 35;
|
||||
syscall_nr_sync = 36;
|
||||
syscall_nr_times = 43;
|
||||
syscall_nr_prof = 44;
|
||||
syscall_nr_brk = 45;
|
||||
syscall_nr_setgid = 46;
|
||||
syscall_nr_signal = 48;
|
||||
syscall_nr_acct = 51;
|
||||
syscall_nr_phys = 52;
|
||||
syscall_nr_lock = 53;
|
||||
syscall_nr_mpx = 56;
|
||||
syscall_nr_setpgid = 57;
|
||||
syscall_nr_ulimit = 58;
|
||||
syscall_nr_oldolduname = 59;
|
||||
syscall_nr_chroot = 61;
|
||||
syscall_nr_ustat = 62;
|
||||
syscall_nr_getpgrp = 65;
|
||||
syscall_nr_setsid = 66;
|
||||
syscall_nr_sgetmask = 68;
|
||||
syscall_nr_ssetmask = 69;
|
||||
syscall_nr_setreuid = 70;
|
||||
syscall_nr_setregid = 71;
|
||||
syscall_nr_sethostname = 74;
|
||||
syscall_nr_setrlimit = 75;
|
||||
syscall_nr_getrlimit = 76;
|
||||
syscall_nr_getrusage = 77;
|
||||
syscall_nr_settimeofday = 79;
|
||||
syscall_nr_getgroups = 80;
|
||||
syscall_nr_setgroups = 81;
|
||||
syscall_nr_oldlstat = 84;
|
||||
syscall_nr_uselib = 86;
|
||||
syscall_nr_swapon = 87;
|
||||
syscall_nr_reboot = 88;
|
||||
syscall_nr_readdir = 89;
|
||||
syscall_nr_munmap = 91;
|
||||
syscall_nr_truncate = 92;
|
||||
syscall_nr_fchmod = 94;
|
||||
syscall_nr_fchown = 95;
|
||||
syscall_nr_profil = 98;
|
||||
syscall_nr_ioperm = 101;
|
||||
syscall_nr_socketcall = 102;
|
||||
syscall_nr_syslog = 103;
|
||||
syscall_nr_setitimer = 104;
|
||||
syscall_nr_getitimer = 105;
|
||||
syscall_nr_olduname = 109;
|
||||
syscall_nr_iopl = 110;
|
||||
syscall_nr_vhangup = 111;
|
||||
syscall_nr_idle = 112;
|
||||
syscall_nr_vm86old = 113;
|
||||
syscall_nr_wait4 = 114;
|
||||
syscall_nr_swapoff = 115;
|
||||
syscall_nr_sysinfo = 116;
|
||||
syscall_nr_ipc = 117;
|
||||
syscall_nr_sigreturn = 119;
|
||||
syscall_nr_clone = 120;
|
||||
syscall_nr_setdomainname = 121;
|
||||
syscall_nr_uname = 122;
|
||||
syscall_nr_modify_ldt = 123;
|
||||
syscall_nr_adjtimex = 124;
|
||||
syscall_nr_mprotect = 125;
|
||||
syscall_nr_create_module = 127;
|
||||
syscall_nr_init_module = 128;
|
||||
syscall_nr_delete_module = 129;
|
||||
syscall_nr_get_kernel_syms = 130;
|
||||
syscall_nr_quotactl = 131;
|
||||
syscall_nr_getpgid = 132;
|
||||
syscall_nr_fchdir = 133;
|
||||
syscall_nr_bdflush = 134;
|
||||
syscall_nr_sysfs = 135;
|
||||
syscall_nr_personality = 136;
|
||||
syscall_nr_afs_syscall = 137;
|
||||
syscall_nr_setfsuid = 138;
|
||||
syscall_nr_setfsgid = 139;
|
||||
syscall_nr__llseek = 140;
|
||||
syscall_nr__newselect = 142;
|
||||
syscall_nr_msync = 144;
|
||||
syscall_nr_readv = 145;
|
||||
syscall_nr_writev = 146;
|
||||
syscall_nr_getsid = 147;
|
||||
syscall_nr_fdatasync = 148;
|
||||
syscall_nr__sysctl = 149;
|
||||
syscall_nr_mlock = 150;
|
||||
syscall_nr_munlock = 151;
|
||||
syscall_nr_mlockall = 152;
|
||||
syscall_nr_munlockall = 153;
|
||||
syscall_nr_sched_setparam = 154;
|
||||
syscall_nr_sched_getparam = 155;
|
||||
syscall_nr_sched_setscheduler = 156;
|
||||
syscall_nr_sched_getscheduler = 157;
|
||||
syscall_nr_sched_yield = 158;
|
||||
syscall_nr_sched_get_priority_max = 159;
|
||||
syscall_nr_sched_get_priority_min = 160;
|
||||
syscall_nr_sched_rr_get_interval = 161;
|
||||
syscall_nr_nanosleep = 162;
|
||||
syscall_nr_mremap = 163;
|
||||
syscall_nr_setresuid = 164;
|
||||
syscall_nr_getresuid = 165;
|
||||
syscall_nr_vm86 = 166;
|
||||
syscall_nr_query_module = 167;
|
||||
syscall_nr_poll = 168;
|
||||
}
|
||||
|
||||
{More or less checked BSD syscalls}
|
||||
|
||||
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_waitpid = 7;
|
||||
syscall_nr_link = 9;
|
||||
syscall_nr_unlink = 10;
|
||||
syscall_nr_chdir = 12;
|
||||
syscall_nr_mknod = 14;
|
||||
syscall_nr_chmod = 15;
|
||||
syscall_nr_chown = 16;
|
||||
syscall_nr_getpid = 20;
|
||||
syscall_nr_getuid = 24;
|
||||
syscall_nr_geteuid = 25;
|
||||
syscall_nr_access = 33;
|
||||
syscall_nr_kill = 37;
|
||||
syscall_nr_rename = 128;
|
||||
syscall_nr_getppid = 39;
|
||||
syscall_nr_dup = 41;
|
||||
syscall_nr_pipe = 42;
|
||||
syscall_nr_getegid = 43;
|
||||
syscall_nr_getgid = 47;
|
||||
syscall_nr_sigprocmask = 340;
|
||||
syscall_nr_sigpending = 343;
|
||||
syscall_nr_ioctl = 54;
|
||||
syscall_nr_symlink = 57;
|
||||
syscall_nr_readlink = 58;
|
||||
syscall_nr_execve = 59;
|
||||
syscall_nr_umask = 60;
|
||||
syscall_nr_dup2 = 90;
|
||||
syscall_nr_fcntl = 92;
|
||||
syscall_nr_select = 93;
|
||||
syscall_nr_fsync = 95;
|
||||
syscall_nr_setpriority = 96;
|
||||
syscall_nr_getpriority = 100;
|
||||
syscall_nr_sigsuspend = 341;
|
||||
syscall_nr_sigaction = 342;
|
||||
syscall_nr_gettimeofday = 116;
|
||||
syscall_nr_flock = 131;
|
||||
syscall_nr_mkdir = 136;
|
||||
syscall_nr_rmdir = 137;
|
||||
syscall_nr_utimes = 138;
|
||||
syscall_nr_statfs = 157;
|
||||
syscall_nr_fstatfs = 158;
|
||||
syscall_nr_stat = 188;
|
||||
syscall_nr_fstat = 189;
|
||||
syscall_nr_lstat = 190;
|
||||
syscall_nr_mmap = 197;
|
||||
syscall_nr_lseek = 199;
|
||||
syscall_nr_ftruncate = 201;
|
||||
syscall_nr_getdents = 272;
|
||||
|
||||
|
||||
{$IFNDEF BSD}
|
||||
{$IFDEF SYSCALL_DEBUG}
|
||||
const
|
||||
Sys_nr_txt : array[0..168] of string[15]=(
|
||||
'Setup', { 0 }
|
||||
'Exit', { 1 }
|
||||
'Fork', { 2 }
|
||||
'Read', { 3 }
|
||||
'Write', { 4 }
|
||||
'Open', { 5 }
|
||||
'Close', { 6 }
|
||||
'WaitPid', { 7 }
|
||||
'Create', { 8 }
|
||||
'Link', { 9 }
|
||||
'UnLink', { 10 }
|
||||
'ExecVe', { 11 }
|
||||
'ChDir', { 12 }
|
||||
'Time', { 13 }
|
||||
'MkNod', { 14 }
|
||||
'ChMod', { 15 }
|
||||
'ChOwn', { 16 }
|
||||
'Break', { 17 }
|
||||
'OldState', { 18 }
|
||||
'LSeek', { 19 }
|
||||
'GetPid', { 20 }
|
||||
'Mount', { 21 }
|
||||
'UMount', { 22 }
|
||||
'SetUid', { 23 }
|
||||
'GetUid', { 24 }
|
||||
'STime', { 25 }
|
||||
'PTrace', { 26 }
|
||||
'Alarm', { 27 }
|
||||
'OldFStat', { 28 }
|
||||
'Pause', { 29 }
|
||||
'UTime', { 30 }
|
||||
'STTY', { 31 }
|
||||
'GTTY', { 32 }
|
||||
'Access', { 33 }
|
||||
'Nice', { 34 }
|
||||
'FTime', { 35 }
|
||||
'Sync', { 36 }
|
||||
'Kill', { 37 }
|
||||
'Rename', { 38 }
|
||||
'MkDir', { 39 }
|
||||
'RmDir', { 40 }
|
||||
'Dup', { 41 }
|
||||
'Pipe', { 42 }
|
||||
'Times', { 43 }
|
||||
'Prof', { 44 }
|
||||
'Break', { 45 }
|
||||
'SetGid', { 46 }
|
||||
'GetGid', { 47 }
|
||||
'Signal', { 48 }
|
||||
'GetEUid', { 49 }
|
||||
'GetEGid', { 50 }
|
||||
'Acct', { 51 }
|
||||
'Phys', { 52 }
|
||||
'Lock', { 53 }
|
||||
'IOCtl', { 54 }
|
||||
'FCNtl', { 55 }
|
||||
'Mpx', { 56 }
|
||||
'SetPGid', { 57 }
|
||||
'ULimit', { 58 }
|
||||
'OldOldUName', { 59 }
|
||||
'UMask', { 60 }
|
||||
'ChRoot', { 61 }
|
||||
'UStat', { 62 }
|
||||
'Dup2', { 63 }
|
||||
'GetPPid', { 64 }
|
||||
'GetPGrp', { 65 }
|
||||
'SetSid', { 66 }
|
||||
'SigAction', { 67 }
|
||||
'SGetMask', { 68 }
|
||||
'SSetMask', { 69 }
|
||||
'SetReUid', { 70 }
|
||||
'SetReGid', { 71 }
|
||||
'SigSuspend', { 72 }
|
||||
'SigPending', { 73 }
|
||||
'SetHostName', { 74 }
|
||||
'SetRLimit', { 75 }
|
||||
'GetRLimit', { 76 }
|
||||
'GetRUsage', { 77 }
|
||||
'GetTimeOfDay', { 78 }
|
||||
'SetTimeOfDay', { 79 }
|
||||
'GetGroups', { 80 }
|
||||
'SetGroups', { 81 }
|
||||
'Select', { 82 }
|
||||
'SymLink', { 83 }
|
||||
'OldLStat', { 84 }
|
||||
'ReadLink', { 85 }
|
||||
'UseLib', { 86 }
|
||||
'SwapOn', { 87 }
|
||||
'Reboot', { 88 }
|
||||
'ReadDir', { 89 }
|
||||
'MMap', { 90 }
|
||||
'MunMap', { 91 }
|
||||
'Truncate', { 92 }
|
||||
'FTruncate', { 93 }
|
||||
'FChMod', { 94 }
|
||||
'FChOwn', { 95 }
|
||||
'GetPriority', { 96 }
|
||||
'SetPriority', { 97 }
|
||||
'Profile', { 98 }
|
||||
'StatFs', { 99 }
|
||||
'FStatFs', { 100 }
|
||||
'IOPerm', { 101 }
|
||||
'SocketCall', { 102 }
|
||||
'SysLog', { 103 }
|
||||
'SetITimer', { 104 }
|
||||
'GetITimer', { 105 }
|
||||
'Stat', { 106 }
|
||||
'LStat', { 107 }
|
||||
'FStat', { 108 }
|
||||
'OldUName', { 109 }
|
||||
'IOPl', { 110 }
|
||||
'VHangup', { 111 }
|
||||
'Idle', { 112 }
|
||||
'VM86', { 113 }
|
||||
'Wait4', { 114 }
|
||||
'SwapOff', { 115 }
|
||||
'SysInfo', { 116 }
|
||||
'IPC', { 117 }
|
||||
'FSync', { 118 }
|
||||
'SigReturn', { 119 }
|
||||
'Clone', { 120 }
|
||||
'SetDomainName', { 121 }
|
||||
'UName', { 122 }
|
||||
'Modify_Ldt', { 123 }
|
||||
'AdjTimeX', { 124 }
|
||||
'MProtect', { 125 }
|
||||
'SigProcMask', { 126 }
|
||||
'Create_Module', { 127 }
|
||||
'Init_Module', { 128 }
|
||||
'Delete_Module', { 129 }
|
||||
'Get_Kernel_Syms', { 130 }
|
||||
'QuotaCtl', { 131 }
|
||||
'GetPGid', { 132 }
|
||||
'FChDir', { 133 }
|
||||
'BDFlush', { 134 }
|
||||
'SysFs', { 135 }
|
||||
'Personality', { 136 }
|
||||
'AFS_SysCall', { 137 }
|
||||
'SetFsUid', { 138 }
|
||||
'SetFsGid', { 139 }
|
||||
'__LLSeek', { 140 }
|
||||
'GetDents', { 141 }
|
||||
'__NewSelect', { 142 }
|
||||
'FLock', { 143 }
|
||||
'MSync', { 144 }
|
||||
'ReadV', { 145 }
|
||||
'WriteV', { 146 }
|
||||
'GetSid', { 147 }
|
||||
'FDataSync', { 148 }
|
||||
'__SysCtl', { 149 }
|
||||
'MLock', { 150 }
|
||||
'MUnLock', { 151 }
|
||||
'MLockAll', { 152 }
|
||||
'MUnLockAll', { 153 }
|
||||
'MSchdSetParam', { 154 }
|
||||
'MSchdGetParam', { 155 }
|
||||
'MSchdSetSchd', { 156 }
|
||||
'MSchdGetSchd', { 157 }
|
||||
'MSchdYield', { 158 }
|
||||
'MSchdGetPriMax', { 159 }
|
||||
'MSchdGetPriMin', { 160 }
|
||||
'MSchdRRGetInt', { 161 }
|
||||
'NanoSleep', { 162 }
|
||||
'MRemap', { 163 }
|
||||
'SetReSuid', { 164 }
|
||||
'GetReSuid', { 165 }
|
||||
'vm86', { 166 }
|
||||
'QueryModule', { 167 }
|
||||
'Poll'); { 168 }
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
{
|
||||
$Log$
|
||||
Revision 1.2 2000-07-13 11:33:38 michael
|
||||
+ removed logs
|
||||
|
||||
}
|
||||
@ -1,158 +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.2 2000-07-13 11:33:38 michael
|
||||
+ removed logs
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user