| /* |
| * Copyright 2021, Google LLC |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| #![feature(lang_items)] |
| #![no_std] |
| #![allow(non_snake_case)] |
| |
| use cfg_if::cfg_if; |
| use core::panic::PanicInfo; |
| |
| use macros::*; |
| use sel4_sys::*; |
| |
| #[cfg(all(target_arch = "x86"))] |
| export_syscalls!("ia32_syscall_stub.rs"); |
| #[cfg(all(target_arch = "x86_64"))] |
| export_syscalls!("x86_64_syscall_stub.rs"); |
| #[cfg(all(target_arch = "arm", target_pointer_width = "32"))] |
| export_syscalls!("aarch32_syscall_stub.rs"); |
| #[cfg(target_arch = "riscv32")] |
| export_syscalls!("riscv32_syscall_stub.rs"); |
| |
| // Export common syscalls |
| |
| #[export_syscall] |
| #[inline(always)] |
| pub unsafe fn seL4_Send(dest: seL4_CPtr, msgInfo: seL4_MessageInfo) {} |
| |
| #[export_syscall] |
| #[inline(always)] |
| pub unsafe fn seL4_NBSend(dest: seL4_CPtr, msgInfo: seL4_MessageInfo) {} |
| |
| #[export_syscall] |
| #[inline(always)] |
| pub unsafe fn seL4_Signal(dest: seL4_CPtr) {} |
| |
| #[export_syscall] |
| #[inline(always)] |
| pub unsafe fn seL4_Call(dest: seL4_CPtr, msgInfo: seL4_MessageInfo) -> seL4_MessageInfo {} |
| |
| #[export_syscall] |
| #[inline(always)] |
| pub unsafe fn seL4_Yield() {} |
| |
| cfg_if! { |
| if #[cfg(feature = "CONFIG_KERNEL_MCS")] { |
| #[export_syscall] |
| #[inline(always)] |
| pub unsafe fn seL4_Recv( |
| src: seL4_CPtr, |
| sender: *mut seL4_Word, |
| reply: seL4_CPtr, |
| ) -> seL4_MessageInfo {} |
| |
| #[export_syscall] |
| #[inline(always)] |
| pub unsafe fn seL4_NBRecv( |
| src: seL4_CPtr, |
| sender: *mut seL4_Word, |
| reply: seL4_CPtr, |
| ) -> seL4_MessageInfo {} |
| |
| #[export_syscall] |
| #[inline(always)] |
| pub unsafe fn seL4_Wait( |
| src: seL4_CPtr, |
| sender: *mut seL4_Word, |
| ) -> seL4_MessageInfo {} |
| |
| #[export_syscall] |
| #[inline(always)] |
| pub unsafe fn seL4_NBWait( |
| src: seL4_CPtr, |
| sender: *mut seL4_Word, |
| ) -> seL4_MessageInfo {} |
| |
| #[export_syscall] |
| #[inline(always)] |
| pub unsafe fn seL4_NBSendRecv( |
| dest: seL4_CPtr, |
| msgInfo: seL4_MessageInfo, |
| src: seL4_CPtr, |
| sender: *mut seL4_Word, |
| reply: seL4_CPtr, |
| ) -> seL4_MessageInfo {} |
| |
| #[export_syscall] |
| #[inline(always)] |
| pub unsafe fn seL4_NBSendWait( |
| dest: seL4_CPtr, |
| msgInfo: seL4_MessageInfo, |
| src: seL4_CPtr, |
| sender: *mut seL4_Word, |
| ) -> seL4_MessageInfo {} |
| |
| #[export_syscall] |
| #[inline(always)] |
| pub unsafe fn seL4_ReplyRecv( |
| src: seL4_CPtr, |
| msgInfo: seL4_MessageInfo, |
| sender: *mut seL4_Word, |
| reply: seL4_CPtr, |
| ) -> seL4_MessageInfo {} |
| } else { |
| #[export_syscall] |
| #[inline(always)] |
| pub unsafe fn seL4_Reply(msgInfo: seL4_MessageInfo) {} |
| |
| #[export_syscall] |
| #[inline(always)] |
| pub unsafe fn seL4_Recv(src: seL4_CPtr, sender: *mut seL4_Word) -> seL4_MessageInfo {} |
| |
| #[export_syscall] |
| #[inline(always)] |
| pub unsafe fn seL4_NBRecv(src: seL4_CPtr, sender: *mut seL4_Word) -> seL4_MessageInfo {} |
| |
| #[export_syscall] |
| #[inline(always)] |
| pub unsafe fn seL4_ReplyRecv( |
| src: seL4_CPtr, |
| msgInfo: seL4_MessageInfo, |
| sender: *mut seL4_Word, |
| ) -> seL4_MessageInfo {} |
| } // !CONFIG_KERNEL_MCS |
| } |
| |
| // TODO(sleffler): CONFIG_PRINTING |
| // TODO(sleffler): CONFIG_DEBUG_BUILD |
| // TODO(sleffler): CONFIG_ENABLE_BENCHMARKS? |
| // TODO(sleffler): CONFIG_SET_TLS_BASE_SELF |
| |
| #[panic_handler] |
| pub fn panic_handler(_info: &PanicInfo) -> ! { |
| loop {} |
| } |
| |
| #[lang = "eh_personality"] |
| extern "C" fn eh_personality() {} |