* updates.

This commit is contained in:
marco 2000-04-07 20:51:16 +00:00
parent 5f41b8c639
commit d3d5cb5c1f
7 changed files with 320 additions and 186 deletions

108
rtl/bsd/bsdport.txt Normal file
View File

@ -0,0 +1,108 @@
$Id$
1 FreeBSD status and notes. (kept on CVS because I work on several places)
-----------------------------------------------------------------------------
At the moment that you are reading this, FPC for FreeBSD is still a dream.
We are currently working actively on FreeBSD support.
NI=not implemented yet
req=required for compiler
noreq? = probably not required, but not checked.
syscall status comment
------------------------------------------------------------------------
Readdir req implemented from scratch, not working. (since this
call doesn't exist on FBSD and FindFirst is based on it.
Clone() NI noreq Looks awfully complicated. Should be based on RFork.
sysinfo NI noreq Not supported under BSD, not even by emulator
uname NI noreq " " " " " " " "
(procedure 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.
IOPERM NI noreq? Concept doesn't exist on FreeBSD. No IO outside kernel?
2 How to build a FreeBSD compiler.
-----------------------------------------------------------------------------
Comments, mistakes and suggestions to Marcov@stack.nl
The FreeBSD port is 99% experimental atm, though valid native binaries can be
obtained. They mosttimes don't function yet.
Supported are probably FreeBSD 3.x (3.2, 3.4 and 4.0-release tested).
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.
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 know have .ppu's and .s 's for the RTL hopefully.
STEP B: Create the compiler assembler sources;
This will generate the .s files for the compiler.
4. Copy the mppc386.bat file in the compiler/ directory, and delete anything but
the ppc386 line.
5. Add "-Fu\BSDPATH\BSDBUILD -s -a -dBSD" to the line, and delete all %1 %2 options
which then look like this:
ppc386 -O3p3 -Ch8000000 -dI386 -dGDB -dBROWSERLOG -Sg pp.pas -Fu\BSDPATH\BSDBUILD -s -a -dBSD -Tlinux
6. Execute this line in the compiler directory (direct or via script)
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.
8. Change to the directory on the BSD machine, and run the script DO_S to assemble
.s files to .o files.
9. Adapt link.res so that all paths to the BSD machine are right.
10. run ppas.sh
You know should have a native FreeBSD "pp" binary.
------------------
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-04-07 20:51:16 marco
* updates.
}

View File

@ -3418,7 +3418,7 @@ function MMap(const m:tmmapargs):longint;
begin
{Last argument (offset) is actually 64-bit under BSD. Therefore extra 0}
do_syscall(syscall_nr_mmap,m.address,m.size,m.prot,m.flags,m.fd,m.offset,0);
MMap:=do_syscall(syscall_nr_mmap,m.address,m.size,m.prot,m.flags,m.fd,m.offset,0);
LinuxError:=Errno;
end;
@ -3644,7 +3644,10 @@ End.
{
$Log$
Revision 1.10 2000-04-05 13:46:22 marco
Revision 1.11 2000-04-07 20:51:16 marco
* updates.
Revision 1.10 2000/04/05 13:46:22 marco
* rest of syscalls has constants now
Revision 1.9 2000/04/05 13:07:03 marco

View File

@ -332,7 +332,7 @@ end;
Function Sys_Rename(Oldname,Newname:pchar):longint;
begin
sys_rename:=do_syscallsyscall_nr_rename,longint(oldname),longint(newname));
sys_rename:=do_syscall(syscall_nr_rename,longint(oldname),longint(newname));
end;
Function Sys_Stat(Filename:pchar;var Buffer: stat):longint;
@ -454,12 +454,15 @@ end;
Procedure Sys_Exit(ExitCode:longint);
begin
do_syscall(syscall_nr_,exitcode);
do_syscall(syscall_nr_exit,exitcode);
end;
{
$Log$
Revision 1.11 2000-04-05 13:58:40 marco
Revision 1.12 2000-04-07 20:51:17 marco
* updates.
Revision 1.11 2000/04/05 13:58:40 marco
* syscall variablenames reintroduced.
Revision 1.10 2000/03/16 16:18:12 marco
@ -494,4 +497,4 @@ end;
Revision 1.1 2000/02/02 15:41:56 marco
* Initial BSD version. Still needs a lot of work.
}
}

