summaryrefslogtreecommitdiff
path: root/compiler/systems/i_linux.pas
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/systems/i_linux.pas')
-rw-r--r--compiler/systems/i_linux.pas658
1 files changed, 658 insertions, 0 deletions
diff --git a/compiler/systems/i_linux.pas b/compiler/systems/i_linux.pas
new file mode 100644
index 0000000000..b1a7b87da5
--- /dev/null
+++ b/compiler/systems/i_linux.pas
@@ -0,0 +1,658 @@
+{
+ Copyright (c) 1998-2002 by Peter Vreman
+
+ This unit implements support information structures for linux
+
+ 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 linux. }
+unit i_linux;
+
+ interface
+
+ uses
+ systems;
+
+ const
+ res_elf32_info : tresinfo =
+ (
+ id : res_elf;
+ resbin : 'fpcres';
+ rescmd : '-o $OBJ -i $RES'
+ );
+
+ res_elf64_info : tresinfo =
+ (
+ id : res_elf;
+ resbin : 'fpcres';
+ rescmd : '-o $OBJ -i $RES'
+ );
+
+ system_i386_linux_info : tsysteminfo =
+ (
+ system : system_i386_LINUX;
+ name : 'Linux for i386';
+ shortname : 'Linux';
+ flags : [tf_needs_symbol_size,tf_pic_uses_got{,tf_smartlink_sections},tf_needs_symbol_type];
+ cpu : cpu_i386;
+ unit_env : 'LINUXUNITS';
+ 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';
+ p_ext_support : false;
+ Cprefix : '';
+ newline : #10;
+ dirsep : '/';
+ files_case_relevent : true;
+ assem : as_i386_elf32;
+ assemextern : as_gas;
+ link : nil;
+ linkextern : nil;
+ ar : ar_gnu_ar;
+ res : res_elf;
+ dbg : dbg_stabs;
+ script : script_unix;
+ endian : endian_little;
+ alignment :
+ (
+ procalign : 16;
+ loopalign : 4;
+ jumpalign : 0;
+ constalignmin : 0;
+ constalignmax : 8;
+ varalignmin : 0;
+ varalignmax : 8;
+ localalignmin : 4;
+ localalignmax : 4;
+ recordalignmin : 0;
+ recordalignmax : 4;
+ maxCrecordalign : 4
+ );
+ first_parm_offset : 8;
+ stacksize : 262144;
+ DllScanSupported:false;
+ use_function_relative_addresses : true;
+ abi : abi_default
+ );
+
+ system_x86_6432_linux_info : tsysteminfo =
+ (
+ system : system_x86_6432_LINUX;
+ name : 'Linux for x64_6432';
+ shortname : 'Linux6432';
+ flags : [tf_needs_symbol_size,tf_pic_uses_got{,tf_smartlink_sections}];
+ cpu : cpu_x86_64;
+ unit_env : 'LINUXUNITS';
+ 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';
+ p_ext_support : false;
+ Cprefix : '';
+ newline : #10;
+ dirsep : '/';
+ files_case_relevent : true;
+ 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 : 16;
+ loopalign : 4;
+ jumpalign : 0;
+ constalignmin : 0;
+ constalignmax : 8;
+ varalignmin : 0;
+ varalignmax : 8;
+ localalignmin : 4;
+ localalignmax : 4;
+ recordalignmin : 0;
+ recordalignmax : 4;
+ maxCrecordalign : 4
+ );
+ first_parm_offset : 8;
+ stacksize : 262144;
+ DllScanSupported:false;
+ use_function_relative_addresses : true;
+ abi : abi_default
+ );
+
+ system_m68k_linux_info : tsysteminfo =
+ (
+ system : system_m68k_linux;
+ name : 'Linux for m68k';
+ shortname : 'Linux';
+ flags : [tf_needs_symbol_size,tf_needs_symbol_type];
+ cpu : cpu_m68k;
+ unit_env : 'LINUXUNITS';
+ extradefines : 'UNIX;HASUNIX';
+ exeext : '';
+ defext : '';
+ 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';
+ p_ext_support : false;
+ Cprefix : '';
+ newline : #10;
+ dirsep : '/';
+ files_case_relevent : true;
+ 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 : 4;
+ localalignmax : 4;
+ recordalignmin : 0;
+ recordalignmax : 2;
+ maxCrecordalign : 4
+ );
+ first_parm_offset : 8;
+ stacksize : 32*1024*1024;
+ DllScanSupported:false;
+ use_function_relative_addresses : true;
+ abi : abi_default
+ );
+
+ system_powerpc_linux_info : tsysteminfo =
+ (
+ system : system_powerpc_LINUX;
+ name : 'Linux for PowerPC';
+ shortname : 'Linux';
+ flags : [tf_needs_symbol_size,tf_needs_symbol_type];
+ cpu : cpu_powerpc;
+ unit_env : '';
+ 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';
+ p_ext_support : false;
+ Cprefix : '';
+ newline : #10;
+ dirsep : '/';
+ files_case_relevent : true;
+ 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 : 4;
+ localalignmax : 4;
+ recordalignmin : 0;
+ recordalignmax : 4;
+ maxCrecordalign : 8
+ );
+ first_parm_offset : 8;
+ stacksize : 32*1024*1024;
+ DllScanSupported:false;
+ use_function_relative_addresses : true;
+ abi : abi_powerpc_sysv;
+ );
+
+ system_powerpc64_linux_info : tsysteminfo =
+ (
+ system : system_powerpc64_LINUX;
+ name : 'Linux for PowerPC64';
+ shortname : 'Linux';
+ flags : [tf_needs_symbol_size,tf_needs_symbol_type];
+ cpu : cpu_powerpc64;
+ unit_env : '';
+ 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';
+ p_ext_support : false;
+ Cprefix : '';
+ newline : #10;
+ dirsep : '/';
+ files_case_relevent : true;
+ 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 : 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 : 8;
+ stacksize : 32*1024*1024;
+ DllScanSupported:false;
+ use_function_relative_addresses : true;
+ abi : abi_default
+ );
+
+ system_alpha_linux_info : tsysteminfo =
+ (
+ system : system_alpha_LINUX;
+ name : 'Linux for Alpha';
+ shortname : 'Linux';
+ flags : [tf_needs_symbol_size,tf_needs_symbol_type];
+ cpu : cpu_alpha;
+ unit_env : 'LINUXUNITS';
+ 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';
+ p_ext_support : false;
+ Cprefix : '';
+ newline : #10;
+ dirsep : '/';
+ files_case_relevent : true;
+ 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 : 4;
+ varalignmin : 0;
+ varalignmax : 4;
+ localalignmin : 4;
+ localalignmax : 4;
+ recordalignmin : 0;
+ recordalignmax : 2;
+ maxCrecordalign : 4
+ );
+ first_parm_offset : 8;
+ stacksize : 32*1024*1024;
+ DllScanSupported:false;
+ use_function_relative_addresses : true;
+ abi : abi_default
+ );
+
+ system_x86_64_linux_info : tsysteminfo =
+ (
+ system : system_x86_64_LINUX;
+ name : 'Linux for x86-64';
+ shortname : 'Linux';
+ flags : [tf_needs_symbol_size,tf_needs_dwarf_cfi,
+ tf_library_needs_pic,tf_needs_symbol_type];
+ cpu : cpu_x86_64;
+ unit_env : 'LINUXUNITS';
+ 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';
+ p_ext_support : false;
+ Cprefix : '';
+ newline : #10;
+ dirsep : '/';
+ files_case_relevent : true;
+ 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;
+ DllScanSupported:false;
+ use_function_relative_addresses : true;
+ abi : abi_default
+ );
+
+ system_sparc_linux_info : tsysteminfo =
+ (
+ system : system_SPARC_Linux;
+ name : 'Linux for SPARC';
+ shortname : 'Linux';
+ flags : [tf_needs_symbol_size,tf_library_needs_pic,tf_needs_symbol_type];
+ cpu : cpu_SPARC;
+ unit_env : 'LINUXUNITS';
+ 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';
+ p_ext_support : false;
+ Cprefix : '';
+ newline : #10;
+ dirsep : '/';
+ files_case_relevent : true;
+ 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 : 8;
+ varalignmin : 0;
+ varalignmax : 8;
+ localalignmin : 4;
+ localalignmax : 8;
+ recordalignmin : 0;
+ recordalignmax : 8;
+ maxCrecordalign : 8
+ );
+ first_parm_offset : 92;
+ stacksize : 262144;
+ DllScanSupported:false;
+ use_function_relative_addresses : true;
+ abi : abi_default
+ );
+
+ system_arm_linux_info : tsysteminfo =
+ (
+ system : system_arm_Linux;
+ name : 'Linux for ARM';
+ shortname : 'Linux';
+ flags : [tf_needs_symbol_size,tf_needs_symbol_type];
+ cpu : cpu_arm;
+ unit_env : 'LINUXUNITS';
+ 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';
+ p_ext_support : false;
+ Cprefix : '';
+ newline : #10;
+ dirsep : '/';
+ files_case_relevent : true;
+ 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 : 4;
+ varalignmin : 0;
+ varalignmax : 4;
+ localalignmin : 4;
+ localalignmax : 8;
+ recordalignmin : 0;
+ recordalignmax : 4;
+ maxCrecordalign : 4
+ );
+ first_parm_offset : 8;
+ stacksize : 262144;
+ DllScanSupported:false;
+ use_function_relative_addresses : true;
+ abi : abi_default
+ );
+
+ implementation
+
+initialization
+{$ifdef CPU86}
+ {$ifdef linux}
+ { some FreeBSD versions define linux as well }
+ {$ifndef FreeBSD}
+ set_source_info(system_i386_linux_info);
+ {$endif FreeBSD}
+ {$endif}
+{$endif CPU86}
+{$ifdef CPU68}
+ {$ifdef linux}
+ set_source_info(system_m68k_linux_info);
+ {$endif linux}
+{$endif CPU68}
+{$ifdef CPUX86_64}
+ {$ifdef linux}
+ set_source_info(system_x86_64_linux_info);
+ {$endif linux}
+{$endif CPUX86_64}
+{$ifdef CPUALPHA}
+ {$ifdef linux}
+ set_source_info(system_alpha_linux_info);
+ {$endif linux}
+{$endif CPUALPHA}
+{$ifdef CPUSPARC}
+ {$ifdef linux}
+ set_source_info(system_sparc_linux_info);
+ {$endif linux}
+{$endif CPUSPARC}
+{$ifdef CPUPOWERPC32}
+ {$ifdef linux}
+ set_source_info(system_powerpc_linux_info);
+ {$endif linux}
+{$endif CPUPOWERPC32}
+{$ifdef CPUPOWERPC64}
+ {$ifdef linux}
+ set_source_info(system_powerpc64_linux_info);
+ {$endif linux}
+{$endif CPUPOWERPC64}
+{$ifdef CPUARM}
+ {$ifdef linux}
+ set_source_info(system_arm_linux_info);
+ {$endif linux}
+{$endif CPUARM}
+end.