Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'dev' into tty2
Browse files Browse the repository at this point in the history
TheSayOL authored May 11, 2024
2 parents b29ff0b + 8a729f8 commit 2657466
Showing 18 changed files with 585 additions and 21 deletions.
9 changes: 6 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -47,16 +47,19 @@ jobs:
crate: cargo-binutils
version: latest
use-tool-cache: true
# musl toolchain is also needed in non-musl apps
# because we need to build opensbi under riscv64
- uses: ./.github/workflows/actions/setup-musl
with:
arch: ${{ matrix.arch }}

- name: Build display/basic_painting
run: make ARCH=${{ matrix.arch }} A=apps/display/basic_painting
- name: Build display/draw_map
run: make ARCH=${{ matrix.arch }} A=apps/display/draw_map
- name: Build fs/shell
run: make ARCH=${{ matrix.arch }} A=apps/fs/shell

- uses: ./.github/workflows/actions/setup-musl
with:
arch: ${{ matrix.arch }}
- name: Build c/helloworld
run: make ARCH=${{ matrix.arch }} A=apps/c/helloworld
- name: Build c/memtest
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "patches/opensbi"]
path = patches/opensbi
url = https://github.com/Sssssaltyfish/opensbi.git
3 changes: 3 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -68,3 +68,6 @@ lto = true
[profile.reldebug]
inherits = "release"
debug = true

[patch.crates-io]
sbi-spec = { git = "https://github.com/Sssssaltyfish/rustsbi.git", rev = "a25d448d3d770c6db493a472e3e78d949b63f523", optional = true }
24 changes: 23 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -166,8 +166,19 @@ LD_SCRIPT := $(CURDIR)/modules/ruxhal/linker_$(PLATFORM_NAME).lds
OUT_ELF := $(OUT_DIR)/$(APP_NAME)_$(PLATFORM_NAME).elf
OUT_BIN := $(OUT_DIR)/$(APP_NAME)_$(PLATFORM_NAME).bin

PREBUILD := $(CURDIR)/scripts/prebuild/$(ARCH).mk

all: build

# prebuild option to be overriden in `$(PREBUILD)`
define run_prebuild
endef

# prebuild makefile might override some variables by their own
# so it must be placed before the rest of the makefiles
ifneq ($(wildcard $(PREBUILD)),)
include $(PREBUILD)
endif
include scripts/make/utils.mk
include scripts/make/build.mk
include scripts/make/qemu.mk
@@ -178,6 +189,16 @@ else ifeq ($(PLATFORM_NAME), aarch64-bsta1000b)
include scripts/make/bsta1000b-fada.mk
endif

_force: ;

# prebuild scripts must track their dependencies by themselves
prebuild: _force
$(call run_prebuild)

$(OUT_DIR): prebuild

$(OUT_BIN): prebuild

build: $(OUT_DIR) $(OUT_BIN)

disasm:
@@ -248,4 +269,5 @@ clean_musl:
rm -rf ulib/ruxmusl/build_*
rm -rf ulib/ruxmusl/install

.PHONY: all build disasm run justrun debug clippy fmt fmt_c test test_no_fail_fast clean clean_c clean_musl doc disk_image debug_no_attach
.PHONY: all build disasm run justrun debug clippy fmt fmt_c test test_no_fail_fast clean clean_c\
clean_musl doc disk_image debug_no_attach prebuild _force
7 changes: 5 additions & 2 deletions api/ruxos_posix_api/src/imp/pthread/mod.rs
Original file line number Diff line number Diff line change
@@ -98,7 +98,7 @@ impl Pthread {
}

