fpc/compiler/systems/i_bsd.pas
peter 66f8276445 * refactor booleans in systeminfo structure, they are now flags
* support for case aware filesystems (Windows), they do now only
    one lookup if a file exists
  * add -WI option to generate import section for DLL imports or
    let the linker handle it. Default is still import section until
    the Makefiles are fixed, then the generation can be left to the
    linker

git-svn-id: trunk@2274 -
2006-01-13 15:13:26 +00:00

547 lines
18 KiB
ObjectPascal

{
Copyright (c) 1998-2002 by Peter Vreman
This unit implements support information structures for FreeBSD/NetBSD
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
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. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
****************************************************************************
}
{ This unit implements support information structures for FreeBSD/NetBSD.
OpenBSD is only added for i386 for now, though it exists for most
other common CPU's too}
unit i_bsd;
interface
uses
systems;
const
system_i386_freebsd_info : tsysteminfo =
(
system : system_i386_FreeBSD;
name : 'FreeBSD/ELF for i386';
shortname : 'FreeBSD';
flags : [tf_pic_uses_got,tf_files_case_sensitive,tf_use_function_relative_addresses];
cpu : cpu_i386;
unit_env : 'BSDUNITS';
extradefines : 'UNIX;BSD;HASUNIX';
exeext : '';
defext : '.def';
scriptext : '.sh';
smartext : '.sl';
unitext : '.ppu';
unitlibext : '.ppl';
asmext : '.s';
objext : '.o';
resext : '.res';
resobjext : '.or';
sharedlibext : '.so';
staticlibext : '.a';
staticlibprefix : 'libp';
sharedlibprefix : 'lib';
sharedClibext : '.so';
staticClibext : '.a';
staticClibprefix : 'lib';
sharedClibprefix : 'lib';
Cprefix : '';
newline : #10;
dirsep : '/';
assem : as_i386_elf32;
assemextern : as_gas;
link : nil;
linkextern : nil;
ar : ar_gnu_ar;
res : res_none;
dbg : dbg_stabs;
script : script_unix;
endian : endian_little;
alignment :
(
procalign : 4;
loopalign : 4;
jumpalign : 0;
constalignmin : 0;
constalignmax : 4;
varalignmin : 0;
varalignmax : 4;
localalignmin : 0;
localalignmax : 4;
recordalignmin : 0;
recordalignmax : 2;
maxCrecordalign : 4
);
first_parm_offset : 8;
stacksize : 262144;
abi : abi_default;
);
system_x86_64_freebsd_info : tsysteminfo =
(
system : system_x86_64_freebsd;
name : 'FreeBSD for x86-64';
shortname : 'FreeBSD';
flags : [tf_needs_symbol_size,tf_pic_uses_got,tf_files_case_sensitive,tf_use_function_relative_addresses{,tf_smartlink_sections}];
cpu : cpu_x86_64;
unit_env : 'BSDUNITS';
extradefines : 'UNIX;HASUNIX';
exeext : '';
defext : '.def';
scriptext : '.sh';
smartext : '.sl';
unitext : '.ppu';
unitlibext : '.ppl';
asmext : '.s';
objext : '.o';
resext : '.res';
resobjext : '.or';
sharedlibext : '.so';
staticlibext : '.a';
staticlibprefix : 'libp';
sharedlibprefix : 'lib';
sharedClibext : '.so';
staticClibext : '.a';
staticClibprefix : 'lib';
sharedClibprefix : 'lib';
Cprefix : '';
newline : #10;
dirsep : '/';
assem : as_gas;
assemextern : as_gas;
link : nil;
linkextern : nil;
ar : ar_gnu_ar;
res : res_none;
dbg : dbg_stabs;
script : script_unix;
endian : endian_little;
alignment :
(
procalign : 8;
loopalign : 4;
jumpalign : 0;
constalignmin : 0;
constalignmax : 8;
varalignmin : 0;
varalignmax : 8;
localalignmin : 4;
localalignmax : 8;
recordalignmin : 0;
recordalignmax : 8;
maxCrecordalign : 8
);
first_parm_offset : 16;
stacksize : 256*1024;
abi : abi_default;
);
system_i386_netbsd_info : tsysteminfo =
(
system : system_i386_NetBSD;
name : 'NetBSD for i386';
shortname : 'NetBSD';
flags : [tf_under_development,tf_files_case_sensitive,tf_use_function_relative_addresses];
cpu : cpu_i386;
unit_env : 'BSDUNITS';
extradefines : 'UNIX;BSD;HASUNIX';
exeext : '';
defext : '.def';
scriptext : '.sh';
smartext : '.sl';
unitext : '.ppu';
unitlibext : '.ppl';
asmext : '.s';
objext : '.o';
resext : '.res';
resobjext : '.or';
sharedlibext : '.so';
staticlibext : '.a';
staticlibprefix : 'libp';
sharedlibprefix : 'lib';
sharedClibext : '.so';
staticClibext : '.a';
staticClibprefix : 'lib';
sharedClibprefix : 'lib';
Cprefix : '_';
newline : #10;
dirsep : '/';
assem : as_gas;
assemextern : as_gas;
link : nil;
linkextern : nil;
ar : ar_gnu_ar;
res : res_none;
dbg : dbg_stabs;
script : script_unix;
endian : endian_little;
alignment :
(
procalign : 4;
loopalign : 4;
jumpalign : 0;
constalignmin : 0;
constalignmax : 1;
varalignmin : 0;
varalignmax : 1;
localalignmin : 0;
localalignmax : 1;
recordalignmin : 0;
recordalignmax : 2;
maxCrecordalign : 4
);
first_parm_offset : 8;
stacksize : 262144;
abi : abi_default;
);
system_i386_openbsd_info : tsysteminfo =
(
system : system_i386_OpenBSD;
name : 'OpenBSD for i386';
shortname : 'OpenBSD';
flags : [tf_under_development,tf_files_case_sensitive,tf_use_function_relative_addresses];
cpu : cpu_i386;
unit_env : 'BSDUNITS';
extradefines : 'UNIX;BSD;HASUNIX';
exeext : '';
defext : '.def';
scriptext : '.sh';
smartext : '.sl';
unitext : '.ppu';
unitlibext : '.ppl';
asmext : '.s';
objext : '.o';
resext : '.res';
resobjext : '.or';
sharedlibext : '.so';
staticlibext : '.a';
staticlibprefix : 'libp';
sharedlibprefix : 'lib';
sharedClibext : '.so';
staticClibext : '.a';
staticClibprefix : 'lib';
sharedClibprefix : 'lib';
Cprefix : '_';
newline : #10;
dirsep : '/';
assem : as_gas;
assemextern : as_gas;
link : nil;
linkextern : nil;
ar : ar_gnu_ar;
res : res_none;
dbg : dbg_stabs;
script : script_unix;
endian : endian_little;
alignment :
(
procalign : 4;
loopalign : 4;
jumpalign : 0;
constalignmin : 0;
constalignmax : 1;
varalignmin : 0;
varalignmax : 1;
localalignmin : 0;
localalignmax : 1;
recordalignmin : 0;
recordalignmax : 2;
maxCrecordalign : 4
);
first_parm_offset : 8;
stacksize : 262144;
abi : abi_default;
);
system_m68k_netbsd_info : tsysteminfo =
(
system : system_m68k_NetBSD;
name : 'NetBSD for m68k';
shortname : 'NetBSD';
flags : [tf_under_development,tf_files_case_sensitive,tf_use_function_relative_addresses];
cpu : cpu_m68k;
unit_env : 'BSDUNITS';
extradefines : 'UNIX;BSD;HASUNIX';
exeext : '';
defext : '.def';
scriptext : '.sh';
smartext : '.sl';
unitext : '.ppu';
unitlibext : '.ppl';
asmext : '.s';
objext : '.o';
resext : '.res';
resobjext : '.or';
sharedlibext : '.so';
staticlibext : '.a';
staticlibprefix : 'libp';
sharedlibprefix : 'lib';
sharedClibext : '.so';
staticClibext : '.a';
staticClibprefix : 'lib';
sharedClibprefix : 'lib';
Cprefix : '';
newline : #10;
dirsep : '/';
assem : as_gas;
assemextern : as_gas;
link : nil;
linkextern : nil;
ar : ar_gnu_ar;
res : res_none;
dbg : dbg_stabs;
script : script_unix;
endian : endian_big;
alignment :
(
procalign : 4;
loopalign : 4;
jumpalign : 0;
constalignmin : 0;
constalignmax : 1;
varalignmin : 0;
varalignmax : 1;
localalignmin : 0;
localalignmax : 1;
recordalignmin : 0;
recordalignmax : 2;
maxCrecordalign : 4
);
first_parm_offset : 8;
stacksize : 262144;
abi : abi_default;
);
system_powerpc_netbsd_info : tsysteminfo =
(
system : system_powerpc_netbsd;
name : 'NetBSD for PowerPC';
shortname : 'NetBSD';
flags : [tf_under_development,tf_files_case_sensitive,tf_use_function_relative_addresses];
cpu : cpu_powerpc;
unit_env : '';
extradefines : 'UNIX;BSD;HASUNIX';
exeext : '';
defext : '.def';
scriptext : '.sh';
smartext : '.sl';
unitext : '.ppu';
unitlibext : '.ppl';
asmext : '.s';
objext : '.o';
resext : '.res';
resobjext : '.or';
sharedlibext : '.so';
staticlibext : '.s';
staticlibprefix : 'libp';
sharedlibprefix : 'lib';
sharedClibext : '.so';
staticClibext : '.a';
staticClibprefix : 'lib';
sharedClibprefix : 'lib';
Cprefix : '';
newline : #10;
dirsep : '/';
assem : as_gas;
assemextern : as_gas;
link : nil;
linkextern : nil;
ar : ar_gnu_ar;
res : res_none;
dbg : dbg_stabs;
script : script_unix;
endian : endian_big;
alignment :
(
procalign : 4;
loopalign : 4;
jumpalign : 0;
constalignmin : 0;
constalignmax : 4;
varalignmin : 0;
varalignmax : 4;
localalignmin : 0;
localalignmax : 4;
recordalignmin : 0;
recordalignmax : 2;
maxCrecordalign : 4 // should be 8 probably
);
first_parm_offset : 8;
stacksize : 32*1024*1024;
{ abi_powerpc_sysv doesn't work yet }
abi : abi_powerpc_aix;
);
system_powerpc_darwin_info : tsysteminfo =
(
system : system_powerpc_darwin;
name : 'Darwin for PowerPC';
shortname : 'Darwin';
flags : [tf_p_ext_support,tf_files_case_sensitive];
cpu : cpu_powerpc;
unit_env : 'BSDUNITS';
extradefines : 'UNIX;BSD;HASUNIX';
exeext : '';
defext : '.def';
scriptext : '.sh';
smartext : '.sl';
unitext : '.ppu';
unitlibext : '.ppl';
asmext : '.s';
objext : '.o';
resext : '.res';
resobjext : '.or';
sharedlibext : '.dylib';
staticlibext : '.a';
staticlibprefix : 'libp';
sharedlibprefix : 'lib';
sharedClibext : '.dylib';
staticClibext : '.a';
staticClibprefix : 'lib';
sharedClibprefix : 'lib';
Cprefix : '_';
newline : #10;
dirsep : '/';
assem : as_darwin;
assemextern : as_darwin;
link : nil;
linkextern : nil;
ar : ar_gnu_ar;
res : res_none;
dbg : dbg_stabs;
script : script_unix;
endian : endian_big;
alignment :
(
procalign : 16;
loopalign : 4;
jumpalign : 0;
constalignmin : 0;
constalignmax : 4;
varalignmin : 0;
varalignmax : 4;
localalignmin : 0;
localalignmax : 4;
recordalignmin : 0;
recordalignmax : 2;
maxCrecordalign : 4
);
first_parm_offset : 24;
stacksize : 262144;
abi : abi_powerpc_aix;
);
system_i386_darwin_info : tsysteminfo =
(
system : system_i386_darwin;
name : 'Darwin for i386';
shortname : 'Darwin';
flags : [tf_p_ext_support,tf_files_case_sensitive,tf_use_function_relative_addresses];
cpu : cpu_i386;
unit_env : 'BSDUNITS';
extradefines : 'UNIX;BSD;HASUNIX';
exeext : '';
defext : '.def';
scriptext : '.sh';
smartext : '.sl';
unitext : '.ppu';
unitlibext : '.ppl';
asmext : '.s';
objext : '.o';
resext : '.res';
resobjext : '.or';
sharedlibext : '.dylib';
staticlibext : '.a';
staticlibprefix : 'libp';
sharedlibprefix : 'lib';
sharedClibext : '.dylib';
staticClibext : '.a';
staticClibprefix : 'lib';
sharedClibprefix : 'lib';
Cprefix : '_';
newline : #10;
dirsep : '/';
assem : as_darwin;
assemextern : as_darwin;
link : nil;
linkextern : nil;
ar : ar_gnu_ar;
res : res_none;
dbg : dbg_stabs;
script : script_unix;
endian : endian_big;
alignment :
(
procalign : 16;
loopalign : 4;
jumpalign : 0;
constalignmin : 0;
constalignmax : 4;
varalignmin : 0;
varalignmax : 4;
localalignmin : 0;
localalignmax : 4;
recordalignmin : 0;
recordalignmax : 16;
maxCrecordalign : 16
);
first_parm_offset : 8;
stacksize : 262144;
abi : abi_default;
);
implementation
initialization
{$ifdef cpu86}
{$ifdef FreeBSD}
set_source_info(system_i386_FreeBSD_info);
{$endif}
{$ifdef NetBSD}
set_source_info(system_i386_NetBSD_info);
{$endif}
{$ifdef OpenBSD}
set_source_info(system_i386_NetBSD_info);
{$endif}
{$ifdef Darwin}
set_source_info(system_i386_Darwin_info);
{$endif Darwin}
{$endif cpu86}
{$ifdef cpux86_64}
{$ifdef FreeBSD}
set_source_info(system_x86_64_FreeBSD_info);
{$endif}
{$endif}
{$ifdef cpu68}
{$ifdef NetBSD}
set_source_info(system_m68k_NetBSD_info);
{$endif NetBSD}
{$endif cpu68}
{$ifdef cpupowerpc}
{$ifdef Darwin}
set_source_info(system_powerpc_darwin_info);
{$endif Darwin}
{$ifdef NetBSD}
set_source_info(system_powerpc_netbsd_info);
{$endif}
{$endif cpu68}
end.