+ Added support for the aarch64-android target.

git-svn-id: trunk@39862 -
This commit is contained in:
yury 2018-10-06 09:33:09 +00:00
parent c7a0022146
commit 671d31df1d
16 changed files with 860 additions and 351 deletions

3
.gitattributes vendored
View File

@ -8788,6 +8788,9 @@ 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/aarch64/dllprt0.as svneol=native#text/plain
rtl/android/aarch64/prt0.as svneol=native#text/plain
rtl/android/aarch64/sysnr.inc svneol=native#text/plain
rtl/android/arm/dllprt0.as svneol=native#text/plain
rtl/android/arm/prt0.as svneol=native#text/plain
rtl/android/arm/sysnr.inc svneol=native#text/plain

View File

@ -41,6 +41,9 @@ implementation
{$ifndef NOTARGETBSD}
,t_bsd
{$endif}
{$ifndef NOTARGETANDROID}
,t_android
{$endif}
{**************************************
Assemblers

View File

@ -3751,16 +3751,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 }

View File

@ -185,7 +185,8 @@
system_riscv32_linux, { 96 }
system_riscv64_linux, { 97 }
system_riscv64_embedded, { 98 }
system_riscv32_embedded { 99 }
system_riscv32_embedded, { 99 }
system_aarch64_android { 100 }
);
type

View File

@ -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_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,
@ -1028,6 +1028,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}

View File

@ -161,6 +161,72 @@ 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_mipsel_android_info : tsysteminfo =
(
system : system_mipsel_android;
@ -239,6 +305,11 @@ initialization
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);

View File

@ -175,7 +175,11 @@ begin
ExtDbgCmd[1]:='objcopy --only-keep-debug $EXE $DBG';
ExtDbgCmd[2]:='objcopy --add-gnu-debuglink=$DBG $EXE';
ExtDbgCmd[3]:='strip --strip-unneeded $EXE';
{$ifdef cpu64bit}
DynamicLinker:='/system/bin/linker64';
{$else}
DynamicLinker:='/system/bin/linker';
{$endif cpu64bit}
end;
end;
@ -486,6 +490,11 @@ 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);

View File

@ -187,7 +187,8 @@ const
{ 96 } 'Linux-RiscV32',
{ 97 } 'Linux-RiscV64',
{ 98 } 'Embedded-RiscV32',
{ 99 } 'Embedded-RiscV64'
{ 99 } 'Embedded-RiscV64',
{ 100 } 'Android-AArch64'
);
const

View File

@ -218,7 +218,7 @@ Const
{ iphonesim}( false, true, false, false, false, true, false, false, 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, false, false),
{ java } ( false, false, false, false, false, false, false, false, false, false, false, false, true , false, false, false, false, false),
{ android } ( false, true, false, false, false, false, true, false, false, false, false, true, true , false, false, false, false, false),
{ android } ( false, true, false, false, false, false, true, false, false, false, false, true, true , false, true, false, false, false),
{ nativent }( false, true, false, false, 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, false, false),
{ wii } ( false, false, false, true , false, false, false, false, false, false, false, false, false, false, false, false, false, false),

View File

@ -40,6 +40,7 @@ dirs_aix=aix
dirs_java=java
dirs_i386_android=android
dirs_arm_android=android
dirs_aarch64_android=android
dirs_mipsel_android=android
dirs_jvm_android=android/jvm
dirs_msdos=msdos

View File

