Eliminate compiler warnings

This commit is contained in:
He Sun 2020-09-25 22:27:17 +08:00 committed by Tate, Hongliang Tian
parent 280d0a885c
commit c39b6f1dc2
4 changed files with 27 additions and 32 deletions

@ -5,6 +5,7 @@ use self::rdtsc::{handle_rdtsc_exception, RDTSC_OPCODE};
use self::syscall::{handle_syscall_exception, SYSCALL_OPCODE};
use super::*;
use crate::signal::{FaultSignal, SigSet};
use crate::syscall::exception_interrupt_syscall_c_abi;
use crate::syscall::{CpuContext, FpRegs, SyscallNum};
use aligned::{Aligned, A16};
use core::arch::x86_64::_fxsave;
@ -26,24 +27,11 @@ pub fn register_exception_handlers() {
#[no_mangle]
extern "C" fn handle_exception(info: *mut sgx_exception_info_t) -> i32 {
// Rust compiler would complain about passing to external C functions a CpuContext
// pointer, which includes a FpRegs pointer that is not safe to use by external
// modules. In our case, the FpRegs pointer will not be used actually. So the
// Rust warning is a false alarm. We suppress it here.
#[allow(improper_ctypes)]
extern "C" {
fn __occlum_syscall_c_abi(
num: u32,
info: *mut sgx_exception_info_t,
fpregs: *mut FpRegs,
) -> u32;
}
let mut fpregs = FpRegs::save();
unsafe {
__occlum_syscall_c_abi(
exception_interrupt_syscall_c_abi(
SyscallNum::HandleException as u32,
info,
info as *mut _,
&mut fpregs as *mut FpRegs,
)
};

@ -1,6 +1,7 @@
pub use self::sgx::sgx_interrupt_info_t;
use crate::prelude::*;
use crate::process::ThreadRef;
use crate::syscall::exception_interrupt_syscall_c_abi;
use crate::syscall::{CpuContext, FpRegs, SyscallNum};
use aligned::{Aligned, A16};
use core::arch::x86_64::_fxsave;
@ -15,24 +16,11 @@ pub fn init() {
}
extern "C" fn handle_interrupt(info: *mut sgx_interrupt_info_t) -> i32 {
// Rust compiler would complain about passing to external C functions a CpuContext
// pointer, which includes a FpRegs pointer that is not safe to use by external
// modules. In our case, the FpRegs pointer will not be used actually. So the
// Rust warning is a false alarm. We suppress it here.
#[allow(improper_ctypes)]
extern "C" {
fn __occlum_syscall_c_abi(
num: u32,
info: *mut sgx_interrupt_info_t,
fpregs: *mut FpRegs,
) -> u32;
}
let mut fpregs = FpRegs::save();
unsafe {
__occlum_syscall_c_abi(
exception_interrupt_syscall_c_abi(
SyscallNum::HandleInterrupt as u32,
info,
info as *mut _,
&mut fpregs as *mut FpRegs,
)
};

@ -6,8 +6,6 @@
#![feature(allocator_api)]
#![feature(core_intrinsics)]
#![feature(stmt_expr_attributes)]
#![feature(atomic_min_max)]
#![feature(no_more_cas)]
#![feature(alloc_layout_extra)]
#![feature(concat_idents)]
#![feature(trace_macros)]

@ -994,3 +994,24 @@ impl CpuContext {
}
}
}
// exception and interrupt syscalls share the same c abi
//
// num: occlum syscall number
// info: pointer to sgx_exception_info_t or sgx_interrupt_info_t
// fpregs: pointer to FpRegs. Rust compiler would complain about passing
// to external C functions a CpuContext pointer, which includes a FpRegs
// pointer that is not safe to use by external modules. In our case, the
// FpRegs pointer will not be used actually. So the Rust warning is a
// false alarm. We suppress it here.
pub unsafe fn exception_interrupt_syscall_c_abi(
num: u32,
info: *mut c_void,
fpregs: *mut FpRegs,
) -> u32 {
#[allow(improper_ctypes)]
extern "C" {
pub fn __occlum_syscall_c_abi(num: u32, info: *mut c_void, fpregs: *mut FpRegs) -> u32;
}
__occlum_syscall_c_abi(num, info, fpregs)
}