summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlaksen <laksen@3ad0048d-3df7-0310-abae-a5850022a9f2>2018-07-20 15:00:14 +0000
committerlaksen <laksen@3ad0048d-3df7-0310-abae-a5850022a9f2>2018-07-20 15:00:14 +0000
commite12bc72aad109fe9e2be29721fc0d0915ee6dd98 (patch)
tree90c606ccefa532ffefae9b03de5f6fb26b37482a
parent05d78a40a0e852379551b76a05db4dbe80ec7568 (diff)
downloadfpc-e12bc72aad109fe9e2be29721fc0d0915ee6dd98.tar.gz
Fixed setjmp that overwrote a callee save register.
Disable relaxation for the gp load part of the prt0 code. Fixed up some syscall definitions. git-svn-id: https://svn.freepascal.org/svn/fpc/branches/laksen@39478 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--riscv_new/packages/fpmkunit/src/fpmkunit.pp2
-rw-r--r--riscv_new/packages/ide/fpmake.pp4
-rw-r--r--riscv_new/packages/rtl-extra/src/linux/unixsock.inc2
-rw-r--r--riscv_new/packages/rtl-extra/src/unix/ipc.pp2
-rw-r--r--riscv_new/rtl/linux/riscv32/sysnr.inc414
-rw-r--r--riscv_new/rtl/linux/riscv64/prt0.as6
-rw-r--r--riscv_new/rtl/riscv64/setjump.inc20
-rw-r--r--riscv_new/tests/Makefile28
-rw-r--r--riscv_new/tests/tstunits/Makefile28
9 files changed, 77 insertions, 429 deletions
diff --git a/riscv_new/packages/fpmkunit/src/fpmkunit.pp b/riscv_new/packages/fpmkunit/src/fpmkunit.pp
index 76f2fa3418..4269d80d5a 100644
--- a/riscv_new/packages/fpmkunit/src/fpmkunit.pp
+++ b/riscv_new/packages/fpmkunit/src/fpmkunit.pp
@@ -2784,7 +2784,7 @@ begin
powerpc: result := GetGccDirArch('cpupowerpc','-m32');
powerpc64:result := GetGccDirArch('cpupowerpc64','-m64');
aarch64: result := GetGccDirArch('cpuaarch64','');
- riscv32: result := GetGccDirArch('cpuriscv64','-march=rv32imafdc');
+ riscv32: result := GetGccDirArch('cpuriscv32','-march=rv32imafdc');
riscv64: result := GetGccDirArch('cpuriscv64','-march=rv64imafdc');
end {case}
else if OS = darwin then
diff --git a/riscv_new/packages/ide/fpmake.pp b/riscv_new/packages/ide/fpmake.pp
index db692a640e..418e1671c5 100644
--- a/riscv_new/packages/ide/fpmake.pp
+++ b/riscv_new/packages/ide/fpmake.pp
@@ -231,6 +231,10 @@ begin
P.Options.Add('-Fu'+CompilerDir+'/sparcgen');
P.Options.add('-Fi'+CompilerDir+'/sparcgen');
end;
+ if CompilerTarget in [riscv32, riscv64] then
+ begin
+ P.Options.Add('-Fu'+CompilerDir+'/riscv');
+ end;
if CompilerTarget = mipsel then
P.Options.Add('-Fu'+CompilerDir+'/mips');
diff --git a/riscv_new/packages/rtl-extra/src/linux/unixsock.inc b/riscv_new/packages/rtl-extra/src/linux/unixsock.inc
index c20586f6d5..45a52dd33d 100644
--- a/riscv_new/packages/rtl-extra/src/linux/unixsock.inc
+++ b/riscv_new/packages/rtl-extra/src/linux/unixsock.inc
@@ -13,7 +13,7 @@
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
-{$if not defined(cpux86_64) and not defined(cpuaarch64) and not defined(NO_SYSCALL_SOCKETCALL)}
+{$if not defined(cpux86_64) and not defined(cpuaarch64) and not defined(cpuriscv32) and not defined(cpuriscv64) and not defined(NO_SYSCALL_SOCKETCALL)}
{$define NEED_SOCKETCALL}
{$endif}
diff --git a/riscv_new/packages/rtl-extra/src/unix/ipc.pp b/riscv_new/packages/rtl-extra/src/unix/ipc.pp
index 16213e27e9..f9f5a1f496 100644
--- a/riscv_new/packages/rtl-extra/src/unix/ipc.pp
+++ b/riscv_new/packages/rtl-extra/src/unix/ipc.pp
@@ -888,7 +888,7 @@ uses Syscall;
{$ifndef FPC_USE_LIBC}
{$if defined(Linux)}
- {$if defined(cpux86_64) or defined(cpuaarch64) or defined(NO_SYSCALL_IPC)}
+ {$if defined(cpux86_64) or defined(cpuaarch64) or defined(cpuriscv32) or defined(cpuriscv64) or defined(NO_SYSCALL_IPC)}
{$i ipcsys.inc}
{$else}
{$i ipccall.inc}
diff --git a/riscv_new/rtl/linux/riscv32/sysnr.inc b/riscv_new/rtl/linux/riscv32/sysnr.inc
index 4d654232bf..3763caa818 100644
--- a/riscv_new/rtl/linux/riscv32/sysnr.inc
+++ b/riscv_new/rtl/linux/riscv32/sysnr.inc
@@ -1,413 +1 @@
-{
- This file is part of the Free Pascal run time library.
- Copyright (c) 2003-2004 by Florian Klaempfl,
- member of the Free Pascal development team.
-
- Syscall nrs for arm-linux
-
- 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.
-
- **********************************************************************}
-
-
-{
-* This file contains the system call numbers.
- Last update from 2.4.22 kernel sources according to the sources it contains already the 2.5 extensions
-}
-
-Const
-{$ifdef FPC_ABI_EABI}
- syscall_nr_base = $0;
-{$else FPC_ABI_EABI}
- syscall_nr_base = $900000;
-{$endif FPC_ABI_EABI}
-
- syscall_nr_exit = syscall_nr_base+ 1;
- syscall_nr_fork = syscall_nr_base+ 2;
- syscall_nr_read = syscall_nr_base+ 3;
- syscall_nr_write = syscall_nr_base+ 4;
- syscall_nr_open = syscall_nr_base+ 5;
- syscall_nr_close = syscall_nr_base+ 6;
- // not supported: syscall_nr_waitpid = syscall_nr_base+ 7;
- syscall_nr_creat = syscall_nr_base+ 8;
- syscall_nr_link = syscall_nr_base+ 9;
- syscall_nr_unlink = syscall_nr_base+10;
- syscall_nr_execve = syscall_nr_base+11;
- syscall_nr_chdir = syscall_nr_base+12;
-{$ifndef FPC_ABI_EABI}
- syscall_nr_time = syscall_nr_base+13;
-{$endif}
- syscall_nr_mknod = syscall_nr_base+14;
- syscall_nr_chmod = syscall_nr_base+15;
- syscall_nr_lchown = syscall_nr_base+16;
- syscall_nr_break = syscall_nr_base+17;
-
- syscall_nr_lseek = syscall_nr_base+19;
- syscall_nr_getpid = syscall_nr_base+20;
- syscall_nr_mount = syscall_nr_base+21;
-{$ifndef FPC_ABI_EABI}
- syscall_nr_umount = syscall_nr_base+22;
-{$endif}
- syscall_nr_setuid = syscall_nr_base+23;
- syscall_nr_getuid = syscall_nr_base+24;
-{$ifndef FPC_ABI_EABI}
- syscall_nr_stime = syscall_nr_base+25;
-{$endif}
- syscall_nr_ptrace = syscall_nr_base+26;
-{$ifndef FPC_ABI_EABI}
- syscall_nr_alarm = syscall_nr_base+27;
-{$endif}
-
- syscall_nr_pause = syscall_nr_base+29;
-{$ifndef FPC_ABI_EABI}
- syscall_nr_utime = syscall_nr_base+30;
-{$endif}
- syscall_nr_stty = syscall_nr_base+31;
- syscall_nr_gtty = syscall_nr_base+32;
- syscall_nr_access = syscall_nr_base+33;
- syscall_nr_nice = syscall_nr_base+34;
- syscall_nr_ftime = syscall_nr_base+35;
- syscall_nr_sync = syscall_nr_base+36;
- syscall_nr_kill = syscall_nr_base+37;
- syscall_nr_rename = syscall_nr_base+38;
- syscall_nr_mkdir = syscall_nr_base+39;
- syscall_nr_rmdir = syscall_nr_base+40;
- syscall_nr_dup = syscall_nr_base+41;
- syscall_nr_pipe = syscall_nr_base+42;
- syscall_nr_times = syscall_nr_base+43;
- syscall_nr_prof = syscall_nr_base+44;
- syscall_nr_brk = syscall_nr_base+45;
- syscall_nr_setgid = syscall_nr_base+46;
- syscall_nr_getgid = syscall_nr_base+47;
- syscall_nr_signal = syscall_nr_base+48;
- syscall_nr_geteuid = syscall_nr_base+49;
- syscall_nr_getegid = syscall_nr_base+50;
- syscall_nr_acct = syscall_nr_base+51;
- syscall_nr_umount2 = syscall_nr_base+52;
- syscall_nr_lock = syscall_nr_base+53;
- syscall_nr_ioctl = syscall_nr_base+54;
- syscall_nr_fcntl = syscall_nr_base+55;
- syscall_nr_mpx = syscall_nr_base+56;
- syscall_nr_setpgid = syscall_nr_base+57;
- syscall_nr_ulimit = syscall_nr_base+58;
-
- syscall_nr_umask = syscall_nr_base+60;
- syscall_nr_chroot = syscall_nr_base+61;
- syscall_nr_ustat = syscall_nr_base+62;
- syscall_nr_dup2 = syscall_nr_base+63;
- syscall_nr_getppid = syscall_nr_base+64;
- syscall_nr_getpgrp = syscall_nr_base+65;
- syscall_nr_setsid = syscall_nr_base+66;
- syscall_nr_sigaction = syscall_nr_base+67;
- syscall_nr_sgetmask = syscall_nr_base+68;
- syscall_nr_ssetmask = syscall_nr_base+69;
- syscall_nr_setreuid = syscall_nr_base+70;
- syscall_nr_setregid = syscall_nr_base+71;
- syscall_nr_sigsuspend = syscall_nr_base+72;
- syscall_nr_sigpending = syscall_nr_base+73;
- syscall_nr_sethostname = syscall_nr_base+74;
- syscall_nr_setrlimit = syscall_nr_base+75;
-{$ifndef FPC_ABI_EABI}
- syscall_nr_getrlimit = syscall_nr_base+76;
-{$endif}
- syscall_nr_getrusage = syscall_nr_base+77;
- syscall_nr_gettimeofday = syscall_nr_base+78;
- syscall_nr_settimeofday = syscall_nr_base+79;
- syscall_nr_getgroups = syscall_nr_base+80;
- syscall_nr_setgroups = syscall_nr_base+81;
-{$ifndef FPC_ABI_EABI}
- syscall_nr_select = syscall_nr_base+82;
-{$endif}
- syscall_nr_symlink = syscall_nr_base+83;
-
- syscall_nr_readlink = syscall_nr_base+85;
- syscall_nr_uselib = syscall_nr_base+86;
- syscall_nr_swapon = syscall_nr_base+87;
- syscall_nr_reboot = syscall_nr_base+88;
-{$ifndef FPC_ABI_EABI}
- syscall_nr_readdir = syscall_nr_base+89;
- syscall_nr_mmap = syscall_nr_base+90;
-{$endif}
- syscall_nr_munmap = syscall_nr_base+91;
- syscall_nr_truncate = syscall_nr_base+92;
- syscall_nr_ftruncate = syscall_nr_base+93;
- syscall_nr_fchmod = syscall_nr_base+94;
- syscall_nr_fchown = syscall_nr_base+95;
- syscall_nr_getpriority = syscall_nr_base+96;
- syscall_nr_setpriority = syscall_nr_base+97;
- syscall_nr_profil = syscall_nr_base+98;
- syscall_nr_statfs = syscall_nr_base+99;
- syscall_nr_fstatfs = syscall_nr_base+100;
- syscall_nr_ioperm = syscall_nr_base+101;
-{$ifndef FPC_ABI_EABI}
- syscall_nr_socketcall = syscall_nr_base+102;
-{$endif}
- syscall_nr_syslog = syscall_nr_base+103;
- syscall_nr_setitimer = syscall_nr_base+104;
- syscall_nr_getitimer = syscall_nr_base+105;
- syscall_nr_stat = syscall_nr_base+106;
- syscall_nr_lstat = syscall_nr_base+107;
- syscall_nr_fstat = syscall_nr_base+108;
- syscall_nr_vhangup = syscall_nr_base+111;
- syscall_nr_idle = syscall_nr_base+112;
-{$ifndef FPC_ABI_EABI}
- syscall_nr_syscall = syscall_nr_base+113;
-{$endif}
- syscall_nr_wait4 = syscall_nr_base+114;
- syscall_nr_swapoff = syscall_nr_base+115;
- syscall_nr_sysinfo = syscall_nr_base+116;
-{$ifndef FPC_ABI_EABI}
- syscall_nr_ipc = syscall_nr_base+117;
-{$endif}
- syscall_nr_fsync = syscall_nr_base+118;
- syscall_nr_sigreturn = syscall_nr_base+119;
- syscall_nr_clone = syscall_nr_base+120;
- syscall_nr_setdomainname = syscall_nr_base+121;
- syscall_nr_uname = syscall_nr_base+122;
- syscall_nr_modify_ldt = syscall_nr_base+123;
- syscall_nr_adjtimex = syscall_nr_base+124;
- syscall_nr_mprotect = syscall_nr_base+125;
- syscall_nr_sigprocmask = syscall_nr_base+126;
- syscall_nr_create_module = syscall_nr_base+127;
- syscall_nr_init_module = syscall_nr_base+128;
- syscall_nr_delete_module = syscall_nr_base+129;
- syscall_nr_get_kernel_syms = syscall_nr_base+130;
- syscall_nr_quotactl = syscall_nr_base+131;
- syscall_nr_getpgid = syscall_nr_base+132;
- syscall_nr_fchdir = syscall_nr_base+133;
- syscall_nr_bdflush = syscall_nr_base+134;
- syscall_nr_sysfs = syscall_nr_base+135;
- syscall_nr_personality = syscall_nr_base+136;
- syscall_nr_afs_syscall = syscall_nr_base+137;
- syscall_nr_setfsuid = syscall_nr_base+138;
- syscall_nr_setfsgid = syscall_nr_base+139;
- syscall_nr__llseek = syscall_nr_base+140;
- syscall_nr_getdents = syscall_nr_base+141;
- syscall_nr__newselect = syscall_nr_base+142;
- syscall_nr_flock = syscall_nr_base+143;
- syscall_nr_msync = syscall_nr_base+144;
- syscall_nr_readv = syscall_nr_base+145;
- syscall_nr_writev = syscall_nr_base+146;
- syscall_nr_getsid = syscall_nr_base+147;
- syscall_nr_fdatasync = syscall_nr_base+148;
- syscall_nr__sysctl = syscall_nr_base+149;
- syscall_nr_mlock = syscall_nr_base+150;
- syscall_nr_munlock = syscall_nr_base+151;
- syscall_nr_mlockall = syscall_nr_base+152;
- syscall_nr_munlockall = syscall_nr_base+153;
- syscall_nr_sched_setparam = syscall_nr_base+154;
- syscall_nr_sched_getparam = syscall_nr_base+155;
- syscall_nr_sched_setscheduler = syscall_nr_base+156;
- syscall_nr_sched_getscheduler = syscall_nr_base+157;
- syscall_nr_sched_yield = syscall_nr_base+158;
- syscall_nr_sched_get_priority_max = syscall_nr_base+159;
- syscall_nr_sched_get_priority_min = syscall_nr_base+160;
- syscall_nr_sched_rr_get_interval = syscall_nr_base+161;
- syscall_nr_nanosleep = syscall_nr_base+162;
- syscall_nr_mremap = syscall_nr_base+163;
- syscall_nr_setresuid = syscall_nr_base+164;
- syscall_nr_getresuid = syscall_nr_base+165;
- syscall_nr_vm86 = syscall_nr_base+166;
- syscall_nr_query_module = syscall_nr_base+167;
- syscall_nr_poll = syscall_nr_base+168;
- syscall_nr_nfsservctl = syscall_nr_base+169;
- syscall_nr_setresgid = syscall_nr_base+170;
- syscall_nr_getresgid = syscall_nr_base+171;
- syscall_nr_prctl = syscall_nr_base+172;
- syscall_nr_rt_sigreturn = syscall_nr_base+173;
- syscall_nr_rt_sigaction = syscall_nr_base+174;
- syscall_nr_rt_sigprocmask = syscall_nr_base+175;
- syscall_nr_rt_sigpending = syscall_nr_base+176;
- syscall_nr_rt_sigtimedwait = syscall_nr_base+177;
- syscall_nr_rt_sigqueueinfo = syscall_nr_base+178;
- syscall_nr_rt_sigsuspend = syscall_nr_base+179;
- syscall_nr_pread = syscall_nr_base+180;
- syscall_nr_pwrite = syscall_nr_base+181;
- syscall_nr_chown = syscall_nr_base+182;
- syscall_nr_getcwd = syscall_nr_base+183;
- syscall_nr_capget = syscall_nr_base+184;
- syscall_nr_capset = syscall_nr_base+185;
- syscall_nr_sigaltstack = syscall_nr_base+186;
- syscall_nr_sendfile = syscall_nr_base+187;
- syscall_nr_vfork = syscall_nr_base+190;
- syscall_nr_ugetrlimit = syscall_nr_base+191;
- syscall_nr_mmap2 = syscall_nr_base+192;
- syscall_nr_truncate64 = syscall_nr_base+193;
- syscall_nr_ftruncate64 = syscall_nr_base+194;
- syscall_nr_stat64 = syscall_nr_base+195;
- syscall_nr_lstat64 = syscall_nr_base+196;
- syscall_nr_fstat64 = syscall_nr_base+197;
- syscall_nr_lchown32 = syscall_nr_base+198;
- syscall_nr_getuid32 = syscall_nr_base+199;
- syscall_nr_getgid32 = syscall_nr_base+200;
- syscall_nr_geteuid32 = syscall_nr_base+201;
- syscall_nr_getegid32 = syscall_nr_base+202;
- syscall_nr_setreuid32 = syscall_nr_base+203;
- syscall_nr_setregid32 = syscall_nr_base+204;
- syscall_nr_getgroups32 = syscall_nr_base+205;
- syscall_nr_setgroups32 = syscall_nr_base+206;
- syscall_nr_fchown32 = syscall_nr_base+207;
- syscall_nr_setresuid32 = syscall_nr_base+208;
- syscall_nr_getresuid32 = syscall_nr_base+209;
- syscall_nr_setresgid32 = syscall_nr_base+210;
- syscall_nr_getresgid32 = syscall_nr_base+211;
- syscall_nr_chown32 = syscall_nr_base+212;
- syscall_nr_setuid32 = syscall_nr_base+213;
- syscall_nr_setgid32 = syscall_nr_base+214;
- syscall_nr_setfsuid32 = syscall_nr_base+215;
- syscall_nr_setfsgid32 = syscall_nr_base+216;
- syscall_nr_getdents64 = syscall_nr_base+217;
- syscall_nr_pivot_root = syscall_nr_base+218;
- syscall_nr_mincore = syscall_nr_base+219;
- syscall_nr_madvise = syscall_nr_base+220;
- syscall_nr_fcntl64 = syscall_nr_base+221;
- syscall_nr_security = syscall_nr_base+223;
- syscall_nr_gettid = syscall_nr_base+224;
- syscall_nr_readahead = syscall_nr_base+225;
- syscall_nr_setxattr = syscall_nr_base+226;
- syscall_nr_lsetxattr = syscall_nr_base+227;
- syscall_nr_fsetxattr = syscall_nr_base+228;
- syscall_nr_getxattr = syscall_nr_base+229;
- syscall_nr_lgetxattr = syscall_nr_base+230;
- syscall_nr_fgetxattr = syscall_nr_base+231;
- syscall_nr_listxattr = syscall_nr_base+232;
- syscall_nr_llistxattr = syscall_nr_base+233;
- syscall_nr_flistxattr = syscall_nr_base+234;
- syscall_nr_removexattr = syscall_nr_base+235;
- syscall_nr_lremovexattr = syscall_nr_base+236;
- syscall_nr_fremovexattr = syscall_nr_base+237;
- syscall_nr_tkill = syscall_nr_base+238;
- syscall_nr_sendfile64 = syscall_nr_base+239;
- syscall_nr_futex = syscall_nr_base+240;
- syscall_nr_sched_setaffinity = syscall_nr_base+241;
- syscall_nr_sched_getaffinity = syscall_nr_base+242;
- syscall_nr_io_setup = syscall_nr_base+243;
- syscall_nr_io_destroy = syscall_nr_base+244;
- syscall_nr_io_getevents = syscall_nr_base+245;
- syscall_nr_io_submit = syscall_nr_base+246;
- syscall_nr_io_cancel = syscall_nr_base+247;
- syscall_nr_exit_group = syscall_nr_base+248;
- syscall_nr_lookup_dcookie = syscall_nr_base+249;
- syscall_nr_epoll_create = syscall_nr_base+250;
- syscall_nr_epoll_ctl = syscall_nr_base+251;
- syscall_nr_epoll_wait = syscall_nr_base+252;
- syscall_nr_remap_file_pages = syscall_nr_base+253;
- syscall_nr_set_tid_address = syscall_nr_base+256;
- { 254 for set_thread_area }
- { 255 for get_thread_area }
- syscall_nr_timer_create = syscall_nr_base+257;
- syscall_nr_timer_settime = syscall_nr_base+258;
- syscall_nr_timer_gettime = syscall_nr_base+259;
- syscall_nr_timer_getoverrun = syscall_nr_base+260;
- syscall_nr_timer_delete = syscall_nr_base+261;
- syscall_nr_clock_settime = syscall_nr_base+262;
- syscall_nr_clock_gettime = syscall_nr_base+263;
- syscall_nr_clock_getres = syscall_nr_base+264;
- syscall_nr_clock_nanosleep = syscall_nr_base+265;
- syscall_nr_statfs64 = syscall_nr_base+266;
- syscall_nr_fstatfs64 = syscall_nr_base+267;
- syscall_nr_tgkill = syscall_nr_base+268;
- syscall_nr_utimes = syscall_nr_base+269;
- syscall_nr_fadvise64_64 = syscall_nr_base+270;
- syscall_nr_pciconfig_iobase = syscall_nr_base+271;
- syscall_nr_pciconfig_read = syscall_nr_base+272;
- syscall_nr_pciconfig_write = syscall_nr_base+273;
- syscall_nr_mq_open = syscall_nr_base+274;
- syscall_nr_mq_unlink = syscall_nr_base+275;
- syscall_nr_mq_timedsend = syscall_nr_base+276;
- syscall_nr_mq_timedreceive = syscall_nr_base+277;
- syscall_nr_mq_notify = syscall_nr_base+278;
- syscall_nr_mq_getsetattr = syscall_nr_base+279;
- syscall_nr_waitid = syscall_nr_base+280;
- syscall_nr_socket = syscall_nr_base+281;
- syscall_nr_bind = syscall_nr_base+282;
- syscall_nr_connect = syscall_nr_base+283;
- syscall_nr_listen = syscall_nr_base+284;
- syscall_nr_accept = syscall_nr_base+285;
- syscall_nr_getsockname = syscall_nr_base+286;
- syscall_nr_getpeername = syscall_nr_base+287;
- syscall_nr_socketpair = syscall_nr_base+288;
- syscall_nr_send = syscall_nr_base+289;
- syscall_nr_sendto = syscall_nr_base+290;
- syscall_nr_recv = syscall_nr_base+291;
- syscall_nr_recvfrom = syscall_nr_base+292;
- syscall_nr_shutdown = syscall_nr_base+293;
- syscall_nr_setsockopt = syscall_nr_base+294;
- syscall_nr_getsockopt = syscall_nr_base+295;
- syscall_nr_sendmsg = syscall_nr_base+296;
- syscall_nr_recvmsg = syscall_nr_base+297;
- syscall_nr_semop = syscall_nr_base+298;
- syscall_nr_semget = syscall_nr_base+299;
- syscall_nr_semctl = syscall_nr_base+300;
- syscall_nr_msgsnd = syscall_nr_base+301;
- syscall_nr_msgrcv = syscall_nr_base+302;
- syscall_nr_msgget = syscall_nr_base+303;
- syscall_nr_msgctl = syscall_nr_base+304;
- syscall_nr_shmat = syscall_nr_base+305;
- syscall_nr_shmdt = syscall_nr_base+306;
- syscall_nr_shmget = syscall_nr_base+307;
- syscall_nr_shmctl = syscall_nr_base+308;
- syscall_nr_add_key = syscall_nr_base+309;
- syscall_nr_request_key = syscall_nr_base+310;
- syscall_nr_keyctl = syscall_nr_base+311;
- syscall_nr_semtimedop = syscall_nr_base+312;
- syscall_nr_vserver = syscall_nr_base+313;
- syscall_nr_ioprio_set = syscall_nr_base+314;
- syscall_nr_ioprio_get = syscall_nr_base+315;
- syscall_nr_inotify_init = syscall_nr_base+316;
- syscall_nr_inotify_add_watch = syscall_nr_base+317;
- syscall_nr_inotify_rm_watch = syscall_nr_base+318;
- syscall_nr_mbind = syscall_nr_base+319;
- syscall_nr_get_mempolicy = syscall_nr_base+320;
- syscall_nr_set_mempolicy = syscall_nr_base+321;
- syscall_nr_openat = syscall_nr_base+322;
- syscall_nr_mkdirat = syscall_nr_base+323;
- syscall_nr_mknodat = syscall_nr_base+324;
- syscall_nr_fchownat = syscall_nr_base+325;
- syscall_nr_futimesat = syscall_nr_base+326;
- syscall_nr_fstatat64 = syscall_nr_base+327;
- syscall_nr_unlinkat = syscall_nr_base+328;
- syscall_nr_renameat = syscall_nr_base+329;
- syscall_nr_linkat = syscall_nr_base+330;
- syscall_nr_symlinkat = syscall_nr_base+331;
- syscall_nr_readlinkat = syscall_nr_base+332;
- syscall_nr_fchmodat = syscall_nr_base+333;
- syscall_nr_faccessat = syscall_nr_base+334;
- {* 335 for pselect6 *}
- {* 336 for ppoll *}
- syscall_nr_unshare = syscall_nr_base+337;
- syscall_nr_set_robust_list = syscall_nr_base+338;
- syscall_nr_get_robust_list = syscall_nr_base+339;
- syscall_nr_splice = syscall_nr_base+340;
- syscall_nr_arm_sync_file_range = syscall_nr_base+341;
- syscall_nr_sync_file_range2 = syscall_nr_arm_sync_file_range;
- syscall_nr_tee = syscall_nr_base+342;
- syscall_nr_vmsplice = syscall_nr_base+343;
- syscall_nr_move_pages = syscall_nr_base+344;
- syscall_nr_getcpu = syscall_nr_base+345;
- {* 346 for epoll_pwait *}
- syscall_nr_kexec_load = syscall_nr_base+347;
- syscall_nr_utimensat = syscall_nr_base+348;
- syscall_nr_signalfd = syscall_nr_base+349;
- syscall_nr_timerfd_create = syscall_nr_base+350;
- syscall_nr_eventfd = syscall_nr_base+351;
- syscall_nr_fallocate = syscall_nr_base+352;
- syscall_nr_timerfd_settime = syscall_nr_base+353;
- syscall_nr_timerfd_gettime = syscall_nr_base+354;
- syscall_nr_signalfd4 = syscall_nr_base+355;
- syscall_nr_eventfd2 = syscall_nr_base+356;
- syscall_nr_epoll_create1 = syscall_nr_base+357;
- syscall_nr_dup3 = syscall_nr_base+358;
- syscall_nr_pipe2 = syscall_nr_base+359;
- syscall_nr_inotify_init1 = syscall_nr_base+360;
- syscall_nr_preadv = syscall_nr_base+361;
- syscall_nr_pwritev = syscall_nr_base+362;
- syscall_nr_rt_tgsigqueueinfo = syscall_nr_base+363;
- syscall_nr_perf_event_open = syscall_nr_base+364;
- syscall_nr_recvmmsg = syscall_nr_base+365;
-
+{$i ../sysnr-gen.inc}
diff --git a/riscv_new/rtl/linux/riscv64/prt0.as b/riscv_new/rtl/linux/riscv64/prt0.as
index af52cf5a7c..deaca13a29 100644
--- a/riscv_new/rtl/linux/riscv64/prt0.as
+++ b/riscv_new/rtl/linux/riscv64/prt0.as
@@ -19,9 +19,11 @@ _dynamic_start:
.globl _start
.type _start, function
_start:
-1:
- auipc gp, %pcrel_hi(__bss_start+0x800)
+ .option push
+ .option norelax
+1: auipc gp, %pcrel_hi(__bss_start+0x800)
addi gp, gp, %pcrel_lo(1b)
+ .option pop
/* Get argc, argv, envp */
ld x5,(x2)
diff --git a/riscv_new/rtl/riscv64/setjump.inc b/riscv_new/rtl/riscv64/setjump.inc
index bb238b7aba..e414b9f3a9 100644
--- a/riscv_new/rtl/riscv64/setjump.inc
+++ b/riscv_new/rtl/riscv64/setjump.inc
@@ -32,9 +32,9 @@ function fpc_setjmp(var S : jmp_buf) : longint;assembler;nostackframe;[Public, a
sd sp, 13*8(a0)
{$if defined(FPUFD) or defined(FPUD)}
- frcsr s0
+ frcsr t0
- sd s0, 14*8(a0)
+ sd t0, 14*8(a0)
fsd f8, 15*8(a0)
fsd f9, 16*8(a0)
@@ -50,9 +50,9 @@ function fpc_setjmp(var S : jmp_buf) : longint;assembler;nostackframe;[Public, a
fsd f27, 26*8(a0)
{$endif FPUFD or FPUD}
{$if defined(FPUF)}
- frcsr s0
+ frcsr t0
- sd s0, 14*8(a0)
+ sd t0, 14*8(a0)
fsw f8, 30*4(a0)
fsw f9, 31*4(a0)
@@ -88,7 +88,7 @@ procedure fpc_longjmp(var S : jmp_buf;value : longint);assembler;nostackframe;[P
ld s10,11*8(a0)
ld s11,12*8(a0)
-{$if defined(FPUFD) or defined(FPUD)}
+{$if defined(FPUFD) or defined(FPUD)}
ld sp, 14*8(a0)
fld f8, 15*8(a0)
@@ -126,7 +126,13 @@ procedure fpc_longjmp(var S : jmp_buf;value : longint);assembler;nostackframe;[P
{$endif FPUF}
ld sp, 13*8(a0)
- sltiu a0, a1, 1
- add a0, a0, a1
+ beq a1, x0, .Lone
+ jal x0, .Lzero
+ .Lone:
+ addi a0, x0, 1
+ jal x0, .Lexit
+ .Lzero:
+ addi a0, a1, 0
+ .Lexit:
end;
diff --git a/riscv_new/tests/Makefile b/riscv_new/tests/Makefile
index 8b25d0b9d7..873a099aa0 100644
--- a/riscv_new/tests/Makefile
+++ b/riscv_new/tests/Makefile
@@ -1,8 +1,8 @@
#
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2018-04-12 rev 38745]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2018/07/20]
#
default: allexectests
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android i386-aros m68k-linux m68k-netbsd m68k-amiga m68k-atari m68k-palmos m68k-macos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded x86_64-iphonesim x86_64-aros x86_64-dragonfly arm-linux arm-netbsd arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android arm-aros powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-embedded mipsel-android jvm-java jvm-android i8086-embedded i8086-msdos i8086-win16 aarch64-linux aarch64-darwin wasm-wasm sparc64-linux
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android i386-aros m68k-linux m68k-netbsd m68k-amiga m68k-atari m68k-palmos m68k-macos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded x86_64-iphonesim x86_64-aros x86_64-dragonfly arm-linux arm-netbsd arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android arm-aros powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-embedded mipsel-android jvm-java jvm-android i8086-embedded i8086-msdos i8086-win16 aarch64-linux aarch64-darwin wasm-wasm sparc64-linux riscv32-linux riscv32-embedded riscv64-linux riscv64-embedded
BSDs = freebsd netbsd openbsd darwin dragonfly
UNIXs = linux $(BSDs) solaris qnx haiku aix
LIMIT83fs = go32v2 os2 emx watcom msdos win16 atari
@@ -586,6 +586,18 @@ endif
ifeq ($(FULL_TARGET),sparc64-linux)
override TARGET_PROGRAMS+=gparmake createlst
endif
+ifeq ($(FULL_TARGET),riscv32-linux)
+override TARGET_PROGRAMS+=gparmake createlst
+endif
+ifeq ($(FULL_TARGET),riscv32-embedded)
+override TARGET_PROGRAMS+=gparmake createlst
+endif
+ifeq ($(FULL_TARGET),riscv64-linux)
+override TARGET_PROGRAMS+=gparmake createlst
+endif
+ifeq ($(FULL_TARGET),riscv64-embedded)
+override TARGET_PROGRAMS+=gparmake createlst
+endif
override INSTALL_FPCPACKAGE=y
ifdef REQUIRE_UNITSDIR
override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -1507,6 +1519,18 @@ endif
ifeq ($(FULL_TARGET),sparc64-linux)
REQUIRE_PACKAGES_RTL=1
endif
+ifeq ($(FULL_TARGET),riscv32-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),riscv32-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),riscv64-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),riscv64-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
ifdef REQUIRE_PACKAGES_RTL
PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
ifneq ($(PACKAGEDIR_RTL),)
diff --git a/riscv_new/tests/tstunits/Makefile b/riscv_new/tests/tstunits/Makefile
index 12c5df74f0..a660229366 100644
--- a/riscv_new/tests/tstunits/Makefile
+++ b/riscv_new/tests/tstunits/Makefile
@@ -1,8 +1,8 @@
#
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2018-04-12 rev 38745]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2018/07/20]
#
default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android i386-aros m68k-linux m68k-netbsd m68k-amiga m68k-atari m68k-palmos m68k-macos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded x86_64-iphonesim x86_64-aros x86_64-dragonfly arm-linux arm-netbsd arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android arm-aros powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-embedded mipsel-android jvm-java jvm-android i8086-embedded i8086-msdos i8086-win16 aarch64-linux aarch64-darwin wasm-wasm sparc64-linux
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android i386-aros m68k-linux m68k-netbsd m68k-amiga m68k-atari m68k-palmos m68k-macos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded x86_64-iphonesim x86_64-aros x86_64-dragonfly arm-linux arm-netbsd arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android arm-aros powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-embedded mipsel-android jvm-java jvm-android i8086-embedded i8086-msdos i8086-win16 aarch64-linux aarch64-darwin wasm-wasm sparc64-linux riscv32-linux riscv32-embedded riscv64-linux riscv64-embedded
BSDs = freebsd netbsd openbsd darwin dragonfly
UNIXs = linux $(BSDs) solaris qnx haiku aix
LIMIT83fs = go32v2 os2 emx watcom msdos win16 atari
@@ -586,6 +586,18 @@ endif
ifeq ($(FULL_TARGET),sparc64-linux)
override CLEAN_UNITS+=erroru popuperr ptest
endif
+ifeq ($(FULL_TARGET),riscv32-linux)
+override CLEAN_UNITS+=erroru popuperr ptest
+endif
+ifeq ($(FULL_TARGET),riscv32-embedded)
+override CLEAN_UNITS+=erroru popuperr ptest
+endif
+ifeq ($(FULL_TARGET),riscv64-linux)
+override CLEAN_UNITS+=erroru popuperr ptest
+endif
+ifeq ($(FULL_TARGET),riscv64-embedded)
+override CLEAN_UNITS+=erroru popuperr ptest
+endif
override INSTALL_FPCPACKAGE=y
ifeq ($(FULL_TARGET),i386-linux)
override COMPILER_TARGETDIR+=$(TARGETSUFFIX)
@@ -842,6 +854,18 @@ endif
ifeq ($(FULL_TARGET),sparc64-linux)
override COMPILER_TARGETDIR+=$(TARGETSUFFIX)
endif
+ifeq ($(FULL_TARGET),riscv32-linux)
+override COMPILER_TARGETDIR+=$(TARGETSUFFIX)
+endif
+ifeq ($(FULL_TARGET),riscv32-embedded)
+override COMPILER_TARGETDIR+=$(TARGETSUFFIX)
+endif
+ifeq ($(FULL_TARGET),riscv64-linux)
+override COMPILER_TARGETDIR+=$(TARGETSUFFIX)
+endif
+ifeq ($(FULL_TARGET),riscv64-embedded)
+override COMPILER_TARGETDIR+=$(TARGETSUFFIX)
+endif
ifdef REQUIRE_UNITSDIR
override UNITSDIR+=$(REQUIRE_UNITSDIR)
endif