/// Posix create, used by musl libc
#[cfg(all(feature = "musl", any(target_arch = "x86_64", target_arch = "aarch64")))]
#[cfg(feature = "musl")]
fn pcreate(
_attr: *const ctypes::pthread_attr_t,
start_routine: extern "C" fn(arg: *mut c_void) -> *mut c_void,
@@ -246,7 +246,10 @@ unsafe impl<T> Send for ForceSendSync<T> {}
unsafe impl<T> Sync for ForceSendSync<T> {}

/// Create new thread by `sys_clone`, return new thread ID
#[cfg(all(feature = "musl", target_arch = "aarch64"))]
#[cfg(all(
feature = "musl",
any(target_arch = "aarch64", target_arch = "riscv64")
))]
pub unsafe fn sys_clone(
flags: c_int,
stack: *mut c_void,
6 changes: 1 addition & 5 deletions api/ruxos_posix_api/src/lib.rs
Original file line number Diff line number Diff line change
@@ -111,11 +111,7 @@ pub use imp::signal::{sys_getitimer, sys_kill, sys_setitimer, sys_sigaction, sys

#[cfg(feature = "multitask")]
pub use imp::pthread::futex::sys_futex;
#[cfg(all(
feature = "multitask",
feature = "musl",
any(target_arch = "aarch64", target_arch = "x86_64")
))]
#[cfg(all(feature = "multitask", feature = "musl"))]
pub use imp::pthread::sys_clone;
#[cfg(all(feature = "multitask", feature = "musl"))]
pub use imp::pthread::sys_set_tid_address;
15 changes: 15 additions & 0 deletions modules/ruxhal/src/arch/riscv/trap.rs
Original file line number Diff line number Diff line change
@@ -29,6 +29,21 @@ fn riscv_trap_handler(tf: &mut TrapFrame, _from_user: bool) {
match scause.cause() {
Trap::Exception(E::Breakpoint) => handle_breakpoint(&mut tf.sepc),
Trap::Interrupt(_) => crate::trap::handle_irq_extern(scause.bits()),
#[cfg(feature = "musl")]
Trap::Exception(E::UserEnvCall) => {
let ret = crate::trap::handle_syscall(
tf.regs.a7,
[
tf.regs.a0 as _,
tf.regs.a1 as _,
tf.regs.a2 as _,
tf.regs.a3 as _,
tf.regs.a4 as _,
tf.regs.a5 as _,
],
);
tf.regs.a0 = ret as _;
}
_ => {
panic!(
"Unhandled trap {:?} @ {:#x}:\n{:#x?}",
18 changes: 13 additions & 5 deletions modules/ruxhal/src/platform/riscv64_qemu_virt/boot.rs
Original file line number Diff line number Diff line change
@@ -9,7 +9,7 @@

use riscv::register::satp;

use ruxconfig::{PHYS_VIRT_OFFSET, TASK_STACK_SIZE};
use ruxconfig::{PHYS_MEMORY_SIZE, PHYS_VIRT_OFFSET, TASK_STACK_SIZE};

#[link_section = ".bss.stack"]
static mut BOOT_STACK: [u8; TASK_STACK_SIZE] = [0; TASK_STACK_SIZE];
@@ -18,10 +18,18 @@ static mut BOOT_STACK: [u8; TASK_STACK_SIZE] = [0; TASK_STACK_SIZE];
static mut BOOT_PT_SV39: [u64; 512] = [0; 512];

unsafe fn init_boot_page_table() {
// 0x8000_0000..0xc000_0000, VRWX_GAD, 1G block
BOOT_PT_SV39[2] = (0x80000 << 10) | 0xef;
// 0xffff_ffc0_8000_0000..0xffff_ffc0_c000_0000, VRWX_GAD, 1G block
BOOT_PT_SV39[0x102] = (0x80000 << 10) | 0xef;
const MEMORY_GBS: usize = PHYS_MEMORY_SIZE.div_ceil(1024 * 1024 * 1024);
const PPN_2_OFFSET: u64 = 10 + 9 + 9;
// start from 0x8000_0000, first block 0x8000_0000..0xc000_0000
// VRWX_GAD, 1G Gigapages
for i in 0..MEMORY_GBS {
BOOT_PT_SV39[2 + i] = ((2 + i as u64) << PPN_2_OFFSET) | 0xef;
}
// start from 0xffff_ffc0_8000_0000, first block 0xffff_ffc0_8000_0000..0xffff_ffc0_c000_0000
// VRWX_GAD, 1G Gigapages
for i in 0..MEMORY_GBS {
BOOT_PT_SV39[0x102 + i] = ((2 + i as u64) << PPN_2_OFFSET) | 0xef;
}
}

unsafe fn init_mmu() {
1 change: 1 addition & 0 deletions patches/opensbi
Submodule opensbi added at 76345f
2 changes: 1 addition & 1 deletion platforms/aarch64-qemu-virt.toml
Original file line number Diff line number Diff line change
@@ -9,7 +9,7 @@ family = "aarch64-qemu-virt"
phys-memory-base = "0x4000_0000"
# Size of the whole physical memory.
# phys-memory-size = "0x800_0000" # 128M
# phys-memory-size = "0x1000_0000" # 1G
# phys-memory-size = "0x4000_0000" # 1G
phys-memory-size = "0x8000_0000" # 2G
# phys-memory-size = "0xc000_0000" # 3G
# phys-memory-size = "0x1_0000_0000" # 4G
6 changes: 6 additions & 0 deletions platforms/riscv64-qemu-virt.toml
Original file line number Diff line number Diff line change
@@ -8,8 +8,14 @@ family = "riscv64-qemu-virt"
# Base address of the whole physical memory.
phys-memory-base = "0x8000_0000"
# Size of the whole physical memory.
# Size of the whole physical memory.
# phys-memory-size = "0x800_0000" # 128M
# phys-memory-size = "0x4000_0000" # 1G
phys-memory-size = "0x8000_0000" # 2G
# phys-memory-size = "0xc000_0000" # 3G
# phys-memory-size = "0x1_0000_0000" # 4G
# phys-memory-size = "0x1_8000_0000" # 6G
# phys-memory-size = "0x2_0000_0000" # 8G
# Base physical address of the kernel image.
kernel-base-paddr = "0x8020_0000"
# Base virtual address of the kernel image.
2 changes: 2 additions & 0 deletions scripts/make/build_c.mk
Original file line number Diff line number Diff line change
@@ -71,6 +71,8 @@ app-objs := $(addprefix $(APP)/,$(app-objs))

$(ulib_hdr): _cargo_build

$(app-objs): $(ulib_hdr) prebuild

$(APP)/%.o: $(APP)/%.c $(ulib_hdr)
$(call run_cmd,$(CC),$(CFLAGS) $(APP_CFLAGS) -c -o $@ $<)

15 changes: 11 additions & 4 deletions scripts/make/build_musl.mk
Original file line number Diff line number Diff line change
@@ -3,11 +3,16 @@ rust_lib := target/$(TARGET)/$(MODE)/lib$(rust_lib_name).a

musl_version := 1.2.3

build_suffix := _$(ARCH)_$(MODE)
muslibc_dir := ulib/ruxmusl
build_dir := $(muslibc_dir)/build_musl_$(ARCH)
build_dir := $(muslibc_dir)/build_musl$(build_suffix)
install_dir_name := install$(build_suffix)
install_dir := $(muslibc_dir)/$(install_dir_name)

musl_dir := $(muslibc_dir)/musl-$(musl_version)
inc_dir := $(muslibc_dir)/install/include
c_lib := $(muslibc_dir)/install/lib/libc.a
inc_dir := $(install_dir)/include
c_lib := $(install_dir)/lib/libc.a

libgcc :=

CFLAGS += -nostdinc -fno-builtin -ffreestanding -Wall
@@ -42,7 +47,7 @@ else
endif

build_musl:
ifeq ($(wildcard $(build_dir)),)
ifeq ($(wildcard $(install_dir)),)
ifeq ($(wildcard $(musl_dir)),)
@echo "Download musl-1.2.3 source code"
wget https://musl.libc.org/releases/musl-1.2.3.tar.gz -P $(muslibc_dir)
@@ -61,6 +66,8 @@ app-objs := main.o

app-objs := $(addprefix $(APP)/,$(app-objs))

$(app-objs): build_musl prebuild

$(APP)/%.o: $(APP)/%.c build_musl
$(call run_cmd,$(CC),$(CFLAGS) $(APP_CFLAGS) -c -o $@ $<)

12 changes: 12 additions & 0 deletions scripts/prebuild/riscv64.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# non-musl riscv64 still needs a usable bios
# instead of the non-funtioning default one
define run_prebuild
git submodule update --init --recursive --remote patches/opensbi
endef

RISCV_BIOS := $(CURDIR)/patches/opensbi/build/platform/generic/firmware/fw_dynamic.bin

$(RISCV_BIOS): prebuild
CROSS_COMPILE=riscv64-linux-musl- $(MAKE) -C patches/opensbi PLATFORM=generic

build: $(RISCV_BIOS)
1 change: 1 addition & 0 deletions ulib/ruxmusl/.gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
build_*
install
install_*
musl-*
3 changes: 3 additions & 0 deletions ulib/ruxmusl/src/lib.rs
Original file line number Diff line number Diff line change
@@ -22,6 +22,9 @@ cfg_if::cfg_if! {
mod x86_64;
#[cfg(feature = "musl")]
use x86_64::{syscall, syscall_id};
} else if #[cfg(target_arch = "riscv64")]{
mod riscv64;
use riscv64::{syscall, syscall_id};
} else {
mod dummy;
use dummy::{syscall, syscall_id};
354 changes: 354 additions & 0 deletions ulib/ruxmusl/src/riscv64/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,354 @@
pub mod syscall_id;

use core::ffi::c_int;
use ruxos_posix_api::ctypes;
use syscall_id::SyscallId;

pub fn syscall(syscall_id: SyscallId, args: [usize; 6]) -> isize {
debug!("syscall <= syscall_name: {:?}", syscall_id);

unsafe {
match syscall_id {
SyscallId::INVALID => ruxos_posix_api::sys_invalid(syscall_id as usize as c_int) as _,
#[cfg(feature = "fs")]
SyscallId::GETCWD => {
ruxos_posix_api::sys_getcwd(args[0] as *mut core::ffi::c_char, args[1]) as _
}
#[cfg(feature = "epoll")]
SyscallId::EPOLL_CREATE1 => ruxos_posix_api::sys_epoll_create(args[0] as c_int) as _,
#[cfg(feature = "epoll")]
SyscallId::EPOLL_CTL => ruxos_posix_api::sys_epoll_ctl(
args[0] as c_int,
args[1] as c_int,
args[2] as c_int,
args[3] as *mut ctypes::epoll_event,
) as _,
#[cfg(feature = "epoll")]
SyscallId::EPOLL_PWAIT => ruxos_posix_api::sys_epoll_pwait(
args[0] as c_int,
args[1] as *mut ctypes::epoll_event,
args[2] as c_int,
args[3] as c_int,
args[4] as *const ctypes::sigset_t,
args[5] as *const ctypes::size_t,
) as _,
#[cfg(feature = "fd")]
SyscallId::DUP => ruxos_posix_api::sys_dup(args[0] as c_int) as _,
#[cfg(feature = "fd")]
SyscallId::DUP3 => {
ruxos_posix_api::sys_dup3(args[0] as c_int, args[1] as c_int, args[2] as c_int) as _
}
#[cfg(feature = "fd")]
SyscallId::FCNTL => {
ruxos_posix_api::sys_fcntl(args[0] as c_int, args[1] as c_int, args[2]) as _
}
#[cfg(feature = "fd")]
SyscallId::IOCTL => ruxos_posix_api::sys_ioctl(args[0] as c_int, args[1], args[2]) as _,
#[cfg(feature = "fs")]
SyscallId::MKDIRAT => ruxos_posix_api::sys_mkdirat(
args[0] as c_int,
args[1] as *const core::ffi::c_char,
args[2] as ctypes::mode_t,
) as _,
#[cfg(feature = "fs")]
SyscallId::UNLINKAT => ruxos_posix_api::sys_unlinkat(
args[0] as c_int,
args[1] as *const core::ffi::c_char,
args[2] as c_int,
) as _,
#[cfg(feature = "fs")]
SyscallId::FCHOWNAT => ruxos_posix_api::sys_fchownat(
args[0] as c_int,
args[1] as *const core::ffi::c_char,
args[2] as ctypes::uid_t,
args[3] as ctypes::gid_t,
args[4] as c_int,
) as _,
#[cfg(feature = "fs")]
SyscallId::RENAMEAT => ruxos_posix_api::sys_renameat(
args[0] as c_int,
args[1] as *const core::ffi::c_char,
args[2] as c_int,
args[3] as *const core::ffi::c_char,
) as _,
#[cfg(feature = "fs")]
SyscallId::OPENAT => ruxos_posix_api::sys_openat(
args[0],
args[1] as *const core::ffi::c_char,
args[2] as c_int,
args[3] as ctypes::mode_t,
) as _,
#[cfg(feature = "fd")]
SyscallId::CLOSE => ruxos_posix_api::sys_close(args[0] as c_int) as _,
#[cfg(feature = "pipe")]
SyscallId::PIPE2 => ruxos_posix_api::sys_pipe2(
core::slice::from_raw_parts_mut(args[0] as *mut c_int, 2),
args[1] as c_int,
) as _,
#[cfg(feature = "fs")]
SyscallId::GETDENTS64 => ruxos_posix_api::sys_getdents64(
args[0] as c_int,
args[1] as *mut ctypes::dirent,
args[2] as ctypes::size_t,
) as _,
#[cfg(feature = "fs")]
SyscallId::LSEEK => ruxos_posix_api::sys_lseek(
args[0] as c_int,
args[1] as ctypes::off_t,
args[2] as c_int,
) as _,
SyscallId::READ => ruxos_posix_api::sys_read(
args[0] as c_int,
args[1] as *mut core::ffi::c_void,
args[2],
) as _,
SyscallId::WRITE => ruxos_posix_api::sys_write(
args[0] as c_int,
args[1] as *mut core::ffi::c_void,
args[2],
) as _,
#[cfg(feature = "fd")]
SyscallId::READV => ruxos_posix_api::sys_readv(
args[0] as c_int,
args[1] as *const ctypes::iovec,
args[2] as c_int,
) as _,
#[cfg(feature = "fd")]
SyscallId::WRITEV => ruxos_posix_api::sys_writev(
args[0] as c_int,
args[1] as *const ctypes::iovec,
args[2] as c_int,
) as _,
#[cfg(feature = "select")]
SyscallId::PSELECT6 => ruxos_posix_api::sys_pselect6(
args[0] as c_int,
args[1] as *mut ctypes::fd_set,
args[2] as *mut ctypes::fd_set,
args[3] as *mut ctypes::fd_set,
args[4] as *mut ctypes::timeval,
args[5] as *const core::ffi::c_void,
) as _,
#[cfg(feature = "poll")]
SyscallId::PPOLL => ruxos_posix_api::sys_ppoll(
args[0] as *mut ctypes::pollfd,
args[1] as ctypes::nfds_t,
args[2] as *const ctypes::timespec,
args[3] as *const ctypes::sigset_t,
args[4] as ctypes::size_t,
) as _,
#[cfg(feature = "fs")]
SyscallId::READLINKAT => ruxos_posix_api::sys_readlinkat(
args[0] as c_int,
args[1] as *const core::ffi::c_char,
args[2] as *mut core::ffi::c_char,
args[3] as ctypes::size_t,
) as _,
#[cfg(feature = "fs")]
SyscallId::NEWFSTATAT => ruxos_posix_api::sys_newfstatat(
args[0] as c_int,
args[1] as *const core::ffi::c_char,
args[2] as *mut ctypes::kstat,
args[3] as c_int,
) as _,
#[cfg(feature = "fs")]
SyscallId::FSTAT => {
ruxos_posix_api::sys_fstat(args[0] as c_int, args[1] as *mut core::ffi::c_void) as _
}
#[cfg(feature = "fs")]
SyscallId::FSYNC => ruxos_posix_api::sys_fsync(args[0] as c_int) as _,
SyscallId::GETEUID => ruxos_posix_api::sys_geteuid() as _,
SyscallId::GETEGID => ruxos_posix_api::sys_getegid() as _,
#[cfg(feature = "fs")]
SyscallId::FDATASYNC => ruxos_posix_api::sys_fdatasync(args[0] as c_int) as _,
#[allow(unreachable_code)]
#[cfg(not(feature = "multitask"))]
SyscallId::EXIT => ruxos_posix_api::sys_exit(args[0] as c_int) as _,
#[allow(unreachable_code)]
#[cfg(feature = "multitask")]
SyscallId::EXIT => {
ruxos_posix_api::sys_pthread_exit(args[0] as *mut core::ffi::c_void) as _
}
#[cfg(feature = "multitask")]
SyscallId::SET_TID_ADDRESS => ruxos_posix_api::sys_set_tid_address(args[0]) as _,
#[cfg(feature = "multitask")]
SyscallId::FUTEX => ruxos_posix_api::sys_futex(
args[0],
args[1] as _,
args[2] as _,
args[3],
args[4] as _,
args[5] as _,
) as _,
SyscallId::NANO_SLEEP => ruxos_posix_api::sys_nanosleep(
args[0] as *const ctypes::timespec,
args[1] as *mut ctypes::timespec,
) as _,
SyscallId::CLOCK_SETTIME => ruxos_posix_api::sys_clock_settime(
args[0] as ctypes::clockid_t,
args[1] as *const ctypes::timespec,
) as _,
SyscallId::CLOCK_GETTIME => ruxos_posix_api::sys_clock_gettime(
args[0] as ctypes::clockid_t,
args[1] as *mut ctypes::timespec,
) as _,
SyscallId::SCHED_YIELD => ruxos_posix_api::sys_sched_yield() as _,
#[cfg(feature = "signal")]
SyscallId::SIGALTSTACK => ruxos_posix_api::sys_sigaltstack(
args[0] as *const core::ffi::c_void,
args[1] as *mut core::ffi::c_void,
) as _,
#[cfg(feature = "signal")]
SyscallId::RT_SIGACTION => ruxos_posix_api::sys_rt_sigaction(
args[0] as c_int,
args[1] as *const ctypes::sigaction,
args[2] as *mut ctypes::sigaction,
args[3] as ctypes::size_t,
) as _,
#[cfg(feature = "signal")]
SyscallId::RT_SIGPROCMASK => ruxos_posix_api::sys_rt_sigprocmask(
args[0] as c_int,
args[1] as *const usize,
args[2] as *mut usize,
args[3],
) as _,
SyscallId::UNAME => ruxos_posix_api::sys_uname(args[0] as *mut core::ffi::c_void) as _,
SyscallId::GETRLIMIT => {
ruxos_posix_api::sys_getrlimit(args[0] as c_int, args[1] as *mut ctypes::rlimit)
as _
}
SyscallId::SETRLIMIT => {
ruxos_posix_api::sys_setrlimit(args[0] as c_int, args[1] as *const ctypes::rlimit)
as _
}
SyscallId::UMASK => ruxos_posix_api::sys_umask(args[0] as ctypes::mode_t) as _,
#[cfg(feature = "multitask")]
SyscallId::GETPID => ruxos_posix_api::sys_getpid() as _,
SyscallId::SYSINFO => {
ruxos_posix_api::sys_sysinfo(args[0] as *mut ctypes::sysinfo) as _
}
#[cfg(feature = "net")]
SyscallId::SOCKET => {
ruxos_posix_api::sys_socket(args[0] as c_int, args[1] as c_int, args[2] as c_int)
as _
}
#[cfg(feature = "net")]
SyscallId::BIND => ruxos_posix_api::sys_bind(
args[0] as c_int,
args[1] as *const ctypes::sockaddr,
args[2] as ctypes::socklen_t,
) as _,
#[cfg(feature = "net")]
SyscallId::LISTEN => {
ruxos_posix_api::sys_listen(args[0] as c_int, args[1] as c_int) as _
}
#[cfg(feature = "net")]
SyscallId::ACCEPT => ruxos_posix_api::sys_accept(
args[0] as c_int,
args[1] as *mut ctypes::sockaddr,
args[2] as *mut ctypes::socklen_t,
) as _,
#[cfg(feature = "net")]
SyscallId::CONNECT => ruxos_posix_api::sys_connect(
args[0] as c_int,
args[1] as *const ctypes::sockaddr,
args[2] as ctypes::socklen_t,
) as _,
#[cfg(feature = "net")]
SyscallId::GETSOCKNAME => ruxos_posix_api::sys_getsockname(
args[0] as c_int,
args[1] as *mut ctypes::sockaddr,
args[2] as *mut ctypes::socklen_t,
) as _,
#[cfg(feature = "net")]
SyscallId::GETPEERNAME => ruxos_posix_api::sys_getpeername(
args[0] as c_int,
args[1] as *mut ctypes::sockaddr,
args[2] as *mut ctypes::socklen_t,
) as _,
#[cfg(feature = "net")]
SyscallId::SENDTO => ruxos_posix_api::sys_sendto(
args[0] as c_int,
args[1] as *const core::ffi::c_void,
args[2] as ctypes::size_t,
args[3] as c_int,
args[4] as *const ctypes::sockaddr,
args[5] as ctypes::socklen_t,
) as _,
#[cfg(feature = "net")]
SyscallId::RECVFROM => ruxos_posix_api::sys_recvfrom(
args[0] as c_int,
args[1] as *mut core::ffi::c_void,
args[2] as ctypes::size_t,
args[3] as c_int,
args[4] as *mut ctypes::sockaddr,
args[5] as *mut ctypes::socklen_t,
) as _,
#[cfg(feature = "net")]
SyscallId::SETSOCKOPT => ruxos_posix_api::sys_setsockopt(
args[0] as c_int,
args[1] as c_int,
args[2] as c_int,
args[3] as *const core::ffi::c_void,
args[4] as ctypes::socklen_t,
) as _,
#[cfg(feature = "net")]
SyscallId::SHUTDOWN => {
ruxos_posix_api::sys_shutdown(args[0] as c_int, args[1] as c_int) as _
}
#[cfg(feature = "net")]
SyscallId::SENDMSG => ruxos_posix_api::sys_sendmsg(
args[0] as c_int,
args[1] as *const ctypes::msghdr,
args[2] as c_int,
) as _,
#[cfg(feature = "alloc")]
SyscallId::MUNMAP => ruxos_posix_api::sys_munmap(
args[0] as *mut core::ffi::c_void,
args[1] as ctypes::size_t,
) as _,
#[cfg(feature = "alloc")]
SyscallId::MREMAP => ruxos_posix_api::sys_mremap(
args[0] as *mut core::ffi::c_void,
args[1] as ctypes::size_t,
args[2] as ctypes::size_t,
args[3] as c_int,
args[4] as *mut core::ffi::c_void,
) as _,
#[cfg(feature = "multitask")]
SyscallId::CLONE => ruxos_posix_api::sys_clone(
args[0] as c_int,
args[1] as *mut core::ffi::c_void,
args[2] as *mut ctypes::pid_t,
args[3] as *mut core::ffi::c_void,
args[4] as *mut ctypes::pid_t,
) as _,
#[cfg(feature = "alloc")]
SyscallId::MMAP => ruxos_posix_api::sys_mmap(
args[0] as *mut core::ffi::c_void,
args[1] as ctypes::size_t,
args[2] as c_int,
args[3] as c_int,
args[4] as c_int,
args[5] as ctypes::off_t,
) as _,
#[cfg(feature = "alloc")]
SyscallId::MADVISE => ruxos_posix_api::sys_madvise(
args[0] as *mut core::ffi::c_void,
args[1] as ctypes::size_t,
args[2] as c_int,
) as _,
#[cfg(feature = "alloc")]
SyscallId::MPROTECT => ruxos_posix_api::sys_mprotect(
args[0] as *mut core::ffi::c_void,
args[1] as ctypes::size_t,
args[2] as c_int,
) as _,
SyscallId::PRLIMIT64 => ruxos_posix_api::sys_prlimit64(
args[0] as ctypes::pid_t,
args[1] as c_int,
args[2] as *const ctypes::rlimit,
args[3] as *mut ctypes::rlimit,
) as _,
}
}
}
125 changes: 125 additions & 0 deletions ulib/ruxmusl/src/riscv64/syscall_id.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
use num_enum::TryFromPrimitive;

// TODO: syscall id are architecture-dependent
#[allow(clippy::upper_case_acronyms)]
#[allow(non_camel_case_types)]
#[repr(usize)]
#[derive(Debug, PartialEq, Eq, Clone, Copy, TryFromPrimitive)]
pub enum SyscallId {
INVALID = 999,
#[cfg(feature = "fs")]
GETCWD = 17,
#[cfg(feature = "epoll")]
EPOLL_CREATE1 = 20,
#[cfg(feature = "epoll")]
EPOLL_CTL = 21,
#[cfg(feature = "epoll")]
EPOLL_PWAIT = 22,
#[cfg(feature = "fd")]
DUP = 23,
#[cfg(feature = "fd")]
DUP3 = 24,
#[cfg(feature = "fd")]
FCNTL = 25,
#[cfg(feature = "fd")]
IOCTL = 29,
#[cfg(feature = "fs")]
MKDIRAT = 34,
#[cfg(feature = "fs")]
UNLINKAT = 35,
#[cfg(feature = "fs")]
RENAMEAT = 38,
#[cfg(feature = "fs")]
FCHOWNAT = 54,
#[cfg(feature = "fs")]
OPENAT = 56,
#[cfg(feature = "fd")]
CLOSE = 57,
#[cfg(feature = "pipe")]
PIPE2 = 59,
#[cfg(feature = "fs")]
GETDENTS64 = 61,
#[cfg(feature = "fs")]
LSEEK = 62,
READ = 63,
WRITE = 64,
#[cfg(feature = "fd")]
READV = 65,
#[cfg(feature = "fd")]
WRITEV = 66,
#[cfg(feature = "select")]
PSELECT6 = 72,
#[cfg(feature = "poll")]
PPOLL = 73,
#[cfg(feature = "fs")]
READLINKAT = 78,
#[cfg(feature = "fs")]
NEWFSTATAT = 79,
#[cfg(feature = "fs")]
FSTAT = 80,
#[cfg(feature = "fs")]
FSYNC = 82,
#[cfg(feature = "fs")]
FDATASYNC = 83,
EXIT = 93,
#[cfg(feature = "multitask")]
SET_TID_ADDRESS = 96,
#[cfg(feature = "multitask")]
FUTEX = 98,
NANO_SLEEP = 101,
CLOCK_SETTIME = 112,
CLOCK_GETTIME = 113,
SCHED_YIELD = 124,
#[cfg(feature = "signal")]
SIGALTSTACK = 132,
#[cfg(feature = "signal")]
RT_SIGACTION = 134,
#[cfg(feature = "signal")]
RT_SIGPROCMASK = 135,
UNAME = 160,
GETRLIMIT = 163,
SETRLIMIT = 164,
UMASK = 166,
#[cfg(feature = "multitask")]
GETPID = 172,
GETEUID = 175,
GETEGID = 177,
SYSINFO = 179,
#[cfg(feature = "net")]
SOCKET = 198,
#[cfg(feature = "net")]
BIND = 200,
#[cfg(feature = "net")]
LISTEN = 201,
#[cfg(feature = "net")]
ACCEPT = 202,
#[cfg(feature = "net")]
CONNECT = 203,
#[cfg(feature = "net")]
GETSOCKNAME = 204,
#[cfg(feature = "net")]
GETPEERNAME = 205,
#[cfg(feature = "net")]
SENDTO = 206,
#[cfg(feature = "net")]
RECVFROM = 207,
#[cfg(feature = "net")]
SETSOCKOPT = 208,
#[cfg(feature = "net")]
SHUTDOWN = 210,
#[cfg(feature = "net")]
SENDMSG = 211,
#[cfg(feature = "alloc")]
MUNMAP = 215,
#[cfg(feature = "alloc")]
MREMAP = 216,
#[cfg(feature = "multitask")]
CLONE = 220,
#[cfg(feature = "alloc")]
MMAP = 222,
#[cfg(feature = "alloc")]
MADVISE = 233,
#[cfg(feature = "alloc")]
MPROTECT = 226,
PRLIMIT64 = 261,
}

0 comments on commit 2657466

Please sign in to comment.