Skip to content
This repository was archived by the owner on Oct 12, 2022. It is now read-only.

Commit 0450507

Browse files
authored
Merge pull request #2355 from ibuclaw/riscv
Add support for RISCV{32,64} to glibc bindings merged-on-behalf-of: Nicholas Wilson <thewilsonator@users.noreply.github.com>
2 parents 202c2d1 + 5f2263d commit 0450507

File tree

18 files changed

+370
-0
lines changed

18 files changed

+370
-0
lines changed

src/core/stdc/fenv.d

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ version (MIPS32) version = MIPS_Any;
3434
version (MIPS64) version = MIPS_Any;
3535
version (PPC) version = PPC_Any;
3636
version (PPC64) version = PPC_Any;
37+
version (RISCV32) version = RISCV_Any;
38+
version (RISCV64) version = RISCV_Any;
3739
version (S390) version = IBMZ_Any;
3840
version (SPARC) version = SPARC_Any;
3941
version (SPARC64) version = SPARC_Any;
@@ -128,6 +130,12 @@ version (GNUFP)
128130
alias fenv_t = double;
129131
alias fexcept_t = uint;
130132
}
133+
// https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/riscv/bits/fenv.h
134+
else version (RISCV_Any)
135+
{
136+
alias fenv_t = uint;
137+
alias fexcept_t = uint;
138+
}
131139
// https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/sparc/fpu/bits/fenv.h
132140
else version (SPARC64)
133141
{
@@ -639,6 +647,28 @@ else
639647
FE_DOWNWARD = 3, ///
640648
}
641649
}
650+
else version (RISCV_Any)
651+
{
652+
// Define bits representing exceptions in the FPSR status word.
653+
enum
654+
{
655+
FE_INEXACT = 0x01, ///
656+
FE_UNDERFLOW = 0x02, ///
657+
FE_OVERFLOW = 0x04, ///
658+
FE_DIVBYZERO = 0x08, ///
659+
FE_INVALID = 0x10, ///
660+
FE_ALL_EXCEPT = 0x1f, ///
661+
}
662+
663+
// Define bits representing rounding modes in the FPCR Rmode field.
664+
enum
665+
{
666+
FE_TONEAREST = 0x0, ///
667+
FE_TOWARDZERO = 0x1, ///
668+
FE_DOWNWARD = 0x2, ///
669+
FE_UPWARD = 0x3, ///
670+
}
671+
}
642672
else version (SPARC_Any)
643673
{
644674
// Define bits representing the exception.

src/core/stdc/math.d

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ version (MIPS32) version = MIPS_Any;
3030
version (MIPS64) version = MIPS_Any;
3131
version (PPC) version = PPC_Any;
3232
version (PPC64) version = PPC_Any;
33+
version (RISCV32) version = RISCV_Any;
34+
version (RISCV64) version = RISCV_Any;
3335
version (S390) version = IBMZ_Any;
3436
version (SPARC) version = SPARC_Any;
3537
version (SPARC64) version = SPARC_Any;
@@ -159,6 +161,13 @@ else version (CRuntime_Glibc)
159161
///
160162
enum int FP_ILOGBNAN = int.max;
161163
}
164+
else version (RISCV_Any)
165+
{
166+
///
167+
enum int FP_ILOGB0 = -int.max;
168+
///
169+
enum int FP_ILOGBNAN = int.max;
170+
}
162171
else version (SPARC_Any)
163172
{
164173
///

src/core/sys/linux/dlfcn.d

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ version (MIPS32) version = MIPS_Any;
1616
version (MIPS64) version = MIPS_Any;
1717
version (PPC) version = PPC_Any;
1818
version (PPC64) version = PPC_Any;
19+
version (RISCV32) version = RISCV_Any;
20+
version (RISCV64) version = RISCV_Any;
1921
version (S390) version = IBMZ_Any;
2022
version (SPARC) version = SPARC_Any;
2123
version (SPARC64) version = SPARC_Any;
@@ -123,6 +125,30 @@ else version (ARM_Any)
123125
void _dl_mcount_wrapper_check(void* __selfpc);
124126
}
125127
}
128+
else version (RISCV_Any)
129+
{
130+
// http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/dlfcn.h
131+
// enum RTLD_LAZY = 0x0001; // POSIX
132+
// enum RTLD_NOW = 0x0002; // POSIX
133+
enum RTLD_BINDING_MASK = 0x3;
134+
enum RTLD_NOLOAD = 0x00004;
135+
enum RTLD_DEEPBIND = 0x00008;
136+
137+
// enum RTLD_GLOBAL = 0x00100; // POSIX
138+
// enum RTLD_LOCAL = 0; // POSIX
139+
enum RTLD_NODELETE = 0x01000;
140+
141+
static if (__USE_GNU)
142+
{
143+
RT DL_CALL_FCT(RT, Args...)(RT function(Args) fctp, auto ref Args args)
144+
{
145+
_dl_mcount_wrapper_check(cast(void*)fctp);
146+
return fctp(args);
147+
}
148+
149+
void _dl_mcount_wrapper_check(void* __selfpc);
150+
}
151+
}
126152
else version (SPARC_Any)
127153
{
128154
// http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/dlfcn.h

src/core/sys/linux/epoll.d

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ version (MIPS32) version = MIPS_Any;
2121
version (MIPS64) version = MIPS_Any;
2222
version (PPC) version = PPC_Any;
2323
version (PPC64) version = PPC_Any;
24+
version (RISCV32) version = RISCV_Any;
25+
version (RISCV64) version = RISCV_Any;
2426
version (S390) version = IBMZ_Any;
2527
version (SPARC) version = SPARC_Any;
2628
version (SPARC64) version = SPARC_Any;
@@ -92,6 +94,14 @@ else version (MIPS_Any)
9294
epoll_data_t data;
9395
}
9496
}
97+
else version (RISCV_Any)
98+
{
99+
struct epoll_event
100+
{
101+
uint events;
102+
epoll_data_t data;
103+
}
104+
}
95105
else version (SPARC_Any)
96106
{
97107
struct epoll_event

src/core/sys/linux/link.d

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ version (MIPS32) version = MIPS_Any;
1515
version (MIPS64) version = MIPS_Any;
1616
version (PPC) version = PPC_Any;
1717
version (PPC64) version = PPC_Any;
18+
version (RISCV32) version = RISCV_Any;
19+
version (RISCV64) version = RISCV_Any;
1820
version (SPARC) version = SPARC_Any;
1921
version (SPARC64) version = SPARC_Any;
2022
version (X86) version = X86_Any;
@@ -50,6 +52,12 @@ else version (ARM_Any)
5052
alias __WORDSIZE __ELF_NATIVE_CLASS;
5153
alias uint32_t Elf_Symndx;
5254
}
55+
else version (RISCV_Any)
56+
{
57+
// http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/elfclass.h
58+
alias __WORDSIZE __ELF_NATIVE_CLASS;
59+
alias uint32_t Elf_Symndx;
60+
}
5361
else version (SPARC_Any)
5462
{
5563
// http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/elfclass.h

src/core/sys/linux/sys/eventfd.d

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ version (MIPS32) version = MIPS_Any;
1818
version (MIPS64) version = MIPS_Any;
1919
version (PPC) version = PPC_Any;
2020
version (PPC64) version = PPC_Any;
21+
version (RISCV32) version = RISCV_Any;
22+
version (RISCV64) version = RISCV_Any;
2123
version (S390) version = IBMZ_Any;
2224
version (SPARC) version = SPARC_Any;
2325
version (SPARC64) version = SPARC_Any;
@@ -64,6 +66,12 @@ else version (ARM_Any)
6466
enum EFD_CLOEXEC = 0x80000; // octal!2000000
6567
enum EFD_NONBLOCK = 0x800; // octal!4000
6668
}
69+
else version (RISCV_Any)
70+
{
71+
enum EFD_SEMAPHORE = 1;
72+
enum EFD_CLOEXEC = 0x80000; // octal!2000000
73+
enum EFD_NONBLOCK = 0x800; // octal!4000
74+
}
6775
else version (SPARC_Any)
6876
{
6977
enum EFD_SEMAPHORE = 1;

src/core/sys/linux/sys/inotify.d

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ version (MIPS32) version = MIPS_Any;
1717
version (MIPS64) version = MIPS_Any;
1818
version (PPC) version = PPC_Any;
1919
version (PPC64) version = PPC_Any;
20+
version (RISCV32) version = RISCV_Any;
21+
version (RISCV64) version = RISCV_Any;
2022
version (S390) version = IBMZ_Any;
2123
version (SPARC) version = SPARC_Any;
2224
version (SPARC64) version = SPARC_Any;
@@ -86,6 +88,11 @@ else version (ARM_Any)
8688
enum IN_CLOEXEC = 0x80000; // octal!2000000
8789
enum IN_NONBLOCK = 0x800; // octal!4000
8890
}
91+
else version (RISCV_Any)
92+
{
93+
enum IN_CLOEXEC = 0x80000; // octal!2000000
94+
enum IN_NONBLOCK = 0x800; // octal!4000
95+
}
8996
else version (SPARC_Any)
9097
{
9198
enum IN_CLOEXEC = 0x80000; // octal!2000000

src/core/sys/linux/sys/mman.d

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ version (X86_64) version = X86_Any;
2727
public import core.sys.posix.sys.mman;
2828
import core.sys.linux.config;
2929

30+
version (RISCV32) version = RISCV_Any;
31+
version (RISCV64) version = RISCV_Any;
32+
3033
// <bits/mman.h>
3134
// http://sourceware.org/git/?p=glibc.git;a=blob;hb=51e945a8f950a6695754b11c1e6fba8bb750e100;f=sysdeps/unix/sysv/linux/powerpc/bits/mman.h
3235
version (PPC_Any)
@@ -53,6 +56,31 @@ version (PPC_Any)
5356
// MCL_FUTURE = 0x4000,
5457
// }
5558
}
59+
// https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/riscv/bits/mman.h
60+
else version (RISCV_Any)
61+
{
62+
static if (__USE_MISC) enum
63+
{
64+
MAP_GROWSDOWN = 0x00100,
65+
MAP_DENYWRITE = 0x00800,
66+
MAP_EXECUTABLE = 0x01000,
67+
MAP_LOCKED = 0x02000,
68+
MAP_NORESERVE = 0x04000,
69+
MAP_POPULATE = 0x08000,
70+
MAP_NONBLOCK = 0x10000,
71+
MAP_STACK = 0x20000,
72+
MAP_HUGETLB = 0x40000,
73+
MAP_SYNC = 0x80000,
74+
MAP_FIXED_NOREPLACE = 0x100000,
75+
}
76+
77+
// in core.sys.posix.sys.mman
78+
// enum
79+
// {
80+
// MCL_CURRENT = 0x2000,
81+
// MCL_FUTURE = 0x4000,
82+
// }
83+
}
5684
// http://sourceware.org/git/?p=glibc.git;a=blob;hb=51e945a8f950a6695754b11c1e6fba8bb750e100;f=sysdeps/unix/sysv/linux/s390/bits/mman.h
5785
else version (IBMZ_Any)
5886
{

src/core/sys/posix/dlfcn.d

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ version (MIPS32) version = MIPS_Any;
3131
version (MIPS64) version = MIPS_Any;
3232
version (PPC) version = PPC_Any;
3333
version (PPC64) version = PPC_Any;
34+
version (RISCV32) version = RISCV_Any;
35+
version (RISCV64) version = RISCV_Any;
3436
version (S390) version = IBMZ_Any;
3537
version (SPARC) version = SPARC_Any;
3638
version (SPARC64) version = SPARC_Any;
@@ -88,6 +90,13 @@ version (CRuntime_Glibc)
8890
enum RTLD_GLOBAL = 0x00100;
8991
enum RTLD_LOCAL = 0;
9092
}
93+
else version (RISCV_Any)
94+
{
95+
enum RTLD_LAZY = 0x00001;
96+
enum RTLD_NOW = 0x00002;
97+
enum RTLD_GLOBAL = 0x00100;
98+
enum RTLD_LOCAL = 0;
99+
}
91100
else version (SPARC_Any)
92101
{
93102
enum RTLD_LAZY = 0x00001;

src/core/sys/posix/fcntl.d

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ version (MIPS32) version = MIPS_Any;
3434
version (MIPS64) version = MIPS_Any;
3535
version (PPC) version = PPC_Any;
3636
version (PPC64) version = PPC_Any;
37+
version (RISCV32) version = RISCV_Any;
38+
version (RISCV64) version = RISCV_Any;
3739
version (S390) version = IBMZ_Any;
3840
version (SPARC) version = SPARC_Any;
3941
version (SPARC64) version = SPARC_Any;
@@ -191,6 +193,19 @@ version (CRuntime_Glibc)
191193
enum O_DSYNC = 0x1000; // octal 010000
192194
enum O_RSYNC = O_SYNC;
193195
}
196+
else version (RISCV_Any)
197+
{
198+
enum O_CREAT = 0x40; // octal 0100
199+
enum O_EXCL = 0x80; // octal 0200
200+
enum O_NOCTTY = 0x100; // octal 0400
201+
enum O_TRUNC = 0x200; // octal 01000
202+
203+
enum O_APPEND = 0x400; // octal 02000
204+
enum O_NONBLOCK = 0x800; // octal 04000
205+
enum O_SYNC = 0x101000; // octal 04010000
206+
enum O_DSYNC = 0x1000; // octal 010000
207+
enum O_RSYNC = O_SYNC;
208+
}
194209
else version (SPARC_Any)
195210
{
196211
enum O_CREAT = 0x200;

0 commit comments

Comments
 (0)