View File

@ -33,7 +33,8 @@ Const
Open_ASync = $40;
Open_FSync = $80;
Open_NoFollow = $100;
Open_Create = $200;
Open_Create = $200; {BSD convention}
Open_Creat = $200; {Linux convention}
Open_Trunc = $400;
Open_Excl = $800;
@ -86,7 +87,10 @@ Const
{
$Log$
Revision 1.3 2000-02-03 17:05:13 marco
Revision 1.4 2000-04-07 20:51:17 marco
* updates.
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

View File

@ -174,7 +174,7 @@ end ['D0'];
Function sbrk(size : longint) : Longint;
begin
Sbrk:=do_syscall(197,0,size,3,$22,-1,0,0);
Sbrk:=do_syscall(syscall_nr_mmap,0,size,3,$22,-1,0,0);
if ErrNo<>0 then
Sbrk:=0;
end;
@ -325,7 +325,7 @@ Begin
{$ifdef crtlib}
Do_FileSize:=_rtl_filesize(Handle);
{$else}
if do_SysCall(189,handle,longint(@info))=0 then
if do_SysCall(syscall_nr_fstat,handle,longint(@info))=0 then
Do_FileSize:=Info.Size
else
Do_FileSize:=0;
@ -338,7 +338,7 @@ Procedure Do_Truncate(Handle,Pos:longint);
begin
{$ifndef crtlib}
do_syscall(201,handle,pos,0);
do_syscall(syscall_nr_ftruncate,handle,pos,0);
Errno2Inoutres;
{$endif}
end;
@ -439,7 +439,7 @@ Function Do_IsDevice(Handle:Longint):boolean;
var
Data : array[0..255] of byte; {Large enough for termios info}
begin
Do_IsDevice:=(do_SysCall(54,handle,$5401,longint(@data))=0);
Do_IsDevice:=(do_SysCall(syscall_nr_ioctl,handle,$5401,longint(@data))=0);
end;
@ -689,7 +689,10 @@ End.
{
$Log$
Revision 1.3 2000-03-17 12:58:57 marco
Revision 1.4 2000-04-07 20:51:17 marco
* updates.
Revision 1.3 2000/03/17 12:58:57 marco
* some changes to ftruncate based procs. Added a "0" as extra parameter
Revision 1.2 2000/03/16 16:21:10 marco

View File

@ -14,176 +14,183 @@
**********************************************************************}
const
syscall_nr_setup = 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_waitpid = 7; {*}
syscall_nr_creat = 8;
syscall_nr_link = 9; {*}
syscall_nr_unlink = 10; {*}
syscall_nr_execve = 59; {*}
syscall_nr_chdir = 12;
syscall_nr_time = 13;
syscall_nr_mknod = 14; {*}
syscall_nr_chmod = 15; {*}
syscall_nr_chown = 16; {*}
syscall_nr_break = 17;
syscall_nr_oldstat = 18;
syscall_nr_lseek = 199; {*}
syscall_nr_getpid = 20; {*}
syscall_nr_mount = 21;
syscall_nr_umount = 22;
syscall_nr_setuid = 23;
syscall_nr_getuid = 24; {*}
syscall_nr_stime = 25;
syscall_nr_ptrace = 26;
syscall_nr_alarm = 27;
syscall_nr_oldfstat = 28;
syscall_nr_pause = 29;
syscall_nr_utime = 138; {*}
syscall_nr_stty = 31;
syscall_nr_gtty = 32;
syscall_nr_access = 33; {*}
syscall_nr_nice = 34;
syscall_nr_ftime = 35;
syscall_nr_sync = 36;
syscall_nr_kill = 37; {*}
syscall_nr_rename = 38; {*}
syscall_nr_mkdir = 136; {*}
syscall_nr_rmdir = 137; {*}
syscall_nr_dup = 41;
syscall_nr_pipe = 42; {*}
syscall_nr_times = 43;
syscall_nr_prof = 44;
syscall_nr_brk = 45;
syscall_nr_setgid = 46;
syscall_nr_getgid = 47; {*}
syscall_nr_signal = 48;
syscall_nr_geteuid = 25; {*}
syscall_nr_getegid = 43; {*}
syscall_nr_acct = 51;
syscall_nr_phys = 52;
syscall_nr_lock = 53;
syscall_nr_ioctl = 54; {*}
syscall_nr_fcntl = 92;
syscall_nr_mpx = 56;
syscall_nr_setpgid = 57;
syscall_nr_ulimit = 58;
syscall_nr_oldolduname = 59;
syscall_nr_umask = 60; {*}
syscall_nr_chroot = 61;
syscall_nr_ustat = 62;
syscall_nr_dup2 = 90; {*}
syscall_nr_getppid = 39; {*}
syscall_nr_getpgrp = 65;
syscall_nr_setsid = 66;
syscall_nr_sigaction = 46;
syscall_nr_sgetmask = 68;
syscall_nr_ssetmask = 69;
syscall_nr_setreuid = 70;
syscall_nr_setregid = 71;
syscall_nr_sigsuspend = 111; {*}
syscall_nr_sigpending = 52; {*}
syscall_nr_sethostname = 74;
syscall_nr_setrlimit = 75;
syscall_nr_getrlimit = 76;
syscall_nr_getrusage = 77;
syscall_nr_gettimeofday = 116; {*}
syscall_nr_settimeofday = 79;
syscall_nr_getgroups = 80;
syscall_nr_setgroups = 81;
syscall_nr_select = 93; {*}
syscall_nr_symlink = 57; {*}
syscall_nr_oldlstat = 84;
syscall_nr_readlink = 58; {*}
syscall_nr_uselib = 86;
syscall_nr_swapon = 87;
syscall_nr_reboot = 88;
syscall_nr_readdir = 89;
syscall_nr_mmap = 197; {*}
syscall_nr_munmap = 91;
syscall_nr_truncate = 92;
syscall_nr_ftruncate = 201; {*}
syscall_nr_fchmod = 94;
syscall_nr_fchown = 95;
syscall_nr_getpriority = 100; {*}
syscall_nr_setpriority = 96; {*}
syscall_nr_profil = 98;
syscall_nr_statfs = 157; {*}
syscall_nr_fstatfs = 158; {*}
syscall_nr_ioperm = 101;
syscall_nr_socketcall = 102;
syscall_nr_syslog = 103;
syscall_nr_setitimer = 104;
syscall_nr_getitimer = 105;
syscall_nr_stat = 188; {*}
syscall_nr_lstat = 190; {*}
syscall_nr_fstat = 189; {*}
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_fsync = 95; {*}
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_sigprocmask = 48; {*}
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_getdents = 272;
syscall_nr__newselect = 142;
syscall_nr_flock = 131;
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;
{ 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]=(
@ -357,10 +364,13 @@ const
'QueryModule', { 167 }
'Poll'); { 168 }
{$ENDIF}
{$ENDIF}
{
$Log$
Revision 1.2 2000-04-05 13:59:10 marco
Revision 1.3 2000-04-07 20:51:17 marco
* updates.
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

View File

@ -50,7 +50,7 @@ type
TDirEnt = dirent;
TDir = packed record
fd : integer;
fd : longint;
loc : longint;
size : integer;
buf : pdirent;
@ -139,7 +139,10 @@ type
{
$Log$
Revision 1.5 2000-03-17 12:58:57 marco
Revision 1.6 2000-04-07 20:51:17 marco
* updates.
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