@ -0,0 +1,84 @@
#
# 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-ARM target.
#
.file "dllprt0.as"
.text
.align 2
.globl FPC_SHARED_LIB_START
.type FPC_SHARED_LIB_START,#function
FPC_SHARED_LIB_START:
stp x29,x30,[sp, #-16]!
/* Save initial stackpointer */
adrp x14,:got:__stkptr
ldr x14,[x14,#:got_lo12:__stkptr]
mov x13,sp
str x13,[x14]
/* Get environment info from libc */
adrp x14,:got:environ
ldr x14,[x14,#:got_lo12:environ]
ldr x13,[x14]
/* Check if environment is NULL */
cmp x13,#0
b.ne .Lenvok
adrp x14,:got:EmptyEnv
ldr x13,[x14,#:got_lo12:EmptyEnv]
.Lenvok:
adrp x14,:got:operatingsystem_parameter_envp
ldr x14,[x14,#:got_lo12:operatingsystem_parameter_envp]
str x13,[x14]
/* Call main */
bl FPC_LIB_MAIN_ANDROID
/* Call library init */
bl FPC_LIB_INIT_ANDROID
ldp x29,x30,[sp], #16
ret
/* --------------------------------------------------------- */
.globl _haltproc
.type _haltproc,#function
_haltproc:
/* Simply call libc exit(). _haltproc has the same declaration as exit. */
bl exit
/* --------------------------------------------------------- */
.data
.comm __stkptr,8
.comm operatingsystem_parameter_envp,8
operatingsystem_parameter_argc:
.global operatingsystem_parameter_argc
.long 1
operatingsystem_parameter_argv:
.global operatingsystem_parameter_argv
.quad EmptyCmdLine
EmptyCmdLine:
.quad EmptyCmdStr
EmptyCmdStr:
.ascii "\0"
EmptyEnv:
.quad 0
.quad 0
.quad 0
/* --------------------------------------------------------- */
.section .init_array, "aw"
.quad FPC_SHARED_LIB_START

View File

@ -0,0 +1,91 @@
#
# 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-aarch64 target.
#
/* At this entry point, most registers' values are unspecified, except:
sp The stack contains the arguments and environment:
0(sp) argc
8(sp) argv[0]
...
(8*argc)(sp) NULL
(8*(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".
*/
.file "prt0.as"
.text
.align 2
.globl _fpc_start
.type _fpc_start,#function
_fpc_start:
/* Clear the frame pointer since this is the outermost frame. */
mov x29,#0
/* Save initial stackpointer and slightly adjust it */
adrp x14,:got:__stkptr
ldr x14,[x14,#:got_lo12:__stkptr]
mov x0,sp
add x1,x0,#-64
str x1,[x14]
/* Get argc off the stack and save a pointer to argv */
ldr w1,[x0]
adrp x14,:got:operatingsystem_parameter_argc
ldr x14,[x14,#:got_lo12:operatingsystem_parameter_argc]
str w1,[x14]
adrp x14,:got:operatingsystem_parameter_argv
ldr x14,[x14,#:got_lo12:operatingsystem_parameter_argv]
add x0,x0,#8
str x0,[x14]
/* calc envp */
add x1,x1,#1
add x1,x0,x1,LSL #3
adrp x14,:got:operatingsystem_parameter_envp
ldr x14,[x14,#:got_lo12:operatingsystem_parameter_envp]
str x1,[x14]
/* Finally go to libc startup code. It will call "PASCALMAIN" via alias "main" */
b _start
/* --------------------------------------------------------- */
.globl _haltproc
.type _haltproc,#function
_haltproc:
/* 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,8
.comm operatingsystem_parameter_envp,8
.comm operatingsystem_parameter_argc,4
.comm operatingsystem_parameter_argv,8

View File

@ -0,0 +1,243 @@
// 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_umount2 = 39; // Blacklisted. Do not use.
syscall_nr_mount = 40; // Blacklisted. Do not use.
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_chroot = 51; // Blacklisted. Do not use.
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_acct = 89; // Blacklisted. Do not use.
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_init_module = 105; // Blacklisted. Do not use.
syscall_nr_delete_module = 106; // Blacklisted. Do not use.
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_settime = 112; // Blacklisted. Do not use.
syscall_nr_clock_gettime = 113;
syscall_nr_clock_getres = 114;
syscall_nr_clock_nanosleep = 115;
syscall_nr_syslog = 116; // Blacklisted. Do not use.
syscall_nr_klogctl = syscall_nr_syslog; // Blacklisted. Do not use.
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_reboot = 142; // Blacklisted. Do not use.
syscall_nr_setregid = 143;
syscall_nr_setgid = 144; // Blacklisted. Do not use.
syscall_nr_setreuid = 145; // Blacklisted. Do not use.
syscall_nr_setuid = 146; // Blacklisted. Do not use.
syscall_nr_setresuid = 147;
syscall_nr_getresuid = 148;
syscall_nr_setresgid = 149; // Blacklisted. Do not use.
syscall_nr_getresgid = 150;
syscall_nr_setfsuid = 151; // Blacklisted. Do not use.
syscall_nr_setfsgid = 152; // Blacklisted. Do not use.
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_setgroups = 159; // Blacklisted. Do not use.
syscall_nr_uname = 160;
syscall_nr_sethostname = 161; // Blacklisted. Do not use.
syscall_nr_setdomainname = 162; // Blacklisted. Do not use.
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_settimeofday = 170; // Blacklisted. Do not use.
syscall_nr_adjtimex = 171; // Blacklisted. Do not use.
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_swapon = 224; // Blacklisted. Do not use.
syscall_nr_swapoff = 225; // Blacklisted. Do not use.
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_clock_adjtime = 266; // Blacklisted. Do not use.
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;

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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, false, false),
{ aix } ( false, false, true, false, false, false, true, false, false, 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, false, false),
{ android } ( true, false, false, false, false, true, false, false, false, false, false, true, false, false, true, false, false, false, false, false, false),
{ android } ( true, false, false, false, false, true, false, false, false, false, false, true, false, false, true, false, true, false, false, false, false),
{ msdos } ( false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true , false, false, false, false, false),
{ aros } ( true, false, false, false, true, true, false, false, 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, false, false),