diff --git a/.gitattributes b/.gitattributes index cf2e519e50..8fb4d7fc22 100644 --- a/.gitattributes +++ b/.gitattributes @@ -7354,7 +7354,6 @@ packages/rtl-extra/src/amiga/printer.pp svneol=native#text/plain packages/rtl-extra/src/amiga/sockets.pp svneol=native#text/plain packages/rtl-extra/src/android/clocale.pp svneol=native#text/plain packages/rtl-extra/src/android/osdefs.inc svneol=native#text/plain -packages/rtl-extra/src/android/unixsock.inc svneol=native#text/plain packages/rtl-extra/src/android/unxsockh.inc svneol=native#text/plain packages/rtl-extra/src/aros/sockets.pp svneol=native#text/plain packages/rtl-extra/src/beos/osdefs.inc svneol=native#text/plain @@ -8715,13 +8714,11 @@ rtl/amiga/system.pp svneol=native#text/plain rtl/amiga/timerd.inc svneol=native#text/plain rtl/android/Makefile svneol=native#text/plain rtl/android/Makefile.fpc svneol=native#text/plain -rtl/android/arm/dllprt0.as svneol=native#text/plain -rtl/android/arm/prt0.as svneol=native#text/plain +rtl/android/aarch64/sysnr.inc svneol=native#text/plain rtl/android/arm/sysnr.inc svneol=native#text/plain rtl/android/cwstring.pp svneol=native#text/plain rtl/android/dlandroid.inc svneol=native#text/plain -rtl/android/i386/dllprt0.as svneol=native#text/plain -rtl/android/i386/prt0.as svneol=native#text/plain +rtl/android/dllprt0.as svneol=native#text/plain rtl/android/i386/sysnr.inc svneol=native#text/plain rtl/android/jvm/Makefile svneol=native#text/plain rtl/android/jvm/Makefile.fpc svneol=native#text/plain @@ -8730,12 +8727,13 @@ rtl/android/jvm/androidr14.pas svneol=native#text/plain rtl/android/jvm/java_sys_android.inc svneol=native#text/plain rtl/android/jvm/java_sysh_android.inc svneol=native#text/plain rtl/android/jvm/rtl.cfg svneol=native#text/plain -rtl/android/mipsel/dllprt0.as svneol=native#text/plain -rtl/android/mipsel/prt0.as svneol=native#text/plain +rtl/android/mips64/sysnr.inc svneol=native#text/plain rtl/android/mipsel/sysnr.inc svneol=native#text/plain +rtl/android/prt0.as svneol=native#text/plain rtl/android/sysandroid.inc svneol=native#text/plain rtl/android/sysandroidh.inc svneol=native#text/plain rtl/android/unixandroid.inc svneol=native#text/plain +rtl/android/x86_64/sysnr.inc svneol=native#text/plain rtl/arm/arm.inc svneol=native#text/plain rtl/arm/armdefines.inc svneol=native#text/plain rtl/arm/cpu.pp svneol=native#text/pascal diff --git a/compiler/aarch64/agcpugas.pas b/compiler/aarch64/agcpugas.pas index b8d61fd241..2d1665ebbc 100644 --- a/compiler/aarch64/agcpugas.pas +++ b/compiler/aarch64/agcpugas.pas @@ -274,7 +274,7 @@ unit agcpugas; idtxt : 'AS'; asmbin : 'as'; asmcmd : '-o $OBJ $EXTRAOPT $ASM'; - supported_targets : [system_aarch64_linux]; + supported_targets : [system_aarch64_linux,system_aarch64_android]; flags : [af_needar,af_smartlink_sections]; labelprefix : '.L'; comment : '// '; diff --git a/compiler/aarch64/cputarg.pas b/compiler/aarch64/cputarg.pas index 584a295c75..7deac4e2e1 100644 --- a/compiler/aarch64/cputarg.pas +++ b/compiler/aarch64/cputarg.pas @@ -41,6 +41,9 @@ implementation {$ifndef NOTARGETBSD} ,t_bsd {$endif} + {$ifndef NOTARGETANDROID} + ,t_android + {$endif} {************************************** Assemblers diff --git a/compiler/fpcdefs.inc b/compiler/fpcdefs.inc index ff3add6a38..810b364f9d 100644 --- a/compiler/fpcdefs.inc +++ b/compiler/fpcdefs.inc @@ -271,6 +271,7 @@ {$define cputargethasfixedstack} {$define cpurefshaveindexreg} {$define SUPPORT_GET_FRAME} + {$define SUPPORT_SAFECALL} {$endif aarch64} {$IFDEF MACOS} diff --git a/compiler/options.pas b/compiler/options.pas index a5844254b5..497b067d85 100644 --- a/compiler/options.pas +++ b/compiler/options.pas @@ -3722,16 +3722,15 @@ begin if not UpdateTargetSwitchStr('FARPROCSPUSHODDBP', init_settings.targetswitches, true) then InternalError(2013092801); - { Set up a default prefix for binutils when cross-compiling } - if source_info.system<>target_info.system then + { Use standard Android NDK prefixes when cross-compiling } + if (source_info.system<>target_info.system) and (target_info.system in systems_android) then case target_info.system of - { Use standard Android NDK prefixes } system_arm_android: utilsprefix:='arm-linux-androideabi-'; system_i386_android: utilsprefix:='i686-linux-android-'; - system_mipsel_android: - utilsprefix:='mipsel-linux-android-'; + else + utilsprefix:=target_cpu_string + '-linux-android-'; end; { Set up default value for the heap } diff --git a/compiler/systems.inc b/compiler/systems.inc index 9da234156e..4c2c8a2a11 100644 --- a/compiler/systems.inc +++ b/compiler/systems.inc @@ -179,7 +179,13 @@ system_wasm_wasm32, { 92 } system_sparc64_linux, { 93 } system_sparc64_solaris, { 94 } - system_arm_netbsd { 95 } + system_arm_netbsd, { 95 } + system_riscv32_linux, { 96 } + system_riscv64_linux, { 97 } + system_riscv64_embedded, { 98 } + system_riscv32_embedded, { 99 } + system_aarch64_android, { 100 } + system_x86_64_android { 101 } ); type diff --git a/compiler/systems.pas b/compiler/systems.pas index b0201c7576..a08229ab07 100644 --- a/compiler/systems.pas +++ b/compiler/systems.pas @@ -229,7 +229,7 @@ interface system_any = system_none; systems_wince = [system_arm_wince,system_i386_wince]; - systems_android = [system_arm_android, system_i386_android, system_mipsel_android]; + systems_android = [system_arm_android, system_aarch64_android, system_i386_android, system_x86_64_android, system_mipsel_android]; systems_linux = [system_i386_linux,system_x86_64_linux,system_powerpc_linux,system_powerpc64_linux, system_arm_linux,system_sparc_linux,system_sparc64_linux,system_m68k_linux, system_x86_6432_linux,system_mipseb_linux,system_mipsel_linux,system_aarch64_linux]; @@ -906,6 +906,10 @@ begin default_target(system_powerpc_aix); {$define default_target_set} {$endif} + {$ifdef android} + {$define default_target_set} + default_target(system_x86_64_android); + {$endif} {$ifndef default_target_set} default_target(system_powerpc_linux); {$endif default_target_set} @@ -1026,6 +1030,10 @@ begin {$define default_target_set} default_target(system_aarch64_darwin); {$endif darwin} + {$ifdef android} + {$define default_target_set} + default_target(system_aarch64_android); + {$endif android} {$ifndef default_target_set} default_target(system_aarch64_linux); {$define default_target_set} diff --git a/compiler/systems/i_android.pas b/compiler/systems/i_android.pas index 50e4bc06ba..815cb2c2a9 100644 --- a/compiler/systems/i_android.pas +++ b/compiler/systems/i_android.pas @@ -161,6 +161,138 @@ unit i_android; llvmdatalayout : 'e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32-S128'; ); + system_aarch64_android_info : tsysteminfo = + ( + system : system_aarch64_android; + name : 'Android for AArch64'; + shortname : 'Android'; + flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive, + tf_requires_proper_alignment, tf_safecall_exceptions, + tf_pic_uses_got, tf_pic_default, + tf_smartlink_sections,tf_has_winlike_resources]; + cpu : cpu_aarch64; + unit_env : 'ANDROIDUNITS'; + 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'; + importlibprefix : 'libimp'; + importlibext : '.a'; + Cprefix : ''; + newline : #10; + dirsep : '/'; + assem : as_gas; + assemextern : as_gas; + link : ld_none; + linkextern : ld_android; + ar : ar_gnu_ar; + res : res_elf; + dbg : dbg_dwarf2; + script : script_unix; + endian : endian_little; + alignment : + ( + procalign : 8; + loopalign : 4; + jumpalign : 0; + constalignmin : 0; + constalignmax : 8; + varalignmin : 0; + varalignmax : 16; + localalignmin : 4; + localalignmax : 16; + recordalignmin : 0; + recordalignmax : 16; + maxCrecordalign : 16 + ); + first_parm_offset : 16; + stacksize : 8*1024*1024; + stackalign : 16; + abi : abi_default; + llvmdatalayout : 'e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-n32:64-S128' + ); + + system_x86_64_android_info : tsysteminfo = + ( + system : system_x86_64_android; + name : 'Android for x86-64'; + shortname : 'Android'; + flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive, + tf_needs_dwarf_cfi,tf_has_winlike_resources, + {tf_pic_uses_got,} tf_pic_default, tf_smartlink_sections, + tf_safecall_exceptions, tf_safecall_clearstack]; + cpu : cpu_x86_64; + unit_env : 'ANDROIDUNITS'; + 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'; + importlibprefix : 'libimp'; + importlibext : '.a'; + Cprefix : ''; + newline : #10; + dirsep : '/'; + assem : as_x86_64_elf64; + assemextern : as_gas; + link : ld_none; + linkextern : ld_android; + ar : ar_gnu_ar; + res : res_elf; + dbg : dbg_dwarf2; + script : script_unix; + endian : endian_little; + alignment : + ( + procalign : 16; + loopalign : 8; + jumpalign : 0; + constalignmin : 0; + constalignmax : 8; + varalignmin : 0; + varalignmax : 16; + localalignmin : 4; + localalignmax : 16; + recordalignmin : 0; + recordalignmax : 16; + maxCrecordalign : 16 + ); + first_parm_offset : 16; + stacksize : 8*1024*1024; + stackalign : 16; + abi : abi_default; + llvmdatalayout : 'e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128'; + ); + system_mipsel_android_info : tsysteminfo = ( system : system_mipsel_android; @@ -234,11 +366,21 @@ initialization set_source_info(system_i386_android_info); {$endif} {$endif CPUI386} +{$ifdef CPUX86_64} + {$ifdef android} + set_source_info(system_x86_64_android_info); + {$endif} +{$endif CPUX86_64} {$ifdef CPUARM} {$ifdef android} set_source_info(system_arm_android_info); {$endif android} {$endif CPUARM} +{$ifdef CPUAARCH64} + {$ifdef android} + set_source_info(system_aarch64_android_info); + {$endif android} +{$endif CPUAARCH64} {$ifdef CPUMIPSEL} {$ifdef android} set_source_info(system_mipsel_android_info); diff --git a/compiler/systems/t_android.pas b/compiler/systems/t_android.pas index d376ec51fb..052a1edc0f 100644 --- a/compiler/systems/t_android.pas +++ b/compiler/systems/t_android.pas @@ -168,14 +168,18 @@ begin with Info do begin { Specify correct max-page-size and common-page-size to prevent big gaps between sections in resulting executable } - s:='ld -z max-page-size=0x1000 -z common-page-size=0x1000 -z noexecstack -z now $OPT -L. -T $RES -o $EXE'; - ExeCmd[1]:=s + ' --entry=_fpc_start'; + s:='ld -z max-page-size=0x1000 -z common-page-size=0x1000 -z noexecstack -z now --build-id $OPT -L. -T $RES -o $EXE'; + ExeCmd[1]:=s + ' --entry=_start'; DllCmd[1]:=s + ' -shared -soname $SONAME'; DllCmd[2]:='strip --strip-unneeded $EXE'; ExtDbgCmd[1]:='objcopy --only-keep-debug $EXE $DBG'; ExtDbgCmd[2]:='objcopy --add-gnu-debuglink=$DBG $EXE'; ExtDbgCmd[3]:='strip --strip-unneeded $EXE'; +{$ifdef cpu64bitalu} + DynamicLinker:='/system/bin/linker64'; +{$else} DynamicLinker:='/system/bin/linker'; +{$endif cpu64bitalu} end; end; @@ -486,11 +490,21 @@ initialization RegisterExport(system_arm_android,texportlibandroid); RegisterTarget(system_arm_android_info); {$endif ARM} +{$ifdef AARCH64} + RegisterImport(system_aarch64_android,timportlibandroid); + RegisterExport(system_aarch64_android,texportlibandroid); + RegisterTarget(system_aarch64_android_info); +{$endif AARCH64} {$ifdef I386} RegisterImport(system_i386_android,timportlibandroid); RegisterExport(system_i386_android,texportlibandroid); RegisterTarget(system_i386_android_info); {$endif I386} +{$ifdef X86_64} + RegisterImport(system_x86_64_android,timportlibandroid); + RegisterExport(system_x86_64_android,texportlibandroid); + RegisterTarget(system_x86_64_android_info); +{$endif X86_64} {$ifdef MIPSEL} RegisterImport(system_mipsel_android,timportlibandroid); RegisterExport(system_mipsel_android,texportlibandroid); diff --git a/compiler/utils/ppuutils/ppudump.pp b/compiler/utils/ppuutils/ppudump.pp index 240e2bb871..f2e1740e91 100644 --- a/compiler/utils/ppuutils/ppudump.pp +++ b/compiler/utils/ppuutils/ppudump.pp @@ -181,7 +181,13 @@ const { 92 } 'WebAssembly-wasm', { 93 } 'Linux-sparc64', { 94 } 'Solaris-sparc64', - { 95 } 'NetBSD-arm' + { 95 } 'NetBSD-arm', + { 96 } 'Linux-RiscV32', + { 97 } 'Linux-RiscV64', + { 98 } 'Embedded-RiscV32', + { 99 } 'Embedded-RiscV64', + { 100 } 'Android-AArch64', + { 101 } 'Android-x86-64' ); const diff --git a/compiler/x86/agx86att.pas b/compiler/x86/agx86att.pas index d8914dd10d..6cb4403129 100644 --- a/compiler/x86/agx86att.pas +++ b/compiler/x86/agx86att.pas @@ -382,7 +382,8 @@ interface supported_targets : [system_x86_64_linux,system_x86_64_freebsd, system_x86_64_win64,system_x86_64_embedded, system_x86_64_openbsd,system_x86_64_netbsd, - system_x86_64_dragonfly,system_x86_64_aros]; + system_x86_64_dragonfly,system_x86_64_aros, + system_x86_64_android]; flags : [af_needar,af_smartlink_sections,af_supports_dwarf]; labelprefix : '.L'; comment : '# '; diff --git a/compiler/x86_64/cpuelf.pas b/compiler/x86_64/cpuelf.pas index a5e4a45fd9..7750c80cc8 100644 --- a/compiler/x86_64/cpuelf.pas +++ b/compiler/x86_64/cpuelf.pas @@ -677,7 +677,7 @@ implementation supported_targets : [system_x86_64_linux,system_x86_64_freebsd, system_x86_64_openbsd,system_x86_64_netbsd, system_x86_64_dragonfly,system_x86_64_solaris, - system_x86_64_aros]; + system_x86_64_aros,system_x86_64_android]; flags : [af_outputbinary,af_smartlink_sections,af_supports_dwarf]; labelprefix : '.L'; comment : ''; diff --git a/compiler/x86_64/cputarg.pas b/compiler/x86_64/cputarg.pas index 537f94f8f6..1963c3419a 100644 --- a/compiler/x86_64/cputarg.pas +++ b/compiler/x86_64/cputarg.pas @@ -57,6 +57,9 @@ implementation {$ifndef NOTARGETEMBEDDED} ,t_embed {$endif} + {$ifndef NOTARGETANDROID} + ,t_android + {$endif} {************************************** Assemblers diff --git a/packages/fcl-net/src/netdb.pp b/packages/fcl-net/src/netdb.pp index 4ba4279533..41d96fee0d 100644 --- a/packages/fcl-net/src/netdb.pp +++ b/packages/fcl-net/src/netdb.pp @@ -478,6 +478,17 @@ var s: string; H : THostAddr; begin + if SystemApiLevel >= 26 then + begin + // Since Android 8 the net.dnsX properties can't be read. + // Use Google Public DNS servers + Result:=2; + SetLength(DNSServers, Result); + DNSServers[0]:=StrToNetAddr('8.8.8.8'); + DNSServers[1]:=StrToNetAddr('8.8.4.4'); + exit; + end; + Result:=0; SetLength(DNSServers, 9); for i:=1 to 9 do @@ -504,6 +515,13 @@ var begin if not CheckResolveFileAge then exit; + + if (Length(DNSServers) = 0) and (SystemApiLevel >= 26) then + begin + GetDNSServers; + exit; + end; + n:=GetSystemProperty('net.change'); if n <> '' then v:=GetSystemProperty(PAnsiChar(n)) diff --git a/packages/fpmkunit/src/fpmkunit.pp b/packages/fpmkunit/src/fpmkunit.pp index 153ba3323f..2b103c56fc 100644 --- a/packages/fpmkunit/src/fpmkunit.pp +++ b/packages/fpmkunit/src/fpmkunit.pp @@ -218,7 +218,7 @@ Const { iphonesim}( false, true, false, false, false, true, false, false, false, false, false, false, false, false, false, false), { aix } ( false, false, false, true, false, false, false, true, false, false, false, false, false, false, false, false), { java } ( false, false, false, false, false, false, false, false, false, false, false, false, true , false, false, false), - { android } ( false, true, false, false, false, false, true, false, false, false, false, true, true , false, false, false), + { android } ( false, true, false, false, false, true, true, false, false, false, false, true, true , false, true, false), { nativent }( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false), { msdos } ( false, false, false, false, false, false, false, false, false, false, false, false, false, true , false, false), { wii } ( false, false, false, true , false, false, false, false, false, false, false, false, false, false, false, false), diff --git a/packages/rtl-extra/src/android/clocale.pp b/packages/rtl-extra/src/android/clocale.pp index 73254b91cd..05e4be4bf3 100644 --- a/packages/rtl-extra/src/android/clocale.pp +++ b/packages/rtl-extra/src/android/clocale.pp @@ -64,11 +64,12 @@ var unum_close: procedure (fmt: UNumberFormat); cdecl; unum_getSymbol: function (fmt: UNumberFormat; symbol: UNumberFormatSymbol; result: PUnicodeChar; resultLength: int32_t; var status: UErrorCode): int32_t; cdecl; -function GetIcuProc(const Name: AnsiString; out ProcPtr; libId: longint = 0): boolean; external name 'CWSTRING_GET_ICU_PROC'; + GetIcuProc: function (const Name: AnsiString; var ProcPtr; libId: longint): boolean; external name 'ANDROID_GET_ICU_PROC'; procedure InitIcuFunctions; begin if FunctionsInited then exit; + if not Assigned(GetIcuProc) then exit; if not GetIcuProc('udat_open', udat_open, 1) then exit; if not GetIcuProc('udat_close', udat_close, 1) then exit; if not GetIcuProc('udat_toPattern', udat_toPattern, 1) then exit; @@ -87,6 +88,9 @@ function GetCurrentLocaleStr: utf8string; var s: utf8string; begin + Result:=GetSystemProperty('persist.sys.locale'); + if Result <> '' then + exit; Result:=GetSystemProperty('persist.sys.language'); if Result = '' then exit; diff --git a/packages/rtl-extra/src/android/unixsock.inc b/packages/rtl-extra/src/android/unixsock.inc deleted file mode 100644 index efab8e0148..0000000000 --- a/packages/rtl-extra/src/android/unixsock.inc +++ /dev/null @@ -1,239 +0,0 @@ -{ - This file is part of the Free Pascal run time library. - (c) 2004 by Marco van de Voort - member of the Free Pascal development team. - - See the file COPYING.FPC, included in this distribution, - for details about the copyright. - - socket call implementations for Linux - - 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. -} - -{$if defined(cpu386)} - {$define NEED_SOCKETCALL} -{$endif} - -{****************************************************************************** - Basic Socket Functions -******************************************************************************} - -{$ifdef NEED_SOCKETCALL} - -Const - { - Arguments to the Linux Kernel system call for sockets. All - Socket Connected calls go through the same system call, - with an extra argument to determine what action to take. - } - Socket_Sys_SOCKET = 1; - Socket_Sys_BIND = 2; - Socket_Sys_CONNECT = 3; - Socket_Sys_LISTEN = 4; - Socket_Sys_ACCEPT = 5; - Socket_Sys_GETSOCKNAME = 6; - Socket_Sys_GETPEERNAME = 7; - Socket_Sys_SOCKETPAIR = 8; - Socket_Sys_SEND = 9; - Socket_Sys_RECV = 10; - Socket_Sys_SENDTO = 11; - Socket_Sys_RECVFROM = 12; - Socket_Sys_SHUTDOWN = 13; - Socket_Sys_SETSOCKOPT = 14; - Socket_Sys_GETSOCKOPT = 15; - Socket_Sys_SENDMSG = 16; - Socket_Sys_RECVMSG = 17; - - -Function SocketCall(SockCallNr,a1,a2,a3,a4,a5,a6:TSysParam):cint; inline; -var - Args:array[1..6] of TSysParam; -begin - args[1]:=a1; - args[2]:=a2; - args[3]:=a3; - args[4]:=a4; - args[5]:=a5; - args[6]:=a6; - SocketCall:=do_Syscall(syscall_nr_socketcall,sockcallnr,TSysParam(@args)); - internal_socketerror:=fpgeterrno; -end; - - -function SocketCall(SockCallNr,a1,a2,a3:TSysParam):cint;inline; -begin - SocketCall:=SocketCall(SockCallNr,a1,a2,a3,0,0,0); -end; - -function fpsocket (domain:cint; xtype:cint; protocol: cint):cint; -begin - fpSocket:=SocketCall(Socket_Sys_socket,Domain,xtype,Protocol); -end; - -function fpsend (s:cint; msg:pointer; len:size_t; flags:cint):ssize_t; -begin - fpSend:=SocketCall(Socket_Sys_sendto,S,TSysParam(msg),Len,Flags,0,0); -end; - -function fpsendto (s:cint; msg:pointer; len:size_t; flags:cint; tox :psockaddr; tolen: tsocklen):ssize_t; -begin - fpSendto:=SocketCall(Socket_Sys_sendto,S,TSysParam(msg),Len,Flags,TSysParam(tox),tolen); -end; - -function fprecv (s:cint; buf: pointer; len: size_t; flags:cint):ssize_t; -begin - fpRecv:=SocketCall(Socket_Sys_Recvfrom,S,tsysparam(buf),len,flags,0,0); -end; - -function fprecvfrom (s:cint; buf: pointer; len: size_t; flags: cint; from : psockaddr; fromlen : psocklen):ssize_t; -begin - fpRecvFrom:=SocketCall(Socket_Sys_Recvfrom,S,TSysParam(buf),len,flags,TSysParam(from),TSysParam(fromlen)); -end; - -function fpbind (s:cint; addrx : psockaddr; addrlen : tsocklen):cint; -begin - fpBind:=SocketCall(Socket_Sys_Bind,S,TSysParam(addrx),addrlen); -end; - -function fplisten (s:cint; backlog : cint):cint; -begin - fpListen:=SocketCall(Socket_Sys_Listen,S,backlog,0); -end; - -function fpaccept (s:cint; addrx : psockaddr; addrlen : psocklen):cint; -begin - fpAccept:=SocketCall(Socket_Sys_accept,S,TSysParam(addrx),TSysParam(addrlen)); -end; - -function fpconnect (s:cint; name : psockaddr; namelen : tsocklen):cint; -begin - fpConnect:=SocketCall(Socket_Sys_connect,S,TSysParam(name),namelen); -end; - -function fpshutdown (s:cint; how:cint):cint; -begin - fpShutDown:=SocketCall(Socket_Sys_shutdown,S,how,0); -end; - -function fpgetsockname (s:cint; name : psockaddr; namelen : psocklen):cint; -begin - fpGetSockName:=SocketCall(Socket_Sys_GetSockName,S,TSysParam(name),TSysParam(namelen)); -end; - -function fpgetpeername (s:cint; name : psockaddr; namelen : psocklen):cint; -begin - fpGetPeerName:=SocketCall(Socket_Sys_GetPeerName,S,TSysParam(name),TSysParam(namelen)); -end; - -function fpsetsockopt (s:cint; level:cint; optname:cint; optval:pointer; optlen : tsocklen):cint; -begin - fpSetSockOpt:=SocketCall(Socket_Sys_SetSockOpt,S,level,optname,TSysParam(optval),optlen,0); -end; - -function fpgetsockopt (s:cint; level:cint; optname:cint; optval:pointer; optlen : psocklen):cint; -begin - fpGetSockOpt:=SocketCall(Socket_Sys_GetSockOpt,S,level,TSysParam(optname),TSysParam(optval),TSysParam(optlen),0); -end; - -function fpsocketpair (d:cint; xtype:cint; protocol:cint; sv:pcint):cint; -begin - fpSocketPair:=SocketCall(Socket_Sys_SocketPair,d,xtype,protocol,TSysParam(sv),0,0); -end; - -{$else NEED_SOCKETCALL} - -function fpsocket (domain:cint; xtype:cint; protocol: cint):cint; -begin - fpSocket:=do_syscall(syscall_nr_socket,Domain,xtype,Protocol); - internal_socketerror:=fpgeterrno; -end; - -function fpsend (s:cint; msg:pointer; len:size_t; flags:cint):ssize_t; -begin - fpSend:=do_syscall(syscall_nr_sendto,S,TSysParam(msg),Len,Flags,0,0); - internal_socketerror:=fpgeterrno; -end; - -function fpsendto (s:cint; msg:pointer; len:size_t; flags:cint; tox :psockaddr; tolen: tsocklen):ssize_t; -begin - fpSendto:=do_syscall(syscall_nr_sendto,S,TSysParam(msg),Len,Flags,TSysParam(tox),tolen); - internal_socketerror:=fpgeterrno; -end; - -function fprecv (s:cint; buf: pointer; len: size_t; flags:cint):ssize_t; -begin - fpRecv:=do_syscall(syscall_nr_Recvfrom,S,tsysparam(buf),len,flags,0,0); - internal_socketerror:=fpgeterrno; -end; - -function fprecvfrom (s:cint; buf: pointer; len: size_t; flags: cint; from : psockaddr; fromlen : psocklen):ssize_t; -begin - fpRecvFrom:=do_syscall(syscall_nr_Recvfrom,S,TSysParam(buf),len,flags,TSysParam(from),TSysParam(fromlen)); - internal_socketerror:=fpgeterrno; -end; - -function fpbind (s:cint; addrx : psockaddr; addrlen : tsocklen):cint; -begin - fpBind:=do_syscall(syscall_nr_Bind,S,TSysParam(addrx),addrlen); - internal_socketerror:=fpgeterrno; -end; - -function fplisten (s:cint; backlog : cint):cint; -begin - fpListen:=do_syscall(syscall_nr_Listen,S,backlog); - internal_socketerror:=fpgeterrno; -end; - -function fpaccept (s:cint; addrx : psockaddr; addrlen : psocklen):cint; -begin - fpAccept:=do_syscall(syscall_nr_accept,S,TSysParam(addrx),TSysParam(addrlen)); - internal_socketerror:=fpgeterrno; -end; - -function fpconnect (s:cint; name : psockaddr; namelen : tsocklen):cint; -begin - fpConnect:=do_syscall(syscall_nr_connect,S,TSysParam(name),namelen); - internal_socketerror:=fpgeterrno; -end; - -function fpshutdown (s:cint; how:cint):cint; -begin - fpShutDown:=do_syscall(syscall_nr_shutdown,S,how); - internal_socketerror:=fpgeterrno; -end; - -function fpgetsockname (s:cint; name : psockaddr; namelen : psocklen):cint; -begin - fpGetSockName:=do_syscall(syscall_nr_GetSockName,S,TSysParam(name),TSysParam(namelen)); - internal_socketerror:=fpgeterrno; -end; - -function fpgetpeername (s:cint; name : psockaddr; namelen : psocklen):cint; -begin - fpGetPeerName:=do_syscall(syscall_nr_GetPeerName,S,TSysParam(name),TSysParam(namelen)); - internal_socketerror:=fpgeterrno; -end; - -function fpsetsockopt (s:cint; level:cint; optname:cint; optval:pointer; optlen : tsocklen):cint; -begin - fpSetSockOpt:=do_syscall(syscall_nr_SetSockOpt,S,level,optname,TSysParam(optval),optlen); - internal_socketerror:=fpgeterrno; -end; - -function fpgetsockopt (s:cint; level:cint; optname:cint; optval:pointer; optlen : psocklen):cint; -begin - fpGetSockOpt:=do_syscall(syscall_nr_GetSockOpt,S,level,TSysParam(optname),TSysParam(optval),TSysParam(optlen)); - internal_socketerror:=fpgeterrno; -end; - -function fpsocketpair (d:cint; xtype:cint; protocol:cint; sv:pcint):cint; -begin - fpSocketPair:=do_syscall(syscall_nr_SocketPair,d,xtype,protocol,TSysParam(sv)); - internal_socketerror:=fpgeterrno; -end; - -{$endif NEED_do_syscall} - diff --git a/packages/rtl-extra/src/android/unxsockh.inc b/packages/rtl-extra/src/android/unxsockh.inc index ccbad9a18d..9a0152b6f7 100644 --- a/packages/rtl-extra/src/android/unxsockh.inc +++ b/packages/rtl-extra/src/android/unxsockh.inc @@ -13,6 +13,10 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. } +{ Use libc for sockets since the "accept" syscall is blocked by SECCOMP, + but the "accept4" alternative is not available on old Android versions (2.3 and older). } +{$define FPC_USE_LIBC} + Const {* Supported address families. *} AF_UNSPEC = 0; diff --git a/rtl/Makefile.fpc b/rtl/Makefile.fpc index 7d0d66f44f..5255f733b6 100644 --- a/rtl/Makefile.fpc +++ b/rtl/Makefile.fpc @@ -39,7 +39,9 @@ dirs_wii=wii dirs_aix=aix dirs_java=java dirs_i386_android=android +dirs_x86_64_android=android dirs_arm_android=android +dirs_aarch64_android=android dirs_mipsel_android=android dirs_jvm_android=android/jvm dirs_msdos=msdos diff --git a/rtl/android/Makefile b/rtl/android/Makefile index 3353a6ddbc..1f965318e9 100644 --- a/rtl/android/Makefile +++ b/rtl/android/Makefile @@ -345,8 +345,11 @@ UNITPREFIX=rtl CPU_UNITS= SYSINIT_UNITS= LOADERS=prt0 dllprt0 +ifeq ($(findstring $(ARCH),i386 x86_64 arm),$(ARCH)) +CPU_UNITS=cpu +endif ifeq ($(ARCH),i386) -CPU_UNITS=cpu mmx +CPU_UNITS+=mmx endif SYSTEMUNIT=system ifdef RELEASE @@ -3634,10 +3637,15 @@ endif ifeq ($(ARCH),mipsel) ASTARGET=-mips32 -KPIC endif -prt0$(OEXT) : $(ARCH)/prt0.as - $(AS) $(ASTARGET) -o $(UNITTARGETDIRPREFIX)prt0$(OEXT) $(ARCH)/prt0.as -dllprt0$(OEXT) : $(ARCH)/dllprt0.as - $(AS) $(ASTARGET) -o $(UNITTARGETDIRPREFIX)dllprt0$(OEXT) $(ARCH)/dllprt0.as +ifneq ($(findstring $(ARCH),aarch64 x86_64),) + CPUBITS=64 +else + CPUBITS=32 +endif +prt0$(OEXT) : prt0.as + $(AS) $(ASTARGET) -o $(UNITTARGETDIRPREFIX)prt0$(OEXT) --defsym CPU$(CPUBITS)=1 prt0.as +dllprt0$(OEXT) : dllprt0.as + $(AS) $(ASTARGET) -o $(UNITTARGETDIRPREFIX)dllprt0$(OEXT) --defsym CPU$(CPUBITS)=1 dllprt0.as $(SYSTEMUNIT)$(PPUEXT) : $(LINUXINC)/$(SYSTEMUNIT).pp $(SYSDEPS) $(COMPILER) $(FPC_SYSTEM_OPT) -Us -Sg $(LINUXINC)/$(SYSTEMUNIT).pp uuchar$(PPUEXT): $(SYSTEMUNIT)$(PPUEXT) $(INC)/uuchar.pp diff --git a/rtl/android/Makefile.fpc b/rtl/android/Makefile.fpc index 33a735eddb..8e569ffac8 100644 --- a/rtl/android/Makefile.fpc +++ b/rtl/android/Makefile.fpc @@ -65,8 +65,11 @@ SYSINIT_UNITS= LOADERS=prt0 dllprt0 +ifeq ($(findstring $(ARCH),i386 x86_64 arm),$(ARCH)) +CPU_UNITS=cpu +endif ifeq ($(ARCH),i386) -CPU_UNITS=cpu mmx +CPU_UNITS+=mmx endif SYSTEMUNIT=system @@ -107,16 +110,21 @@ ifeq ($(ARCH),mipsel) ASTARGET=-mips32 -KPIC endif +ifneq ($(findstring $(ARCH),aarch64 x86_64),) + CPUBITS=64 +else + CPUBITS=32 +endif # # Loaders # -prt0$(OEXT) : $(ARCH)/prt0.as - $(AS) $(ASTARGET) -o $(UNITTARGETDIRPREFIX)prt0$(OEXT) $(ARCH)/prt0.as +prt0$(OEXT) : prt0.as + $(AS) $(ASTARGET) -o $(UNITTARGETDIRPREFIX)prt0$(OEXT) --defsym CPU$(CPUBITS)=1 prt0.as -dllprt0$(OEXT) : $(ARCH)/dllprt0.as - $(AS) $(ASTARGET) -o $(UNITTARGETDIRPREFIX)dllprt0$(OEXT) $(ARCH)/dllprt0.as +dllprt0$(OEXT) : dllprt0.as + $(AS) $(ASTARGET) -o $(UNITTARGETDIRPREFIX)dllprt0$(OEXT) --defsym CPU$(CPUBITS)=1 dllprt0.as # # $(SYSTEMUNIT) Units ($(SYSTEMUNIT), Objpas, Strings) diff --git a/rtl/android/aarch64/sysnr.inc b/rtl/android/aarch64/sysnr.inc new file mode 100644 index 0000000000..e0cf86aaf9 --- /dev/null +++ b/rtl/android/aarch64/sysnr.inc @@ -0,0 +1,247 @@ +// Available syscalls for arm64-android. +// This file is autogenerated by the genandroidsyscalls.py script. +// Script location: https://svn.freepascal.org/svn/fpcbuild/scripts/android + +const + syscall_nr_io_setup = 0; + syscall_nr_io_destroy = 1; + syscall_nr_io_submit = 2; + syscall_nr_io_cancel = 3; + syscall_nr_io_getevents = 4; + syscall_nr_setxattr = 5; + syscall_nr_lsetxattr = 6; + syscall_nr_fsetxattr = 7; + syscall_nr_getxattr = 8; + syscall_nr_lgetxattr = 9; + syscall_nr_fgetxattr = 10; + syscall_nr_listxattr = 11; + syscall_nr_llistxattr = 12; + syscall_nr_flistxattr = 13; + syscall_nr_removexattr = 14; + syscall_nr_lremovexattr = 15; + syscall_nr_fremovexattr = 16; + syscall_nr_getcwd = 17; + syscall_nr_eventfd2 = 19; + syscall_nr_eventfd = syscall_nr_eventfd2; + syscall_nr_epoll_create1 = 20; + syscall_nr_epoll_ctl = 21; + syscall_nr_epoll_pwait = 22; + syscall_nr_dup = 23; + syscall_nr_dup3 = 24; + syscall_nr_fcntl = 25; + syscall_nr_inotify_init1 = 26; + syscall_nr_inotify_add_watch = 27; + syscall_nr_inotify_rm_watch = 28; + syscall_nr_ioctl = 29; + syscall_nr_ioprio_set = 30; + syscall_nr_ioprio_get = 31; + syscall_nr_flock = 32; + syscall_nr_mknodat = 33; + syscall_nr_mkdirat = 34; + syscall_nr_unlinkat = 35; + syscall_nr_symlinkat = 36; + syscall_nr_linkat = 37; + syscall_nr_renameat = 38; + syscall_nr_pivot_root = 41; + syscall_nr_statfs = 43; + syscall_nr_fstatfs = 44; + syscall_nr_truncate = 45; + syscall_nr_ftruncate = 46; + syscall_nr_ftruncate64 = syscall_nr_ftruncate; + syscall_nr_fallocate = 47; + syscall_nr_fallocate64 = syscall_nr_fallocate; + syscall_nr_faccessat = 48; + syscall_nr_chdir = 49; + syscall_nr_fchdir = 50; + syscall_nr_fchmod = 52; + syscall_nr_fchmodat = 53; + syscall_nr_fchownat = 54; + syscall_nr_fchown = 55; + syscall_nr_openat = 56; + syscall_nr_close = 57; + syscall_nr_pipe2 = 59; + syscall_nr_quotactl = 60; + syscall_nr_getdents64 = 61; + syscall_nr_lseek = 62; + syscall_nr_read = 63; + syscall_nr_write = 64; + syscall_nr_readv = 65; + syscall_nr_writev = 66; + syscall_nr_pread64 = 67; + syscall_nr_pwrite64 = 68; + syscall_nr_preadv = 69; + syscall_nr_pwritev = 70; + syscall_nr_sendfile = 71; + syscall_nr_pselect6 = 72; + syscall_nr_ppoll = 73; + syscall_nr_signalfd4 = 74; + syscall_nr_vmsplice = 75; + syscall_nr_splice = 76; + syscall_nr_tee = 77; + syscall_nr_readlinkat = 78; + syscall_nr_newfstatat = 79; + syscall_nr_fstatat = syscall_nr_newfstatat; + syscall_nr_fstatat64 = syscall_nr_newfstatat; + syscall_nr_fstat = 80; + syscall_nr_fstat64 = syscall_nr_fstat; + syscall_nr_sync = 81; + syscall_nr_fsync = 82; + syscall_nr_fdatasync = 83; + syscall_nr_sync_file_range = 84; + syscall_nr_timerfd_create = 85; + syscall_nr_timerfd_settime = 86; + syscall_nr_timerfd_gettime = 87; + syscall_nr_utimensat = 88; + syscall_nr_capget = 90; + syscall_nr_capset = 91; + syscall_nr_personality = 92; + syscall_nr_exit = 93; + syscall_nr_exit_group = 94; + syscall_nr_waitid = 95; + syscall_nr_set_tid_address = 96; + syscall_nr_unshare = 97; + syscall_nr_futex = 98; + syscall_nr_nanosleep = 101; + syscall_nr_getitimer = 102; + syscall_nr_setitimer = 103; + syscall_nr_timer_create = 107; + syscall_nr_timer_gettime = 108; + syscall_nr_timer_getoverrun = 109; + syscall_nr_timer_settime = 110; + syscall_nr_timer_delete = 111; + syscall_nr_clock_gettime = 113; + syscall_nr_clock_getres = 114; + syscall_nr_clock_nanosleep = 115; + syscall_nr_ptrace = 117; + syscall_nr_sched_setparam = 118; + syscall_nr_sched_setscheduler = 119; + syscall_nr_sched_getscheduler = 120; + syscall_nr_sched_getparam = 121; + syscall_nr_sched_setaffinity = 122; + syscall_nr_sched_getaffinity = 123; + syscall_nr_sched_yield = 124; + syscall_nr_sched_get_priority_max = 125; + syscall_nr_sched_get_priority_min = 126; + syscall_nr_sched_rr_get_interval = 127; + syscall_nr_restart_syscall = 128; + syscall_nr_kill = 129; + syscall_nr_tkill = 130; + syscall_nr_tgkill = 131; + syscall_nr_sigaltstack = 132; + syscall_nr_rt_sigsuspend = 133; + syscall_nr_rt_sigaction = 134; + syscall_nr_rt_sigprocmask = 135; + syscall_nr_rt_sigpending = 136; + syscall_nr_rt_sigtimedwait = 137; + syscall_nr_rt_sigqueueinfo = 138; + syscall_nr_rt_sigreturn = 139; + syscall_nr_setpriority = 140; + syscall_nr_getpriority = 141; + syscall_nr_setregid = 143; + syscall_nr_setresuid = 147; + syscall_nr_getresuid = 148; + syscall_nr_getresgid = 150; + syscall_nr_times = 153; + syscall_nr_setpgid = 154; + syscall_nr_getpgid = 155; + syscall_nr_getsid = 156; + syscall_nr_setsid = 157; + syscall_nr_getgroups = 158; + syscall_nr_uname = 160; + syscall_nr_getrlimit = 163; + syscall_nr_setrlimit = 164; + syscall_nr_getrusage = 165; + syscall_nr_umask = 166; + syscall_nr_prctl = 167; + syscall_nr_getcpu = 168; + syscall_nr_gettimeofday = 169; + syscall_nr_getpid = 172; + syscall_nr_getppid = 173; + syscall_nr_getuid = 174; + syscall_nr_geteuid = 175; + syscall_nr_getgid = 176; + syscall_nr_getegid = 177; + syscall_nr_gettid = 178; + syscall_nr_sysinfo = 179; + syscall_nr_socket = 198; + syscall_nr_socketpair = 199; + syscall_nr_bind = 200; + syscall_nr_listen = 201; + syscall_nr_connect = 203; + syscall_nr_getsockname = 204; + syscall_nr_getpeername = 205; + syscall_nr_sendto = 206; + syscall_nr_recvfrom = 207; + syscall_nr_setsockopt = 208; + syscall_nr_getsockopt = 209; + syscall_nr_shutdown = 210; + syscall_nr_sendmsg = 211; + syscall_nr_recvmsg = 212; + syscall_nr_readahead = 213; + syscall_nr_brk = 214; + syscall_nr_munmap = 215; + syscall_nr_mremap = 216; + syscall_nr_clone = 220; + syscall_nr_execve = 221; + syscall_nr_mmap = 222; + syscall_nr_mmap64 = syscall_nr_mmap; + syscall_nr_fadvise64 = 223; + syscall_nr_mprotect = 226; + syscall_nr_msync = 227; + syscall_nr_mlock = 228; + syscall_nr_munlock = 229; + syscall_nr_mlockall = 230; + syscall_nr_munlockall = 231; + syscall_nr_mincore = 232; + syscall_nr_madvise = 233; + syscall_nr_rt_tgsigqueueinfo = 240; + syscall_nr_perf_event_open = 241; + syscall_nr_accept4 = 242; + syscall_nr_recvmmsg = 243; + syscall_nr_wait4 = 260; + syscall_nr_prlimit64 = 261; + syscall_nr_prlimit = syscall_nr_prlimit64; + syscall_nr_syncfs = 267; + syscall_nr_setns = 268; + syscall_nr_sendmmsg = 269; + syscall_nr_process_vm_readv = 270; + syscall_nr_process_vm_writev = 271; + syscall_nr_sched_setattr = 274; + syscall_nr_sched_getattr = 275; + syscall_nr_renameat2 = 276; + syscall_nr_seccomp = 277; + syscall_nr_getrandom = 278; + syscall_nr_memfd_create = 279; + syscall_nr_execveat = 281; + syscall_nr_mlock2 = 284; + syscall_nr_copy_file_range = 285; + syscall_nr_preadv2 = 286; + syscall_nr_pwritev2 = 287; + +// The following syscalls are blocked by SECCOMP starting from Android 8. +// Do not use them, unless you know what you are doing. +const + syscall_nr_umount2 = 39 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_mount = 40 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_chroot = 51 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_acct = 89 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_init_module = 105 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_delete_module = 106 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_clock_settime = 112 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_syslog = 116 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_klogctl = 116 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_reboot = 142 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setgid = 144 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setreuid = 145 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setuid = 146 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setresgid = 149 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setfsuid = 151 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setfsgid = 152 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setgroups = 159 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_sethostname = 161 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setdomainname = 162 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_settimeofday = 170 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_adjtimex = 171 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_swapon = 224 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_swapoff = 225 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_clock_adjtime = 266 deprecated 'This syscall is blocked on Android 8+'; diff --git a/rtl/android/arm/dllprt0.as b/rtl/android/arm/dllprt0.as deleted file mode 100644 index c87fc293fe..0000000000 --- a/rtl/android/arm/dllprt0.as +++ /dev/null @@ -1,98 +0,0 @@ -# -# This file is part of the Free Pascal run time library. -# Copyright (c) 2013 by Yury Sidorov and other -# 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. -# -#**********************************************************************} -# -# Shared library startup code for Free Pascal. Android-ARM target. -# - -.file "dllprt0.as" -.text - .globl FPC_SHARED_LIB_START - .type FPC_SHARED_LIB_START,#function -FPC_SHARED_LIB_START: - mov ip, sp - stmfd sp!,{fp, ip, lr, pc} - sub fp, ip, #4 - - /* Get GOT */ - ldr r3,.L_GOT1 -.LPIC1: - add r3,pc,r3 - - /* Save initial stackpointer */ - ldr ip,.L__stkptr - ldr ip,[r3, ip] - str sp,[ip] - - /* Get environment info from libc */ - ldr ip,.Lenviron - ldr ip,[r3, ip] - ldr r0,[ip] - /* Check if environment is NULL */ - cmp r0,#0 - ldreq r0,.LEmptyEnv - ldreq r0,[r3, r0] - ldr ip,.Loperatingsystem_parameter_envp - ldr ip,[r3, ip] - str r0,[ip] - - /* Call main */ - bl FPC_LIB_MAIN_ANDROID - /* Call library init */ - bl FPC_LIB_INIT_ANDROID - - ldmea fp, {fp, sp, pc} - -.L_GOT1: - .long _GLOBAL_OFFSET_TABLE_-.LPIC1-8 -.L__stkptr: - .word __stkptr(GOT) -.Lenviron: - .word environ(GOT) -.LEmptyEnv: - .word EmptyEnv(GOT) -.Loperatingsystem_parameter_envp: - .word operatingsystem_parameter_envp(GOT) - -/* --------------------------------------------------------- */ - .globl _haltproc - .type _haltproc,#function -_haltproc: - .globl _haltproc_eabi - .type _haltproc_eabi,#function -_haltproc_eabi: - /* Simply call libc exit(). _haltproc has the same declaration as exit. */ - bl exit - -/* --------------------------------------------------------- */ -.data - .comm __stkptr,4 - .comm operatingsystem_parameter_envp,4 -operatingsystem_parameter_argc: - .global operatingsystem_parameter_argc - .long 1 -operatingsystem_parameter_argv: - .global operatingsystem_parameter_argv - .long EmptyCmdLine -EmptyCmdLine: - .long EmptyCmdStr -EmptyCmdStr: - .ascii "\0" -EmptyEnv: - .long 0 - .long 0 - .long 0 - -/* --------------------------------------------------------- */ - .section .init_array, "aw" - .long FPC_SHARED_LIB_START diff --git a/rtl/android/arm/prt0.as b/rtl/android/arm/prt0.as deleted file mode 100644 index 9cd82b2a64..0000000000 --- a/rtl/android/arm/prt0.as +++ /dev/null @@ -1,110 +0,0 @@ -# -# This file is part of the Free Pascal run time library. -# Copyright (c) 2013 by Yury Sidorov and other -# 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. -# -#**********************************************************************} -# -# Program startup code for Free Pascal. Android-ARM target. -# - -/* At this entry point, most registers' values are unspecified, except: - - sp The stack contains the arguments and environment: - 0(sp) argc - 4(sp) argv[0] - ... - (4*argc)(sp) NULL - (4*(argc+1))(sp) envp[0] - ... - NULL -*/ - -/* - In our entry point we should save pointers to cmd line arguments - and environment vars, then pass control to libc startup code. - It will call "PASCALMAIN" via alias "main". -*/ - -.text - .globl _fpc_start - .type _fpc_start,#function -_fpc_start: - /* Get GOT */ - ldr r3,.L_GOT1 -.LPIC1: - add r3,pc,r3 - - /* Clear the frame pointer since this is the outermost frame. */ - mov fp, #0 - /* Save initial stackpointer */ - ldr ip,.L__stkptr - ldr ip,[r3, ip] - str sp,[ip] - mov r0,sp - /* Pop argc off the stack and save a pointer to argv */ - ldmia r0!, {r1} - ldr ip,.Loperatingsystem_parameter_argc - ldr ip,[r3, ip] - str r1,[ip] - ldr ip,.Loperatingsystem_parameter_argv - ldr ip,[r3, ip] - str r0,[ip] - - /* calc envp */ - add r1,r1,#1 - add r1,r0,r1,LSL #2 - ldr ip,.Loperatingsystem_parameter_envp - ldr ip,[r3, ip] - str r1,[ip] - - /* Finally go to libc startup code. It will call "PASCALMAIN" via alias "main" */ - ldr ip,.L_start - ldr ip,[r3, ip] - bx ip - -.L_GOT1: - .long _GLOBAL_OFFSET_TABLE_-.LPIC1-8 -.L__stkptr: - .word __stkptr(GOT) -.L_start: - .word _start(GOT) -.Loperatingsystem_parameter_argc: - .word operatingsystem_parameter_argc(GOT) -.Loperatingsystem_parameter_argv: - .word operatingsystem_parameter_argv(GOT) -.Loperatingsystem_parameter_envp: - .word operatingsystem_parameter_envp(GOT) - -/* --------------------------------------------------------- */ - .globl _haltproc - .type _haltproc,#function -_haltproc: - .globl _haltproc_eabi - .type _haltproc_eabi,#function -_haltproc_eabi: - /* Simply call libc exit(). _haltproc has the same declaration as exit. */ - bl exit - -/* --------------------------------------------------------- */ -.data -/* Define a symbol for the first piece of initialized data. */ - .globl __data_start -__data_start: - .long 0 - .weak data_start - data_start = __data_start - -/* --------------------------------------------------------- */ -.bss - .comm __stkptr,4 - .comm operatingsystem_parameter_envp,4 - .comm operatingsystem_parameter_argc,4 - .comm operatingsystem_parameter_argv,4 diff --git a/rtl/android/arm/sysnr.inc b/rtl/android/arm/sysnr.inc index df25fa3959..60ab6b5660 100644 --- a/rtl/android/arm/sysnr.inc +++ b/rtl/android/arm/sysnr.inc @@ -1,217 +1,286 @@ -{ - This file is part of the Free Pascal run time library. - Copyright (c) 2017 by Yuriy Sydorov, - member of the Free Pascal development team. - - Syscall nrs for arm-android - - 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. - - **********************************************************************} +// Available syscalls for arm-android. +// This file is autogenerated by the genandroidsyscalls.py script. +// Script location: https://svn.freepascal.org/svn/fpcbuild/scripts/android const - __NR_SYSCALL_BASE = 0; + syscall_nr_restart_syscall = 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_creat = 8; + syscall_nr_unlink = 10; + syscall_nr_execve = 11; + syscall_nr_chdir = 12; + syscall_nr_lseek = 19; + syscall_nr_getpid = 20; + syscall_nr_getuid = 24; + syscall_nr_ptrace = 26; + syscall_nr_access = 33; + syscall_nr_sync = 36; + syscall_nr_kill = 37; + syscall_nr_rename = 38; + syscall_nr_mkdir = 39; + syscall_nr_dup = 41; + syscall_nr_pipe = 42; + syscall_nr_times = 43; + syscall_nr_brk = 45; + syscall_nr_ioctl = 54; + syscall_nr_fcntl = 55; + syscall_nr_setpgid = 57; + syscall_nr_umask = 60; + syscall_nr_dup2 = 63; + syscall_nr_getppid = 64; + syscall_nr_setsid = 66; + syscall_nr_sigaction = 67; + syscall_nr_setrlimit = 75; + syscall_nr_getrusage = 77; + syscall_nr_gettimeofday = 78; + syscall_nr_readlink = 85; + syscall_nr_munmap = 91; + syscall_nr_truncate = 92; + syscall_nr_fchmod = 94; + syscall_nr_getpriority = 96; + syscall_nr_setpriority = 97; + syscall_nr_setitimer = 104; + syscall_nr_getitimer = 105; + syscall_nr_wait4 = 114; + syscall_nr_sysinfo = 116; + syscall_nr_fsync = 118; + syscall_nr_sigreturn = 119; + syscall_nr_clone = 120; + syscall_nr_uname = 122; + syscall_nr_mprotect = 125; + syscall_nr_quotactl = 131; + syscall_nr_getpgid = 132; + syscall_nr_fchdir = 133; + syscall_nr_personality = 136; + syscall_nr__llseek = 140; + syscall_nr_getdents = 141; + syscall_nr__newselect = 142; + syscall_nr_flock = 143; + syscall_nr_msync = 144; + syscall_nr_readv = 145; + syscall_nr_writev = 146; + syscall_nr_getsid = 147; + syscall_nr_fdatasync = 148; + 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_poll = 168; + syscall_nr_prctl = 172; + syscall_nr_rt_sigreturn = 173; + syscall_nr_rt_sigaction = 174; + syscall_nr_rt_sigprocmask = 175; + syscall_nr_rt_sigpending = 176; + syscall_nr_rt_sigtimedwait = 177; + syscall_nr_rt_sigqueueinfo = 178; + syscall_nr_rt_sigsuspend = 179; + syscall_nr_pread64 = 180; + syscall_nr_pwrite64 = 181; + syscall_nr_getcwd = 183; + syscall_nr_capget = 184; + syscall_nr_capset = 185; + syscall_nr_sigaltstack = 186; + syscall_nr_sendfile = 187; + syscall_nr_vfork = 190; + syscall_nr_ugetrlimit = 191; + syscall_nr_getrlimit = syscall_nr_ugetrlimit; + syscall_nr_mmap2 = 192; + syscall_nr_truncate64 = 193; + syscall_nr_ftruncate64 = 194; + syscall_nr_stat64 = 195; + syscall_nr_lstat64 = 196; + syscall_nr_fstat64 = 197; + syscall_nr_fstat = syscall_nr_fstat64; + syscall_nr_getuid32 = 199; + syscall_nr_getgid32 = 200; + syscall_nr_getgid = syscall_nr_getgid32; + syscall_nr_geteuid32 = 201; + syscall_nr_geteuid = syscall_nr_geteuid32; + syscall_nr_getegid32 = 202; + syscall_nr_getegid = syscall_nr_getegid32; + syscall_nr_setregid32 = 204; + syscall_nr_setregid = syscall_nr_setregid32; + syscall_nr_getgroups32 = 205; + syscall_nr_getgroups = syscall_nr_getgroups32; + syscall_nr_fchown32 = 207; + syscall_nr_fchown = syscall_nr_fchown32; + syscall_nr_setresuid32 = 208; + syscall_nr_setresuid = syscall_nr_setresuid32; + syscall_nr_getresuid32 = 209; + syscall_nr_getresuid = syscall_nr_getresuid32; + syscall_nr_getresgid32 = 211; + syscall_nr_getresgid = syscall_nr_getresgid32; + syscall_nr_getdents64 = 217; + syscall_nr_mincore = 219; + syscall_nr_madvise = 220; + syscall_nr_fcntl64 = 221; + syscall_nr_gettid = 224; + syscall_nr_readahead = 225; + syscall_nr_setxattr = 226; + syscall_nr_lsetxattr = 227; + syscall_nr_fsetxattr = 228; + syscall_nr_getxattr = 229; + syscall_nr_lgetxattr = 230; + syscall_nr_fgetxattr = 231; + syscall_nr_listxattr = 232; + syscall_nr_llistxattr = 233; + syscall_nr_flistxattr = 234; + syscall_nr_removexattr = 235; + syscall_nr_lremovexattr = 236; + syscall_nr_fremovexattr = 237; + syscall_nr_tkill = 238; + syscall_nr_sendfile64 = 239; + syscall_nr_futex = 240; + syscall_nr_sched_setaffinity = 241; + syscall_nr_sched_getaffinity = 242; + syscall_nr_io_setup = 243; + syscall_nr_io_destroy = 244; + syscall_nr_io_getevents = 245; + syscall_nr_io_submit = 246; + syscall_nr_io_cancel = 247; + syscall_nr_exit_group = 248; + syscall_nr_epoll_create = 250; + syscall_nr_epoll_ctl = 251; + syscall_nr_epoll_wait = 252; + syscall_nr_remap_file_pages = 253; + syscall_nr_set_tid_address = 256; + syscall_nr_timer_create = 257; + syscall_nr_timer_settime = 258; + syscall_nr_timer_gettime = 259; + syscall_nr_timer_getoverrun = 260; + syscall_nr_timer_delete = 261; + syscall_nr_clock_gettime = 263; + syscall_nr_clock_getres = 264; + syscall_nr_clock_nanosleep = 265; + syscall_nr_statfs64 = 266; + syscall_nr_fstatfs64 = 267; + syscall_nr_tgkill = 268; + syscall_nr_arm_fadvise64_64 = 270; + syscall_nr_waitid = 280; + syscall_nr_socket = 281; + syscall_nr_bind = 282; + syscall_nr_connect = 283; + syscall_nr_listen = 284; + syscall_nr_getsockname = 286; + syscall_nr_getpeername = 287; + syscall_nr_socketpair = 288; + syscall_nr_sendto = 290; + syscall_nr_recvfrom = 292; + syscall_nr_shutdown = 293; + syscall_nr_setsockopt = 294; + syscall_nr_getsockopt = 295; + syscall_nr_sendmsg = 296; + syscall_nr_recvmsg = 297; + syscall_nr_inotify_init = 316; + syscall_nr_inotify_add_watch = 317; + syscall_nr_inotify_rm_watch = 318; + syscall_nr_openat = 322; + syscall_nr_mkdirat = 323; + syscall_nr_mknodat = 324; + syscall_nr_fchownat = 325; + syscall_nr_fstatat64 = 327; + syscall_nr_fstatat = syscall_nr_fstatat64; + syscall_nr_unlinkat = 328; + syscall_nr_renameat = 329; + syscall_nr_linkat = 330; + syscall_nr_symlinkat = 331; + syscall_nr_readlinkat = 332; + syscall_nr_fchmodat = 333; + syscall_nr_faccessat = 334; + syscall_nr_pselect6 = 335; + syscall_nr_ppoll = 336; + syscall_nr_unshare = 337; + syscall_nr_splice = 340; + syscall_nr_sync_file_range2 = 341; + syscall_nr_tee = 342; + syscall_nr_vmsplice = 343; + syscall_nr_getcpu = 345; + syscall_nr_epoll_pwait = 346; + syscall_nr_utimensat = 348; + syscall_nr_timerfd_create = 350; + syscall_nr_eventfd = 351; + syscall_nr_fallocate = 352; + syscall_nr_fallocate64 = syscall_nr_fallocate; + syscall_nr_timerfd_settime = 353; + syscall_nr_timerfd_gettime = 354; + syscall_nr_signalfd4 = 355; + syscall_nr_eventfd2 = 356; + syscall_nr_epoll_create1 = 357; + syscall_nr_dup3 = 358; + syscall_nr_pipe2 = 359; + syscall_nr_inotify_init1 = 360; + syscall_nr_preadv = 361; + syscall_nr_pwritev = 362; + syscall_nr_rt_tgsigqueueinfo = 363; + syscall_nr_perf_event_open = 364; + syscall_nr_recvmmsg = 365; + syscall_nr_accept4 = 366; + syscall_nr_prlimit64 = 369; + syscall_nr_prlimit = syscall_nr_prlimit64; + syscall_nr_syncfs = 373; + syscall_nr_sendmmsg = 374; + syscall_nr_setns = 375; + syscall_nr_process_vm_readv = 376; + syscall_nr_process_vm_writev = 377; + syscall_nr_sched_setattr = 380; + syscall_nr_sched_getattr = 381; + syscall_nr_renameat2 = 382; + syscall_nr_seccomp = 383; + syscall_nr_getrandom = 384; + syscall_nr_memfd_create = 385; + syscall_nr_execveat = 387; + syscall_nr_mlock2 = 390; + syscall_nr_copy_file_range = 391; + syscall_nr_preadv2 = 392; + syscall_nr_pwritev2 = 393; + syscall_nr___ARM_NR_cacheflush = 983042; + syscall_nr_cacheflush = syscall_nr___ARM_NR_cacheflush; + syscall_nr___ARM_NR_set_tls = 983045; -syscall_nr_exit = (__NR_SYSCALL_BASE + 1); -syscall_nr_fork = (__NR_SYSCALL_BASE + 2); -syscall_nr_read = (__NR_SYSCALL_BASE + 3); -syscall_nr_write = (__NR_SYSCALL_BASE + 4); -syscall_nr_open = (__NR_SYSCALL_BASE + 5); -syscall_nr_close = (__NR_SYSCALL_BASE + 6); -syscall_nr_link = (__NR_SYSCALL_BASE + 9); -syscall_nr_unlink = (__NR_SYSCALL_BASE + 10); -syscall_nr_execve = (__NR_SYSCALL_BASE + 11); -syscall_nr_chdir = (__NR_SYSCALL_BASE + 12); -syscall_nr_mknod = (__NR_SYSCALL_BASE + 14); -syscall_nr_chmod = (__NR_SYSCALL_BASE + 15); -syscall_nr_lseek = (__NR_SYSCALL_BASE + 19); -syscall_nr_getpid = (__NR_SYSCALL_BASE + 20); -syscall_nr_mount = (__NR_SYSCALL_BASE + 21); -syscall_nr_ptrace = (__NR_SYSCALL_BASE + 26); -syscall_nr_pause = (__NR_SYSCALL_BASE + 29); -syscall_nr_access = (__NR_SYSCALL_BASE + 33); -syscall_nr_sync = (__NR_SYSCALL_BASE + 36); -syscall_nr_rename = (__NR_SYSCALL_BASE + 38); -syscall_nr_mkdir = (__NR_SYSCALL_BASE + 39); -syscall_nr_rmdir = (__NR_SYSCALL_BASE + 40); -syscall_nr_dup = (__NR_SYSCALL_BASE + 41); -syscall_nr_times = (__NR_SYSCALL_BASE + 43); -syscall_nr_brk = (__NR_SYSCALL_BASE + 45); -syscall_nr_acct = (__NR_SYSCALL_BASE + 51); -syscall_nr_umount2 = (__NR_SYSCALL_BASE + 52); -syscall_nr_ioctl = (__NR_SYSCALL_BASE + 54); -syscall_nr_fcntl = (__NR_SYSCALL_BASE + 55); -syscall_nr_setpgid = (__NR_SYSCALL_BASE + 57); -syscall_nr_umask = (__NR_SYSCALL_BASE + 60); -syscall_nr_chroot = (__NR_SYSCALL_BASE + 61); -syscall_nr_dup2 = (__NR_SYSCALL_BASE + 63); -syscall_nr_getppid = (__NR_SYSCALL_BASE + 64); -syscall_nr_setsid = (__NR_SYSCALL_BASE + 66); -syscall_nr_sigaction = (__NR_SYSCALL_BASE + 67); -syscall_nr_sigpending = (__NR_SYSCALL_BASE + 73); -syscall_nr_setrlimit = (__NR_SYSCALL_BASE + 75); -syscall_nr_getrusage = (__NR_SYSCALL_BASE + 77); -syscall_nr_gettimeofday = (__NR_SYSCALL_BASE + 78); -syscall_nr_settimeofday = (__NR_SYSCALL_BASE + 79); -syscall_nr_symlink = (__NR_SYSCALL_BASE + 83); -syscall_nr_readlink = (__NR_SYSCALL_BASE + 85); -syscall_nr_reboot = (__NR_SYSCALL_BASE + 88); -syscall_nr_munmap = (__NR_SYSCALL_BASE + 91); -syscall_nr_truncate = (__NR_SYSCALL_BASE + 92); -syscall_nr_ftruncate = (__NR_SYSCALL_BASE + 93); -syscall_nr_fchmod = (__NR_SYSCALL_BASE + 94); -syscall_nr_getpriority = (__NR_SYSCALL_BASE + 96); -syscall_nr_setpriority = (__NR_SYSCALL_BASE + 97); -syscall_nr_syslog = (__NR_SYSCALL_BASE + 103); -syscall_nr_setitimer = (__NR_SYSCALL_BASE + 104); -syscall_nr_getitimer = (__NR_SYSCALL_BASE + 105); -syscall_nr_wait4 = (__NR_SYSCALL_BASE + 114); -syscall_nr_sysinfo = (__NR_SYSCALL_BASE + 116); -syscall_nr_fsync = (__NR_SYSCALL_BASE + 118); -syscall_nr_clone = (__NR_SYSCALL_BASE + 120); -syscall_nr_uname = (__NR_SYSCALL_BASE + 122); -syscall_nr_mprotect = (__NR_SYSCALL_BASE + 125); -syscall_nr_sigprocmask = (__NR_SYSCALL_BASE + 126); -syscall_nr_init_module = (__NR_SYSCALL_BASE + 128); -syscall_nr_delete_module = (__NR_SYSCALL_BASE + 129); -syscall_nr_getpgid = (__NR_SYSCALL_BASE + 132); -syscall_nr_fchdir = (__NR_SYSCALL_BASE + 133); -syscall_nr_personality = (__NR_SYSCALL_BASE + 136); -syscall_nr__llseek = (__NR_SYSCALL_BASE + 140); -syscall_nr__newselect = (__NR_SYSCALL_BASE + 142); -syscall_nr_flock = (__NR_SYSCALL_BASE + 143); -syscall_nr_msync = (__NR_SYSCALL_BASE + 144); -syscall_nr_readv = (__NR_SYSCALL_BASE + 145); -syscall_nr_writev = (__NR_SYSCALL_BASE + 146); -syscall_nr_perf_event_open = (__NR_SYSCALL_BASE + 364); - -syscall_nr_kill = (__NR_SYSCALL_BASE + 37); -syscall_nr_exit_group = (__NR_SYSCALL_BASE + 248); -syscall_nr_waitid = (__NR_SYSCALL_BASE + 280); -syscall_nr_setuid32 = (__NR_SYSCALL_BASE + 213); -syscall_nr_getuid32 = (__NR_SYSCALL_BASE + 199); -syscall_nr_getgid32 = (__NR_SYSCALL_BASE + 200); -syscall_nr_geteuid32 = (__NR_SYSCALL_BASE + 201); -syscall_nr_getegid32 = (__NR_SYSCALL_BASE + 202); -syscall_nr_getresuid32 = (__NR_SYSCALL_BASE + 209); -syscall_nr_getresgid32 = (__NR_SYSCALL_BASE + 211); -syscall_nr_gettid = (__NR_SYSCALL_BASE + 224); -syscall_nr_readahead = (__NR_SYSCALL_BASE + 225); -syscall_nr_getgroups32 = (__NR_SYSCALL_BASE + 205); -syscall_nr_setgid32 = (__NR_SYSCALL_BASE + 214); -syscall_nr_setreuid32 = (__NR_SYSCALL_BASE + 203); -syscall_nr_setresuid32 = (__NR_SYSCALL_BASE + 208); -syscall_nr_setresgid32 = (__NR_SYSCALL_BASE + 210); -syscall_nr_ugetrlimit = (__NR_SYSCALL_BASE + 191); -syscall_nr_setgroups32 = (__NR_SYSCALL_BASE + 206); -syscall_nr_vfork = (__NR_SYSCALL_BASE + 190); -syscall_nr_setregid32 = (__NR_SYSCALL_BASE + 204); -syscall_nr_prctl = (__NR_SYSCALL_BASE + 172); -syscall_nr_capget = (__NR_SYSCALL_BASE + 184); -syscall_nr_capset = (__NR_SYSCALL_BASE + 185); -syscall_nr_sigaltstack = (__NR_SYSCALL_BASE + 186); -syscall_nr_pread64 = (__NR_SYSCALL_BASE + 180); -syscall_nr_pwrite64 = (__NR_SYSCALL_BASE + 181); -syscall_nr_openat = (__NR_SYSCALL_BASE + 322); -syscall_nr_mmap2 = (__NR_SYSCALL_BASE + 192); -syscall_nr_mremap = (__NR_SYSCALL_BASE + 163); -syscall_nr_madvise = (__NR_SYSCALL_BASE + 220); -syscall_nr_mlock = (__NR_SYSCALL_BASE + 150); -syscall_nr_munlock = (__NR_SYSCALL_BASE + 151); -syscall_nr_mincore = (__NR_SYSCALL_BASE + 219); -syscall_nr_pipe = (__NR_SYSCALL_BASE + 42); -syscall_nr_pipe2 = (__NR_SYSCALL_BASE + 359); -syscall_nr_ftruncate64 = (__NR_SYSCALL_BASE + 194); -syscall_nr_getdents64 = (__NR_SYSCALL_BASE + 217); -syscall_nr_fdatasync = (__NR_SYSCALL_BASE + 148); -syscall_nr_fchown32 = (__NR_SYSCALL_BASE + 207); -syscall_nr_fcntl64 = (__NR_SYSCALL_BASE + 221); -syscall_nr_fstatfs64 = (__NR_SYSCALL_BASE + 267); -syscall_nr_sendfile = (__NR_SYSCALL_BASE + 187); -syscall_nr_fstatat64 = (__NR_SYSCALL_BASE + 327); -syscall_nr_mkdirat = (__NR_SYSCALL_BASE + 323); -syscall_nr_fchownat = (__NR_SYSCALL_BASE + 325); -syscall_nr_fchmodat = (__NR_SYSCALL_BASE + 333); -syscall_nr_renameat = (__NR_SYSCALL_BASE + 329); -syscall_nr_fsetxattr = (__NR_SYSCALL_BASE + 228); -syscall_nr_fgetxattr = (__NR_SYSCALL_BASE + 231); -syscall_nr_flistxattr = (__NR_SYSCALL_BASE + 234); -syscall_nr_fremovexattr = (__NR_SYSCALL_BASE + 237); -syscall_nr_unlinkat = (__NR_SYSCALL_BASE + 328); -syscall_nr_chown32 = (__NR_SYSCALL_BASE + 212); -syscall_nr_lchown32 = (__NR_SYSCALL_BASE + 198); -syscall_nr_fstat64 = (__NR_SYSCALL_BASE + 197); -syscall_nr_stat64 = (__NR_SYSCALL_BASE + 195); -syscall_nr_lstat64 = (__NR_SYSCALL_BASE + 196); -syscall_nr_getcwd = (__NR_SYSCALL_BASE + 183); -syscall_nr_faccessat = (__NR_SYSCALL_BASE + 334); -syscall_nr_setxattr = (__NR_SYSCALL_BASE + 226); -syscall_nr_lsetxattr = (__NR_SYSCALL_BASE + 227); -syscall_nr_getxattr = (__NR_SYSCALL_BASE + 229); -syscall_nr_lgetxattr = (__NR_SYSCALL_BASE + 230); -syscall_nr_listxattr = (__NR_SYSCALL_BASE + 232); -syscall_nr_llistxattr = (__NR_SYSCALL_BASE + 233); -syscall_nr_removexattr = (__NR_SYSCALL_BASE + 235); -syscall_nr_lremovexattr = (__NR_SYSCALL_BASE + 236); -syscall_nr_statfs64 = (__NR_SYSCALL_BASE + 266); -syscall_nr_unshare = (__NR_SYSCALL_BASE + 337); -syscall_nr_nanosleep = (__NR_SYSCALL_BASE + 162); -syscall_nr_clock_gettime = (__NR_SYSCALL_BASE + 263); -syscall_nr_clock_settime = (__NR_SYSCALL_BASE + 262); -syscall_nr_clock_getres = (__NR_SYSCALL_BASE + 264); -syscall_nr_clock_nanosleep = (__NR_SYSCALL_BASE + 265); -syscall_nr_timer_create = (__NR_SYSCALL_BASE + 257); -syscall_nr_timer_settime = (__NR_SYSCALL_BASE + 258); -syscall_nr_timer_gettime = (__NR_SYSCALL_BASE + 259); -syscall_nr_timer_getoverrun = (__NR_SYSCALL_BASE + 260); -syscall_nr_timer_delete = (__NR_SYSCALL_BASE + 261); -syscall_nr_utimes = (__NR_SYSCALL_BASE + 269); -syscall_nr_utimensat = (__NR_SYSCALL_BASE + 348); -syscall_nr_sigsuspend = (__NR_SYSCALL_BASE + 72); -syscall_nr_rt_sigaction = (__NR_SYSCALL_BASE + 174); -syscall_nr_rt_sigprocmask = (__NR_SYSCALL_BASE + 175); -syscall_nr_rt_sigtimedwait = (__NR_SYSCALL_BASE + 177); -syscall_nr_socket = (__NR_SYSCALL_BASE + 281); -syscall_nr_socketpair = (__NR_SYSCALL_BASE + 288); -syscall_nr_bind = (__NR_SYSCALL_BASE + 282); -syscall_nr_connect = (__NR_SYSCALL_BASE + 283); -syscall_nr_listen = (__NR_SYSCALL_BASE + 284); -syscall_nr_accept = (__NR_SYSCALL_BASE + 285); -syscall_nr_getsockname = (__NR_SYSCALL_BASE + 286); -syscall_nr_getpeername = (__NR_SYSCALL_BASE + 287); -syscall_nr_sendto = (__NR_SYSCALL_BASE + 290); -syscall_nr_recvfrom = (__NR_SYSCALL_BASE + 292); -syscall_nr_shutdown = (__NR_SYSCALL_BASE + 293); -syscall_nr_setsockopt = (__NR_SYSCALL_BASE + 294); -syscall_nr_getsockopt = (__NR_SYSCALL_BASE + 295); -syscall_nr_sendmsg = (__NR_SYSCALL_BASE + 296); -syscall_nr_recvmsg = (__NR_SYSCALL_BASE + 297); -syscall_nr_sched_setscheduler = (__NR_SYSCALL_BASE + 156); -syscall_nr_sched_getscheduler = (__NR_SYSCALL_BASE + 157); -syscall_nr_sched_yield = (__NR_SYSCALL_BASE + 158); -syscall_nr_sched_setparam = (__NR_SYSCALL_BASE + 154); -syscall_nr_sched_getparam = (__NR_SYSCALL_BASE + 155); -syscall_nr_sched_get_priority_max = (__NR_SYSCALL_BASE + 159); -syscall_nr_sched_get_priority_min = (__NR_SYSCALL_BASE + 160); -syscall_nr_sched_rr_get_interval = (__NR_SYSCALL_BASE + 161); -syscall_nr_sched_setaffinity = (__NR_SYSCALL_BASE + 241); -syscall_nr_sched_getaffinity = (__NR_SYSCALL_BASE + 242); -syscall_nr_getcpu = (__NR_SYSCALL_BASE + 345); -syscall_nr_ioprio_set = (__NR_SYSCALL_BASE + 314); -syscall_nr_ioprio_get = (__NR_SYSCALL_BASE + 315); -syscall_nr_futex = (__NR_SYSCALL_BASE + 240); -syscall_nr_epoll_create = (__NR_SYSCALL_BASE + 250); -syscall_nr_epoll_ctl = (__NR_SYSCALL_BASE + 251); -syscall_nr_epoll_wait = (__NR_SYSCALL_BASE + 252); -syscall_nr_inotify_init = (__NR_SYSCALL_BASE + 316); -syscall_nr_inotify_add_watch = (__NR_SYSCALL_BASE + 317); -syscall_nr_inotify_rm_watch = (__NR_SYSCALL_BASE + 318); -syscall_nr_poll = (__NR_SYSCALL_BASE + 168); -syscall_nr_eventfd2 = (__NR_SYSCALL_BASE + 356); -syscall_nr_ARM_set_tls = (__NR_SYSCALL_BASE + 983045); -syscall_nr_ARM_cacheflush = (__NR_SYSCALL_BASE + 983042); +// The following syscalls are blocked by SECCOMP starting from Android 8. +// Do not use them, unless you know what you are doing. +const + syscall_nr_mount = 21 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_acct = 51 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_umount2 = 52 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_chroot = 61 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_sethostname = 74 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_settimeofday = 79 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_swapon = 87 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_reboot = 88 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_syslog = 103 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_klogctl = 103 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_swapoff = 115 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setdomainname = 121 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_adjtimex = 124 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_init_module = 128 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_delete_module = 129 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setfsuid = 138 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setfsgid = 139 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setreuid32 = 203 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setreuid = 203 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setgroups32 = 206 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setgroups = 206 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setresgid32 = 210 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setresgid = 210 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setuid32 = 213 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setuid = 213 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setgid32 = 214 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setgid = 214 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_clock_settime = 262 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_clock_adjtime = 372 deprecated 'This syscall is blocked on Android 8+'; diff --git a/rtl/android/cwstring.pp b/rtl/android/cwstring.pp index 1579e963e9..ee65eb0d11 100644 --- a/rtl/android/cwstring.pp +++ b/rtl/android/cwstring.pp @@ -50,12 +50,14 @@ var u_strToLower: function (dest: PUnicodeChar; destCapacity: int32_t; src: PUnicodeChar; srcLength: int32_t; locale: PAnsiChar; var pErrorCode: UErrorCode): int32_t; cdecl; u_strCompare: function (s1: PUnicodeChar; length1: int32_t; s2: PUnicodeChar; length2: int32_t; codePointOrder: UBool): int32_t; cdecl; u_strCaseCompare: function (s1: PUnicodeChar; length1: int32_t; s2: PUnicodeChar; length2: int32_t; options: uint32_t; var pErrorCode: UErrorCode): int32_t; cdecl; + u_getDataDirectory: function(): PAnsiChar; cdecl; + u_setDataDirectory: procedure(directory: PAnsiChar); cdecl; + u_init: procedure(var status: UErrorCode); cdecl; ucol_open: function(loc: PAnsiChar; var status: UErrorCode): PUCollator; cdecl; ucol_close: procedure (coll: PUCollator); cdecl; ucol_strcoll: function (coll: PUCollator; source: PUnicodeChar; sourceLength: int32_t; target: PUnicodeChar; targetLength: int32_t): int32_t; cdecl; ucol_setStrength: procedure (coll: PUCollator; strength: int32_t); cdecl; - u_errorName: function (code: UErrorCode): PAnsiChar; cdecl; threadvar ThreadDataInited: boolean; @@ -63,16 +65,37 @@ threadvar LastCP: TSystemCodePage; DefColl: PUCollator; +function MaskExceptions: dword; +begin +{$ifdef cpux86_64} + Result:=GetMXCSR; + SetMXCSR(Result or %0000000010000000 {MM_MaskInvalidOp} or %0001000000000000 {MM_MaskPrecision}); +{$else} + Result:=0; +{$endif cpux86_64} +end; + +procedure UnmaskExceptions(oldmask: dword); +begin +{$ifdef cpux86_64} + SetMXCSR(oldmask); +{$endif cpux86_64} +end; + function OpenConverter(const name: ansistring): PUConverter; var err: UErrorCode; + oldmask: dword; begin + { ucnv_open() must be called with some SSE exception masked on x86_64-android. } + oldmask:=MaskExceptions; err:=0; Result:=ucnv_open(PAnsiChar(name), err); if Result <> nil then begin ucnv_setSubstChars(Result, '?', 1, err); ucnv_setFallback(Result, True); end; + UnmaskExceptions(oldmask); end; procedure InitThreadData; @@ -465,6 +488,9 @@ begin if LastConv <> nil then ucnv_close(LastConv); + if LibVer = '_3_8' then + exit; // ICU v3.8 on Android 1.5-2.1 is buggy and can't be unloaded properly + if hlibICU <> 0 then begin UnloadLibrary(hlibICU); hlibICU:=0; @@ -475,7 +501,7 @@ begin end; end; -function GetIcuProc(const Name: AnsiString; out ProcPtr; libId: longint = 0): boolean; [public, alias: 'CWSTRING_GET_ICU_PROC']; +function GetIcuProc(const Name: AnsiString; out ProcPtr; libId: longint = 0): boolean; var p: pointer; hLib: TLibHandle; @@ -496,12 +522,14 @@ end; function LoadICU: boolean; const - ICUver: array [1..9] of ansistring = ('3_8', '4_2', '44', '46', '48', '50', '51', '53', '55'); + ICUver: array [1..12] of ansistring = ('3_8', '4_2', '44', '46', '48', '50', '51', '53', '55', '56', '58', '60'); TestProcName = 'ucnv_open'; var i: longint; s: ansistring; + dir: PAnsiChar; + err: UErrorCode; begin Result:=False; {$ifdef android} @@ -543,6 +571,7 @@ begin // Trying versionless name if GetProcedureAddress(hlibICU, TestProcName) = nil then begin // Unable to get ICU version + SysLogWrite(ANDROID_LOG_ERROR, 'cwstring: Unable to get ICU version.'); UnloadICU; exit; end; @@ -558,18 +587,31 @@ begin if not GetIcuProc('u_strToLower', u_strToLower) then exit; if not GetIcuProc('u_strCompare', u_strCompare) then exit; if not GetIcuProc('u_strCaseCompare', u_strCaseCompare) then exit; - - if not GetIcuProc('u_errorName', u_errorName) then exit; + if not GetIcuProc('u_getDataDirectory', u_getDataDirectory) then exit; + if not GetIcuProc('u_setDataDirectory', u_setDataDirectory) then exit; + if not GetIcuProc('u_init', u_init) then exit; if not GetIcuProc('ucol_open', ucol_open, 1) then exit; if not GetIcuProc('ucol_close', ucol_close, 1) then exit; if not GetIcuProc('ucol_strcoll', ucol_strcoll, 1) then exit; if not GetIcuProc('ucol_setStrength', ucol_setStrength, 1) then exit; + + // Checking if ICU data dir is set + dir:=u_getDataDirectory(); + if (dir = nil) or (dir^ = #0) then + u_setDataDirectory('/system/usr/icu'); + + err:=0; + u_init(err); + Result:=True; end; var oldm: TUnicodeStringManager; +{$ifdef android} + SysGetIcuProc: pointer; external name 'ANDROID_GET_ICU_PROC'; +{$endif android} initialization GetUnicodeStringManager(oldm); @@ -578,6 +620,7 @@ initialization if LoadICU then begin SetCWideStringManager; {$ifdef android} + SysGetIcuProc:=@GetIcuProc; SetStdIOCodePages; {$endif android} end; diff --git a/rtl/android/dllprt0.as b/rtl/android/dllprt0.as new file mode 100644 index 0000000000..35cd3e034d --- /dev/null +++ b/rtl/android/dllprt0.as @@ -0,0 +1,25 @@ +# +# This file is part of the Free Pascal run time library. +# Copyright (c) 2018 by Yuriy Sydorov and other +# 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. +# +#**********************************************************************} +# +# Shared library startup code for Free Pascal. Android target. +# + +/* --------------------------------------------------------- */ + .section .init_array, "aw" + +.ifdef CPU64 + .quad FPC_LIB_START_ANDROID +.else + .long FPC_LIB_START_ANDROID +.endif diff --git a/rtl/android/i386/dllprt0.as b/rtl/android/i386/dllprt0.as deleted file mode 100644 index ae48292c5d..0000000000 --- a/rtl/android/i386/dllprt0.as +++ /dev/null @@ -1,92 +0,0 @@ -# -# This file is part of the Free Pascal run time library. -# Copyright (c) 2013 by Yury Sidorov and other -# 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. -# -#**********************************************************************} -# -# Shared library startup code for Free Pascal. Android-i386 target. -# - -.file "dllprt0.as" -.text - .globl FPC_SHARED_LIB_START - .type FPC_SHARED_LIB_START,@function -FPC_SHARED_LIB_START: - pushl %ebp - movl %esp,%ebp - /* Align the stack to a 16 byte boundary */ - andl $~15, %esp - - /* Save ebx */ - pushl %ebx - - /* GOT init */ - call fpc_geteipasebx - addl $_GLOBAL_OFFSET_TABLE_,%ebx - - /* Save initial stackpointer */ - movl __stkptr@GOT(%ebx),%eax - movl %esp,(%eax) - - /* Get environment info from libc */ - movl environ@GOT(%ebx),%eax - movl (%eax),%eax - /* Check if environment is NULL */ - test %eax,%eax - jne env_ok - movl EmptyEnv@GOT(%ebx),%eax -env_ok: - movl operatingsystem_parameter_envp@GOT(%ebx),%edx - movl %eax,(%edx) - - /* Restore ebx */ - popl %ebx - - /* Call main */ - call FPC_LIB_MAIN_ANDROID@PLT - /* Call library init */ - call FPC_LIB_INIT_ANDROID@PLT - - leave - ret - -/* --------------------------------------------------------- */ - .globl _haltproc - .type _haltproc,@function -_haltproc: - /* GOT init */ - call fpc_geteipasebx - addl $_GLOBAL_OFFSET_TABLE_,%ebx - /* Jump to libc exit(). _haltproc has the same declaration as exit. */ - jmp exit@PLT - -/* --------------------------------------------------------- */ -.data - .comm __stkptr,4 - .comm operatingsystem_parameter_envp,4 -operatingsystem_parameter_argc: - .global operatingsystem_parameter_argc - .long 1 -operatingsystem_parameter_argv: - .global operatingsystem_parameter_argv - .long EmptyCmdLine -EmptyCmdLine: - .long EmptyCmdStr -EmptyCmdStr: - .ascii "\0" -EmptyEnv: - .long 0 - .long 0 - .long 0 - -/* --------------------------------------------------------- */ - .section .init_array, "aw" - .long FPC_SHARED_LIB_START diff --git a/rtl/android/i386/prt0.as b/rtl/android/i386/prt0.as deleted file mode 100644 index b981e421a8..0000000000 --- a/rtl/android/i386/prt0.as +++ /dev/null @@ -1,98 +0,0 @@ -# -# This file is part of the Free Pascal run time library. -# Copyright (c) 2013 by Yury Sidorov and other -# 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. -# -#**********************************************************************} -# -# Program startup code for Free Pascal. Android-i386 target. -# -# Stack layout at program start: -# -# nil -# envn -# .... -# .... ENVIRONMENT VARIABLES -# env1 -# env0 -# nil -# argn -# .... -# .... COMMAND LINE OPTIONS -# arg1 -# arg0 -# argc <--- esp -# - -/* - In our entry point we should save pointers to cmd line arguments - and environment vars, then pass control to libc startup code. - It will call "PASCALMAIN" via alias "main". -*/ - .file "prt0.as" -.text - .align 4 - .globl _fpc_start - .type _fpc_start,@function -_fpc_start: - /* GOT init */ - call fpc_geteipasebx - addl $_GLOBAL_OFFSET_TABLE_,%ebx - /* Clear the frame pointer since this is the outermost frame. */ - xorl %ebp,%ebp - /* Save initial stackpointer */ - movl __stkptr@GOT(%ebx),%eax - movl %esp,(%eax) - /* First locate the start of the environment variables */ - /* Get argc in ecx */ - movl (%esp),%ecx - /* Save argc */ - movl operatingsystem_parameter_argc@GOT(%ebx),%eax - movl %ecx,(%eax) - /* Get argv pointer in edx */ - leal 4(%esp),%edx - /* Save argv */ - movl operatingsystem_parameter_argv@GOT(%ebx),%eax - movl %edx,(%eax) - /* The start of the environment is: esp+ecx*4+12 */ - leal 12(%esp,%ecx,4),%edx - /* Save envp */ - movl operatingsystem_parameter_envp@GOT(%ebx),%eax - movl %edx,(%eax) - - /* Finally go to libc startup code. It will call "PASCALMAIN" via alias "main". */ - /* No need to align stack since it will aligned by libc. */ - jmp _start - -/* --------------------------------------------------------- */ - .globl _haltproc - .type _haltproc,@function -_haltproc: - /* GOT init */ - call fpc_geteipasebx - addl $_GLOBAL_OFFSET_TABLE_,%ebx - /* Jump to libc exit(). _haltproc has the same declaration as exit. */ - jmp exit@PLT - -/* --------------------------------------------------------- */ -.data -/* Define a symbol for the first piece of initialized data. */ - .globl __data_start -__data_start: - .long 0 - .weak data_start - data_start = __data_start - -/* --------------------------------------------------------- */ -.bss - .comm __stkptr,4 - .comm operatingsystem_parameter_envp,4 - .comm operatingsystem_parameter_argc,4 - .comm operatingsystem_parameter_argv,4 diff --git a/rtl/android/i386/sysnr.inc b/rtl/android/i386/sysnr.inc index 0c61d7709e..2fc986b219 100644 --- a/rtl/android/i386/sysnr.inc +++ b/rtl/android/i386/sysnr.inc @@ -1,204 +1,270 @@ -{ - This file is part of the Free Pascal run time library. - Copyright (c) 2017 by Yuriy Sydorov, - member of the Free Pascal development team. - - Syscall nrs for i386-android - - 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. - - **********************************************************************} +// Available syscalls for x86-android. +// This file is autogenerated by the genandroidsyscalls.py script. +// Script location: https://svn.freepascal.org/svn/fpcbuild/scripts/android const - __NR_SYSCALL_BASE = 0; + syscall_nr_restart_syscall = 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_creat = 8; + syscall_nr_unlink = 10; + syscall_nr_execve = 11; + syscall_nr_chdir = 12; + syscall_nr_lseek = 19; + syscall_nr_getpid = 20; + syscall_nr_getuid = 24; + syscall_nr_ptrace = 26; + syscall_nr_access = 33; + syscall_nr_sync = 36; + syscall_nr_kill = 37; + syscall_nr_rename = 38; + syscall_nr_mkdir = 39; + syscall_nr_dup = 41; + syscall_nr_pipe = 42; + syscall_nr_times = 43; + syscall_nr_brk = 45; + syscall_nr_ioctl = 54; + syscall_nr_fcntl = 55; + syscall_nr_setpgid = 57; + syscall_nr_umask = 60; + syscall_nr_dup2 = 63; + syscall_nr_getppid = 64; + syscall_nr_setsid = 66; + syscall_nr_sigaction = 67; + syscall_nr_setrlimit = 75; + syscall_nr_getrusage = 77; + syscall_nr_gettimeofday = 78; + syscall_nr_readlink = 85; + syscall_nr_mmap = 90; + syscall_nr_mmap64 = syscall_nr_mmap; + syscall_nr_munmap = 91; + syscall_nr_truncate = 92; + syscall_nr_fchmod = 94; + syscall_nr_getpriority = 96; + syscall_nr_setpriority = 97; + syscall_nr_socketcall = 102; + syscall_nr_setitimer = 104; + syscall_nr_getitimer = 105; + syscall_nr_wait4 = 114; + syscall_nr_sysinfo = 116; + syscall_nr_fsync = 118; + syscall_nr_sigreturn = 119; + syscall_nr_clone = 120; + syscall_nr_uname = 122; + syscall_nr_mprotect = 125; + syscall_nr_quotactl = 131; + syscall_nr_getpgid = 132; + syscall_nr_fchdir = 133; + syscall_nr_personality = 136; + syscall_nr__llseek = 140; + syscall_nr_getdents = 141; + syscall_nr__newselect = 142; + syscall_nr_flock = 143; + syscall_nr_msync = 144; + syscall_nr_readv = 145; + syscall_nr_writev = 146; + syscall_nr_getsid = 147; + syscall_nr_fdatasync = 148; + 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_poll = 168; + syscall_nr_prctl = 172; + syscall_nr_rt_sigreturn = 173; + syscall_nr_rt_sigaction = 174; + syscall_nr_rt_sigprocmask = 175; + syscall_nr_rt_sigpending = 176; + syscall_nr_rt_sigtimedwait = 177; + syscall_nr_rt_sigqueueinfo = 178; + syscall_nr_rt_sigsuspend = 179; + syscall_nr_pread64 = 180; + syscall_nr_pwrite64 = 181; + syscall_nr_getcwd = 183; + syscall_nr_capget = 184; + syscall_nr_capset = 185; + syscall_nr_sigaltstack = 186; + syscall_nr_sendfile = 187; + syscall_nr_vfork = 190; + syscall_nr_ugetrlimit = 191; + syscall_nr_getrlimit = syscall_nr_ugetrlimit; + syscall_nr_mmap2 = 192; + syscall_nr_truncate64 = 193; + syscall_nr_ftruncate64 = 194; + syscall_nr_stat64 = 195; + syscall_nr_lstat64 = 196; + syscall_nr_fstat64 = 197; + syscall_nr_fstat = syscall_nr_fstat64; + syscall_nr_getuid32 = 199; + syscall_nr_getgid32 = 200; + syscall_nr_getgid = syscall_nr_getgid32; + syscall_nr_geteuid32 = 201; + syscall_nr_geteuid = syscall_nr_geteuid32; + syscall_nr_getegid32 = 202; + syscall_nr_getegid = syscall_nr_getegid32; + syscall_nr_setregid32 = 204; + syscall_nr_setregid = syscall_nr_setregid32; + syscall_nr_getgroups32 = 205; + syscall_nr_getgroups = syscall_nr_getgroups32; + syscall_nr_fchown32 = 207; + syscall_nr_fchown = syscall_nr_fchown32; + syscall_nr_setresuid32 = 208; + syscall_nr_setresuid = syscall_nr_setresuid32; + syscall_nr_getresuid32 = 209; + syscall_nr_getresuid = syscall_nr_getresuid32; + syscall_nr_getresgid32 = 211; + syscall_nr_getresgid = syscall_nr_getresgid32; + syscall_nr_mincore = 218; + syscall_nr_madvise = 219; + syscall_nr_getdents64 = 220; + syscall_nr_fcntl64 = 221; + syscall_nr_gettid = 224; + syscall_nr_readahead = 225; + syscall_nr_setxattr = 226; + syscall_nr_lsetxattr = 227; + syscall_nr_fsetxattr = 228; + syscall_nr_getxattr = 229; + syscall_nr_lgetxattr = 230; + syscall_nr_fgetxattr = 231; + syscall_nr_listxattr = 232; + syscall_nr_llistxattr = 233; + syscall_nr_flistxattr = 234; + syscall_nr_removexattr = 235; + syscall_nr_lremovexattr = 236; + syscall_nr_fremovexattr = 237; + syscall_nr_tkill = 238; + syscall_nr_sendfile64 = 239; + syscall_nr_futex = 240; + syscall_nr_sched_setaffinity = 241; + syscall_nr_sched_getaffinity = 242; + syscall_nr_set_thread_area = 243; + syscall_nr_io_setup = 245; + syscall_nr_io_destroy = 246; + syscall_nr_io_getevents = 247; + syscall_nr_io_submit = 248; + syscall_nr_io_cancel = 249; + syscall_nr_exit_group = 252; + syscall_nr_epoll_create = 254; + syscall_nr_epoll_ctl = 255; + syscall_nr_epoll_wait = 256; + syscall_nr_remap_file_pages = 257; + syscall_nr_set_tid_address = 258; + syscall_nr_timer_create = 259; + syscall_nr_timer_settime = 260; + syscall_nr_timer_gettime = 261; + syscall_nr_timer_getoverrun = 262; + syscall_nr_timer_delete = 263; + syscall_nr_clock_gettime = 265; + syscall_nr_clock_getres = 266; + syscall_nr_clock_nanosleep = 267; + syscall_nr_statfs64 = 268; + syscall_nr_fstatfs64 = 269; + syscall_nr_tgkill = 270; + syscall_nr_fadvise64_64 = 272; + syscall_nr_waitid = 284; + syscall_nr_inotify_init = 291; + syscall_nr_inotify_add_watch = 292; + syscall_nr_inotify_rm_watch = 293; + syscall_nr_openat = 295; + syscall_nr_mkdirat = 296; + syscall_nr_mknodat = 297; + syscall_nr_fchownat = 298; + syscall_nr_fstatat64 = 300; + syscall_nr_fstatat = syscall_nr_fstatat64; + syscall_nr_unlinkat = 301; + syscall_nr_renameat = 302; + syscall_nr_linkat = 303; + syscall_nr_symlinkat = 304; + syscall_nr_readlinkat = 305; + syscall_nr_fchmodat = 306; + syscall_nr_faccessat = 307; + syscall_nr_pselect6 = 308; + syscall_nr_ppoll = 309; + syscall_nr_unshare = 310; + syscall_nr_splice = 313; + syscall_nr_sync_file_range = 314; + syscall_nr_tee = 315; + syscall_nr_vmsplice = 316; + syscall_nr_getcpu = 318; + syscall_nr_epoll_pwait = 319; + syscall_nr_utimensat = 320; + syscall_nr_timerfd_create = 322; + syscall_nr_eventfd = 323; + syscall_nr_fallocate = 324; + syscall_nr_fallocate64 = syscall_nr_fallocate; + syscall_nr_timerfd_settime = 325; + syscall_nr_timerfd_gettime = 326; + syscall_nr_signalfd4 = 327; + syscall_nr_eventfd2 = 328; + syscall_nr_epoll_create1 = 329; + syscall_nr_dup3 = 330; + syscall_nr_pipe2 = 331; + syscall_nr_inotify_init1 = 332; + syscall_nr_preadv = 333; + syscall_nr_pwritev = 334; + syscall_nr_rt_tgsigqueueinfo = 335; + syscall_nr_perf_event_open = 336; + syscall_nr_prlimit64 = 340; + syscall_nr_prlimit = syscall_nr_prlimit64; + syscall_nr_syncfs = 344; + syscall_nr_setns = 346; + syscall_nr_process_vm_readv = 347; + syscall_nr_process_vm_writev = 348; + syscall_nr_sched_setattr = 351; + syscall_nr_sched_getattr = 352; + syscall_nr_renameat2 = 353; + syscall_nr_seccomp = 354; + syscall_nr_getrandom = 355; + syscall_nr_memfd_create = 356; + syscall_nr_execveat = 358; + syscall_nr_mlock2 = 376; + syscall_nr_copy_file_range = 377; + syscall_nr_preadv2 = 378; + syscall_nr_pwritev2 = 379; -syscall_nr_exit = (__NR_SYSCALL_BASE + 1); -syscall_nr_fork = (__NR_SYSCALL_BASE + 2); -syscall_nr_read = (__NR_SYSCALL_BASE + 3); -syscall_nr_write = (__NR_SYSCALL_BASE + 4); -syscall_nr_open = (__NR_SYSCALL_BASE + 5); -syscall_nr_close = (__NR_SYSCALL_BASE + 6); -syscall_nr_link = (__NR_SYSCALL_BASE + 9); -syscall_nr_unlink = (__NR_SYSCALL_BASE + 10); -syscall_nr_execve = (__NR_SYSCALL_BASE + 11); -syscall_nr_chdir = (__NR_SYSCALL_BASE + 12); -syscall_nr_mknod = (__NR_SYSCALL_BASE + 14); -syscall_nr_chmod = (__NR_SYSCALL_BASE + 15); -syscall_nr_lseek = (__NR_SYSCALL_BASE + 19); -syscall_nr_getpid = (__NR_SYSCALL_BASE + 20); -syscall_nr_mount = (__NR_SYSCALL_BASE + 21); -syscall_nr_ptrace = (__NR_SYSCALL_BASE + 26); -syscall_nr_pause = (__NR_SYSCALL_BASE + 29); -syscall_nr_access = (__NR_SYSCALL_BASE + 33); -syscall_nr_sync = (__NR_SYSCALL_BASE + 36); -syscall_nr_rename = (__NR_SYSCALL_BASE + 38); -syscall_nr_mkdir = (__NR_SYSCALL_BASE + 39); -syscall_nr_rmdir = (__NR_SYSCALL_BASE + 40); -syscall_nr_dup = (__NR_SYSCALL_BASE + 41); -syscall_nr_times = (__NR_SYSCALL_BASE + 43); -syscall_nr_brk = (__NR_SYSCALL_BASE + 45); -syscall_nr_acct = (__NR_SYSCALL_BASE + 51); -syscall_nr_umount2 = (__NR_SYSCALL_BASE + 52); -syscall_nr_ioctl = (__NR_SYSCALL_BASE + 54); -syscall_nr_fcntl = (__NR_SYSCALL_BASE + 55); -syscall_nr_setpgid = (__NR_SYSCALL_BASE + 57); -syscall_nr_umask = (__NR_SYSCALL_BASE + 60); -syscall_nr_chroot = (__NR_SYSCALL_BASE + 61); -syscall_nr_dup2 = (__NR_SYSCALL_BASE + 63); -syscall_nr_getppid = (__NR_SYSCALL_BASE + 64); -syscall_nr_setsid = (__NR_SYSCALL_BASE + 66); -syscall_nr_sigaction = (__NR_SYSCALL_BASE + 67); -syscall_nr_sigpending = (__NR_SYSCALL_BASE + 73); -syscall_nr_setrlimit = (__NR_SYSCALL_BASE + 75); -syscall_nr_getrusage = (__NR_SYSCALL_BASE + 77); -syscall_nr_gettimeofday = (__NR_SYSCALL_BASE + 78); -syscall_nr_settimeofday = (__NR_SYSCALL_BASE + 79); -syscall_nr_symlink = (__NR_SYSCALL_BASE + 83); -syscall_nr_readlink = (__NR_SYSCALL_BASE + 85); -syscall_nr_reboot = (__NR_SYSCALL_BASE + 88); -syscall_nr_munmap = (__NR_SYSCALL_BASE + 91); -syscall_nr_truncate = (__NR_SYSCALL_BASE + 92); -syscall_nr_ftruncate = (__NR_SYSCALL_BASE + 93); -syscall_nr_fchmod = (__NR_SYSCALL_BASE + 94); -syscall_nr_getpriority = (__NR_SYSCALL_BASE + 96); -syscall_nr_setpriority = (__NR_SYSCALL_BASE + 97); -syscall_nr_syslog = (__NR_SYSCALL_BASE + 103); -syscall_nr_setitimer = (__NR_SYSCALL_BASE + 104); -syscall_nr_getitimer = (__NR_SYSCALL_BASE + 105); -syscall_nr_wait4 = (__NR_SYSCALL_BASE + 114); -syscall_nr_sysinfo = (__NR_SYSCALL_BASE + 116); -syscall_nr_fsync = (__NR_SYSCALL_BASE + 118); -syscall_nr_clone = (__NR_SYSCALL_BASE + 120); -syscall_nr_uname = (__NR_SYSCALL_BASE + 122); -syscall_nr_mprotect = (__NR_SYSCALL_BASE + 125); -syscall_nr_sigprocmask = (__NR_SYSCALL_BASE + 126); -syscall_nr_init_module = (__NR_SYSCALL_BASE + 128); -syscall_nr_delete_module = (__NR_SYSCALL_BASE + 129); -syscall_nr_getpgid = (__NR_SYSCALL_BASE + 132); -syscall_nr_fchdir = (__NR_SYSCALL_BASE + 133); -syscall_nr_personality = (__NR_SYSCALL_BASE + 136); -syscall_nr__llseek = (__NR_SYSCALL_BASE + 140); -syscall_nr__newselect = (__NR_SYSCALL_BASE + 142); -syscall_nr_flock = (__NR_SYSCALL_BASE + 143); -syscall_nr_msync = (__NR_SYSCALL_BASE + 144); -syscall_nr_readv = (__NR_SYSCALL_BASE + 145); -syscall_nr_writev = (__NR_SYSCALL_BASE + 146); -syscall_nr_perf_event_open = (__NR_SYSCALL_BASE + 364); - -syscall_nr_waitpid = (__NR_SYSCALL_BASE + 7); -syscall_nr_kill = (__NR_SYSCALL_BASE + 37); -syscall_nr_pipe = (__NR_SYSCALL_BASE + 42); -syscall_nr_sigsuspend = (__NR_SYSCALL_BASE + 72); -syscall_nr_socketcall = (__NR_SYSCALL_BASE + 102); -syscall_nr_fdatasync = (__NR_SYSCALL_BASE + 148); -syscall_nr_mlock = (__NR_SYSCALL_BASE + 150); -syscall_nr_munlock = (__NR_SYSCALL_BASE + 151); -syscall_nr_sched_setparam = (__NR_SYSCALL_BASE + 154); -syscall_nr_sched_getparam = (__NR_SYSCALL_BASE + 155); -syscall_nr_sched_setscheduler = (__NR_SYSCALL_BASE + 156); -syscall_nr_sched_getscheduler = (__NR_SYSCALL_BASE + 157); -syscall_nr_sched_yield = (__NR_SYSCALL_BASE + 158); -syscall_nr_sched_get_priority_max = (__NR_SYSCALL_BASE + 159); -syscall_nr_sched_get_priority_min = (__NR_SYSCALL_BASE + 160); -syscall_nr_sched_rr_get_interval = (__NR_SYSCALL_BASE + 161); -syscall_nr_nanosleep = (__NR_SYSCALL_BASE + 162); -syscall_nr_mremap = (__NR_SYSCALL_BASE + 163); -syscall_nr_poll = (__NR_SYSCALL_BASE + 168); -syscall_nr_prctl = (__NR_SYSCALL_BASE + 172); -syscall_nr_rt_sigaction = (__NR_SYSCALL_BASE + 174); -syscall_nr_rt_sigprocmask = (__NR_SYSCALL_BASE + 175); -syscall_nr_rt_sigtimedwait = (__NR_SYSCALL_BASE + 177); -syscall_nr_pread64 = (__NR_SYSCALL_BASE + 180); -syscall_nr_pwrite64 = (__NR_SYSCALL_BASE + 181); -syscall_nr_getcwd = (__NR_SYSCALL_BASE + 183); -syscall_nr_capget = (__NR_SYSCALL_BASE + 184); -syscall_nr_capset = (__NR_SYSCALL_BASE + 185); -syscall_nr_sigaltstack = (__NR_SYSCALL_BASE + 186); -syscall_nr_sendfile = (__NR_SYSCALL_BASE + 187); -syscall_nr_ugetrlimit = (__NR_SYSCALL_BASE + 191); -syscall_nr_mmap2 = (__NR_SYSCALL_BASE + 192); -syscall_nr_ftruncate64 = (__NR_SYSCALL_BASE + 194); -syscall_nr_stat64 = (__NR_SYSCALL_BASE + 195); -syscall_nr_lstat64 = (__NR_SYSCALL_BASE + 196); -syscall_nr_fstat64 = (__NR_SYSCALL_BASE + 197); -syscall_nr_lchown32 = (__NR_SYSCALL_BASE + 198); -syscall_nr_getuid32 = (__NR_SYSCALL_BASE + 199); -syscall_nr_getgid32 = (__NR_SYSCALL_BASE + 200); -syscall_nr_geteuid32 = (__NR_SYSCALL_BASE + 201); -syscall_nr_getegid32 = (__NR_SYSCALL_BASE + 202); -syscall_nr_setreuid32 = (__NR_SYSCALL_BASE + 203); -syscall_nr_setregid32 = (__NR_SYSCALL_BASE + 204); -syscall_nr_getgroups32 = (__NR_SYSCALL_BASE + 205); -syscall_nr_setgroups32 = (__NR_SYSCALL_BASE + 206); -syscall_nr_fchown32 = (__NR_SYSCALL_BASE + 207); -syscall_nr_setresuid32 = (__NR_SYSCALL_BASE + 208); -syscall_nr_getresuid32 = (__NR_SYSCALL_BASE + 209); -syscall_nr_setresgid32 = (__NR_SYSCALL_BASE + 210); -syscall_nr_getresgid32 = (__NR_SYSCALL_BASE + 211); -syscall_nr_chown32 = (__NR_SYSCALL_BASE + 212); -syscall_nr_setuid32 = (__NR_SYSCALL_BASE + 213); -syscall_nr_setgid32 = (__NR_SYSCALL_BASE + 214); -syscall_nr_mincore = (__NR_SYSCALL_BASE + 218); -syscall_nr_madvise = (__NR_SYSCALL_BASE + 219); -syscall_nr_getdents64 = (__NR_SYSCALL_BASE + 220); -syscall_nr_fcntl64 = (__NR_SYSCALL_BASE + 221); -syscall_nr_gettid = (__NR_SYSCALL_BASE + 224); -syscall_nr_readahead = (__NR_SYSCALL_BASE + 225); -syscall_nr_setxattr = (__NR_SYSCALL_BASE + 226); -syscall_nr_lsetxattr = (__NR_SYSCALL_BASE + 227); -syscall_nr_fsetxattr = (__NR_SYSCALL_BASE + 228); -syscall_nr_getxattr = (__NR_SYSCALL_BASE + 229); -syscall_nr_lgetxattr = (__NR_SYSCALL_BASE + 230); -syscall_nr_fgetxattr = (__NR_SYSCALL_BASE + 231); -syscall_nr_listxattr = (__NR_SYSCALL_BASE + 232); -syscall_nr_llistxattr = (__NR_SYSCALL_BASE + 233); -syscall_nr_flistxattr = (__NR_SYSCALL_BASE + 234); -syscall_nr_removexattr = (__NR_SYSCALL_BASE + 235); -syscall_nr_lremovexattr = (__NR_SYSCALL_BASE + 236); -syscall_nr_fremovexattr = (__NR_SYSCALL_BASE + 237); -syscall_nr_tkill = (__NR_SYSCALL_BASE + 238); -syscall_nr_futex = (__NR_SYSCALL_BASE + 240); -syscall_nr_sched_setaffinity = (__NR_SYSCALL_BASE + 241); -syscall_nr_sched_getaffinity = (__NR_SYSCALL_BASE + 242); -syscall_nr_set_thread_area = (__NR_SYSCALL_BASE + 243); -syscall_nr_exit_group = (__NR_SYSCALL_BASE + 252); -syscall_nr_epoll_create = (__NR_SYSCALL_BASE + 254); -syscall_nr_epoll_ctl = (__NR_SYSCALL_BASE + 255); -syscall_nr_epoll_wait = (__NR_SYSCALL_BASE + 256); -syscall_nr_timer_create = (__NR_SYSCALL_BASE + 259); -syscall_nr_timer_settime = (__NR_SYSCALL_BASE + 260); -syscall_nr_timer_gettime = (__NR_SYSCALL_BASE + 261); -syscall_nr_timer_getoverrun = (__NR_SYSCALL_BASE + 262); -syscall_nr_timer_delete = (__NR_SYSCALL_BASE + 263); -syscall_nr_clock_settime = (__NR_SYSCALL_BASE + 264); -syscall_nr_clock_gettime = (__NR_SYSCALL_BASE + 265); -syscall_nr_clock_getres = (__NR_SYSCALL_BASE + 266); -syscall_nr_clock_nanosleep = (__NR_SYSCALL_BASE + 267); -syscall_nr_statfs64 = (__NR_SYSCALL_BASE + 268); -syscall_nr_fstatfs64 = (__NR_SYSCALL_BASE + 269); -syscall_nr_tgkill = (__NR_SYSCALL_BASE + 270); -syscall_nr_utimes = (__NR_SYSCALL_BASE + 271); -syscall_nr_waitid = (__NR_SYSCALL_BASE + 284); -syscall_nr_ioprio_set = (__NR_SYSCALL_BASE + 289); -syscall_nr_ioprio_get = (__NR_SYSCALL_BASE + 290); -syscall_nr_inotify_init = (__NR_SYSCALL_BASE + 291); -syscall_nr_inotify_add_watch = (__NR_SYSCALL_BASE + 292); -syscall_nr_inotify_rm_watch = (__NR_SYSCALL_BASE + 293); -syscall_nr_openat = (__NR_SYSCALL_BASE + 295); -syscall_nr_mkdirat = (__NR_SYSCALL_BASE + 296); -syscall_nr_fchownat = (__NR_SYSCALL_BASE + 298); -syscall_nr_fstatat64 = (__NR_SYSCALL_BASE + 300); -syscall_nr_unlinkat = (__NR_SYSCALL_BASE + 301); -syscall_nr_renameat = (__NR_SYSCALL_BASE + 302); -syscall_nr_fchmodat = (__NR_SYSCALL_BASE + 306); -syscall_nr_faccessat = (__NR_SYSCALL_BASE + 307); -syscall_nr_unshare = (__NR_SYSCALL_BASE + 310); -syscall_nr_getcpu = (__NR_SYSCALL_BASE + 318); -syscall_nr_utimensat = (__NR_SYSCALL_BASE + 320); -syscall_nr_eventfd2 = (__NR_SYSCALL_BASE + 328); -syscall_nr_pipe2 = (__NR_SYSCALL_BASE + 331); +// The following syscalls are blocked by SECCOMP starting from Android 8. +// Do not use them, unless you know what you are doing. +const + syscall_nr_mount = 21 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_acct = 51 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_umount2 = 52 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_chroot = 61 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_sethostname = 74 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_settimeofday = 79 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_swapon = 87 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_reboot = 88 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_syslog = 103 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_klogctl = 103 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_swapoff = 115 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setdomainname = 121 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_adjtimex = 124 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_init_module = 128 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_delete_module = 129 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setfsuid = 138 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setfsgid = 139 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setreuid32 = 203 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setreuid = 203 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setgroups32 = 206 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setgroups = 206 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setresgid32 = 210 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setresgid = 210 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setuid32 = 213 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setuid = 213 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setgid32 = 214 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setgid = 214 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_clock_settime = 264 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_clock_adjtime = 343 deprecated 'This syscall is blocked on Android 8+'; diff --git a/rtl/android/mips64/sysnr.inc b/rtl/android/mips64/sysnr.inc new file mode 100644 index 0000000000..c2c2e07a2e --- /dev/null +++ b/rtl/android/mips64/sysnr.inc @@ -0,0 +1,249 @@ +// Available syscalls for mips64-android. +// This file is autogenerated by the genandroidsyscalls.py script. +// Script location: https://svn.freepascal.org/svn/fpcbuild/scripts/android + +const + syscall_nr_read = 5000; + syscall_nr_write = 5001; + syscall_nr_close = 5003; + syscall_nr_fstat = 5005; + syscall_nr_fstat64 = syscall_nr_fstat; + syscall_nr_lseek = 5008; + syscall_nr_mmap = 5009; + syscall_nr_mmap64 = syscall_nr_mmap; + syscall_nr_mprotect = 5010; + syscall_nr_munmap = 5011; + syscall_nr_brk = 5012; + syscall_nr_rt_sigaction = 5013; + syscall_nr_rt_sigprocmask = 5014; + syscall_nr_ioctl = 5015; + syscall_nr_pread64 = 5016; + syscall_nr_pwrite64 = 5017; + syscall_nr_readv = 5018; + syscall_nr_writev = 5019; + syscall_nr_sched_yield = 5023; + syscall_nr_mremap = 5024; + syscall_nr_msync = 5025; + syscall_nr_mincore = 5026; + syscall_nr_madvise = 5027; + syscall_nr_dup = 5031; + syscall_nr_nanosleep = 5034; + syscall_nr_getitimer = 5035; + syscall_nr_setitimer = 5036; + syscall_nr_getpid = 5038; + syscall_nr_sendfile = 5039; + syscall_nr_socket = 5040; + syscall_nr_connect = 5041; + syscall_nr_sendto = 5043; + syscall_nr_recvfrom = 5044; + syscall_nr_sendmsg = 5045; + syscall_nr_recvmsg = 5046; + syscall_nr_shutdown = 5047; + syscall_nr_bind = 5048; + syscall_nr_listen = 5049; + syscall_nr_getsockname = 5050; + syscall_nr_getpeername = 5051; + syscall_nr_socketpair = 5052; + syscall_nr_setsockopt = 5053; + syscall_nr_getsockopt = 5054; + syscall_nr_clone = 5055; + syscall_nr_execve = 5057; + syscall_nr_exit = 5058; + syscall_nr_wait4 = 5059; + syscall_nr_kill = 5060; + syscall_nr_uname = 5061; + syscall_nr_fcntl = 5070; + syscall_nr_flock = 5071; + syscall_nr_fsync = 5072; + syscall_nr_fdatasync = 5073; + syscall_nr_truncate = 5074; + syscall_nr_ftruncate = 5075; + syscall_nr_ftruncate64 = syscall_nr_ftruncate; + syscall_nr_getcwd = 5077; + syscall_nr_chdir = 5078; + syscall_nr_fchdir = 5079; + syscall_nr_fchmod = 5089; + syscall_nr_fchown = 5091; + syscall_nr_umask = 5093; + syscall_nr_gettimeofday = 5094; + syscall_nr_getrlimit = 5095; + syscall_nr_getrusage = 5096; + syscall_nr_sysinfo = 5097; + syscall_nr_times = 5098; + syscall_nr_ptrace = 5099; + syscall_nr_getuid = 5100; + syscall_nr_getgid = 5102; + syscall_nr_geteuid = 5105; + syscall_nr_getegid = 5106; + syscall_nr_setpgid = 5107; + syscall_nr_getppid = 5108; + syscall_nr_setsid = 5110; + syscall_nr_setregid = 5112; + syscall_nr_getgroups = 5113; + syscall_nr_setresuid = 5115; + syscall_nr_getresuid = 5116; + syscall_nr_getresgid = 5118; + syscall_nr_getpgid = 5119; + syscall_nr_getsid = 5122; + syscall_nr_capget = 5123; + syscall_nr_capset = 5124; + syscall_nr_rt_sigpending = 5125; + syscall_nr_rt_sigtimedwait = 5126; + syscall_nr_rt_sigqueueinfo = 5127; + syscall_nr_rt_sigsuspend = 5128; + syscall_nr_sigaltstack = 5129; + syscall_nr_personality = 5132; + syscall_nr_statfs = 5134; + syscall_nr_fstatfs = 5135; + syscall_nr_getpriority = 5137; + syscall_nr_setpriority = 5138; + syscall_nr_sched_setparam = 5139; + syscall_nr_sched_getparam = 5140; + syscall_nr_sched_setscheduler = 5141; + syscall_nr_sched_getscheduler = 5142; + syscall_nr_sched_get_priority_max = 5143; + syscall_nr_sched_get_priority_min = 5144; + syscall_nr_sched_rr_get_interval = 5145; + syscall_nr_mlock = 5146; + syscall_nr_munlock = 5147; + syscall_nr_mlockall = 5148; + syscall_nr_munlockall = 5149; + syscall_nr_pivot_root = 5151; + syscall_nr_prctl = 5153; + syscall_nr_setrlimit = 5155; + syscall_nr_sync = 5157; + syscall_nr_quotactl = 5172; + syscall_nr_gettid = 5178; + syscall_nr_readahead = 5179; + syscall_nr_setxattr = 5180; + syscall_nr_lsetxattr = 5181; + syscall_nr_fsetxattr = 5182; + syscall_nr_getxattr = 5183; + syscall_nr_lgetxattr = 5184; + syscall_nr_fgetxattr = 5185; + syscall_nr_listxattr = 5186; + syscall_nr_llistxattr = 5187; + syscall_nr_flistxattr = 5188; + syscall_nr_removexattr = 5189; + syscall_nr_lremovexattr = 5190; + syscall_nr_fremovexattr = 5191; + syscall_nr_tkill = 5192; + syscall_nr_futex = 5194; + syscall_nr_sched_setaffinity = 5195; + syscall_nr_sched_getaffinity = 5196; + syscall_nr_cacheflush = 5197; + syscall_nr_io_setup = 5200; + syscall_nr_io_destroy = 5201; + syscall_nr_io_getevents = 5202; + syscall_nr_io_submit = 5203; + syscall_nr_io_cancel = 5204; + syscall_nr_exit_group = 5205; + syscall_nr_epoll_ctl = 5208; + syscall_nr_rt_sigreturn = 5211; + syscall_nr_set_tid_address = 5212; + syscall_nr_restart_syscall = 5213; + syscall_nr_fadvise64 = 5215; + syscall_nr_timer_create = 5216; + syscall_nr_timer_settime = 5217; + syscall_nr_timer_gettime = 5218; + syscall_nr_timer_getoverrun = 5219; + syscall_nr_timer_delete = 5220; + syscall_nr_clock_gettime = 5222; + syscall_nr_clock_getres = 5223; + syscall_nr_clock_nanosleep = 5224; + syscall_nr_tgkill = 5225; + syscall_nr_waitid = 5237; + syscall_nr_set_thread_area = 5242; + syscall_nr_inotify_add_watch = 5244; + syscall_nr_inotify_rm_watch = 5245; + syscall_nr_openat = 5247; + syscall_nr_mkdirat = 5248; + syscall_nr_mknodat = 5249; + syscall_nr_fchownat = 5250; + syscall_nr_newfstatat = 5252; + syscall_nr_fstatat = syscall_nr_newfstatat; + syscall_nr_fstatat64 = syscall_nr_newfstatat; + syscall_nr_unlinkat = 5253; + syscall_nr_renameat = 5254; + syscall_nr_linkat = 5255; + syscall_nr_symlinkat = 5256; + syscall_nr_readlinkat = 5257; + syscall_nr_fchmodat = 5258; + syscall_nr_faccessat = 5259; + syscall_nr_pselect6 = 5260; + syscall_nr_ppoll = 5261; + syscall_nr_unshare = 5262; + syscall_nr_splice = 5263; + syscall_nr_sync_file_range = 5264; + syscall_nr_tee = 5265; + syscall_nr_vmsplice = 5266; + syscall_nr_getcpu = 5271; + syscall_nr_epoll_pwait = 5272; + syscall_nr_ioprio_set = 5273; + syscall_nr_ioprio_get = 5274; + syscall_nr_utimensat = 5275; + syscall_nr_fallocate = 5279; + syscall_nr_fallocate64 = syscall_nr_fallocate; + syscall_nr_timerfd_create = 5280; + syscall_nr_timerfd_gettime = 5281; + syscall_nr_timerfd_settime = 5282; + syscall_nr_signalfd4 = 5283; + syscall_nr_eventfd2 = 5284; + syscall_nr_eventfd = syscall_nr_eventfd2; + syscall_nr_epoll_create1 = 5285; + syscall_nr_dup3 = 5286; + syscall_nr_pipe2 = 5287; + syscall_nr_inotify_init1 = 5288; + syscall_nr_preadv = 5289; + syscall_nr_pwritev = 5290; + syscall_nr_rt_tgsigqueueinfo = 5291; + syscall_nr_perf_event_open = 5292; + syscall_nr_accept4 = 5293; + syscall_nr_recvmmsg = 5294; + syscall_nr_prlimit64 = 5297; + syscall_nr_prlimit = syscall_nr_prlimit64; + syscall_nr_syncfs = 5301; + syscall_nr_sendmmsg = 5302; + syscall_nr_setns = 5303; + syscall_nr_process_vm_readv = 5304; + syscall_nr_process_vm_writev = 5305; + syscall_nr_getdents64 = 5308; + syscall_nr_sched_setattr = 5309; + syscall_nr_sched_getattr = 5310; + syscall_nr_renameat2 = 5311; + syscall_nr_seccomp = 5312; + syscall_nr_getrandom = 5313; + syscall_nr_memfd_create = 5314; + syscall_nr_execveat = 5316; + syscall_nr_mlock2 = 5319; + syscall_nr_copy_file_range = 5320; + syscall_nr_preadv2 = 5321; + syscall_nr_pwritev2 = 5322; + +// The following syscalls are blocked by SECCOMP starting from Android 8. +// Do not use them, unless you know what you are doing. +const + syscall_nr_syslog = 5101 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_klogctl = 5101 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setuid = 5103 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setgid = 5104 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setreuid = 5111 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setgroups = 5114 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setresgid = 5117 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setfsuid = 5120 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setfsgid = 5121 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_adjtimex = 5154 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_chroot = 5156 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_acct = 5158 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_settimeofday = 5159 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_mount = 5160 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_umount2 = 5161 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_swapon = 5162 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_swapoff = 5163 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_reboot = 5164 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_sethostname = 5165 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setdomainname = 5166 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_init_module = 5168 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_delete_module = 5169 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_clock_settime = 5221 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_clock_adjtime = 5300 deprecated 'This syscall is blocked on Android 8+'; diff --git a/rtl/android/mipsel/dllprt0.as b/rtl/android/mipsel/dllprt0.as deleted file mode 100644 index 5237bbf0c7..0000000000 --- a/rtl/android/mipsel/dllprt0.as +++ /dev/null @@ -1,95 +0,0 @@ -/* -Library startup code for Android/MIPS -by Vsevolod Alekseyev -*/ - - .set noat - .section ".text" - .align 4 - - .global FPC_SHARED_LIB_START -FPC_SHARED_LIB_START: - .ent FPC_SHARED_LIB_START - .frame $sp, 32, $ra - .set noreorder - .cpload $t9 - /* - Stack structure: - sp+16 - gp - sp+20 - sp - sp+24 - ra - */ - - /* Save old sp, align the stack, set up the frame, save regs */ - move $t0, $sp - li $t1, -8 - and $sp, $sp, $t1 - subu $sp, $sp, 32 - .cprestore 16 - sw $t0, 20($sp) - sw $ra, 24($sp) - - /* Save initial stack pointer, return address */ - la $t0, __stkptr - sw $sp, ($t0) - - /* Get environment from libc */ - la $t0, environ - lw $t0, ($t0) - bne $t0, $zero, GotEnv - nop - la $t0, EmptyEnv -GotEnv: - la $t1, operatingsystem_parameter_envp - sw $t0, ($t1) - - /* Call main */ - jal FPC_LIB_MAIN_ANDROID - nop - /* Call library init */ - jal FPC_LIB_INIT_ANDROID - nop - - /* restore registers, exit */ - lw $ra, 24($sp) - jr $ra - lw $sp, 20($sp) - .end FPC_SHARED_LIB_START - .size FPC_SHARED_LIB_START, .-FPC_SHARED_LIB_START - -/*************************/ - - .global _haltproc -_haltproc: - .ent _haltproc - .set noreorder - .cpload $t9 - la $t9, exit - jr $t9 - nop - .end _haltproc - .size _haltproc, .-_haltproc - -/*************************/ - - .comm __stkptr,4 - .comm operatingsystem_parameter_envp,4 -operatingsystem_parameter_argc: - .global operatingsystem_parameter_argc - .long 1 -operatingsystem_parameter_argv: - .global operatingsystem_parameter_argv - .long EmptyCmdLine -EmptyCmdLine: - .long EmptyCmdStr -EmptyCmdStr: - .ascii "\0" - -EmptyEnv: - .long 0 - .long 0 - .long 0 - -/* --------------------------------------------------------- */ - .section .init_array, "aw" - .long FPC_SHARED_LIB_START diff --git a/rtl/android/mipsel/prt0.as b/rtl/android/mipsel/prt0.as deleted file mode 100644 index f5177b97b9..0000000000 --- a/rtl/android/mipsel/prt0.as +++ /dev/null @@ -1,57 +0,0 @@ -/* -Startup code for Android/MIPS -by Vsevolod Alekseyev -*/ - - .set at - .section ".text" - .align 4 - - .global _fpc_start -_fpc_start: - .ent _fpc_start - .set noreorder - .cpload $t9 - - /*Align the stack, save the old sp */ - move $t0, $sp - li $t1, -8 - and $sp, $sp, $t1 - sw $t0, __stkptr - - /* Get argc/argv/envp from the stack; old sp is in t0 */ - lw $t1, ($t0) - sw $t1, (operatingsystem_parameter_argc) - addiu $t2, $t0, 4 - sw $t2, (operatingsystem_parameter_argv) - addiu $t3, $t1, 1 - sll $t3, $t3, 2 - add $t2, $t2, $t3 - sw $t2, (operatingsystem_parameter_envp) - - la $t9, _start - jr $t9 - nop - .end _fpc_start - -/*************************/ - - .global _haltproc -_haltproc: - .ent _haltproc - .set noreorder - .cpload $t9 - lw $a0, (operatingsystem_result) - la $t9, exit - jr $t9 - nop - .end _haltproc - .size _haltproc, .-_haltproc - -/*************************/ - - .comm __stkptr,4 - - .comm operatingsystem_parameter_envp,4 - .comm operatingsystem_parameter_argc,4 - .comm operatingsystem_parameter_argv,4 diff --git a/rtl/android/mipsel/sysnr.inc b/rtl/android/mipsel/sysnr.inc index 87b4fa3a79..d3accd6ce7 100644 --- a/rtl/android/mipsel/sysnr.inc +++ b/rtl/android/mipsel/sysnr.inc @@ -1,220 +1,270 @@ -{ - This file is part of the Free Pascal run time library. - Copyright (c) 2017 by Yuriy Sydorov, - member of the Free Pascal development team. - - Syscall nrs for mipsel-android - - 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. - - **********************************************************************} +// Available syscalls for mips-android. +// This file is autogenerated by the genandroidsyscalls.py script. +// Script location: https://svn.freepascal.org/svn/fpcbuild/scripts/android const - __NR_SYSCALL_BASE = 4000; + syscall_nr_exit = 4001; + syscall_nr_fork = 4002; + syscall_nr_read = 4003; + syscall_nr_write = 4004; + syscall_nr_open = 4005; + syscall_nr_close = 4006; + syscall_nr_creat = 4008; + syscall_nr_unlink = 4010; + syscall_nr_execve = 4011; + syscall_nr_chdir = 4012; + syscall_nr_lseek = 4019; + syscall_nr_getpid = 4020; + syscall_nr_getuid = 4024; + syscall_nr_ptrace = 4026; + syscall_nr_access = 4033; + syscall_nr_sync = 4036; + syscall_nr_kill = 4037; + syscall_nr_rename = 4038; + syscall_nr_mkdir = 4039; + syscall_nr_dup = 4041; + syscall_nr_pipe = 4042; + syscall_nr_times = 4043; + syscall_nr_brk = 4045; + syscall_nr_getgid = 4047; + syscall_nr_geteuid = 4049; + syscall_nr_getegid = 4050; + syscall_nr_ioctl = 4054; + syscall_nr_fcntl = 4055; + syscall_nr_setpgid = 4057; + syscall_nr_umask = 4060; + syscall_nr_dup2 = 4063; + syscall_nr_getppid = 4064; + syscall_nr_setsid = 4066; + syscall_nr_sigaction = 4067; + syscall_nr_setregid = 4071; + syscall_nr_setrlimit = 4075; + syscall_nr_getrlimit = 4076; + syscall_nr_getrusage = 4077; + syscall_nr_gettimeofday = 4078; + syscall_nr_getgroups = 4080; + syscall_nr_readlink = 4085; + syscall_nr_mmap = 4090; + syscall_nr_mmap64 = syscall_nr_mmap; + syscall_nr_munmap = 4091; + syscall_nr_truncate = 4092; + syscall_nr_fchmod = 4094; + syscall_nr_fchown = 4095; + syscall_nr_getpriority = 4096; + syscall_nr_setpriority = 4097; + syscall_nr_setitimer = 4104; + syscall_nr_getitimer = 4105; + syscall_nr_wait4 = 4114; + syscall_nr_sysinfo = 4116; + syscall_nr_fsync = 4118; + syscall_nr_sigreturn = 4119; + syscall_nr_clone = 4120; + syscall_nr_uname = 4122; + syscall_nr_mprotect = 4125; + syscall_nr_quotactl = 4131; + syscall_nr_getpgid = 4132; + syscall_nr_fchdir = 4133; + syscall_nr_personality = 4136; + syscall_nr__llseek = 4140; + syscall_nr_getdents = 4141; + syscall_nr__newselect = 4142; + syscall_nr_flock = 4143; + syscall_nr_msync = 4144; + syscall_nr_readv = 4145; + syscall_nr_writev = 4146; + syscall_nr_cacheflush = 4147; + syscall_nr_getsid = 4151; + syscall_nr_fdatasync = 4152; + syscall_nr_mlock = 4154; + syscall_nr_munlock = 4155; + syscall_nr_mlockall = 4156; + syscall_nr_munlockall = 4157; + syscall_nr_sched_setparam = 4158; + syscall_nr_sched_getparam = 4159; + syscall_nr_sched_setscheduler = 4160; + syscall_nr_sched_getscheduler = 4161; + syscall_nr_sched_yield = 4162; + syscall_nr_sched_get_priority_max = 4163; + syscall_nr_sched_get_priority_min = 4164; + syscall_nr_sched_rr_get_interval = 4165; + syscall_nr_nanosleep = 4166; + syscall_nr_mremap = 4167; + syscall_nr_bind = 4169; + syscall_nr_connect = 4170; + syscall_nr_getpeername = 4171; + syscall_nr_getsockname = 4172; + syscall_nr_getsockopt = 4173; + syscall_nr_listen = 4174; + syscall_nr_recvfrom = 4176; + syscall_nr_recvmsg = 4177; + syscall_nr_sendmsg = 4179; + syscall_nr_sendto = 4180; + syscall_nr_setsockopt = 4181; + syscall_nr_shutdown = 4182; + syscall_nr_socket = 4183; + syscall_nr_socketpair = 4184; + syscall_nr_setresuid = 4185; + syscall_nr_getresuid = 4186; + syscall_nr_poll = 4188; + syscall_nr_getresgid = 4191; + syscall_nr_prctl = 4192; + syscall_nr_rt_sigreturn = 4193; + syscall_nr_rt_sigaction = 4194; + syscall_nr_rt_sigprocmask = 4195; + syscall_nr_rt_sigpending = 4196; + syscall_nr_rt_sigtimedwait = 4197; + syscall_nr_rt_sigqueueinfo = 4198; + syscall_nr_rt_sigsuspend = 4199; + syscall_nr_pread64 = 4200; + syscall_nr_pwrite64 = 4201; + syscall_nr_getcwd = 4203; + syscall_nr_capget = 4204; + syscall_nr_capset = 4205; + syscall_nr_sigaltstack = 4206; + syscall_nr_sendfile = 4207; + syscall_nr_mmap2 = 4210; + syscall_nr_truncate64 = 4211; + syscall_nr_ftruncate64 = 4212; + syscall_nr_stat64 = 4213; + syscall_nr_lstat64 = 4214; + syscall_nr_fstat64 = 4215; + syscall_nr_fstat = syscall_nr_fstat64; + syscall_nr_mincore = 4217; + syscall_nr_madvise = 4218; + syscall_nr_getdents64 = 4219; + syscall_nr_fcntl64 = 4220; + syscall_nr_gettid = 4222; + syscall_nr_readahead = 4223; + syscall_nr_setxattr = 4224; + syscall_nr_lsetxattr = 4225; + syscall_nr_fsetxattr = 4226; + syscall_nr_getxattr = 4227; + syscall_nr_lgetxattr = 4228; + syscall_nr_fgetxattr = 4229; + syscall_nr_listxattr = 4230; + syscall_nr_llistxattr = 4231; + syscall_nr_flistxattr = 4232; + syscall_nr_removexattr = 4233; + syscall_nr_lremovexattr = 4234; + syscall_nr_fremovexattr = 4235; + syscall_nr_tkill = 4236; + syscall_nr_sendfile64 = 4237; + syscall_nr_futex = 4238; + syscall_nr_sched_setaffinity = 4239; + syscall_nr_sched_getaffinity = 4240; + syscall_nr_io_setup = 4241; + syscall_nr_io_destroy = 4242; + syscall_nr_io_getevents = 4243; + syscall_nr_io_submit = 4244; + syscall_nr_io_cancel = 4245; + syscall_nr_exit_group = 4246; + syscall_nr_epoll_create = 4248; + syscall_nr_epoll_ctl = 4249; + syscall_nr_epoll_wait = 4250; + syscall_nr_remap_file_pages = 4251; + syscall_nr_set_tid_address = 4252; + syscall_nr_restart_syscall = 4253; + syscall_nr_fadvise64 = 4254; + syscall_nr_statfs64 = 4255; + syscall_nr_fstatfs64 = 4256; + syscall_nr_timer_create = 4257; + syscall_nr_timer_settime = 4258; + syscall_nr_timer_gettime = 4259; + syscall_nr_timer_getoverrun = 4260; + syscall_nr_timer_delete = 4261; + syscall_nr_clock_gettime = 4263; + syscall_nr_clock_getres = 4264; + syscall_nr_clock_nanosleep = 4265; + syscall_nr_tgkill = 4266; + syscall_nr_waitid = 4278; + syscall_nr_set_thread_area = 4283; + syscall_nr_inotify_init = 4284; + syscall_nr_inotify_add_watch = 4285; + syscall_nr_inotify_rm_watch = 4286; + syscall_nr_openat = 4288; + syscall_nr_mkdirat = 4289; + syscall_nr_mknodat = 4290; + syscall_nr_fchownat = 4291; + syscall_nr_fstatat64 = 4293; + syscall_nr_fstatat = syscall_nr_fstatat64; + syscall_nr_unlinkat = 4294; + syscall_nr_renameat = 4295; + syscall_nr_linkat = 4296; + syscall_nr_symlinkat = 4297; + syscall_nr_readlinkat = 4298; + syscall_nr_fchmodat = 4299; + syscall_nr_faccessat = 4300; + syscall_nr_pselect6 = 4301; + syscall_nr_ppoll = 4302; + syscall_nr_unshare = 4303; + syscall_nr_splice = 4304; + syscall_nr_sync_file_range = 4305; + syscall_nr_tee = 4306; + syscall_nr_vmsplice = 4307; + syscall_nr_getcpu = 4312; + syscall_nr_epoll_pwait = 4313; + syscall_nr_utimensat = 4316; + syscall_nr_eventfd = 4319; + syscall_nr_fallocate = 4320; + syscall_nr_fallocate64 = syscall_nr_fallocate; + syscall_nr_timerfd_create = 4321; + syscall_nr_timerfd_gettime = 4322; + syscall_nr_timerfd_settime = 4323; + syscall_nr_signalfd4 = 4324; + syscall_nr_eventfd2 = 4325; + syscall_nr_epoll_create1 = 4326; + syscall_nr_dup3 = 4327; + syscall_nr_pipe2 = 4328; + syscall_nr_inotify_init1 = 4329; + syscall_nr_preadv = 4330; + syscall_nr_pwritev = 4331; + syscall_nr_rt_tgsigqueueinfo = 4332; + syscall_nr_perf_event_open = 4333; + syscall_nr_accept4 = 4334; + syscall_nr_recvmmsg = 4335; + syscall_nr_prlimit64 = 4338; + syscall_nr_prlimit = syscall_nr_prlimit64; + syscall_nr_syncfs = 4342; + syscall_nr_sendmmsg = 4343; + syscall_nr_setns = 4344; + syscall_nr_process_vm_readv = 4345; + syscall_nr_process_vm_writev = 4346; + syscall_nr_sched_setattr = 4349; + syscall_nr_sched_getattr = 4350; + syscall_nr_renameat2 = 4351; + syscall_nr_seccomp = 4352; + syscall_nr_getrandom = 4353; + syscall_nr_memfd_create = 4354; + syscall_nr_execveat = 4356; + syscall_nr_mlock2 = 4359; + syscall_nr_copy_file_range = 4360; + syscall_nr_preadv2 = 4361; + syscall_nr_pwritev2 = 4362; -syscall_nr_exit = (__NR_SYSCALL_BASE + 1); -syscall_nr_fork = (__NR_SYSCALL_BASE + 2); -syscall_nr_read = (__NR_SYSCALL_BASE + 3); -syscall_nr_write = (__NR_SYSCALL_BASE + 4); -syscall_nr_open = (__NR_SYSCALL_BASE + 5); -syscall_nr_close = (__NR_SYSCALL_BASE + 6); -syscall_nr_link = (__NR_SYSCALL_BASE + 9); -syscall_nr_unlink = (__NR_SYSCALL_BASE + 10); -syscall_nr_execve = (__NR_SYSCALL_BASE + 11); -syscall_nr_chdir = (__NR_SYSCALL_BASE + 12); -syscall_nr_mknod = (__NR_SYSCALL_BASE + 14); -syscall_nr_chmod = (__NR_SYSCALL_BASE + 15); -syscall_nr_lseek = (__NR_SYSCALL_BASE + 19); -syscall_nr_getpid = (__NR_SYSCALL_BASE + 20); -syscall_nr_mount = (__NR_SYSCALL_BASE + 21); -syscall_nr_ptrace = (__NR_SYSCALL_BASE + 26); -syscall_nr_pause = (__NR_SYSCALL_BASE + 29); -syscall_nr_access = (__NR_SYSCALL_BASE + 33); -syscall_nr_sync = (__NR_SYSCALL_BASE + 36); -syscall_nr_rename = (__NR_SYSCALL_BASE + 38); -syscall_nr_mkdir = (__NR_SYSCALL_BASE + 39); -syscall_nr_rmdir = (__NR_SYSCALL_BASE + 40); -syscall_nr_dup = (__NR_SYSCALL_BASE + 41); -syscall_nr_times = (__NR_SYSCALL_BASE + 43); -syscall_nr_brk = (__NR_SYSCALL_BASE + 45); -syscall_nr_acct = (__NR_SYSCALL_BASE + 51); -syscall_nr_umount2 = (__NR_SYSCALL_BASE + 52); -syscall_nr_ioctl = (__NR_SYSCALL_BASE + 54); -syscall_nr_fcntl = (__NR_SYSCALL_BASE + 55); -syscall_nr_setpgid = (__NR_SYSCALL_BASE + 57); -syscall_nr_umask = (__NR_SYSCALL_BASE + 60); -syscall_nr_chroot = (__NR_SYSCALL_BASE + 61); -syscall_nr_dup2 = (__NR_SYSCALL_BASE + 63); -syscall_nr_getppid = (__NR_SYSCALL_BASE + 64); -syscall_nr_setsid = (__NR_SYSCALL_BASE + 66); -syscall_nr_sigaction = (__NR_SYSCALL_BASE + 67); -syscall_nr_sigpending = (__NR_SYSCALL_BASE + 73); -syscall_nr_setrlimit = (__NR_SYSCALL_BASE + 75); -syscall_nr_getrusage = (__NR_SYSCALL_BASE + 77); -syscall_nr_gettimeofday = (__NR_SYSCALL_BASE + 78); -syscall_nr_settimeofday = (__NR_SYSCALL_BASE + 79); -syscall_nr_symlink = (__NR_SYSCALL_BASE + 83); -syscall_nr_readlink = (__NR_SYSCALL_BASE + 85); -syscall_nr_reboot = (__NR_SYSCALL_BASE + 88); -syscall_nr_munmap = (__NR_SYSCALL_BASE + 91); -syscall_nr_truncate = (__NR_SYSCALL_BASE + 92); -syscall_nr_ftruncate = (__NR_SYSCALL_BASE + 93); -syscall_nr_fchmod = (__NR_SYSCALL_BASE + 94); -syscall_nr_getpriority = (__NR_SYSCALL_BASE + 96); -syscall_nr_setpriority = (__NR_SYSCALL_BASE + 97); -syscall_nr_syslog = (__NR_SYSCALL_BASE + 103); -syscall_nr_setitimer = (__NR_SYSCALL_BASE + 104); -syscall_nr_getitimer = (__NR_SYSCALL_BASE + 105); -syscall_nr_wait4 = (__NR_SYSCALL_BASE + 114); -syscall_nr_sysinfo = (__NR_SYSCALL_BASE + 116); -syscall_nr_fsync = (__NR_SYSCALL_BASE + 118); -syscall_nr_clone = (__NR_SYSCALL_BASE + 120); -syscall_nr_uname = (__NR_SYSCALL_BASE + 122); -syscall_nr_mprotect = (__NR_SYSCALL_BASE + 125); -syscall_nr_sigprocmask = (__NR_SYSCALL_BASE + 126); -syscall_nr_init_module = (__NR_SYSCALL_BASE + 128); -syscall_nr_delete_module = (__NR_SYSCALL_BASE + 129); -syscall_nr_getpgid = (__NR_SYSCALL_BASE + 132); -syscall_nr_fchdir = (__NR_SYSCALL_BASE + 133); -syscall_nr_personality = (__NR_SYSCALL_BASE + 136); -syscall_nr__llseek = (__NR_SYSCALL_BASE + 140); -syscall_nr__newselect = (__NR_SYSCALL_BASE + 142); -syscall_nr_flock = (__NR_SYSCALL_BASE + 143); -syscall_nr_msync = (__NR_SYSCALL_BASE + 144); -syscall_nr_readv = (__NR_SYSCALL_BASE + 145); -syscall_nr_writev = (__NR_SYSCALL_BASE + 146); -syscall_nr_perf_event_open = (__NR_SYSCALL_BASE + 364); - -syscall_nr_syscall = (__NR_SYSCALL_BASE + 0); -syscall_nr_waitpid = (__NR_SYSCALL_BASE + 7); -syscall_nr_lchown = (__NR_SYSCALL_BASE + 16); -syscall_nr_setuid = (__NR_SYSCALL_BASE + 23); -syscall_nr_getuid = (__NR_SYSCALL_BASE + 24); -syscall_nr_kill = (__NR_SYSCALL_BASE + 37); -syscall_nr_setgid = (__NR_SYSCALL_BASE + 46); -syscall_nr_getgid = (__NR_SYSCALL_BASE + 47); -syscall_nr_geteuid = (__NR_SYSCALL_BASE + 49); -syscall_nr_getegid = (__NR_SYSCALL_BASE + 50); -syscall_nr_setreuid = (__NR_SYSCALL_BASE + 70); -syscall_nr_setregid = (__NR_SYSCALL_BASE + 71); -syscall_nr_sigsuspend = (__NR_SYSCALL_BASE + 72); -syscall_nr_getrlimit = (__NR_SYSCALL_BASE + 76); -syscall_nr_getgroups = (__NR_SYSCALL_BASE + 80); -syscall_nr_setgroups = (__NR_SYSCALL_BASE + 81); -syscall_nr_fchown = (__NR_SYSCALL_BASE + 95); -syscall_nr_cacheflush = (__NR_SYSCALL_BASE + 147); -syscall_nr_fdatasync = (__NR_SYSCALL_BASE + 152); -syscall_nr_mlock = (__NR_SYSCALL_BASE + 154); -syscall_nr_munlock = (__NR_SYSCALL_BASE + 155); -syscall_nr_sched_setparam = (__NR_SYSCALL_BASE + 158); -syscall_nr_sched_getparam = (__NR_SYSCALL_BASE + 159); -syscall_nr_sched_setscheduler = (__NR_SYSCALL_BASE + 160); -syscall_nr_sched_getscheduler = (__NR_SYSCALL_BASE + 161); -syscall_nr_sched_yield = (__NR_SYSCALL_BASE + 162); -syscall_nr_sched_get_priority_max = (__NR_SYSCALL_BASE + 163); -syscall_nr_sched_get_priority_min = (__NR_SYSCALL_BASE + 164); -syscall_nr_sched_rr_get_interval = (__NR_SYSCALL_BASE + 165); -syscall_nr_nanosleep = (__NR_SYSCALL_BASE + 166); -syscall_nr_mremap = (__NR_SYSCALL_BASE + 167); -syscall_nr_accept = (__NR_SYSCALL_BASE + 168); -syscall_nr_bind = (__NR_SYSCALL_BASE + 169); -syscall_nr_connect = (__NR_SYSCALL_BASE + 170); -syscall_nr_getpeername = (__NR_SYSCALL_BASE + 171); -syscall_nr_getsockname = (__NR_SYSCALL_BASE + 172); -syscall_nr_getsockopt = (__NR_SYSCALL_BASE + 173); -syscall_nr_listen = (__NR_SYSCALL_BASE + 174); -syscall_nr_recvfrom = (__NR_SYSCALL_BASE + 176); -syscall_nr_recvmsg = (__NR_SYSCALL_BASE + 177); -syscall_nr_sendmsg = (__NR_SYSCALL_BASE + 179); -syscall_nr_sendto = (__NR_SYSCALL_BASE + 180); -syscall_nr_setsockopt = (__NR_SYSCALL_BASE + 181); -syscall_nr_shutdown = (__NR_SYSCALL_BASE + 182); -syscall_nr_socket = (__NR_SYSCALL_BASE + 183); -syscall_nr_socketpair = (__NR_SYSCALL_BASE + 184); -syscall_nr_setresuid = (__NR_SYSCALL_BASE + 185); -syscall_nr_getresuid = (__NR_SYSCALL_BASE + 186); -syscall_nr_poll = (__NR_SYSCALL_BASE + 188); -syscall_nr_setresgid = (__NR_SYSCALL_BASE + 190); -syscall_nr_getresgid = (__NR_SYSCALL_BASE + 191); -syscall_nr_prctl = (__NR_SYSCALL_BASE + 192); -syscall_nr_rt_sigaction = (__NR_SYSCALL_BASE + 194); -syscall_nr_rt_sigprocmask = (__NR_SYSCALL_BASE + 195); -syscall_nr_rt_sigtimedwait = (__NR_SYSCALL_BASE + 197); -syscall_nr_pread64 = (__NR_SYSCALL_BASE + 200); -syscall_nr_pwrite64 = (__NR_SYSCALL_BASE + 201); -syscall_nr_chown = (__NR_SYSCALL_BASE + 202); -syscall_nr_getcwd = (__NR_SYSCALL_BASE + 203); -syscall_nr_capget = (__NR_SYSCALL_BASE + 204); -syscall_nr_capset = (__NR_SYSCALL_BASE + 205); -syscall_nr_sigaltstack = (__NR_SYSCALL_BASE + 206); -syscall_nr_sendfile = (__NR_SYSCALL_BASE + 207); -syscall_nr_mmap2 = (__NR_SYSCALL_BASE + 210); -syscall_nr_ftruncate64 = (__NR_SYSCALL_BASE + 212); -syscall_nr_stat64 = (__NR_SYSCALL_BASE + 213); -syscall_nr_lstat64 = (__NR_SYSCALL_BASE + 214); -syscall_nr_fstat64 = (__NR_SYSCALL_BASE + 215); -syscall_nr_mincore = (__NR_SYSCALL_BASE + 217); -syscall_nr_madvise = (__NR_SYSCALL_BASE + 218); -syscall_nr_getdents64 = (__NR_SYSCALL_BASE + 219); -syscall_nr_fcntl64 = (__NR_SYSCALL_BASE + 220); -syscall_nr_gettid = (__NR_SYSCALL_BASE + 222); -syscall_nr_readahead = (__NR_SYSCALL_BASE + 223); -syscall_nr_setxattr = (__NR_SYSCALL_BASE + 224); -syscall_nr_lsetxattr = (__NR_SYSCALL_BASE + 225); -syscall_nr_fsetxattr = (__NR_SYSCALL_BASE + 226); -syscall_nr_getxattr = (__NR_SYSCALL_BASE + 227); -syscall_nr_lgetxattr = (__NR_SYSCALL_BASE + 228); -syscall_nr_fgetxattr = (__NR_SYSCALL_BASE + 229); -syscall_nr_listxattr = (__NR_SYSCALL_BASE + 230); -syscall_nr_llistxattr = (__NR_SYSCALL_BASE + 231); -syscall_nr_flistxattr = (__NR_SYSCALL_BASE + 232); -syscall_nr_removexattr = (__NR_SYSCALL_BASE + 233); -syscall_nr_lremovexattr = (__NR_SYSCALL_BASE + 234); -syscall_nr_fremovexattr = (__NR_SYSCALL_BASE + 235); -syscall_nr_tkill = (__NR_SYSCALL_BASE + 236); -syscall_nr_futex = (__NR_SYSCALL_BASE + 238); -syscall_nr_sched_setaffinity = (__NR_SYSCALL_BASE + 239); -syscall_nr_sched_getaffinity = (__NR_SYSCALL_BASE + 240); -syscall_nr_exit_group = (__NR_SYSCALL_BASE + 246); -syscall_nr_epoll_create = (__NR_SYSCALL_BASE + 248); -syscall_nr_epoll_ctl = (__NR_SYSCALL_BASE + 249); -syscall_nr_epoll_wait = (__NR_SYSCALL_BASE + 250); -syscall_nr_statfs64 = (__NR_SYSCALL_BASE + 255); -syscall_nr_fstatfs64 = (__NR_SYSCALL_BASE + 256); -syscall_nr_timer_create = (__NR_SYSCALL_BASE + 257); -syscall_nr_timer_settime = (__NR_SYSCALL_BASE + 258); -syscall_nr_timer_gettime = (__NR_SYSCALL_BASE + 259); -syscall_nr_timer_getoverrun = (__NR_SYSCALL_BASE + 260); -syscall_nr_timer_delete = (__NR_SYSCALL_BASE + 261); -syscall_nr_clock_settime = (__NR_SYSCALL_BASE + 262); -syscall_nr_clock_gettime = (__NR_SYSCALL_BASE + 263); -syscall_nr_clock_getres = (__NR_SYSCALL_BASE + 264); -syscall_nr_clock_nanosleep = (__NR_SYSCALL_BASE + 265); -syscall_nr_tgkill = (__NR_SYSCALL_BASE + 266); -syscall_nr_utimes = (__NR_SYSCALL_BASE + 267); -syscall_nr_waitid = (__NR_SYSCALL_BASE + 278); -syscall_nr_set_thread_area = (__NR_SYSCALL_BASE + 283); -syscall_nr_inotify_init = (__NR_SYSCALL_BASE + 284); -syscall_nr_inotify_add_watch = (__NR_SYSCALL_BASE + 285); -syscall_nr_inotify_rm_watch = (__NR_SYSCALL_BASE + 286); -syscall_nr_openat = (__NR_SYSCALL_BASE + 288); -syscall_nr_mkdirat = (__NR_SYSCALL_BASE + 289); -syscall_nr_fchownat = (__NR_SYSCALL_BASE + 291); -syscall_nr_fstatat64 = (__NR_SYSCALL_BASE + 293); -syscall_nr_unlinkat = (__NR_SYSCALL_BASE + 294); -syscall_nr_renameat = (__NR_SYSCALL_BASE + 295); -syscall_nr_fchmodat = (__NR_SYSCALL_BASE + 299); -syscall_nr_faccessat = (__NR_SYSCALL_BASE + 300); -syscall_nr_unshare = (__NR_SYSCALL_BASE + 303); -syscall_nr_getcpu = (__NR_SYSCALL_BASE + 312); -syscall_nr_ioprio_set = (__NR_SYSCALL_BASE + 314); -syscall_nr_ioprio_get = (__NR_SYSCALL_BASE + 315); -syscall_nr_utimensat = (__NR_SYSCALL_BASE + 316); -syscall_nr_eventfd2 = (__NR_SYSCALL_BASE + 325); -syscall_nr_pipe2 = (__NR_SYSCALL_BASE + 328); -syscall_nr_pipe = (__NR_SYSCALL_BASE + 42); +// The following syscalls are blocked by SECCOMP starting from Android 8. +// Do not use them, unless you know what you are doing. +const + syscall_nr_mount = 4021 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setuid = 4023 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setgid = 4046 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_acct = 4051 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_umount2 = 4052 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_chroot = 4061 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setreuid = 4070 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_sethostname = 4074 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_settimeofday = 4079 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setgroups = 4081 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_swapon = 4087 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_reboot = 4088 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_syslog = 4103 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_klogctl = 4103 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_swapoff = 4115 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setdomainname = 4121 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_adjtimex = 4124 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_init_module = 4128 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_delete_module = 4129 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setfsuid = 4138 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setfsgid = 4139 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setresgid = 4190 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_clock_settime = 4262 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_clock_adjtime = 4341 deprecated 'This syscall is blocked on Android 8+'; diff --git a/rtl/android/prt0.as b/rtl/android/prt0.as new file mode 100644 index 0000000000..8fc3f3123b --- /dev/null +++ b/rtl/android/prt0.as @@ -0,0 +1,34 @@ +# +# This file is part of the Free Pascal run time library. +# Copyright (c) 2018 by Yuriy Sydorov and other +# 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. +# +#**********************************************************************} +# +# Program startup code for Free Pascal. Android target. +# + +/* --------------------------------------------------------- */ +.data +/* Define a symbol for the first piece of initialized data. */ + .globl __data_start +__data_start: + .long 0 + .weak data_start + data_start = __data_start + +/* --------------------------------------------------------- */ + .section .init_array, "aw" + +.ifdef CPU64 + .quad FPC_PROG_START_ANDROID +.else + .long FPC_PROG_START_ANDROID +.endif diff --git a/rtl/android/sysandroid.inc b/rtl/android/sysandroid.inc index 33272de347..8a34b0ea9d 100644 --- a/rtl/android/sysandroid.inc +++ b/rtl/android/sysandroid.inc @@ -1,6 +1,6 @@ { This file is part of the Free Pascal run time library. - Copyright (c) 2015 by Yury Sidorov, + Copyright (c) 2015-2018 by Yuriy Sydorov, member of the Free Pascal development team. Android-specific part of the System unit. @@ -13,6 +13,72 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. **********************************************************************} +var + __stkptr : Pointer; public name '__stkptr'; + operatingsystem_parameter_envp : Pointer; public name 'operatingsystem_parameter_envp'; + operatingsystem_parameter_argc : LongInt; public name 'operatingsystem_parameter_argc'; + operatingsystem_parameter_argv : Pointer; public name 'operatingsystem_parameter_argv'; + + _environ: pointer external name 'environ'; + + GetIcuProc: pointer; public name 'ANDROID_GET_ICU_PROC'; + +procedure CommonMainAndroid; +const + EmptyEnv: array[0..2] of PAnsiChar = (nil, nil, nil); + EmptyCmdLine: array[0..0] of PAnsiChar = ( '' ); +var + i: longint; + p: PPAnsiChar; +begin + // Get the current stack pointer, adjust and save it + __stkptr:=pointer(ptruint(Sptr) or $FFFF); + // Get the environment from the environ variable of libc + p:=_environ; + if p = nil then + operatingsystem_parameter_envp:=@EmptyEnv + else + begin + operatingsystem_parameter_envp:=p; + // Finding argc and argv. They are placed before envp + Dec(p); + if p^ = nil then + begin + i:=0; + while i < 200 do + begin + Dec(p); + if ptrint(p^) = i then + begin + // argc found + operatingsystem_parameter_argc:=i; + operatingsystem_parameter_argv:=p + 1; + break; + end; + Inc(i); + end; + end; + end; + + if operatingsystem_parameter_argc = 0 then + begin + // argc and argv are not available + operatingsystem_parameter_argc:=1; + operatingsystem_parameter_argv:=@EmptyCmdLine; + end; +end; + +// ************* Program startup code + +procedure ProgMainAndroid; cdecl; [public, alias:'FPC_PROG_START_ANDROID']; +begin + CommonMainAndroid; +end; + +// ************* Shared library startup code + +procedure LibMainAndroid; external name 'FPC_LIB_MAIN_ANDROID'; + procedure atexit(p: pointer); cdecl; external; var @@ -44,8 +110,15 @@ begin end; end; -procedure SysInitAndroidLib; [public, alias:'FPC_LIB_INIT_ANDROID']; +// This procedure is called first when a shared library is loaded + +procedure AndroidLibStart; cdecl; [public, alias:'FPC_LIB_START_ANDROID']; begin + CommonMainAndroid; + // Call main code FPC_LIB_MAIN_ANDROID of the library. + // It points either to a standard PASCALMAIN or FPC_JNI_LIB_MAIN_ANDROID if JNI_OnLoad is exported by the library + // The linker makes all the magic. + LibMainAndroid; { Starting from Android 4.4 stdio handles are closed by libc prior to calling finalization routines of shared libraries. This causes a error while trying to writeln during library finalization and finally a crash because the error can @@ -59,6 +132,38 @@ begin atexit(@SysAndroidLibExit); end; +// ************* JNI init + +function JNI_OnLoad_Real(vm: pointer; reserved: pointer): longint;{$ifdef windows} stdcall {$else} cdecl {$endif}; external name 'FPC_JNI_ON_LOAD'; +procedure PascalMain; external name 'PASCALMAIN'; + +// This proxy function is called when JVM calls the JNI_OnLoad() exported function +function JNI_OnLoad_Proxy(vm: pointer; reserved: pointer): longint;{$ifdef windows} stdcall {$else} cdecl {$endif}; [public, alias:'FPC_JNI_ON_LOAD_PROXY']; +begin + IsJniLibrary:=True; + // Call library initialization + PascalMain; + // Call user's JNI_OnLoad(). + Result:=JNI_OnLoad_Real(vm, reserved); +end; + +// This procedure is called instead of library initialization when JNI_OnLoad is exported +procedure JniLibMain; [public, alias:'FPC_JNI_LIB_MAIN_ANDROID']; +begin + // Must be empty. +end; + +// ************* haltproc + +procedure _exit(e:longint); cdecl; external name 'exit'; + +procedure _haltproc(e:longint);cdecl; [public, alias: {$if defined(CPUARM) and defined(FPC_ABI_EABI)} '_haltproc_eabi' {$else} '_haltproc' {$endif}]; +begin + _exit(e); +end; + +// ************* Misc functions + function __system_property_get(name:Pchar; value:Pchar):longint;cdecl;external 'c' name '__system_property_get'; function GetSystemProperty(Name: PAnsiChar): shortstring; @@ -206,27 +311,6 @@ begin DefaultLogTag[len + 1]:=#0; end; -// ************* JNI init - -function JNI_OnLoad_Real(vm: pointer; reserved: pointer): longint;{$ifdef windows} stdcall {$else} cdecl {$endif}; external name 'FPC_JNI_ON_LOAD'; -procedure PascalMain; external name 'PASCALMAIN'; - -// This proxy function is called when JVM calls the JNI_OnLoad() exported function -function JNI_OnLoad_Proxy(vm: pointer; reserved: pointer): longint;{$ifdef windows} stdcall {$else} cdecl {$endif}; [public, alias:'FPC_JNI_ON_LOAD_PROXY']; -begin - IsJniLibrary:=True; - // Call library initialization - PascalMain; - // Call user's JNI_OnLoad(). - Result:=JNI_OnLoad_Real(vm, reserved); -end; - -// This procedure is called instead of library initialization when JNI_OnLoad is exported -procedure JniLibMain; [public, alias:'FPC_JNI_LIB_MAIN_ANDROID']; -begin - // Must be empty. -end; - // ************* System init procedure InitAndroid; diff --git a/rtl/android/unixandroid.inc b/rtl/android/unixandroid.inc index a676665acb..f8357b30d3 100644 --- a/rtl/android/unixandroid.inc +++ b/rtl/android/unixandroid.inc @@ -45,7 +45,7 @@ var TZStandardName: utf8string; TZDaylightName: utf8string; -function GetIcuProc(const Name: AnsiString; var ProcPtr; libId: longint): boolean; external name 'CWSTRING_GET_ICU_PROC'; + GetIcuProc: function (const Name: AnsiString; var ProcPtr; libId: longint): boolean; external name 'ANDROID_GET_ICU_PROC'; procedure ReadTimeZoneFromICU; var @@ -55,6 +55,7 @@ var err: UErrorCode; cal: UCalendar; begin + if not Assigned(GetIcuProc) then exit; if not GetIcuProc('ucal_open', ucal_open, 1) then exit; if not GetIcuProc('ucal_close', ucal_close, 1) then exit; if not GetIcuProc('ucal_getTimeZoneDisplayName', ucal_getTimeZoneDisplayName, 1) then exit; @@ -103,33 +104,33 @@ type true : (__tm_gmtoff : longint;__tm_zone : Pchar); end; -function localtime(t: PLongInt): Ptm; cdecl; external 'c' name 'localtime'; +function localtime(t: Ptime_t): Ptm; cdecl; external 'c' name 'localtime'; var c_tzname: array[0..1] of PAnsiChar; external 'c' name 'tzname'; -procedure ReadTimeZoneFromLibC; +function ReadTimeZoneFromLibC: boolean; var - t: longint; + t: time_t; tt: Ptm; begin - t:=fptime; - tt:=localtime(@t); + ReadTimeZoneFromLibC:=False; tzname[false]:=c_tzname[0]; tzname[true]:=c_tzname[1]; + t:=fptime; + tt:=localtime(@t); if tt <> nil then begin tzdaylight:=tt^.tm_isdst <> 0; tzseconds:=tt^.tm_gmtoff; + ReadTimeZoneFromLibC:=tzname[false] <> nil; end; end; procedure InitLocalTime; begin - if SystemApiLevel > 10 then - ReadTimeZoneFromLibC; - // If cuurent Android version is too old and does not support timezone - // in libc, use ICU library. - if tzname[false] = nil then + if (SystemApiLevel <= 10) or not ReadTimeZoneFromLibC then + // If current Android version is too old and does not support timezone + // in libc, use ICU library. ReadTimeZoneFromICU; end; diff --git a/rtl/android/x86_64/sysnr.inc b/rtl/android/x86_64/sysnr.inc new file mode 100644 index 0000000000..c3ae28e1dc --- /dev/null +++ b/rtl/android/x86_64/sysnr.inc @@ -0,0 +1,249 @@ +// Available syscalls for x86_64-android. +// This file is autogenerated by the genandroidsyscalls.py script. +// Script location: https://svn.freepascal.org/svn/fpcbuild/scripts/android + +const + syscall_nr_read = 0; + syscall_nr_write = 1; + syscall_nr_close = 3; + syscall_nr_fstat = 5; + syscall_nr_fstat64 = syscall_nr_fstat; + syscall_nr_lseek = 8; + syscall_nr_mmap = 9; + syscall_nr_mmap64 = syscall_nr_mmap; + syscall_nr_mprotect = 10; + syscall_nr_munmap = 11; + syscall_nr_brk = 12; + syscall_nr_rt_sigaction = 13; + syscall_nr_rt_sigprocmask = 14; + syscall_nr_rt_sigreturn = 15; + syscall_nr_ioctl = 16; + syscall_nr_pread64 = 17; + syscall_nr_pwrite64 = 18; + syscall_nr_readv = 19; + syscall_nr_writev = 20; + syscall_nr_sched_yield = 24; + syscall_nr_mremap = 25; + syscall_nr_msync = 26; + syscall_nr_mincore = 27; + syscall_nr_madvise = 28; + syscall_nr_dup = 32; + syscall_nr_nanosleep = 35; + syscall_nr_getitimer = 36; + syscall_nr_setitimer = 38; + syscall_nr_getpid = 39; + syscall_nr_sendfile = 40; + syscall_nr_socket = 41; + syscall_nr_connect = 42; + syscall_nr_sendto = 44; + syscall_nr_recvfrom = 45; + syscall_nr_sendmsg = 46; + syscall_nr_recvmsg = 47; + syscall_nr_shutdown = 48; + syscall_nr_bind = 49; + syscall_nr_listen = 50; + syscall_nr_getsockname = 51; + syscall_nr_getpeername = 52; + syscall_nr_socketpair = 53; + syscall_nr_setsockopt = 54; + syscall_nr_getsockopt = 55; + syscall_nr_clone = 56; + syscall_nr_vfork = 58; + syscall_nr_execve = 59; + syscall_nr_exit = 60; + syscall_nr_wait4 = 61; + syscall_nr_kill = 62; + syscall_nr_uname = 63; + syscall_nr_fcntl = 72; + syscall_nr_flock = 73; + syscall_nr_fsync = 74; + syscall_nr_fdatasync = 75; + syscall_nr_truncate = 76; + syscall_nr_ftruncate = 77; + syscall_nr_ftruncate64 = syscall_nr_ftruncate; + syscall_nr_getcwd = 79; + syscall_nr_chdir = 80; + syscall_nr_fchdir = 81; + syscall_nr_fchmod = 91; + syscall_nr_fchown = 93; + syscall_nr_umask = 95; + syscall_nr_gettimeofday = 96; + syscall_nr_getrlimit = 97; + syscall_nr_getrusage = 98; + syscall_nr_sysinfo = 99; + syscall_nr_times = 100; + syscall_nr_ptrace = 101; + syscall_nr_getuid = 102; + syscall_nr_getgid = 104; + syscall_nr_geteuid = 107; + syscall_nr_getegid = 108; + syscall_nr_setpgid = 109; + syscall_nr_getppid = 110; + syscall_nr_setsid = 112; + syscall_nr_setregid = 114; + syscall_nr_getgroups = 115; + syscall_nr_setresuid = 117; + syscall_nr_getresuid = 118; + syscall_nr_getresgid = 120; + syscall_nr_getpgid = 121; + syscall_nr_getsid = 124; + syscall_nr_capget = 125; + syscall_nr_capset = 126; + syscall_nr_rt_sigpending = 127; + syscall_nr_rt_sigtimedwait = 128; + syscall_nr_rt_sigqueueinfo = 129; + syscall_nr_rt_sigsuspend = 130; + syscall_nr_sigaltstack = 131; + syscall_nr_personality = 135; + syscall_nr_statfs = 137; + syscall_nr_fstatfs = 138; + syscall_nr_getpriority = 140; + syscall_nr_setpriority = 141; + syscall_nr_sched_setparam = 142; + syscall_nr_sched_getparam = 143; + syscall_nr_sched_setscheduler = 144; + syscall_nr_sched_getscheduler = 145; + syscall_nr_sched_get_priority_max = 146; + syscall_nr_sched_get_priority_min = 147; + syscall_nr_sched_rr_get_interval = 148; + syscall_nr_mlock = 149; + syscall_nr_munlock = 150; + syscall_nr_mlockall = 151; + syscall_nr_munlockall = 152; + syscall_nr_pivot_root = 155; + syscall_nr_prctl = 157; + syscall_nr_arch_prctl = 158; + syscall_nr_setrlimit = 160; + syscall_nr_sync = 162; + syscall_nr_quotactl = 179; + syscall_nr_gettid = 186; + syscall_nr_readahead = 187; + syscall_nr_setxattr = 188; + syscall_nr_lsetxattr = 189; + syscall_nr_fsetxattr = 190; + syscall_nr_getxattr = 191; + syscall_nr_lgetxattr = 192; + syscall_nr_fgetxattr = 193; + syscall_nr_listxattr = 194; + syscall_nr_llistxattr = 195; + syscall_nr_flistxattr = 196; + syscall_nr_removexattr = 197; + syscall_nr_lremovexattr = 198; + syscall_nr_fremovexattr = 199; + syscall_nr_tkill = 200; + syscall_nr_futex = 202; + syscall_nr_sched_setaffinity = 203; + syscall_nr_sched_getaffinity = 204; + syscall_nr_io_setup = 206; + syscall_nr_io_destroy = 207; + syscall_nr_io_getevents = 208; + syscall_nr_io_submit = 209; + syscall_nr_io_cancel = 210; + syscall_nr_getdents64 = 217; + syscall_nr_set_tid_address = 218; + syscall_nr_restart_syscall = 219; + syscall_nr_fadvise64 = 221; + syscall_nr_timer_create = 222; + syscall_nr_timer_settime = 223; + syscall_nr_timer_gettime = 224; + syscall_nr_timer_getoverrun = 225; + syscall_nr_timer_delete = 226; + syscall_nr_clock_gettime = 228; + syscall_nr_clock_getres = 229; + syscall_nr_clock_nanosleep = 230; + syscall_nr_exit_group = 231; + syscall_nr_epoll_ctl = 233; + syscall_nr_tgkill = 234; + syscall_nr_waitid = 247; + syscall_nr_ioprio_set = 251; + syscall_nr_ioprio_get = 252; + syscall_nr_inotify_add_watch = 254; + syscall_nr_inotify_rm_watch = 255; + syscall_nr_openat = 257; + syscall_nr_mkdirat = 258; + syscall_nr_mknodat = 259; + syscall_nr_fchownat = 260; + syscall_nr_newfstatat = 262; + syscall_nr_fstatat = syscall_nr_newfstatat; + syscall_nr_fstatat64 = syscall_nr_newfstatat; + syscall_nr_unlinkat = 263; + syscall_nr_renameat = 264; + syscall_nr_linkat = 265; + syscall_nr_symlinkat = 266; + syscall_nr_readlinkat = 267; + syscall_nr_fchmodat = 268; + syscall_nr_faccessat = 269; + syscall_nr_pselect6 = 270; + syscall_nr_ppoll = 271; + syscall_nr_unshare = 272; + syscall_nr_splice = 275; + syscall_nr_tee = 276; + syscall_nr_sync_file_range = 277; + syscall_nr_vmsplice = 278; + syscall_nr_utimensat = 280; + syscall_nr_epoll_pwait = 281; + syscall_nr_timerfd_create = 283; + syscall_nr_fallocate = 285; + syscall_nr_fallocate64 = syscall_nr_fallocate; + syscall_nr_timerfd_settime = 286; + syscall_nr_timerfd_gettime = 287; + syscall_nr_accept4 = 288; + syscall_nr_signalfd4 = 289; + syscall_nr_eventfd2 = 290; + syscall_nr_eventfd = syscall_nr_eventfd2; + syscall_nr_epoll_create1 = 291; + syscall_nr_dup3 = 292; + syscall_nr_pipe2 = 293; + syscall_nr_inotify_init1 = 294; + syscall_nr_preadv = 295; + syscall_nr_pwritev = 296; + syscall_nr_rt_tgsigqueueinfo = 297; + syscall_nr_perf_event_open = 298; + syscall_nr_recvmmsg = 299; + syscall_nr_prlimit64 = 302; + syscall_nr_prlimit = syscall_nr_prlimit64; + syscall_nr_syncfs = 306; + syscall_nr_sendmmsg = 307; + syscall_nr_setns = 308; + syscall_nr_getcpu = 309; + syscall_nr_process_vm_readv = 310; + syscall_nr_process_vm_writev = 311; + syscall_nr_sched_setattr = 314; + syscall_nr_sched_getattr = 315; + syscall_nr_renameat2 = 316; + syscall_nr_seccomp = 317; + syscall_nr_getrandom = 318; + syscall_nr_memfd_create = 319; + syscall_nr_execveat = 322; + syscall_nr_mlock2 = 325; + syscall_nr_copy_file_range = 326; + syscall_nr_preadv2 = 327; + syscall_nr_pwritev2 = 328; + +// The following syscalls are blocked by SECCOMP starting from Android 8. +// Do not use them, unless you know what you are doing. +const + syscall_nr_syslog = 103 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_klogctl = 103 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setuid = 105 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setgid = 106 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setreuid = 113 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setgroups = 116 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setresgid = 119 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setfsuid = 122 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setfsgid = 123 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_adjtimex = 159 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_chroot = 161 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_acct = 163 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_settimeofday = 164 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_mount = 165 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_umount2 = 166 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_swapon = 167 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_swapoff = 168 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_reboot = 169 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_sethostname = 170 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_setdomainname = 171 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_init_module = 175 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_delete_module = 176 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_clock_settime = 227 deprecated 'This syscall is blocked on Android 8+'; + syscall_nr_clock_adjtime = 305 deprecated 'This syscall is blocked on Android 8+'; diff --git a/rtl/inc/isotmp.inc b/rtl/inc/isotmp.inc index 5075821cd5..c286672c15 100644 --- a/rtl/inc/isotmp.inc +++ b/rtl/inc/isotmp.inc @@ -88,7 +88,7 @@ {$pop} -{$ELSEIF defined(UNIX)} +{$ELSEIF defined(UNIX) and not defined(android)} function getTempDir: string; var diff --git a/rtl/linux/aarch64/sighndh.inc b/rtl/linux/aarch64/sighndh.inc index 8fa6a35ebd..937b8a4203 100644 --- a/rtl/linux/aarch64/sighndh.inc +++ b/rtl/linux/aarch64/sighndh.inc @@ -42,6 +42,11 @@ type uc_flags : cULong; uc_link : PUContext; uc_stack : stack_t; - uc_mcontext : TSigContext; uc_sigmask : sigset_t; + __padding : array[1..128 - sizeof(sigset_t)] of byte; + __pad : cULong; + { The following field should be 16-byte-aligned. Currently the + directive for specifying alignment is buggy, so the preceding + field was added so that the record has the right size. } + uc_mcontext : TSigContext; end; diff --git a/rtl/linux/bunxsysc.inc b/rtl/linux/bunxsysc.inc index c4ec9dbe2f..280705ab1a 100644 --- a/rtl/linux/bunxsysc.inc +++ b/rtl/linux/bunxsysc.inc @@ -15,21 +15,6 @@ **********************************************************************} -{$ifdef android} -const - syscall_nr_pread = syscall_nr_pread64; - syscall_nr_pwrite = syscall_nr_pwrite64; -{$ifndef cpumips} - syscall_nr_getuid = syscall_nr_getuid32; - syscall_nr_geteuid = syscall_nr_geteuid32; - syscall_nr_getgid = syscall_nr_getgid32; - syscall_nr_getegid = syscall_nr_getegid32; - syscall_nr_setuid = syscall_nr_setuid32; - syscall_nr_setgid = syscall_nr_setgid32; - syscall_nr_getgroups = syscall_nr_getgroups32; -{$endif cpumips} -{$endif android} - Function fpKill(Pid:pid_t;Sig:cint):cint; { Send signal 'sig' to a process, or a group of processes. @@ -52,11 +37,7 @@ Function fpSigPending(var nset: TSigSet):cint; signals is set in SSet } begin -{$ifdef android} - fpsigpending:=do_syscall(syscall_nr_sigpending,TSysParam(@nset)); -{$else} fpsigpending:=do_syscall(syscall_nr_rt_sigpending,TSysParam(@nset)); -{$endif android} end; function fpsigsuspend(const sigmask:TSigSet):cint; @@ -66,11 +47,7 @@ function fpsigsuspend(const sigmask:TSigSet):cint; } begin -{$ifdef android} - fpsigsuspend:= do_syscall(syscall_nr_sigsuspend,TSysParam(@sigmask)); -{$else} fpsigsuspend:= do_syscall(syscall_nr_rt_sigsuspend,TSysParam(@sigmask),TSysParam(8)); -{$endif android} end; function fpsigtimedwait(const sigset:TSigSet;info:Psiginfo;timeout:Ptimespec):cint; @@ -320,7 +297,7 @@ end; function fpgetpgrp : pid_t; begin -{$if defined(generic_linux_syscalls) or defined(android)} +{$if defined(generic_linux_syscalls)} fpgetpgrp:=do_syscall(syscall_nr_getpgid,0); {$else} fpgetpgrp:=do_syscall(syscall_nr_getpgrp); @@ -336,11 +313,7 @@ end; function fpgetsid (pid:TPid): pid_t; begin -{$ifdef android} - fpgetsid:=0; -{$else} fpgetsid:=do_syscall(syscall_nr_getsid,pid); -{$endif android} end; Function fpumask(cmask:mode_t):mode_t; @@ -389,7 +362,7 @@ end; Function fpchown(path:pchar;owner:uid_t;group:gid_t):cint; begin -{$if defined(generic_linux_syscalls) or defined(android)} +{$if defined(generic_linux_syscalls)} fpChOwn:=do_syscall(syscall_nr_fchownat,AT_FDCWD,TSysParam(path),TSysParam(owner),TSysParam(group),0); {$else} fpChOwn:=do_syscall(syscall_nr_chown,TSysParam(path),TSysParam(owner),TSysParam(group)); @@ -487,7 +460,7 @@ Function fpSelect(N:cint;readfds,writefds,exceptfds:pfdSet;TimeOut:PTimeVal):cin Select checks whether the file descriptor sets in readfs/writefs/exceptfs have changed. } -{$if defined(generic_linux_syscalls)} +{$if defined(generic_linux_syscalls) and not defined(NO_SYSCALL_PSELECT6)} var ts : timespec; pts : PTimeSpec; @@ -522,7 +495,7 @@ end; {$endif} function fpPoll(fds: ppollfd; nfds: cuint; timeout: clong): cint; -{$if defined(generic_linux_syscalls)} +{$if defined(generic_linux_syscalls) and not defined(NO_SYSCALL_PPOLL)} var ts : timespec; begin if timeout<0 then @@ -569,12 +542,12 @@ function fpNice(N:cint):cint; Doesn't exist in BSD. Linux emu uses setpriority in a construct as below: } -{$if defined(generic_linux_syscalls) or defined(cpux86_64) or defined(android)} +{$if defined(generic_linux_syscalls) or defined(cpux86_64)} var oldprio : cint; {$endif} begin -{$if defined(generic_linux_syscalls) or defined(cpux86_64) or defined(android)} +{$if defined(generic_linux_syscalls) or defined(cpux86_64)} oldprio:=fpGetPriority(Prio_Process,0); fpNice:=fpSetPriority(Prio_Process,0,oldprio+N); if fpNice=0 then diff --git a/rtl/linux/linux.pp b/rtl/linux/linux.pp index a18365053c..dd7e7030fd 100644 --- a/rtl/linux/linux.pp +++ b/rtl/linux/linux.pp @@ -110,6 +110,7 @@ const wake UADDR2; } {$ifndef FPC_USE_LIBC} +{$ifndef android} function futex(uaddr:Pcint;op,val:cint;timeout:Ptimespec;addr2:Pcint;val3:cint):cint;{$ifdef SYSTEMINLINE}inline;{$endif} function futex(var uaddr;op,val:cint;timeout:Ptimespec;var addr2;val3:cint):cint;{$ifdef SYSTEMINLINE}inline;{$endif} function futex(var uaddr;op,val:cint;var timeout:Ttimespec;var addr2;val3:cint):cint;{$ifdef SYSTEMINLINE}inline;{$endif} @@ -117,6 +118,7 @@ function futex(var uaddr;op,val:cint;var timeout:Ttimespec;var addr2;val3:cint): function futex(uaddr:Pcint;op,val:cint;timeout:Ptimespec):cint;{$ifdef SYSTEMINLINE}inline;{$endif} function futex(var uaddr;op,val:cint;timeout:Ptimespec):cint;{$ifdef SYSTEMINLINE}inline;{$endif} function futex(var uaddr;op,val:cint;var timeout:Ttimespec):cint;{$ifdef SYSTEMINLINE}inline;{$endif} +{$endif android} {$else} // futex is currently not exposed by glibc //function futex(uaddr:Pcint;op,val:cint;timeout:Ptimespec;addr2:Pcint;val3:cint):cint; cdecl; external name 'futex'; @@ -624,6 +626,8 @@ begin fdatasync:=do_SysCall(syscall_nr_fdatasync, fd); end; +{$ifndef android} + function futex(uaddr:Pcint;op,val:cint;timeout:Ptimespec;addr2:Pcint;val3:cint):cint;{$ifdef SYSTEMINLINE}inline;{$endif} begin @@ -663,6 +667,8 @@ begin futex:=do_syscall(syscall_nr_futex,Tsysparam(@uaddr),Tsysparam(op),Tsysparam(val),Tsysparam(@timeout)); end; +{$endif android} + {$else} {Libc case.} @@ -753,12 +759,6 @@ begin clock_settime:=do_SysCall(syscall_nr_clock_settime,tsysparam(clk_id),tsysparam(tp)); end; -{$if defined(android) and not defined(cpumips)} -const - syscall_nr_setregid = syscall_nr_setregid32; - syscall_nr_setreuid = syscall_nr_setreuid32; -{$endif} - function setregid(rgid,egid : uid_t): cint; begin diff --git a/rtl/linux/mips/bsyscall.inc b/rtl/linux/mips/bsyscall.inc index 4f98e0ad47..df9df202a1 100644 --- a/rtl/linux/mips/bsyscall.inc +++ b/rtl/linux/mips/bsyscall.inc @@ -12,6 +12,8 @@ **********************************************************************} +{$ifndef generic_linux_syscalls} + {$define FPC_BASEUNIX_HAS_FPPIPE} Function fppipe(var fildes : tfildes):cint;assembler; { @@ -46,3 +48,5 @@ asm sw $v1,4($t1) .L2: end; + +{$endif generic_linux_syscalls} diff --git a/rtl/linux/osdefs.inc b/rtl/linux/osdefs.inc index 67f7324a36..43d33c6e69 100644 --- a/rtl/linux/osdefs.inc +++ b/rtl/linux/osdefs.inc @@ -95,12 +95,15 @@ {$endif cpusparc64} {$ifdef android} + {$define generic_linux_syscalls} + {$ifdef cpuarm} + {$define NO_SYSCALL_PSELECT6} + {$define NO_SYSCALL_PPOLL} + {$endif cpuarm} + {$define userenameat} {$undef usestime} {$undef OLDMMAP} - {$define MMAP2} - {$define NO_SYSCALL_UTIME} - {$ifndef cpumips} - {$define NO_SYSCALL_GETRLIMIT} + {$ifndef cpu64} + {$define MMAP2} {$endif} - {$define FPC_USEGETTIMEOFDAY} {$endif android} diff --git a/rtl/linux/ossysc.inc b/rtl/linux/ossysc.inc index 3edc485011..8ad9999c59 100644 --- a/rtl/linux/ossysc.inc +++ b/rtl/linux/ossysc.inc @@ -249,13 +249,21 @@ asm end; {$endif cpusparc or cpusparc64} -{$ifndef android} +{$if defined(android)} + +{$if defined(cpux86_64)} + {$define NEED_USER_TRAMPOLINE} +{$endif} + +{$else not android} + {$if defined(cpui386) or defined(cpuarm) or defined(cpux86_64)} {$define NEED_USER_TRAMPOLINE} {$endif} {$if defined(cpui386) or defined(cpuarm)} {$define NEED_USER_TRAMPOLINE_RT_DIFFERENT} {$endif} + {$endif android} {$ifdef NEED_USER_TRAMPOLINE} diff --git a/rtl/unix/sysutils.pp b/rtl/unix/sysutils.pp index 65f9a6697a..f40632d314 100644 --- a/rtl/unix/sysutils.pp +++ b/rtl/unix/sysutils.pp @@ -274,7 +274,7 @@ procedure UnhookSignal(RtlSigNum: Integer; OnlyIfHooked: Boolean = True); fillchar(act,sizeof(act),0); pointer(act.sa_handler):=pointer(SIG_DFL); end; - if (fpsigaction(rtlsig2ossig[RtlSigNum],@act,nil)=0) then + if (fpsigaction(rtlsig2ossig[i],@act,nil)=0) then siginfo[i].hooked:=false; end; end; diff --git a/rtl/unix/unix.pp b/rtl/unix/unix.pp index 65354ac0b6..6bce71f18f 100644 --- a/rtl/unix/unix.pp +++ b/rtl/unix/unix.pp @@ -16,9 +16,6 @@ Unit Unix; Interface Uses -{$ifdef android} - cwstring, -{$endif android} BaseUnix,UnixType; // If you deprecated new symbols, please annotate the version. // this makes it easier to decide if they can already be removed. diff --git a/utils/fpcm/fpcmake.inc b/utils/fpcm/fpcmake.inc index 474f9815c1..e7624c28c3 100644 --- a/utils/fpcm/fpcmake.inc +++ b/utils/fpcm/fpcmake.inc @@ -497,17 +497,15 @@ const fpcmakeini : array[0..244,1..240] of char=( 'ifeq ($(CPU_TARGET),i386)'#010+ 'BINUTILSPREFIX=i686-linux-android-'#010+ 'else'#010+ - 'ifeq ($(CPU_TARGET),mipsel)'#010+ - 'BINUTILSPREFIX=mipsel-linux-android-'#010+ - 'endif'#010+ + 'BINUTILSPREFIX=$(CPU_TARGET)-linux-android-'#010+ 'endif'#010+ 'endif'#010+ 'endif'#010+ #010+ 'endif'#010+ - 'e','ndif'#010+ + 'endif'#010+ 'else'#010+ - 'BINUTILSPREFIX=$(OS_TARGET)-'#010+ + 'BINUTILSPREFIX=$(','OS_TARGET)-'#010+ 'endif'#010+ 'endif'#010+ 'endif'#010+ @@ -517,7 +515,7 @@ const fpcmakeini : array[0..244,1..240] of char=( '# the OS for backwards compatibility'#010+ 'UNITSDIR:=$(wildcard $(FPCDIR)/units/$(TARGETSUFFIX))'#010+ 'ifeq ($(UNITSDIR),)'#010+ - 'UNITSDIR:=$(','wildcard $(FPCDIR)/units/$(OS_TARGET))'#010+ + 'UNITSDIR:=$(wildcard $(FPCDIR)/units/$(','OS_TARGET))'#010+ 'endif'#010+ #010+ '# Packages dir'#010+ @@ -527,7 +525,7 @@ const fpcmakeini : array[0..244,1..240] of char=( '[shelltools]'#010+ '#####################################################################'#010+ '# Shell tools'#010+ - '##########################','##########################################'+ + '#####################################################','###############'+ '#'#010+ #010+ '# Echo that can redir (must be able run in the default OS shell)'#010+ @@ -541,10 +539,10 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ '# To copy pograms'#010+ 'ifndef COPY'#010+ - 'COPY:=$(CPPROG) -f','p'#010+ + 'COPY:=$(CPPROG) -fp'#010+ 'endif'#010+ #010+ - '# Copy a whole tree'#010+ + '# Copy a whole tre','e'#010+ 'ifndef COPYTREE'#010+ 'COPYTREE:=$(CPPROG) -Rfp'#010+ 'endif'#010+ @@ -561,10 +559,10 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ '# Check delete program'#010+ 'ifndef DEL'#010+ - 'DE','L:=$(RMPROG) -f'#010+ + 'DEL:=$(RMPROG) -f'#010+ 'endif'#010+ #010+ - '# Check deltree program'#010+ + '# Ch','eck deltree program'#010+ 'ifndef DELTREE'#010+ 'DELTREE:=$(RMPROG) -rf'#010+ 'endif'#010+ @@ -579,9 +577,9 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ #010+ '# To install programs'#010+ - 'ifndef INSTAL','LEXE'#010+ + 'ifndef INSTALLEXE'#010+ 'ifdef inUnix'#010+ - 'INSTALLEXE:=$(GINSTALL) -c -m 755'#010+ + 'INSTALLEX','E:=$(GINSTALL) -c -m 755'#010+ 'else'#010+ 'INSTALLEXE:=$(COPY)'#010+ 'endif'#010+ @@ -596,17 +594,18 @@ const fpcmakeini : array[0..244,1..240] of char=( 'IR'#010+ #010+ #010+ - '[de','faultdirs]'#010+ - '#####################################################################'#010+ + '[defaultdirs]'#010+ + '################','####################################################'+ + '#'#010+ '# Default Directories'#010+ '#####################################################################'#010+ #010+ '# Units dir'#010+ 'ifdef REQUIRE_UNITSDIR'#010+ - 'override UNITSDIR+=$(REQUIRE_UN','ITSDIR)'#010+ + 'override UNITSDIR+=$(REQUIRE_UNITSDIR)'#010+ 'endif'#010+ #010+ - '# Units dir'#010+ + '# Units dir'#010, 'ifdef REQUIRE_PACKAGESDIR'#010+ 'override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)'#010+ 'endif'#010+ @@ -614,8 +613,8 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ '# Unixes use unix dirs with /usr/bin, /usr/lib'#010+ '# When zipping use the target os default, when normal install then'#010+ - '# use the source os ','as default'#010+ - 'ifdef ZIPINSTALL'#010+ + '# use the source os as default'#010+ + 'ifdef ZIPINSTALL',#010+ '# Zipinstall'#010+ 'ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)'#010+ 'UNIXHier=1'#010+ @@ -627,8 +626,8 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ 'endif'#010+ #010+ - '# When install prefix is not set try to use pr','efix'#010+ - 'ifndef INSTALL_PREFIX'#010+ + '# When install prefix is not set try to use prefix'#010+ + 'ifndef INSTALL_PREFIX'#010, 'ifdef PREFIX'#010+ 'INSTALL_PREFIX=$(PREFIX)'#010+ 'endif'#010+ @@ -640,9 +639,9 @@ const fpcmakeini : array[0..244,1..240] of char=( 'INSTALL_PREFIX=/usr/local'#010+ 'else'#010+ 'ifdef INSTALL_FPCPACKAGE'#010+ - 'INSTALL_BASEDI','R:=/pp'#010+ + 'INSTALL_BASEDIR:=/pp'#010+ 'else'#010+ - 'INSTALL_BASEDIR:=/$(PACKAGE_NAME)'#010+ + 'INSTALL_BASEDIR',':=/$(PACKAGE_NAME)'#010+ 'endif'#010+ 'endif'#010+ 'endif'#010+ @@ -654,7 +653,7 @@ const fpcmakeini : array[0..244,1..240] of char=( 'export INSTALL_FPCSUBDIR'#010+ 'endif'#010+ #010+ - '# Where t','o place the resulting zip files'#010+ + '# Where to place the resulting zip f','iles'#010+ 'ifndef DIST_DESTDIR'#010+ 'DIST_DESTDIR:=$(BASEDIR)'#010+ 'endif'#010+ @@ -663,9 +662,9 @@ const fpcmakeini : array[0..244,1..240] of char=( '# EXE/PPU Target directories'#010+ 'ifndef COMPILER_UNITTARGETDIR'#010+ 'ifdef PACKAGEDIR_MAIN'#010+ - 'COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGE','TSUFFIX)'#010+ + 'COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)'#010+ 'else'#010+ - 'COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)'#010+ + 'COMPILER_UNIT','TARGETDIR=units/$(TARGETSUFFIX)'#010+ 'endif'#010+ 'endif'#010+ 'ifndef COMPILER_TARGETDIR'#010+ @@ -675,7 +674,7 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ '#####################################################################'#010+ '# Install Directories'#010+ - '######################','##############################################'+ + '#################################################','###################'+ '#'#010+ #010+ '# set the base directory where to install everything'#010+ @@ -684,7 +683,7 @@ const fpcmakeini : array[0..244,1..240] of char=( 'ifdef INSTALL_FPCPACKAGE'#010+ 'INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)'#010+ 'else'#010+ - 'INSTALL_BASE','DIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)'#010+ + 'INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/','$(PACKAGE_NAME)'#010+ 'endif'#010+ 'else'#010+ 'INSTALL_BASEDIR:=$(INSTALL_PREFIX)'#010+ @@ -696,15 +695,15 @@ const fpcmakeini : array[0..244,1..240] of char=( 'ifdef UNIXHier'#010+ 'INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin'#010+ 'else'#010+ - 'INSTALL_','BINDIR:=$(INSTALL_BASEDIR)/bin'#010+ + 'INSTALL_BINDIR:=$(INSTALL_BASEDIR)/','bin'#010+ '# for FPC packages install the binaries under their target subdir'#010+ 'ifdef INSTALL_FPCPACKAGE'#010+ 'ifdef CROSSCOMPILE'#010+ 'ifdef CROSSINSTALL'#010+ 'INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)'#010+ 'else'#010+ - 'INSTALL_BINDIR:=$(INSTALL','_BINDIR)/$(TARGETSUFFIX)'#010+ - 'endif'#010+ + 'INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)'#010+ + 'en','dif'#010+ 'else'#010+ 'INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)'#010+ 'endif'#010+ @@ -714,9 +713,9 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ '# set the directory where to install the units.'#010+ 'ifndef INSTALL_UNITDIR'#010+ - 'INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)'#010, + 'INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)'#010+ 'ifdef INSTALL_FPCPACKAGE'#010+ - 'ifdef PACKAGE_NAME'#010+ + 'if','def PACKAGE_NAME'#010+ 'INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)'#010+ 'endif'#010+ 'endif'#010+ @@ -727,8 +726,8 @@ const fpcmakeini : array[0..244,1..240] of char=( 'ifdef UNIXHier'#010+ 'INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib'#010+ 'else'#010+ - 'INSTALL_L','IBDIR:=$(INSTALL_UNITDIR)'#010+ - 'endif'#010+ + 'INSTALL_LIBDIR:=$(INSTALL_UNITDIR)'#010+ + 'e','ndif'#010+ 'endif'#010+ #010+ '# Where the source files will be stored'#010+ @@ -743,25 +742,25 @@ const fpcmakeini : array[0..244,1..240] of char=( 'SRCPREFIXDIR=src'#010+ 'endif'#010+ 'endif'#010+ - 'ifdef ','INSTALL_FPCPACKAGE'#010+ - 'ifdef INSTALL_FPCSUBDIR'#010+ + 'ifdef INSTALL_FPCPACKAGE'#010+ + 'ifdef IN','STALL_FPCSUBDIR'#010+ 'INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION'+ ')/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)'#010+ 'else'#010+ 'INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION'+ - ')/$(PACKAGE_N','AME)'#010+ + ')/$(PACKAGE_NAME)'#010+ 'endif'#010+ 'else'#010+ - 'INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$'+ - '(PACKAGE_VERSION)'#010+ + 'INSTALL_SOU','RCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)'+ + '-$(PACKAGE_VERSION)'#010+ 'endif'#010+ 'else'#010+ 'ifdef INSTALL_FPCPACKAGE'#010+ 'ifdef INSTALL_FPCSUBDIR'#010+ 'INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PA'+ - 'CKAGE_','NAME)'#010+ + 'CKAGE_NAME)'#010+ 'else'#010+ - 'INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)'#010+ + 'INSTALL_SOURCEDI','R:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)'#010+ 'endif'#010+ 'else'#010+ 'INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source'#010+ @@ -773,9 +772,9 @@ const fpcmakeini : array[0..244,1..240] of char=( 'ifndef INSTALL_DOCDIR'#010+ 'ifdef UNIXHier'#010+ 'ifdef BSDhier'#010+ - 'DOCPR','EFIXDIR=share/doc'#010+ + 'DOCPREFIXDIR=share/doc'#010+ 'else'#010+ - 'ifdef linuxHier'#010+ + 'ifde','f linuxHier'#010+ 'DOCPREFIXDIR=share/doc'#010+ 'else'#010+ 'DOCPREFIXDIR=doc'#010+ @@ -785,7 +784,7 @@ const fpcmakeini : array[0..244,1..240] of char=( 'INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$'+ '(PACKAGE_NAME)'#010+ 'else'#010+ - 'INSTALL_DOCDIR:=$(INSTALL_PRE','FIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$('+ + 'INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACK','AGE_NAME)-$('+ 'PACKAGE_VERSION)'#010+ 'endif'#010+ 'else'#010+ @@ -797,16 +796,16 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ 'endif'#010+ #010+ - '# Where to install the example','s, under linux we use the doc dir'#010+ + '# Where to install the examples, under linux we use the d','oc dir'#010+ '# because the copytree command will create a subdir itself'#010+ 'ifndef INSTALL_EXAMPLEDIR'#010+ 'ifdef UNIXHier'#010+ 'ifdef INSTALL_FPCPACKAGE'#010+ #010+ 'ifdef BSDhier'#010+ - 'INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VER','SI'+ - 'ON)/$(PACKAGE_NAME)'#010+ - 'else'#010+ + 'INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION'+ + ')/$(PACKAGE_NAME)'#010+ + 'else'#010, 'ifdef linuxHier'#010+ 'INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples'#010+ 'else'#010+ @@ -818,20 +817,20 @@ const fpcmakeini : array[0..244,1..240] of char=( 'else'#010+ #010+ 'ifdef BSDhier'#010+ - 'INSTALL_EXAMPLEDIR:=$(INST','ALL_PREFIX)/share/examples/$(PACKAGE_NAME)'+ + 'INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/','$(PACKAGE_NAME)'+ '-$(PACKAGE_VERSION)'#010+ 'else'#010+ 'ifdef linuxHier'#010+ 'INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKA'+ 'GE_VERSION)'#010+ 'else'#010+ - 'INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VE', + 'INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VE'+ 'RSION)'#010+ 'endif'#010+ #010+ 'endif'#010+ 'endif'#010+ - 'else'#010+ + 'e','lse'#010+ 'ifdef INSTALL_FPCPACKAGE'#010+ 'INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)'#010+ 'else'#010+ @@ -840,9 +839,9 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ 'endif'#010+ #010+ - '# Where the some extra (data)files will be store','d'#010+ + '# Where the some extra (data)files will be stored'#010+ 'ifndef INSTALL_DATADIR'#010+ - 'INSTALL_DATADIR=$(INSTALL_BASEDIR)'#010+ + 'IN','STALL_DATADIR=$(INSTALL_BASEDIR)'#010+ 'endif'#010+ #010+ 'ifndef INSTALL_SHAREDDIR'#010+ @@ -851,14 +850,14 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ '#####################################################################'#010+ '# Cross compile dirs'#010+ - '##########','##########################################################'+ + '#####################################','###############################'+ '#'#010+ #010+ 'ifdef CROSSCOMPILE'#010+ '# Directory where the cross compile tools are stored.'#010+ '# First check if they are available in FPCDIR. If no targets/ subdir'#010+ - '# is found use the targets/ subdir in',' INSTALL_BASEDIR.'#010+ - 'ifndef CROSSBINDIR'#010+ + '# is found use the targets/ subdir in INSTALL_BASEDIR.'#010+ + 'ifndef CR','OSSBINDIR'#010+ 'CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))'#010+ 'ifeq ($(CROSSBINDIR),)'#010+ 'CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$'+ @@ -867,11 +866,11 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ 'else'#010+ 'CROSSBINDIR='#010+ - 'en','dif'#010+ + 'endif'#010+ #010+ #010+ '[dirlibc]'#010+ - '# On linux, try to find where libgcc.a is.'#010+ + '# On linux,',' try to find where libgcc.a is.'#010+ 'ifeq ($(OS_SOURCE),linux)'#010+ #010+ '# Amd64 to i386?'#010+ @@ -879,7 +878,7 @@ const fpcmakeini : array[0..244,1..240] of char=( 'ifeq ($(CPU_TARGET),i386)'#010+ 'ifneq ($(findstring x86_64,$(shell uname -a)),)'#010+ 'ifeq ($(BINUTILSPREFIX),)'#010+ - 'GCCLIBDIR:=$(shell d','irname `gcc -m32 -print-libgcc-file-name`)'#010+ + 'GCCLIBDIR:=$(shell dirname `gcc -m32 -print-lib','gcc-file-name`)'#010+ 'endif'#010+ 'endif'#010+ 'endif'#010+ @@ -892,7 +891,7 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ '# Try cross gcc'#010+ 'ifndef GCCLIBDIR'#010+ - 'CROSSGC','C=$(strip $(wildcard $(addsuffix /$(BINUTILSPREFIX)gcc$(SRCEX'+ + 'CROSSGCC=$(strip $(wildcard $(adds','uffix /$(BINUTILSPREFIX)gcc$(SRCEX'+ 'EEXT),$(SEARCHPATH))))'#010+ 'ifneq ($(CROSSGCC),)'#010+ 'GCCLIBDIR:=$(shell dirname `$(CROSSGCC) -print-libgcc-file-name`)'#010+ @@ -901,7 +900,7 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ '# Other libraries from ld.so.conf'#010+ 'ifndef OTHERLIBDIR'#010+ - 'OTH','ERLIBDIR:=$(shell grep -v "^\#" /etc/ld.so.conf | awk '#039'{ ORS='+ + 'OTHERLIBDIR:=$(shell grep -v "','^\#" /etc/ld.so.conf | awk '#039'{ ORS='+ '" "; print $1 }'#039')'#010+ 'endif'#010+ 'endif'#010+ @@ -915,7 +914,7 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ #010+ '[extensions]'#010+ - '#############################','#######################################'+ + '########################################################','############'+ '#'#010+ '# Default extensions'#010+ '#####################################################################'#010+ @@ -925,10 +924,10 @@ const fpcmakeini : array[0..244,1..240] of char=( 'LOADEREXT=.as'#010+ 'EXEEXT=.exe'#010+ 'PPLEXT=.ppl'#010+ - 'PPUEXT=.ppu'#010, + 'PPUEXT=.ppu'#010+ 'OEXT=.o'#010+ 'ASMEXT=.s'#010+ - 'SMARTEXT=.sl'#010+ + 'SMARTEXT=','.sl'#010+ 'STATICLIBEXT=.a'#010+ 'SHAREDLIBEXT=.so'#010+ 'SHAREDLIBPREFIX=libfp'#010+ @@ -937,8 +936,8 @@ const fpcmakeini : array[0..244,1..240] of char=( 'RSTEXT=.rst'#010+ '# external debug info for executable'#010+ 'EXEDBGEXT=.dbg'#010+ - '#DEBUGSYMEXT #for debugger symbol files, defin','e only for targets whi'+ - 'ch has this'#010+ + '#DEBUGSYMEXT #for debugger symbol files, define only for targets which'+ + ' ha','s this'#010+ #010+ '# Go32v1'#010+ 'ifeq ($(OS_TARGET),go32v1)'#010+ @@ -955,9 +954,9 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ '# watcom'#010+ 'ifeq ($(OS_TARGET),watcom)'#010+ - 'S','TATICLIBPREFIX='#010+ + 'STATICLIBPREFIX='#010+ 'OEXT=.obj'#010+ - 'ASMEXT=.asm'#010+ + 'A','SMEXT=.asm'#010+ 'SHAREDLIBEXT=.dll'#010+ 'SHORTSUFFIX=wat'#010+ 'IMPORTLIBPREFIX='#010+ @@ -973,9 +972,9 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ 'endif'#010+ #010+ - '# Linux'#010, + '# Linux'#010+ 'ifeq ($(OS_TARGET),linux)'#010+ - 'BATCHEXT=.sh'#010+ + 'B','ATCHEXT=.sh'#010+ 'EXEEXT='#010+ 'HASSHAREDLIB=1'#010+ 'SHORTSUFFIX=lnx'#010+ @@ -991,10 +990,10 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ '# FreeBSD'#010+ 'ifeq ($(OS_TARGET),freebsd)'#010+ - 'BATCHEXT=.sh'#010, + 'BATCHEXT=.sh'#010+ 'EXEEXT='#010+ 'HASSHAREDLIB=1'#010+ - 'SHORTSUFFIX=fbs'#010+ + 'SHOR','TSUFFIX=fbs'#010+ 'endif'#010+ #010+ '# NetBSD'#010+ @@ -1013,8 +1012,8 @@ const fpcmakeini : array[0..244,1..240] of char=( 'SHORTSUFFIX=obs'#010+ 'endif'#010+ #010+ - '# ','Win32'#010+ - 'ifeq ($(OS_TARGET),win32)'#010+ + '# Win32'#010+ + 'ifeq ($(OS_TARGET),wi','n32)'#010+ 'SHAREDLIBEXT=.dll'#010+ 'SHORTSUFFIX=w32'#010+ 'endif'#010+ @@ -1031,9 +1030,9 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ #010+ '# EMX'#010+ - 'ifeq ($(OS_TARGET)',',emx)'#010+ + 'ifeq ($(OS_TARGET),emx)'#010+ 'BATCHEXT=.cmd'#010+ - 'AOUTEXT=.out'#010+ + 'AOUTEXT','=.out'#010+ 'STATICLIBPREFIX='#010+ 'SHAREDLIBEXT=.dll'#010+ 'SHORTSUFFIX=emx'#010+ @@ -1050,8 +1049,8 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ '# AROS'#010+ 'ifeq ($(OS_TARGET),aros)'#010+ - 'EXE','EXT='#010+ - 'SHAREDLIBEXT=.library'#010+ + 'EXEEXT='#010+ + 'SHAREDLIBEXT=.library'#010, 'SHORTSUFFIX=aros'#010+ 'endif'#010+ #010+ @@ -1069,10 +1068,10 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ #010+ '# BeOS'#010+ - 'ifeq ($(OS_TARGET),beo','s)'#010+ + 'ifeq ($(OS_TARGET),beos)'#010+ 'BATCHEXT=.sh'#010+ 'EXEEXT='#010+ - 'SHORTSUFFIX=be'#010+ + 'SHO','RTSUFFIX=be'#010+ 'endif'#010+ #010+ '# Haiku'#010+ @@ -1091,9 +1090,9 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ '# QNX'#010+ 'ifeq ($(OS_TARGET),qnx)'#010+ - 'BATC','HEXT=.sh'#010+ + 'BATCHEXT=.sh'#010+ 'EXEEXT='#010+ - 'SHORTSUFFIX=qnx'#010+ + 'SHORTSUFFI','X=qnx'#010+ 'endif'#010+ #010+ '# Netware clib'#010+ @@ -1108,9 +1107,9 @@ const fpcmakeini : array[0..244,1..240] of char=( 'ifeq ($(OS_TARGET),netwlibc)'#010+ 'EXEEXT=.nlm'#010+ 'STATICLIBPREFIX='#010+ - 'SHORTSUFFIX=n','wl'#010+ + 'SHORTSUFFIX=nwl'#010+ 'IMPORTLIBPREFIX=imp'#010+ - 'endif'#010+ + 'endi','f'#010+ #010+ '# MacOS'#010+ 'ifeq ($(OS_TARGET),macos)'#010+ @@ -1125,9 +1124,9 @@ const fpcmakeini : array[0..244,1..240] of char=( 'ifneq ($(findstring $(OS_TARGET),darwin iphonesim),)'#010+ 'BATCHEXT=.sh'#010+ 'EXEEXT='#010+ - 'HASSHAREDLIB=','1'#010+ + 'HASSHAREDLIB=1'#010+ 'SHORTSUFFIX=dwn'#010+ - 'EXEDBGEXT=.dSYM'#010+ + 'EXEDBGEXT','=.dSYM'#010+ 'endif'#010+ #010+ '# gba'#010+ @@ -1144,8 +1143,8 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ #010+ '# NativeNT'#010+ - 'ifeq ($(OS_TARGET),N','ativeNT)'#010+ - 'SHAREDLIBEXT=.dll'#010+ + 'ifeq ($(OS_TARGET),NativeNT)'#010+ + 'SHAREDLIBEXT=.dll'#010, 'SHORTSUFFIX=nativent'#010+ 'endif'#010+ #010+ @@ -1165,8 +1164,8 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ #010+ '# Java'#010+ - 'ifeq (','$(OS_TARGET),java)'#010+ - 'OEXT=.class'#010+ + 'ifeq ($(OS_TARGET),java)'#010+ + 'OEXT=.cl','ass'#010+ 'ASMEXT=.j'#010+ 'SHAREDLIBEXT=.jar'#010+ 'SHORTSUFFIX=java'#010+ @@ -1183,8 +1182,8 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ #010+ '# MS-DOS'#010+ - 'ifeq ($','(OS_TARGET),msdos)'#010+ - 'STATICLIBPREFIX='#010+ + 'ifeq ($(OS_TARGET),msdos)'#010+ + 'STATICLI','BPREFIX='#010+ 'STATICLIBEXT=.a'#010+ 'SHORTSUFFIX=d16'#010+ 'endif'#010+ @@ -1201,8 +1200,8 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ #010+ '# Win16'#010+ - 'ifeq ($(OS_','TARGET),win16)'#010+ - 'STATICLIBPREFIX='#010+ + 'ifeq ($(OS_TARGET),win16)'#010+ + 'STATICLIBPRE','FIX='#010+ 'STATICLIBEXT=.a'#010+ 'SHAREDLIBEXT=.dll'#010+ 'SHORTSUFFIX=w16'#010+ @@ -1212,8 +1211,8 @@ const fpcmakeini : array[0..244,1..240] of char=( '# For 8.3 limited OS'#039's the short suffixes'#010+ '# Otherwise use the full source/target names'#010+ 'ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)'#010+ - 'FPCMADE=fpcmad','e.$(SHORTSUFFIX)'#010+ - 'ZIPSUFFIX=$(SHORTSUFFIX)'#010+ + 'FPCMADE=fpcmade.$(SHORTSUFFIX)'#010+ + 'ZIPSUFFIX=','$(SHORTSUFFIX)'#010+ 'ZIPCROSSPREFIX='#010+ 'ZIPSOURCESUFFIX=src'#010+ 'ZIPEXAMPLESUFFIX=exm'#010+ @@ -1223,8 +1222,8 @@ const fpcmakeini : array[0..244,1..240] of char=( 'ZIPEXAMPLESUFFIX=.examples'#010+ 'ifdef CROSSCOMPILE'#010+ 'ZIPSUFFIX=.$(SOURCESUFFIX)'#010+ - 'ZIPCROS','SPREFIX=$(TARGETSUFFIX)-'#010+ - 'else'#010+ + 'ZIPCROSSPREFIX=$(TARGETSUFFIX)-'#010+ + 'el','se'#010+ 'ZIPSUFFIX=.$(TARGETSUFFIX)'#010+ 'ZIPCROSSPREFIX='#010+ 'endif'#010+ @@ -1233,10 +1232,9 @@ const fpcmakeini : array[0..244,1..240] of char=( '[defaulttools]'#010+ '#####################################################################'#010+ '# Default Tools'#010+ - '#####################################################','###############'+ - '#'#010+ + '#####################################################################'#010+ #010+ - '# Names of the binutils tools'#010+ + '# Names o','f the binutils tools'#010+ 'ASNAME=$(BINUTILSPREFIX)as'#010+ 'LDNAME=$(BINUTILSPREFIX)ld'#010+ 'ARNAME=$(BINUTILSPREFIX)ar'#010+ @@ -1244,9 +1242,9 @@ const fpcmakeini : array[0..244,1..240] of char=( 'NASMNAME=$(BINUTILSPREFIX)nasm'#010+ #010+ '# assembler, redefine it if cross compiling'#010+ - 'ifndef A','SPROG'#010+ + 'ifndef ASPROG'#010+ 'ifdef CROSSBINDIR'#010+ - 'ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)'#010+ + 'ASP','ROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)'#010+ 'else'#010+ 'ASPROG=$(ASNAME)'#010+ 'endif'#010+ @@ -1259,10 +1257,10 @@ const fpcmakeini : array[0..244,1..240] of char=( 'else'#010+ 'LDPROG=$(LDNAME)'#010+ 'endif'#010+ - 'e','ndif'#010+ + 'endif'#010+ #010+ '# Resource compiler'#010+ - 'ifndef RCPROG'#010+ + 'i','fndef RCPROG'#010+ 'ifdef CROSSBINDIR'#010+ 'RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT)'#010+ 'else'#010+ @@ -1275,11 +1273,11 @@ const fpcmakeini : array[0..244,1..240] of char=( 'ifdef CROSSBINDIR'#010+ 'ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT)'#010+ 'else'#010+ - 'ARPROG=$(AR','NAME)'#010+ + 'ARPROG=$(ARNAME)'#010+ 'endif'#010+ 'endif'#010+ #010+ - '# NASM assembler, redefine it if cross compiling'#010+ + '# NASM a','ssembler, redefine it if cross compiling'#010+ 'ifndef NASMPROG'#010+ 'ifdef CROSSBINDIR'#010+ 'NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)'#010+ @@ -1291,9 +1289,9 @@ const fpcmakeini : array[0..244,1..240] of char=( '# Override defaults'#010+ 'AS=$(ASPROG)'#010+ 'LD=$(LDPROG)'#010+ - 'RC=$(','RCPROG)'#010+ + 'RC=$(RCPROG)'#010+ 'AR=$(ARPROG)'#010+ - 'NASM=$(NASMPROG)'#010+ + 'NASM=$','(NASMPROG)'#010+ #010+ '# ppas.bat / ppas.sh'#010+ 'ifdef inUnix'#010+ @@ -1310,8 +1308,8 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ #010+ 'ifdef DATE'#010+ - 'DATESTR:=','$(shell $(DATE) +%Y%m%d)'#010+ - 'else'#010+ + 'DATESTR:=$(shell $(DATE) +%Y%m%d)'#010+ + 'el','se'#010+ 'DATESTR='#010+ 'endif'#010+ #010+ @@ -1330,15 +1328,15 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ #010+ '[command_begin]'#010+ - '##########################################','##########################'+ - '#'#010+ + '#####################################################################', + #010+ '# Compiler Command Line'#010+ '#####################################################################'#010+ #010+ '# Load commandline OPTDEF and add FPC_CPU define, for compiling the'#010+ '# compiler this needs to be turned off'#010+ - 'ifndef NOC','PUDEF'#010+ - 'override FPCOPTDEF=$(ARCH)'#010+ + 'ifndef NOCPUDEF'#010+ + 'override FPCOPTDEF=$(','ARCH)'#010+ 'endif'#010+ #010+ #010+ @@ -1349,9 +1347,9 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ 'ifneq ($(CPU_TARGET),$(CPU_SOURCE))'#010+ 'override FPCOPT+=-P$(ARCH)'#010+ - 'e','ndif'#010+ + 'endif'#010+ #010+ - 'ifeq ($(OS_SOURCE),openbsd)'#010+ + 'ifeq ($(OS_SOURCE),op','enbsd)'#010+ 'override FPCOPT+=-FD$(NEW_BINUTILS_PATH)'#010+ 'override FPCMAKEOPT+=-FD$(NEW_BINUTILS_PATH)'#010+ 'override FPMAKE_BUILD_OPT+=-FD$(NEW_BINUTILS_PATH)'#010+ @@ -1359,8 +1357,8 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ 'ifndef CROSSBOOTSTRAP'#010+ 'ifneq ($(BINUTILSPREFIX),)'#010+ - 'override FPCO','PT+=-XP$(BINUTILSPREFIX)'#010+ - 'endif'#010+ + 'override FPCOPT+=-XP$(BINUTILSPREFIX)'#010+ + 'en','dif'#010+ 'ifneq ($(BINUTILSPREFIX),)'#010+ 'override FPCOPT+=-Xr$(RLINKPATH)'#010+ 'endif'#010+ @@ -1368,9 +1366,9 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ '# When BINUTILSPREFIX is given and we are not cross-compiling then use'+ #010+ - '# it while compiling the fpmake file. (For example to build i386-','fre'+ - 'ebsd'#010+ - '# with BINUTILSPREFIX=i386-)'#010+ + '# it while compiling the fpmake file. (For example to build i386-freeb'+ + 'sd'#010+ + '# with BINUTILSPREF','IX=i386-)'#010+ 'ifndef CROSSCOMPILE'#010+ 'ifneq ($(BINUTILSPREFIX),)'#010+ 'override FPCMAKEOPT+=-XP$(BINUTILSPREFIX)'#010+ @@ -1378,9 +1376,9 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ 'endif'#010+ #010+ - '# User dirs should be first, so they are looked at fi','rst'#010+ + '# User dirs should be first, so they are looked at first'#010+ 'ifdef UNITDIR'#010+ - 'override FPCOPT+=$(addprefix -Fu,$(UNITDIR))'#010+ + 'override ','FPCOPT+=$(addprefix -Fu,$(UNITDIR))'#010+ 'endif'#010+ 'ifdef LIBDIR'#010+ 'override FPCOPT+=$(addprefix -Fl,$(LIBDIR))'#010+ @@ -1389,10 +1387,10 @@ const fpcmakeini : array[0..244,1..240] of char=( 'override FPCOPT+=$(addprefix -Fo,$(OBJDIR))'#010+ 'endif'#010+ 'ifdef INCDIR'#010+ - 'override FPCOPT+=$(addprefix -Fi',',$(INCDIR))'#010+ + 'override FPCOPT+=$(addprefix -Fi,$(INCDIR))'#010+ 'endif'#010+ #010+ - '# Smartlinking'#010+ + '# Smartl','inking'#010+ 'ifdef LINKSMART'#010+ 'override FPCOPT+=-XX'#010+ 'endif'#010+ @@ -1409,7 +1407,7 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ #010+ '# Release mode'#010+ - '# (','strip, optimize and don'#039't load fpc.cfg)'#010+ + '# (strip, optimize and don'#039't l','oad fpc.cfg)'#010+ '# fpc 2.1 has -O2 for all targets'#010+ 'ifdef RELEASE'#010+ 'ifneq ($(findstring 2.0.,$(FPC_VERSION)),)'#010+ @@ -1420,9 +1418,9 @@ const fpcmakeini : array[0..244,1..240] of char=( 'FPCCPUOPT:=-O1r'#010+ 'endif'#010+ 'else'#010+ - 'FPC','CPUOPT:=-O2'#010+ + 'FPCCPUOPT:=-O2'#010+ 'endif'#010+ - 'override FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n'#010+ + 'override ','FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n'#010+ 'override FPCOPTDEF+=RELEASE'#010+ 'endif'#010+ #010+ @@ -1437,8 +1435,8 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ #010+ '# Verbose settings (warning,note,info)'#010+ - 'ifde','f VERBOSE'#010+ - 'override FPCOPT+=-vwni'#010+ + 'ifdef VERBOSE'#010+ + 'override FPCOPT+=','-vwni'#010+ 'endif'#010+ #010+ '# Needed compiler options'#010+ @@ -1448,18 +1446,18 @@ const fpcmakeini : array[0..244,1..240] of char=( 'ifdef COMPILER_UNITDIR'#010+ 'override FPCOPT+=$(addprefix -Fu,$(COMPILER_UNITDIR))'#010+ 'endif'#010+ - 'ifdef COMPILER_LIBRARYDIR',#010+ - 'override FPCOPT+=$(addprefix -Fl,$(COMPILER_LIBRARYDIR))'#010+ + 'ifdef COMPILER_LIBRARYDIR'#010+ + 'override FPCOPT+=$(addpref','ix -Fl,$(COMPILER_LIBRARYDIR))'#010+ 'endif'#010+ 'ifdef COMPILER_OBJECTDIR'#010+ 'override FPCOPT+=$(addprefix -Fo,$(COMPILER_OBJECTDIR))'#010+ 'endif'#010+ 'ifdef COMPILER_INCLUDEDIR'#010+ 'override FPCOPT+=$(addprefix -Fi,$(COMPILER_INCLUDEDIR))'#010+ - 'endif'#010, + 'endif'#010+ #010+ '# Cross compiler utils'#010+ - 'ifdef CROSSBINDIR'#010+ + 'ifd','ef CROSSBINDIR'#010+ 'override FPCOPT+=-FD$(CROSSBINDIR)'#010+ 'endif'#010+ #010+ @@ -1467,8 +1465,8 @@ const fpcmakeini : array[0..244,1..240] of char=( 'ifdef COMPILER_TARGETDIR'#010+ 'override FPCOPT+=-FE$(COMPILER_TARGETDIR)'#010+ 'ifeq ($(COMPILER_TARGETDIR),.)'#010+ - 'over','ride TARGETDIRPREFIX='#010+ - 'else'#010+ + 'override TARGETDIRPREFIX='#010+ + 'else'#010, 'override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/'#010+ 'endif'#010+ 'endif'#010+ @@ -1476,8 +1474,8 @@ const fpcmakeini : array[0..244,1..240] of char=( '# Unit target dir (default is units/-/'#010+ 'ifdef COMPILER_UNITTARGETDIR'#010+ 'override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR)'#010+ - 'ifeq ($(COMPILER_UNITTARGETDI','R),.)'#010+ - 'override UNITTARGETDIRPREFIX='#010+ + 'ifeq ($(COMPILER_UNITTARGETDIR),.)'#010+ + 'override UNITTARGETDI','RPREFIX='#010+ 'else'#010+ 'override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/'#010+ 'endif'#010+ @@ -1485,10 +1483,10 @@ const fpcmakeini : array[0..244,1..240] of char=( 'ifdef COMPILER_TARGETDIR'#010+ 'override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR)'#010+ 'override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)'#010+ - 'endif',#010+ + 'endif'#010+ 'endif'#010+ #010+ - 'ifdef CREATESHARED'#010+ + 'ifdef CREATESHARED'#010, 'override FPCOPT+=-Cg'#010+ 'endif'#010+ #010+ @@ -1496,7 +1494,7 @@ const fpcmakeini : array[0..244,1..240] of char=( '# on unix-like systems'#010+ 'ifneq ($(findstring $(OS_TARGET),dragonfly freebsd openbsd netbsd linu'+ 'x solaris),)'#010+ - 'ifneq ($(findstring $(CP','U_TARGET),x86_64 mips mipsel),)'#010+ + 'ifneq ($(findstring $(CPU_TARGET),x86_64 mips mipse','l),)'#010+ 'override FPCOPT+=-Cg'#010+ 'endif'#010+ 'endif'#010+ @@ -1511,8 +1509,8 @@ const fpcmakeini : array[0..244,1..240] of char=( 'ifdef GCCLIBDIR'#010+ 'override FPCOPT+=-Fl$(GCCLIBDIR)'#010+ 'endif'#010+ - 'ifd','ef OTHERLIBDIR'#010+ - 'override FPCOPT+=$(addprefix -Fl,$(OTHERLIBDIR))'#010+ + 'ifdef OTHERLIBDIR'#010+ + 'override FPC','OPT+=$(addprefix -Fl,$(OTHERLIBDIR))'#010+ 'endif'#010+ #010+ #010+ @@ -1522,8 +1520,8 @@ const fpcmakeini : array[0..244,1..240] of char=( 'override FPCOPT+=$(OPT)'#010+ 'endif'#010+ #010+ - '# Override options to compile the fpmake-binary with command-','line op'+ - 'tions provided in FPMAKEBUILDOPT'#010+ + '# Override options to compile the fpmake-binary with command-line opti'+ + 'ons provided in FP','MAKEBUILDOPT'#010+ 'ifdef FPMAKEBUILDOPT'#010+ 'override FPMAKE_BUILD_OPT+=$(FPMAKEBUILDOPT)'#010+ 'endif'#010+ @@ -1533,8 +1531,8 @@ const fpcmakeini : array[0..244,1..240] of char=( 'override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))'#010+ 'endif'#010+ #010+ - '# Was a config file',' specified ?'#010+ - 'ifdef CFGFILE'#010+ + '# Was a config file specified ?'#010+ + 'ifdef CFGFILE'#010, 'override FPCOPT+=@$(CFGFILE)'#010+ 'endif'#010+ #010+ @@ -1545,8 +1543,8 @@ const fpcmakeini : array[0..244,1..240] of char=( 'export FPCEXTCMD'#010+ 'endif'#010+ #010+ - 'override AFULL_TARGET=$(CPU_TAR','GET)-$(OS_TARGET)'#010+ - 'override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)'#010+ + 'override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)'#010+ + 'override ','AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)'#010+ #010+ 'ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))'#010+ 'override ACROSSCOMPILE=1'#010+ @@ -1557,16 +1555,16 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ #010+ '# Compiler commandline'#010+ - 'override COMPILER:=$(','strip $(FPC) $(FPCOPT))'#010+ + 'override COMPILER:=$(strip $(FPC) $(FPCOPT))'#010+ #010+ - '# also call ppas if with command option -s'#010+ + '# ','also call ppas if with command option -s'#010+ '# but only if the FULL_SOURCE and FULL_TARGET are equal'#010+ '# or if -sh is used'#010+ 'ifneq (,$(findstring -sh ,$(COMPILER)))'#010+ 'UseEXECPPAS=1'#010+ 'endif'#010+ - 'ifneq (,$(findstring -s ,$(COMPILER)','))'#010+ - 'ifeq ($(FULL_SOURCE),$(FULL_TARGET))'#010+ + 'ifneq (,$(findstring -s ,$(COMPILER)))'#010+ + 'ifeq ($(FULL_SOURCE),$(F','ULL_TARGET))'#010+ 'UseEXECPPAS=1'#010+ 'endif'#010+ 'endif'#010+ @@ -1582,7 +1580,7 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ #010+ '[loaderrules]'#010+ - '####################################','################################'+ + '###############################################################','#####'+ '#'#010+ '# Loaders'#010+ '#####################################################################'#010+ @@ -1592,7 +1590,7 @@ const fpcmakeini : array[0..244,1..240] of char=( 'ifneq ($(TARGET_LOADERS),)'#010+ 'override ALLTARGET+=fpc_loaders'#010+ 'override CLEANTARGET+=fpc_loaders_clean'#010+ - 'overr','ide INSTALLTARGET+=fpc_loaders_install'#010+ + 'override INSTALLTARGET+=fpc_load','ers_install'#010+ #010+ 'override LOADEROFILES:=$(addsuffix $(OEXT),$(TARGET_LOADERS))'#010+ 'endif'#010+ @@ -1601,10 +1599,10 @@ const fpcmakeini : array[0..244,1..240] of char=( 'ifdef COMPILER_UNITTARGETDIR'#010+ ' $(AS) -o $(COMPILER_UNITTARGETDIR)/$*$(OEXT) $<'#010+ 'else'#010+ - ' $(AS) -o ','$*$(OEXT) $<'#010+ + ' $(AS) -o $*$(OEXT) $<'#010+ 'endif'#010+ #010+ - 'fpc_loaders: $(COMPILER_UNITTARGETDIR) $(LOADEROFILES)'#010+ + 'fpc_loa','ders: $(COMPILER_UNITTARGETDIR) $(LOADEROFILES)'#010+ #010+ 'fpc_loaders_clean:'#010+ 'ifdef COMPILER_UNITTARGETDIR'#010+ @@ -1613,32 +1611,33 @@ const fpcmakeini : array[0..244,1..240] of char=( 'else'#010+ ' -$(DEL) $(LOADEROFILES)'#010+ 'endif'#010+ - #010, + #010+ 'fpc_loaders_install:'#010+ - ' $(MKDIR) $(INSTALL_UNITDIR)'#010+ + ' ',' $(MKDIR) $(INSTALL_UNITDIR)'#010+ 'ifdef COMPILER_UNITTARGETDIR'#010+ ' $(INSTALL) $(addprefix $(COMPILER_UNITTARGETDIR)/,$(LOADEROFIL'+ 'ES)) $(INSTALL_UNITDIR)'#010+ 'else'#010+ ' $(INSTALL) $(LOADEROFILES) $(INSTALL_UNITDIR)'#010+ - 'e','ndif'#010+ + 'endif'#010+ #010+ #010+ '[unitrules]'#010+ - '#####################################################################'#010+ + '########','############################################################'+ + '#'#010+ '# Units'#010+ '#####################################################################'#010+ #010+ '.PHONY: fpc_units'#010+ #010+ 'ifneq ($(TARGET_UNITS)$(TARGET_IMPLICITUNITS),)'#010+ - 'overr','ide ALLTARGET+=fpc_units'#010+ + 'override ALLTARGET+=fpc_units'#010+ #010+ - 'override UNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_UNITS))'#010+ + 'o','verride UNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_UNITS))'#010+ 'override IMPLICITUNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_IMPLICITU'+ 'NITS))'#010+ 'override INSTALLPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES)'#010+ - 'override C','LEANPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES)'#010+ + 'override CLEANPPUFILES+=$(UNITPPUFILE','S) $(IMPLICITUNITPPUFILES)'#010+ 'endif'#010+ #010+ 'fpc_units: $(COMPILER_UNITTARGETDIR) $(UNITPPUFILES)'#010+ @@ -1647,7 +1646,7 @@ const fpcmakeini : array[0..244,1..240] of char=( '[exerules]'#010+ '#####################################################################'#010+ '# Exes'#010+ - '####################################','################################'+ + '###############################################################','#####'+ '#'#010+ #010+ '.PHONY: fpc_exes'#010+ @@ -1656,18 +1655,18 @@ const fpcmakeini : array[0..244,1..240] of char=( 'ifndef CROSSINSTALL'#010+ 'ifneq ($(TARGET_PROGRAMS),)'#010+ 'override EXEFILES=$(addsuffix $(EXEEXT),$(TARGET_PROGRAMS))'#010+ - 'override EXEOFILES:=$(addsuf','fix $(OEXT),$(TARGET_PROGRAMS)) $(addpre'+ + 'override EXEOFILES:=$(addsuffix $(OEXT),$(TARGET_PROGRA','MS)) $(addpre'+ 'fix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS))'+ ') $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_'+ 'PROGRAMS)))'#010+ - 'override EXEDBGFILES:=$(addsuffix $(EXEDBGEXT),$','(TARGET_PROGRAMS))'#010+ + 'override EXEDBGFILES:=$(addsuffix $(EXEDBGEXT),$(TARGET_PROGRAMS))'#010+ #010+ - 'override ALLTARGET+=fpc_exes'#010+ + 'overrid','e ALLTARGET+=fpc_exes'#010+ 'override INSTALLEXEFILES+=$(EXEFILES)'#010+ 'override CLEANEXEFILES+=$(EXEFILES) $(EXEOFILES)'#010+ 'override CLEANEXEDBGFILES+=$(EXEDBGFILES)'#010+ 'ifeq ($(OS_TARGET),os2)'#010+ - 'override CLEANEXEFILES+=$(addsuffix $(','AOUTEXT),$(TARGET_PROGRAMS))'#010+ + 'override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS)',')'#010+ 'endif'#010+ 'ifeq ($(OS_TARGET),emx)'#010+ 'override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))'#010+ @@ -1679,7 +1678,7 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ #010+ '[rstrules]'#010+ - '############','########################################################'+ + '#######################################','#############################'+ '#'#010+ '# Resource strings'#010+ '#####################################################################'#010+ @@ -1687,10 +1686,10 @@ const fpcmakeini : array[0..244,1..240] of char=( 'ifdef TARGET_RSTS'#010+ 'override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))'#010+ #010+ - 'override CLEANRST','FILES+=$(RSTFILES)'#010+ + 'override CLEANRSTFILES+=$(RSTFILES)'#010+ 'endif'#010+ #010+ - #010+ + #010, '[examplerules]'#010+ '#####################################################################'#010+ '# Examples'#010+ @@ -1698,23 +1697,23 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ '.PHONY: fpc_examples'#010+ #010+ - 'ifneq ($(TARGET_EXAMPLES','),)'#010+ + 'ifneq ($(TARGET_EXAMPLES),)'#010+ 'HASEXAMPLES=1'#010+ - 'override EXAMPLESOURCEFILES:=$(wildcard $(addsuffix .pp,$(TARGET_EXAMP'+ - 'LES)) $(addsuffix .pas,$(TARGET_EXAMPLES)) $(addsuffix .lpr,$(TARGET_E'+ - 'XAMPLES)) $(addsuffix .dpr,$(TARGET_EXAMPLES)))'#010+ - 'override EXAMPLEFILES:=$(addsuffix',' $(EXEEXT),$(TARGET_EXAMPLES))'#010+ + 'override ','EXAMPLESOURCEFILES:=$(wildcard $(addsuffix .pp,$(TARGET_EXA'+ + 'MPLES)) $(addsuffix .pas,$(TARGET_EXAMPLES)) $(addsuffix .lpr,$(TARGET'+ + '_EXAMPLES)) $(addsuffix .dpr,$(TARGET_EXAMPLES)))'#010+ + 'override EXAMPLEFILES:=$(addsuffix $(EXEEXT),$(TARGET_EXAMPLE','S))'#010+ 'override EXAMPLEOFILES:=$(addsuffix $(OEXT),$(TARGET_EXAMPLES)) $(addp'+ 'refix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_EXAMPLES'+ - '))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARG', - 'ET_EXAMPLES)))'#010+ - 'override EXAMPLEDBGFILES:=$(addsuffix $(EXEDBGEXT),$(TARGET_EXAMPLES))'+ - #010+ + '))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGE'+ + 'T_EXAMPLES)))'#010+ + 'override EXA','MPLEDBGFILES:=$(addsuffix $(EXEDBGEXT),$(TARGET_EXAMPLES'+ + '))'#010+ #010+ 'override CLEANEXEFILES+=$(EXAMPLEFILES) $(EXAMPLEOFILES)'#010+ 'override CLEANEXEDBGFILES+=$(EXAMPLEDBGFILES)'#010+ 'ifeq ($(OS_TARGET),os2)'#010+ - 'override CLEANEXEFILES+=$(','addsuffix $(AOUTEXT),$(TARGET_EXAMPLES))'#010+ + 'override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARG','ET_EXAMPLES))'#010+ 'endif'#010+ 'ifeq ($(OS_TARGET),emx)'#010+ 'override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_EXAMPLES))'#010+ @@ -1724,7 +1723,7 @@ const fpcmakeini : array[0..244,1..240] of char=( 'HASEXAMPLES=1'#010+ 'endif'#010+ #010+ - 'fpc_examples: all $(EXAMPLEFILES) $(ad','dsuffix _all,$(TARGET_EXAMPLED'+ + 'fpc_examples: all $(EXAMPLEFILES) $(addsuffix _all,$(TARGET_EXAMP','LED'+ 'IRS))'#010+ #010+ #010+ @@ -1733,7 +1732,7 @@ const fpcmakeini : array[0..244,1..240] of char=( '# General compile rules'#010+ '#####################################################################'#010+ #010+ - '.PHONY: fpc_all fpc_sm','art fpc_debug fpc_release fpc_shared'#010+ + '.PHONY: fpc_all fpc_smart fpc_debug fpc_release f','pc_shared'#010+ #010+ '$(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET)'#010+ ' @$(ECHOREDIR) Compiled > $(FPCMADE)'#010+ @@ -1744,10 +1743,10 @@ const fpcmakeini : array[0..244,1..240] of char=( ' $(MAKE) all LINKSMART=1 CREATESMART=1'#010+ #010+ 'fpc_debug:'#010+ - ' $(MAKE) all DEB','UG=1'#010+ + ' $(MAKE) all DEBUG=1'#010+ #010+ 'fpc_release:'#010+ - ' $(MAKE) all RELEASE=1'#010+ + ' ','$(MAKE) all RELEASE=1'#010+ #010+ '# General compile rules, available for both possible .pp and .pas exte'+ 'nsions'#010+ @@ -1755,7 +1754,7 @@ const fpcmakeini : array[0..244,1..240] of char=( '.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .lpr .dpr .pp .rc .res'#010+ #010+ '$(COMPILER_UNITTARGETDIR):'#010+ - ' $(MKDIRTR','EE) $(COMPILER_UNITTARGETDIR)'#010+ + ' $(MKDIRTREE) $(COMPILER_UNITTARGETDI','R)'#010+ #010+ '$(COMPILER_TARGETDIR):'#010+ ' $(MKDIRTREE) $(COMPILER_TARGETDIR)'#010+ @@ -1769,8 +1768,8 @@ const fpcmakeini : array[0..244,1..240] of char=( ' $(EXECPPAS)'#010+ #010+ '%$(EXEEXT): %.pp'#010+ - ' ',' $(COMPILER) $<'#010+ - ' $(EXECPPAS)'#010+ + ' $(COMPILER) $<'#010+ + ' ',' $(EXECPPAS)'#010+ #010+ '%$(EXEEXT): %.pas'#010+ ' $(COMPILER) $<'#010+ @@ -1784,21 +1783,20 @@ const fpcmakeini : array[0..244,1..240] of char=( ' $(COMPILER) $<'#010+ ' $(EXECPPAS)'#010+ #010+ - '%.res: %.rc'#010, - ' windres -i $< -o $@'#010+ + '%.res: %.rc'#010+ + ' windres -i $< -o $@',#010+ #010+ '# Search paths for .ppu, .pp, .pas, .lpr, .dpr'#010+ 'vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)'#010+ 'vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)'#010+ - 'vpath %.lpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUD','EDIR)'#010+ - 'vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)'#010+ + 'vpath %.lpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)'#010+ + 'vpath %.dpr $(COMPILE','R_SOURCEDIR) $(COMPILER_INCLUDEDIR)'#010+ 'vpath %.inc $(COMPILER_INCLUDEDIR)'#010+ 'vpath %$(OEXT) $(COMPILER_UNITTARGETDIR)'#010+ 'vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)'#010+ #010+ '[sharedrules]'#010+ - '###########################################','#########################'+ - '#'#010+ + '#####################################################################'#010, '# Library'#010+ '#####################################################################'#010+ #010+ @@ -1810,8 +1808,8 @@ const fpcmakeini : array[0..244,1..240] of char=( 'SHARED_LIBVERSION=$(FPC_VERSION)'#010+ 'endif'#010+ #010+ - 'ifn','def SHARED_LIBNAME'#010+ - 'SHARED_LIBNAME=$(PACKAGE_NAME)'#010+ + 'ifndef SHARED_LIBNAME'#010+ + 'SHARED_L','IBNAME=$(PACKAGE_NAME)'#010+ 'endif'#010+ #010+ 'ifndef SHARED_FULLNAME'#010+ @@ -1820,16 +1818,16 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ #010+ '# Default sharedlib units are all unit objects'#010+ - 'ifndef SHARED_LIBU','NITS'#010+ - 'SHARED_LIBUNITS:=$(TARGET_UNITS) $(TARGET_IMPLICITUNITS)'#010+ + 'ifndef SHARED_LIBUNITS'#010+ + 'SHARED_LIBUNITS:=$(TAR','GET_UNITS) $(TARGET_IMPLICITUNITS)'#010+ 'override SHARED_LIBUNITS:=$(filter-out $(INSTALL_BUILDUNIT),$(SHARED_L'+ 'IBUNITS))'#010+ 'endif'#010+ #010+ 'fpc_shared:'#010+ 'ifdef HASSHAREDLIB'#010+ - ' $(MAKE) all CREATESHARED=1 LINKSHARED=1 CREATESMART=','1'#010+ - 'ifneq ($(SHARED_BUILD),n)'#010+ + ' $(MAKE) all CREATESHARED=1 LINKSHARED=1 CREATESMART=1'#010+ + 'ifneq ($(SHARED_BUILD),n)',#010+ ' $(PPUMOVE) -q $(SHARED_LIBUNITS) -i$(COMPILER_UNITTARGETDIR) -'+ 'o$(SHARED_FULLNAME) -d$(COMPILER_UNITTARGETDIR)'#010+ 'endif'#010+ @@ -1838,8 +1836,8 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ #010+ 'fpc_shared_install:'#010+ - 'ifneq ($','(SHARED_BUILD),n)'#010+ - 'ifneq ($(SHARED_LIBUNITS),)'#010+ + 'ifneq ($(SHARED_BUILD),n)'#010+ + 'ifneq ($(','SHARED_LIBUNITS),)'#010+ 'ifneq ($(wildcard $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME)),)'#010+ ' $(INSTALL) $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME) $(INST'+ 'ALL_SHAREDDIR)'#010+ @@ -1848,7 +1846,7 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ #010+ '[installrules]'#010+ - '#########','###########################################################'+ + '####################################','################################'+ '#'#010+ '# Install rules'#010+ '#####################################################################'#010+ @@ -1856,7 +1854,7 @@ const fpcmakeini : array[0..244,1..240] of char=( '.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall'#010+ #010+ 'ifdef INSTALL_UNITS'#010+ - 'override INSTA','LLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS))'#010+ + 'override INSTALLPPUFILES+=$(addsuffix $(P','PUEXT),$(INSTALL_UNITS))'#010+ 'endif'#010+ #010+ 'ifdef INSTALL_BUILDUNIT'#010+ @@ -1865,24 +1863,24 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ #010+ 'ifdef INSTALLPPUFILES'#010+ - '# Avoid getting the same name twice as ','some install EXE fail'#010+ - '# in this case, happends for instance for OS/2 target'#010+ + '# Avoid getting the same name twice as some install EXE fail'#010+ + '# in ','this case, happends for instance for OS/2 target'#010+ 'ifneq ($(IMPORTLIBPREFIX)-$(STATICLIBEXT),$(STATICLIBPREFIX)-$(STATICL'+ 'IBEXT))'#010+ 'override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFI'+ - 'LES)) $(addprefi','x $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEX'+ + 'LES)) $(addprefix $(STATICLIBPREFIX),$(subs','t $(PPUEXT),$(STATICLIBEX'+ 'T),$(INSTALLPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEX'+ 'T),$(STATICLIBEXT),$(INSTALLPPUFILES)))'#010+ 'else'#010+ 'override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFI'+ - 'LES',')) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEX'+ + 'LES)) $(addprefix $(STATICLIBP','REFIX),$(subst $(PPUEXT),$(STATICLIBEX'+ 'T),$(INSTALLPPUFILES)))'#010+ 'endif'#010+ #010+ 'ifneq ($(UNITTARGETDIRPREFIX),)'#010+ 'override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(notdir '+ '$(INSTALLPPUFILES)))'#010+ - 'override INSTALLPPULI','NKFILES:=$(wildcard $(addprefix $(UNITTARGETDIR'+ + 'override INSTALLPPULINKFILES:=$(wildcard $(addpr','efix $(UNITTARGETDIR'+ 'PREFIX),$(notdir $(INSTALLPPULINKFILES))))'#010+ 'endif'#010+ '# Implicitly install Package.fpc'#010+ @@ -1891,7 +1889,7 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ 'ifdef INSTALLEXEFILES'#010+ 'ifneq ($(TARGETDIRPREFIX),)'#010+ - 'override INSTALLEX','EFILES:=$(addprefix $(TARGETDIRPREFIX),$(notdir $('+ + 'override INSTALLEXEFILES:=$(addprefix $(TARGE','TDIRPREFIX),$(notdir $('+ 'INSTALLEXEFILES)))'#010+ 'endif'#010+ 'endif'#010+ @@ -1901,14 +1899,14 @@ const fpcmakeini : array[0..244,1..240] of char=( ' $(MKDIR) $(INSTALL_BINDIR)'#010+ ' $(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR)'#010+ 'endif'#010+ - 'if','def INSTALL_CREATEPACKAGEFPC'#010+ + 'ifdef INSTALL_CREATEPACKAGEFP','C'#010+ 'ifdef FPCMAKE'#010+ '# If the fpcpackage variable is set then create and install Package.fp'+ 'c,'#010+ '# a safety check is done if Makefile.fpc is available'#010+ 'ifdef PACKAGE_VERSION'#010+ 'ifneq ($(wildcard Makefile.fpc),)'#010+ - ' $(FPCM','AKE) -p -T$(CPU_TARGET)-$(OS_TARGET) Makefile.fpc'#010+ + ' $(FPCMAKE) -p -T$(CPU_TARGET)-$(O','S_TARGET) Makefile.fpc'#010+ ' $(MKDIR) $(INSTALL_UNITDIR)'#010+ ' $(INSTALL) Package.fpc $(INSTALL_UNITDIR)'#010+ 'endif'#010+ @@ -1917,14 +1915,14 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ 'ifdef INSTALLPPUFILES'#010+ ' $(MKDIR) $(INSTALL_UNITDIR)'#010+ - ' $(INSTALL) $(I','NSTALLPPUFILES) $(INSTALL_UNITDIR)'#010+ + ' $(INSTALL) $(INSTALLPPUFILES) $(INSTALL_U','NITDIR)'#010+ 'ifneq ($(INSTALLPPULINKFILES),)'#010+ ' $(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR)'#010+ 'endif'#010+ 'ifneq ($(wildcard $(LIB_FULLNAME)),)'#010+ ' $(MKDIR) $(INSTALL_LIBDIR)'#010+ - ' $(INSTALL) $(LIB_FULLNAME)',' $(INSTALL_LIBDIR)'#010+ - 'ifdef inUnix'#010+ + ' $(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR)'#010+ + 'ifdef in','Unix'#010+ ' ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME)'#010+ 'endif'#010+ 'endif'#010+ @@ -1934,16 +1932,16 @@ const fpcmakeini : array[0..244,1..240] of char=( ' $(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR)'#010+ 'endif'#010+ #010+ - 'fpc_sourcei','nstall: distclean'#010+ - ' $(MKDIR) $(INSTALL_SOURCEDIR)'#010+ + 'fpc_sourceinstall: distclean'#010+ + ' $','(MKDIR) $(INSTALL_SOURCEDIR)'#010+ ' $(COPYTREE) $(BASEDIR)/* $(INSTALL_SOURCEDIR)'#010+ #010+ 'fpc_exampleinstall: $(EXAMPLEINSTALLTARGET) $(addsuffix _distclean,$(T'+ 'ARGET_EXAMPLEDIRS))'#010+ 'ifdef HASEXAMPLES'#010+ - ' $(MKDIR) $(IN','STALL_EXAMPLEDIR)'#010+ + ' $(MKDIR) $(INSTALL_EXAMPLEDIR)'#010+ 'endif'#010+ - 'ifdef EXAMPLESOURCEFILES'#010+ + 'ifd','ef EXAMPLESOURCEFILES'#010+ ' $(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR)'#010+ 'endif'#010+ 'ifdef TARGET_EXAMPLEDIRS'#010+ @@ -1951,8 +1949,9 @@ const fpcmakeini : array[0..244,1..240] of char=( 'AMPLEDIR)'#010+ 'endif'#010+ #010+ - '[distinstallr','ules]'#010+ - '#####################################################################'#010+ + '[distinstallrules]'#010+ + '#####################','###############################################'+ + '#'#010+ '# Dist Install'#010+ '#####################################################################'#010+ #010+ @@ -1961,14 +1960,15 @@ const fpcmakeini : array[0..244,1..240] of char=( 'fpc_distinstall: install exampleinstall'#010+ #010+ #010+ - '[zipinstall','rules]'#010+ - '#####################################################################'#010+ + '[zipinstallrules]'#010+ + '####################','################################################'+ + '#'#010+ '# Zip'#010+ '#####################################################################'#010+ #010+ '.PHONY: fpc_zipinstall fpc_zipsourceinstall fpc_zipexampleinstall'#010+ #010+ - '# Temporary path to',' pack a file, can only use a single deep'#010+ + '# Temporary path to pack a file, can only use ','a single deep'#010+ '# subdir, because the deltree can'#039't see the whole tree to remove'#010+ 'ifndef PACKDIR'#010+ 'ifndef inUnix'#010+ @@ -1978,8 +1978,8 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ 'endif'#010+ #010+ - '# Maybe create default zipname fro','m packagename'#010+ - 'ifndef ZIPNAME'#010+ + '# Maybe create default zipname from packagename'#010+ + 'ifndef ZIPNAM','E'#010+ 'ifdef DIST_ZIPNAME'#010+ 'ZIPNAME=$(DIST_ZIPNAME)'#010+ 'else'#010+ @@ -1993,8 +1993,8 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ '# ZipTarget'#010+ 'ifndef ZIPTARGET'#010+ - 'ifdef D','IST_ZIPTARGET'#010+ - 'ZIPTARGET=DIST_ZIPTARGET'#010+ + 'ifdef DIST_ZIPTARGET'#010+ + 'ZIPTARGET=DIS','T_ZIPTARGET'#010+ 'else'#010+ 'ZIPTARGET=install'#010+ 'endif'#010+ @@ -2012,7 +2012,7 @@ const fpcmakeini : array[0..244,1..240] of char=( 'USEZIPWRAPPER=1'#010+ 'endif'#010+ #010+ - '# W','e need to be able to run in the current OS so fix'#010+ + '# We need to be able to run in',' the current OS so fix'#010+ '# the path separator'#010+ 'ifdef USEZIPWRAPPER'#010+ 'ZIPPATHSEP=$(PATHSEP)'#010+ @@ -2021,35 +2021,35 @@ const fpcmakeini : array[0..244,1..240] of char=( 'ZIPPATHSEP=/'#010+ 'endif'#010+ #010+ - '# Create commands to create the ','zip/tar file'#010+ - 'ZIPCMD_CDPACK:=cd $(subst /,$(ZIPPATHSEP),$(PACKDIR))'#010+ + '# Create commands to create the zip/tar file'#010+ + 'ZIPCMD_CDPACK:','=cd $(subst /,$(ZIPPATHSEP),$(PACKDIR))'#010+ 'ZIPCMD_CDBASE:=cd $(subst /,$(ZIPPATHSEP),$(BASEDIR))'#010+ 'ifdef USETAR'#010+ 'ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(TAREXT)'#010+ 'ZIPCMD_ZIP:=$(TARPROG) c$(TAROPT)f $(ZIPDESTFILE) *'#010+ - 'e','lse'#010+ - 'ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(ZIPEXT)'#010+ + 'else'#010+ + 'ZIPDESTFILE:=$(DIST_DES','TDIR)/$(FULLZIPNAME)$(ZIPEXT)'#010+ 'ZIPCMD_ZIP:=$(subst /,$(ZIPPATHSEP),$(ZIPPROG)) -Dr $(ZIPOPT) $(ZIPDES'+ 'TFILE) *'#010+ 'endif'#010+ #010+ 'fpc_zipinstall:'#010+ ' $(MAKE) $(ZIPTARGET) INSTALL_PREFIX=$(PACKDIR) ZIPINSTALL=1'#010+ - ' $(MKD','IR) $(DIST_DESTDIR)'#010+ - ' $(DEL) $(ZIPDESTFILE)'#010+ + ' $(MKDIR) $(DIST_DESTDIR)'#010+ + ' ',' $(DEL) $(ZIPDESTFILE)'#010+ 'ifdef USEZIPWRAPPER'#010+ '# Handle gecho separate as we need to espace \ with \\'#010+ 'ifneq ($(ECHOREDIR),echo)'#010+ ' $(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDPACK))" > $(ZIPWRAPPE'+ 'R)'#010+ - ' $(ECHORE','DIR) -e "$(subst \,\\,$(ZIPCMD_ZIP))" >> $(ZIPWRAPPE'+ + ' $(ECHOREDIR) -e "$(subst \,\\,$(ZIP','CMD_ZIP))" >> $(ZIPWRAPPE'+ 'R)'#010+ ' $(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDBASE))" >> $(ZIPWRAPP'+ 'ER)'#010+ 'else'#010+ ' echo $(ZIPCMD_CDPACK) > $(ZIPWRAPPER)'#010+ ' echo $(ZIPCMD_ZIP) >> $(ZIPWRAPPER)'#010+ - ' echo $(Z','IPCMD_CDBASE) >> $(ZIPWRAPPER)'#010+ + ' echo $(ZIPCMD_CDBASE) >> $(ZIPWRAPP','ER)'#010+ 'endif'#010+ 'ifdef inUnix'#010+ ' /bin/sh $(ZIPWRAPPER)'#010+ @@ -2062,7 +2062,7 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ ' $(DEL) $(ZIPWRAPPER)'#010+ 'else'#010+ - ' $(ZIPCMD_CDPACK) ; $(ZIPC','MD_ZIP) ; $(ZIPCMD_CDBASE)'#010+ + ' $(ZIPCMD_CDPACK) ; $(ZIPCMD_ZIP) ; $(ZIPCMD_CDBASE)'#010, 'endif'#010+ ' $(DELTREE) $(PACKDIR)'#010+ #010+ @@ -2072,7 +2072,7 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ 'fpc_zipexampleinstall:'#010+ 'ifdef HASEXAMPLES'#010+ - ' $(MAKE) fpc_zipinsta','ll ZIPTARGET=exampleinstall ZIPSUFFIX=$('+ + ' $(MAKE) fpc_zipinstall ZIPTARGET=exampleinstall',' ZIPSUFFIX=$('+ 'ZIPEXAMPLESUFFIX)'#010+ 'endif'#010+ #010+ @@ -2083,7 +2083,7 @@ const fpcmakeini : array[0..244,1..240] of char=( '[cleanrules]'#010+ '#####################################################################'#010+ '# Clean rules'#010+ - '###','#################################################################'+ + '##############################','######################################'+ '#'#010+ #010+ '.PHONY: fpc_clean fpc_cleanall fpc_distclean'#010+ @@ -2091,7 +2091,7 @@ const fpcmakeini : array[0..244,1..240] of char=( 'ifdef EXEFILES'#010+ 'override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES'+ '))'#010+ - 'override CLEANEXEDBGFILES:=$(addprefix',' $(TARGETDIRPREFIX),$(CLEANEXE'+ + 'override CLEANEXEDBGFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEAN','EXE'+ 'DBGFILES))'#010+ 'endif'#010+ #010+ @@ -2099,7 +2099,7 @@ const fpcmakeini : array[0..244,1..240] of char=( 'override CLEANEXEFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(E'+ 'XEEXT), $(CLEAN_PROGRAMS)))'#010+ 'override CLEANEXEDBGFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix '+ - '$(E','XEDBGEXT), $(CLEAN_PROGRAMS)))'#010+ + '$(EXEDBGEXT), $(CLEAN_PROGRAMS',')))'#010+ 'endif'#010+ #010+ 'ifdef CLEAN_UNITS'#010+ @@ -2108,22 +2108,22 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ 'ifdef CLEANPPUFILES'#010+ 'override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)'+ - ') $(addprefix $(STATICLIB','PREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$'+ + ') $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$','(STATICLIBEXT),$'+ '(CLEANPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(S'+ 'TATICLIBEXT),$(CLEANPPUFILES)))'#010+ 'ifdef DEBUGSYMEXT'#010+ 'override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPP'+ - 'UFILES)',')'#010+ + 'UFILES))'#010+ 'endif'#010+ - 'override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUF'+ - 'ILES))'#010+ + 'override CLEANPPUFI','LES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPP'+ + 'UFILES))'#010+ 'override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREF'+ 'IX),$(CLEANPPULINKFILES)))'#010+ 'endif'#010+ #010+ 'fpc_clean: $(CLEANTARGET)'#010+ 'ifdef CLEANEXEFILES'#010+ - ' ',' -$(DEL) $(CLEANEXEFILES)'#010+ + ' -$(DEL) $(CLEANEXEFILES)',#010+ 'endif'#010+ '# DELTREE instead of DEL because on Mac OS X these are directories'#010+ 'ifdef CLEANEXEDBGFILES'#010+ @@ -2132,8 +2132,8 @@ const fpcmakeini : array[0..244,1..240] of char=( 'ifdef CLEANPPUFILES'#010+ ' -$(DEL) $(CLEANPPUFILES)'#010+ 'endif'#010+ - 'ifneq ($(CL','EANPPULINKFILES),)'#010+ - ' -$(DEL) $(CLEANPPULINKFILES)'#010+ + 'ifneq ($(CLEANPPULINKFILES),)'#010+ + ' ','-$(DEL) $(CLEANPPULINKFILES)'#010+ 'endif'#010+ 'ifdef CLEANRSTFILES'#010+ ' -$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))'#010+ @@ -2142,16 +2142,16 @@ const fpcmakeini : array[0..244,1..240] of char=( ' -$(DEL) $(CLEAN_FILES)'#010+ 'endif'#010+ 'ifdef LIB_NAME'#010+ - ' -$(DE','L) $(LIB_NAME) $(LIB_FULLNAME)'#010+ + ' -$(DEL) $(LIB_NAME) $(LIB_FULLNA','ME)'#010+ 'endif'#010+ ' -$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(F'+ 'PCEXTFILE) $(REDIRFILE)'#010+ ' -$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT) ppas$(BATCHEXT) ppaslink$'+ '(BATCHEXT)'#010+ #010+ - 'fpc_cleanall: $(CLEANTARGET',')'#010+ + 'fpc_cleanall: $(CLEANTARGET)'#010+ 'ifdef CLEANEXEFILES'#010+ - ' -$(DEL) $(CLEANEXEFILES)'#010+ + ' ',' -$(DEL) $(CLEANEXEFILES)'#010+ 'endif'#010+ 'ifdef COMPILER_UNITTARGETDIR'#010+ 'ifdef CLEANPPUFILES'#010+ @@ -2160,8 +2160,9 @@ const fpcmakeini : array[0..244,1..240] of char=( 'ifneq ($(CLEANPPULINKFILES),)'#010+ ' -$(DEL) $(CLEANPPULINKFILES)'#010+ 'endif'#010+ - 'ifdef CLEANRSTFILE','S'#010+ - ' -$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))'#010+ + 'ifdef CLEANRSTFILES'#010+ + ' -$(DEL) $(addpref','ix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))'+ + #010+ 'endif'#010+ 'endif'#010+ 'ifdef CLEAN_FILES'#010+ @@ -2169,14 +2170,14 @@ const fpcmakeini : array[0..244,1..240] of char=( 'endif'#010+ ' -$(DELTREE) units'#010+ ' -$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIB'+ - 'EXT) *','$(SHAREDLIBEXT) *$(PPLEXT)'#010+ + 'EXT) *$(SHAREDLIBEXT) *$(PPLEXT)'#010, 'ifneq ($(PPUEXT),.ppu)'#010+ ' -$(DEL) *.o *.ppu *.a'#010+ 'endif'#010+ ' -$(DELTREE) *$(SMARTEXT)'#010+ ' -$(DEL) fpcmade.* Package.fpc $(PPAS) script.res link.res $(FP'+ 'CEXTFILE) $(REDIRFILE)'#010+ - ' -$(DEL) *_ppas$(BATC','HEXT) ppas$(BATCHEXT) ppaslink$(BATCHEXT'+ + ' -$(DEL) *_ppas$(BATCHEXT) ppas$(BATCHEXT) ppasl','ink$(BATCHEXT'+ ')'#010+ 'ifdef AOUTEXT'#010+ ' -$(DEL) *$(AOUTEXT)'#010+ @@ -2188,113 +2189,113 @@ const fpcmakeini : array[0..244,1..240] of char=( ' -$(DEL) $(LOCALFPMAKEBIN)'#010+ ' -$(DEL) $(FPMAKEBINOBJ)'#010+ 'endif'#010+ - #010, + #010+ 'fpc_distclean: cleanall'#010+ #010+ #010+ - '[baseinforules]'#010+ + '[','baseinforules]'#010+ '#####################################################################'#010+ '# Base info rules'#010+ '#####################################################################'#010+ #010+ '.PHONY: fpc_baseinfo'#010+ #010+ - 'override INFORULE','S+=fpc_baseinfo'#010+ + 'override INFORULES+=fpc_baseinfo'#010+ #010+ - 'fpc_baseinfo:'#010+ + 'fpc_basein','fo:'#010+ ' @$(ECHO)'#010+ ' @$(ECHO) == Package info =='#010+ ' @$(ECHO) Package Name..... $(PACKAGE_NAME)'#010+ ' @$(ECHO) Package Version.. $(PACKAGE_VERSION)'#010+ ' @$(ECHO)'#010+ - ' @$(ECHO) == Configurat','ion info =='#010+ - ' @$(ECHO)'#010+ + ' @$(ECHO) == Configuration info =='#010+ + ' @$(ECHO',')'#010+ ' @$(ECHO) FPC.......... $(FPC)'#010+ ' @$(ECHO) FPC Version.. $(FPC_VERSION)'#010+ ' @$(ECHO) Source CPU... $(CPU_SOURCE)'#010+ ' @$(ECHO) Target CPU... $(CPU_TARGET)'#010+ - ' @$(ECHO) Source OS.... $','(OS_SOURCE)'#010+ - ' @$(ECHO) Target OS.... $(OS_TARGET)'#010+ + ' @$(ECHO) Source OS.... $(OS_SOURCE)'#010+ + ' @$(ECHO',') Target OS.... $(OS_TARGET)'#010+ ' @$(ECHO) Full Source.. $(FULL_SOURCE)'#010+ ' @$(ECHO) Full Target.. $(FULL_TARGET)'#010+ ' @$(ECHO) SourceSuffix. $(SOURCESUFFIX)'#010+ - ' @$(ECHO) TargetSuffix. $(TARGETS','UFFIX)'#010+ - ' @$(ECHO) FPC fpmake... $(FPCFPMAKE)'#010+ + ' @$(ECHO) TargetSuffix. $(TARGETSUFFIX)'#010+ + ' @$(ECHO) FP','C fpmake... $(FPCFPMAKE)'#010+ ' @$(ECHO)'#010+ ' @$(ECHO) == Directory info =='#010+ ' @$(ECHO)'#010+ ' @$(ECHO) Required pkgs... $(REQUIRE_PACKAGES)'#010+ ' @$(ECHO)'#010+ - ' @$(ECHO) Basedir......... $(BASEDI','R)'#010+ - ' @$(ECHO) FPCDir.......... $(FPCDIR)'#010+ + ' @$(ECHO) Basedir......... $(BASEDIR)'#010+ + ' @$(ECHO) FPCDir','.......... $(FPCDIR)'#010+ ' @$(ECHO) CrossBinDir..... $(CROSSBINDIR)'#010+ ' @$(ECHO) UnitsDir........ $(UNITSDIR)'#010+ ' @$(ECHO) PackagesDir..... $(PACKAGESDIR)'#010+ ' @$(ECHO)'#010+ - ' @$(ECHO) GCC librar','y..... $(GCCLIBDIR)'#010+ - ' @$(ECHO) Other library... $(OTHERLIBDIR)'#010+ + ' @$(ECHO) GCC library..... $(GCCLIBDIR)'#010+ + ' ',' @$(ECHO) Other library... $(OTHERLIBDIR)'#010+ ' @$(ECHO)'#010+ ' @$(ECHO) == Tools info =='#010+ ' @$(ECHO)'#010+ ' @$(ECHO) As........ $(AS)'#010+ ' @$(ECHO) Ld........ $(LD)'#010+ - ' @$(ECHO) Ar........ $(','AR)'#010+ - ' @$(ECHO) Rc........ $(RC)'#010+ + ' @$(ECHO) Ar........ $(AR)'#010+ + ' @$(ECHO) Rc...','..... $(RC)'#010+ ' @$(ECHO)'#010+ ' @$(ECHO) Mv........ $(MVPROG)'#010+ ' @$(ECHO) Cp........ $(CPPROG)'#010+ ' @$(ECHO) Rm........ $(RMPROG)'#010+ ' @$(ECHO) GInstall.. $(GINSTALL)'#010+ - ' @$(ECHO) Echo....','.. $(ECHO)'#010+ - ' @$(ECHO) Shell..... $(SHELL)'#010+ + ' @$(ECHO) Echo...... $(ECHO)'#010+ + ' @$(ECHO)',' Shell..... $(SHELL)'#010+ ' @$(ECHO) Date...... $(DATE)'#010+ ' @$(ECHO) FPCMake... $(FPCMAKE)'#010+ ' @$(ECHO) PPUMove... $(PPUMOVE)'#010+ ' @$(ECHO) Zip....... $(ZIPPROG)'#010+ ' @$(ECHO)'#010+ - ' @$(ECHO) ',' == Object info =='#010+ - ' @$(ECHO)'#010+ + ' @$(ECHO) == Object info =='#010+ + ' ','@$(ECHO)'#010+ ' @$(ECHO) Target Loaders........ $(TARGET_LOADERS)'#010+ ' @$(ECHO) Target Units.......... $(TARGET_UNITS)'#010+ ' @$(ECHO) Target Implicit Units. $(TARGET_IMPLICITUNITS)'#010+ - ' @$(ECHO) Targe','t Programs....... $(TARGET_PROGRAMS)'#010+ + ' @$(ECHO) Target Programs....... $(TARGET_','PROGRAMS)'#010+ ' @$(ECHO) Target Dirs........... $(TARGET_DIRS)'#010+ ' @$(ECHO) Target Examples....... $(TARGET_EXAMPLES)'#010+ ' @$(ECHO) Target ExampleDirs.... $(TARGET_EXAMPLEDIRS)'#010+ ' @$(ECHO)'#010+ - ' ',' @$(ECHO) Clean Units......... $(CLEAN_UNITS)'#010+ + ' @$(ECHO) Clean Units.....','.... $(CLEAN_UNITS)'#010+ ' @$(ECHO) Clean Files......... $(CLEAN_FILES)'#010+ ' @$(ECHO)'#010+ ' @$(ECHO) Install Units....... $(INSTALL_UNITS)'#010+ ' @$(ECHO) Install Files....... $(INSTALL_FILES)'#010+ - ' @$','(ECHO)'#010+ - ' @$(ECHO) == Install info =='#010+ + ' @$(ECHO)'#010+ + ' @$(ECHO) ==',' Install info =='#010+ ' @$(ECHO)'#010+ ' @$(ECHO) DateStr.............. $(DATESTR)'#010+ ' @$(ECHO) ZipName.............. $(ZIPNAME)'#010+ ' @$(ECHO) ZipPrefix............ $(ZIPPREFIX)'#010+ - ' @$(ECHO) ZipCro','ssPrefix....... $(ZIPCROSSPREFIX)'#010+ + ' @$(ECHO) ZipCrossPrefix....... $(ZIPCROSSP','REFIX)'#010+ ' @$(ECHO) ZipSuffix............ $(ZIPSUFFIX)'#010+ ' @$(ECHO) FullZipName.......... $(FULLZIPNAME)'#010+ ' @$(ECHO) Install FPC Package.. $(INSTALL_FPCPACKAGE)'#010+ ' @$(ECHO)'#010+ - ' @$(ECHO) I','nstall base dir..... $(INSTALL_BASEDIR)'#010+ + ' @$(ECHO) Install base dir..... $(INST','ALL_BASEDIR)'#010+ ' @$(ECHO) Install binary dir... $(INSTALL_BINDIR)'#010+ ' @$(ECHO) Install library dir.. $(INSTALL_LIBDIR)'#010+ ' @$(ECHO) Install units dir.... $(INSTALL_UNITDIR)'#010+ - ' @$(ECHO) Install',' source dir... $(INSTALL_SOURCEDIR)'#010+ + ' @$(ECHO) Install source dir... $(INSTALL_SO','URCEDIR)'#010+ ' @$(ECHO) Install doc dir...... $(INSTALL_DOCDIR)'#010+ ' @$(ECHO) Install example dir.. $(INSTALL_EXAMPLEDIR)'#010+ ' @$(ECHO) Install data dir..... $(INSTALL_DATADIR)'#010+ ' @$(ECHO)'#010+ - ' ','@$(ECHO) Dist destination dir. $(DIST_DESTDIR)'#010+ + ' @$(ECHO) Dist destination ','dir. $(DIST_DESTDIR)'#010+ ' @$(ECHO) Dist zip name........ $(DIST_ZIPNAME)'#010+ ' @$(ECHO)'#010+ #010+ '[inforules]'#010+ '#####################################################################'#010+ '# Info rules'#010+ - '#######################','#############################################'+ + '##################################################','##################'+ '#'#010+ #010+ '.PHONY: fpc_info'#010+ @@ -2304,11 +2305,10 @@ const fpcmakeini : array[0..244,1..240] of char=( '[makefilerules]'#010+ '#####################################################################'#010+ '# Rebuild Makefile'#010+ - '#############################################','#######################'+ - '#'#010+ + '#####################################################################'#010+ #010+ - '.PHONY: fpc_makefile fpc_makefiles fpc_makefile_sub1 fpc_makefile_sub2'+ - ' \'#010+ + '.','PHONY: fpc_makefile fpc_makefiles fpc_makefile_sub1 fpc_makefile_su'+ + 'b2 \'#010+ ' fpc_makefile_dirs'#010+ #010+ 'fpc_makefile:'#010+ @@ -2316,7 +2316,7 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ 'fpc_makefile_sub1:'#010+ 'ifdef TARGET_DIRS'#010+ - ' $(FP','CMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TAR'+ + ' $(FPCMAKE) -w -T$(OS_TARGET) $(','addsuffix /Makefile.fpc,$(TAR'+ 'GET_DIRS))'#010+ 'endif'#010+ 'ifdef TARGET_EXAMPLEDIRS'#010+ @@ -2324,8 +2324,8 @@ const fpcmakeini : array[0..244,1..240] of char=( 'T_EXAMPLEDIRS))'#010+ 'endif'#010+ #010+ - 'fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(T','ARGET_DIRS) $(TARGE'+ - 'T_EXAMPLEDIRS))'#010+ + 'fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_'+ + 'EXAMPL','EDIRS))'#010+ #010+ 'fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2'#010+ #010+ @@ -2333,8 +2333,9 @@ const fpcmakeini : array[0..244,1..240] of char=( #010+ '[localmakefile]'#010+ '#####################################################################'#010+ - '# Local Makefil','e'#010+ - '#####################################################################'#010+ + '# Local Makefile'#010+ + '#########################','###########################################'+ + '#'#010+ #010+ 'ifneq ($(wildcard fpcmake.loc),)'#010+ 'include fpcmake.loc'#010+ @@ -2344,7 +2345,7 @@ const fpcmakeini : array[0..244,1..240] of char=( '[userrules]'#010+ '#####################################################################'#010+ '# Users rules'#010+ - '##########','##########################################################'+ + '#####################################','###############################'+ '#'#010+ #010+ '[lclrules]'#010+ @@ -2352,9 +2353,9 @@ const fpcmakeini : array[0..244,1..240] of char=( '# LCL Rules'#010+ '#####################################################################'#010+ #010+ - '# LCL Platform'#010, + '# LCL Platform'#010+ 'ifndef LCL_PLATFORM'#010+ - 'ifneq ($(findstring $(OS_TARGET),win32 win64),)'#010+ + 'ifneq (','$(findstring $(OS_TARGET),win32 win64),)'#010+ 'LCL_PLATFORM=win32'#010+ 'else'#010+ 'LCL_PLATFORM=gtk'#010+ @@ -2365,7 +2366,7 @@ const fpcmakeini : array[0..244,1..240] of char=( '# Check if the specified LCLDIR is correct'#010+ 'ifdef LCLDIR'#010+ 'override LCLDIR:=$(subst \,/,$(LCLDIR))'#010+ - 'if','eq ($(wildcard $(LCLDIR)/units/$(LCL_PLATFORM)),)'#010+ + 'ifeq ($(wildcard $(LCLDIR)/un','its/$(LCL_PLATFORM)),)'#010+ 'override LCLDIR=wrong'#010+ 'endif'#010+ 'else'#010+ @@ -2375,7 +2376,7 @@ const fpcmakeini : array[0..244,1..240] of char=( '# Check if the default LCLDIR is correct'#010+ 'ifdef DEFAULT_LCLDIR'#010+ 'override LCLDIR:=$(subst \,/,$(DEFAULT_LCLDIR))'#010+ - 'ifeq ($(wildcard $','(LCLDIR)/units/$(LCL_PLATFORM)),)'#010+ + 'ifeq ($(wildcard $(LCLDIR)/units/$(LCL_PLATFO','RM)),)'#010+ 'override LCLDIR=wrong'#010+ 'endif'#010+ 'endif'#010+ @@ -2383,8 +2384,8 @@ const fpcmakeini : array[0..244,1..240] of char=( '# Check for development version'#010+ 'ifeq ($(LCLDIR),wrong)'#010+ 'override LCLDIR=$(subst /units/$(LCL_PLATFORM),,$(firstword $(wildcard'+ - ' $(addsuffix /units/$(LCL_PLATFORM),$(BASEDIR)','/lcl $(BASEDIR)))))'#010+ - 'ifeq ($(LCLDIR),)'#010+ + ' $(addsuffix /units/$(LCL_PLATFORM),$(BASEDIR)/lcl $(BASEDIR)))))'#010+ + 'ifeq ($','(LCLDIR),)'#010+ 'override LCLDIR=wrong'#010+ 'endif'#010+ 'endif'#010+ @@ -2392,8 +2393,8 @@ const fpcmakeini : array[0..244,1..240] of char=( '# Check for release version'#010+ 'ifeq ($(LCLDIR),wrong)'#010+ 'override LCLDIR=$(subst /units/$(LCL_PLATFORM),,$(firstword $(wildcard'+ - ' $(addsuffix /lib/lazarus/units/$(LCL_PLATFORM','),/usr/local /usr))))'#010+ - 'ifeq ($(LCLDIR),)'#010+ + ' $(addsuffix /lib/lazarus/units/$(LCL_PLATFORM),/usr/local /usr))))'#010+ + 'ifeq ','($(LCLDIR),)'#010+ 'override LCLDIR=wrong'#010+ 'endif'#010+ 'endif'#010+ @@ -2401,8 +2402,8 @@ const fpcmakeini : array[0..244,1..240] of char=( '# Generate dirs'#010+ 'override LCLUNITDIR:=$(wildcard $(LCLDIR)/units/$(LCL_PLATFORM) $(LCLD'+ 'IR)/units)'#010+ - 'override LCLCOMPONENTDIR:=$(wildcard $(LCLDIR)/.. $(LCLDIR)/../compo','n'+ - 'ents $(LCLDIR)/components)'#010+ + 'override LCLCOMPONENTDIR:=$(wildcard $(LCLDIR)/.. $(LCLDIR)/../compone'+ + 'nts $(LCLDIR)/components)',#010+ 'export LCLDIR LCLUNITDIR LCLCOMPONENTDIR'#010+ #010+ '# Add LCL dirs to paths'#010+ @@ -2410,7 +2411,7 @@ const fpcmakeini : array[0..244,1..240] of char=( 'override COMPILER_UNITDIR+=$(LCLUNITDIR)'#010+ #010+ '[lclinforules]'#010+ - '########################################','############################'+ + '###################################################################','#'+ '#'#010+ '# LCL Info rules'#010+ '#####################################################################'#010+ @@ -2421,23 +2422,23 @@ const fpcmakeini : array[0..244,1..240] of char=( 'lclinfo:'#010+ ' @$(ECHO) == LCL info =='#010+ ' @$(ECHO)'#010+ - ' @$(ECHO) ','Platform............. $(LCL_PLATFORM)'#010+ + ' @$(ECHO) Platform............. $(LCL','_PLATFORM)'#010+ ' @$(ECHO) LCLDIR............... $(LCLDIR)'#010+ ' @$(ECHO) LCL Unit dir......... $(LCLUNITDIR)'#010+ ' @$(ECHO) LCL Component dir.... $(LCLCOMPONENTDIR)'#010+ ' @$(ECHO)'#010+ #010+ '[fpmakeprerules]'#010+ - '####','################################################################'+ + '###############################','#####################################'+ '#'#010+ '# fpmake prerules'#010+ '#####################################################################'#010+ 'FPMAKEBIN=fpmake$(SRCEXEEXT)'#010+ 'FPMAKEBINOBJ=fpmake$(OEXT)'#010+ - 'LOCALFPMAKEBIN=.$(PATHSEP)$(FP','MAKEBIN)'#010+ + 'LOCALFPMAKEBIN=.$(PATHSEP)$(FPMAKEBIN)'#010+ #010+ - '# Convert the OS_TARGET and CPU_TARGET options to fpmake'#039's --os an'+ - 'd --cpu parameters'#010+ + '# Convert the OS_','TARGET and CPU_TARGET options to fpmake'#039's --os '+ + 'and --cpu parameters'#010+ 'ifdef OS_TARGET'#010+ 'FPC_TARGETOPT+=--os=$(OS_TARGET)'#010+ 'endif'#010+ @@ -2445,65 +2446,65 @@ const fpcmakeini : array[0..244,1..240] of char=( 'FPC_TARGETOPT+=--cpu=$(CPU_TARGET)'#010+ 'endif'#010+ #010+ - '# Get the location of the boots','trap-fpmkunit units'#010+ - 'PACKAGEDIR_FPMKUNIT:=$(firstword $(subst /Makefile.fpc,,$(strip $(wild'+ - 'card $(addsuffix /fpmkunit/Makefile.fpc,$(PACKAGESDIR))))))'#010+ + '# Get the location of the bootstrap-fpmkunit units'#010+ + 'PACKAGE','DIR_FPMKUNIT:=$(firstword $(subst /Makefile.fpc,,$(strip $(wi'+ + 'ldcard $(addsuffix /fpmkunit/Makefile.fpc,$(PACKAGESDIR))))))'#010+ 'ifneq ($(PACKAGEDIR_FPMKUNIT),)'#010+ - 'UNITDIR_FPMAKE_FPMKUNIT=$(PACKAGEDIR_FPMKUNIT)/units_bs/$(','SOURCESUFF'+ - 'IX)'#010+ - 'override COMPILER_FPMAKE_UNITDIR=$(UNITDIR_FPMAKE_FPMKUNIT)'#010+ + 'UNITDIR_FPMAKE_FPMKUNIT=$(PACKAGEDIR_FPMKUNIT)/units_bs/$(SOURCESUFFIX'+ + ')'#010+ + 'override COMP','ILER_FPMAKE_UNITDIR=$(UNITDIR_FPMAKE_FPMKUNIT)'#010+ 'FPMKUNIT_SRC=$(PACKAGEDIR_FPMKUNIT)/src/fpmkunit.pp'#010+ 'FPMKUNIT_PPU=$(UNITDIR_FPMAKE_FPMKUNIT)/fpmkunit.ppu'#010+ 'endif'#010+ #010+ 'ifdef FPMAKE_SKIP_CONFIG'#010+ - 'override FPMAKE_BUILD_OPT+=$(','FPMAKE_SKIP_CONFIG)'#010+ + 'override FPMAKE_BUILD_OPT+=$(FPMAKE_SKIP_CONFIG)'#010+ 'endif'#010+ - #010+ + #010, '[fpmakerules]'#010+ '#####################################################################'#010+ '# fpmake rules'#010+ '#####################################################################'#010+ - '.PHONY: fpc_fpmake fpc_fpmake_clean fpc_fpma','ke_install fpc_fpmake_ex'+ - 'ampleinstall'#010+ + '.PHONY: fpc_fpmake fpc_fpmake_clean fpc_fpmake_install fpc_fpmake_exam'+ + 'p','leinstall'#010+ #010+ '# Do not pass the Makefile'#039's unit and binary target locations. fpm'+ 'ake uses it'#039's own.'#010+ 'override FPCOPT:=$(filter-out -FU%,$(FPCOPT))'#010+ 'override FPCOPT:=$(filter-out -FE%,$(FPCOPT))'#010+ - '# Compose general fpmake-','parameters'#010+ - 'ifdef FPMAKEOPT'#010+ + '# Compose general fpmake-parameters'#010+ + 'ifdef FPMAKEOPT'#010, 'FPMAKE_OPT+=$(FPMAKEOPT)'#010+ 'endif'#010+ 'FPMAKE_OPT+=--localunitdir=$(FPCDIR)'#010+ 'FPMAKE_OPT+=--globalunitdir=$(FPCDIR)/packages'#010+ 'FPMAKE_OPT+=$(FPC_TARGETOPT)'#010+ 'FPMAKE_OPT+=$(addprefix -o ,$(FPCOPT))'#010+ - 'FPMAKE_OPT+=--compiler=$(FPC)'#010, + 'FPMAKE_OPT+=--compiler=$(FPC)'#010+ 'FPMAKE_OPT+=-bu'#010+ #010+ - 'FPMAKE_INSTALL_OPT+=--unitinstalldir=$(INSTALL_UNITDIR)'#010+ + 'FPMAKE_INS','TALL_OPT+=--unitinstalldir=$(INSTALL_UNITDIR)'#010+ 'ifdef UNIXHier'#010+ 'FPMAKE_INSTALL_OPT+=--prefix=$(INSTALL_PREFIX)'#010+ 'FPMAKE_INSTALL_OPT+=--baseinstalldir=$(INSTALL_LIBDIR)/fpc/$(FPC_VERSI'+ 'ON)'#010+ 'else'#010+ - 'FPMAKE_INSTALL_OPT+=--pref','ix=$(INSTALL_BASEDIR)'#010+ - 'endif'#010+ + 'FPMAKE_INSTALL_OPT+=--prefix=$(INSTALL_BASEDIR)'#010+ + 'endif',#010+ #010+ 'override ALLTARGET+=fpc_fpmake'#010+ 'override INSTALLTARGET+=fpc_fpmake_install'#010+ 'override EXAMPLEINSTALLTARGET+=fpc_fpmake_exampleinstall'#010+ '# If no fpmake exists and (dist)clean is called, do not try to build f'+ - 'pmake, it ','will'#010+ - '# most often fail because the dependencies are cleared.'#010+ + 'pmake, it will'#010+ + '# most often fail beca','use the dependencies are cleared.'#010+ '# In case of a clean, simply do nothing'#010+ 'ifneq ($(wildcard $(LOCALFPMAKEBIN)),)'#010+ 'override CLEANTARGET+=fpc_fpmake_clean'#010+ 'endif'#010+ #010+ '$(FPMKUNIT_PPU): $(FPMKUNIT_SRC)'#010+ - ' $(MAKE) -','C $(PACKAGEDIR_FPMKUNIT) bootstrap $(addprefix '+ + ' $(MAKE) -C $(PACKAGEDIR_FPMKUNIT) bo','otstrap $(addprefix '+ 'OPT=,$(FPMAKE_BUILD_OPT))'#010+ #010+ '$(FPMAKEBIN): fpmake.pp $(FPMKUNIT_PPU)'#010+ @@ -2511,7 +2512,7 @@ const fpcmakeini : array[0..244,1..240] of char=( 'IR)) $(FPMAKE_BUILD_OPT)'#010+ #010+ 'fpc_fpmake: $(FPMAKEBIN)'#010+ - ' ',' $(LOCALFPMAKEBIN) compile $(FPMAKE_OPT)'#010+ + ' $(LOCALFPMAKEBIN) co','mpile $(FPMAKE_OPT)'#010+ #010+ 'fpc_fpmake_clean: $(FPMAKEBIN)'#010+ ' $(LOCALFPMAKEBIN) clean $(FPMAKE_OPT)'#010+ @@ -2520,12 +2521,12 @@ const fpcmakeini : array[0..244,1..240] of char=( ' $(LOCALFPMAKEBIN) install $(FPMAKE_OPT) $(FPMAKE_INSTALL_O'+ 'PT)'#010+ #010+ - '# ','This is not completely valid. Exampleinstall should only install t'+ + '# This is not completely vali','d. Exampleinstall should only install t'+ 'he examples, while'#010+ '# fpmake -ie installs everything, including the examples. This also me'+ 'ans that on'#010+ '# a distinstall fpmake install wil be called twice.'#010+ - 'fpc_fpmake_exampleins','tall: $(FPMAKEBIN)'#010+ - ' $(LOCALFPMAKEBIN) install -ie $(FPMAKE_OPT) $(FPMAKE_INSTA'+ - 'LL_OPT)'#010 + 'fpc_fpmake_exampleinstall: $(FPMAKEBIN)'#010+ + ' ',' $(LOCALFPMAKEBIN) install -ie $(FPMAKE_OPT) $(FPMAKE_INS'+ + 'TALL_OPT)'#010 ); diff --git a/utils/fpcm/fpcmake.ini b/utils/fpcm/fpcmake.ini index 34812d1072..8a54c8f688 100644 --- a/utils/fpcm/fpcmake.ini +++ b/utils/fpcm/fpcmake.ini @@ -461,9 +461,7 @@ else ifeq ($(CPU_TARGET),i386) BINUTILSPREFIX=i686-linux-android- else -ifeq ($(CPU_TARGET),mipsel) -BINUTILSPREFIX=mipsel-linux-android- -endif +BINUTILSPREFIX=$(CPU_TARGET)-linux-android- endif endif endif diff --git a/utils/fpcm/fpcmmain.pp b/utils/fpcm/fpcmmain.pp index d01768b518..f81ed064d7 100644 --- a/utils/fpcm/fpcmmain.pp +++ b/utils/fpcm/fpcmmain.pp @@ -143,7 +143,7 @@ interface { wii } ( false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false), { aix } ( false, false, true, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false), { java } ( false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false), - { android } ( true, false, false, false, false, true, false, false, false, false, false, true, false, false, true, false, false, false, false), + { android } ( true, false, false, false, true, true, false, false, false, false, false, true, false, false, true, false, true, false, false), { msdos } ( false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true , false, false, false), { aros } ( true, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false), {dragonfly} ( false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false),