diff options
Diffstat (limited to 'compiler/systems/i_linux.pas')
-rw-r--r-- | compiler/systems/i_linux.pas | 658 |
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. |