Modify occlum_entry to be compatible with Linux syscall ABI
This commit is contained in:
parent
72f2a33e2a
commit
1172c25677
@ -311,8 +311,8 @@ fn init_auxvec(process_vm: &ProcessVM, exec_elf_file: &ElfFile) -> Result<AuxVec
|
||||
let ldso_elf_base = process_vm.get_elf_ranges()[1].start() as u64;
|
||||
auxvec.set(AuxKey::AT_BASE, ldso_elf_base)?;
|
||||
|
||||
let syscall_addr = __occlum_syscall as *const () as u64;
|
||||
auxvec.set(AuxKey::AT_OCCLUM_ENTRY, syscall_addr)?;
|
||||
let syscall_native_addr = __occlum_syscall_native as *const () as u64;
|
||||
auxvec.set(AuxKey::AT_OCCLUM_ENTRY, syscall_native_addr)?;
|
||||
// TODO: init AT_EXECFN
|
||||
// auxvec.set_val(AuxKey::AT_EXECFN, "program_name")?;
|
||||
|
||||
@ -320,6 +320,6 @@ fn init_auxvec(process_vm: &ProcessVM, exec_elf_file: &ElfFile) -> Result<AuxVec
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
fn __occlum_syscall(num: i32, arg0: u64, arg1: u64, arg2: u64, arg3: u64, arg4: u64) -> i64;
|
||||
fn __occlum_syscall_native() -> i64;
|
||||
fn occlum_gdb_hook_load_elf(elf_base: u64, elf_path: *const u8, elf_path_len: u64);
|
||||
}
|
||||
|
46
src/libos/src/syscall/syscall_entry_native_x86-64.S
Normal file
46
src/libos/src/syscall/syscall_entry_native_x86-64.S
Normal file
@ -0,0 +1,46 @@
|
||||
#define __ASSEMBLY__
|
||||
#include "task.h"
|
||||
|
||||
.file "syscall_entry_native_x86-64.S"
|
||||
.global __occlum_syscall_native
|
||||
.type __occlum_syscall_native, @function
|
||||
__occlum_syscall_native:
|
||||
push %rbp
|
||||
movq %rsp,%rbp
|
||||
|
||||
// Save registers
|
||||
pushq %rdi
|
||||
pushq %rsi
|
||||
pushq %rdx
|
||||
pushq %r10
|
||||
pushq %r8
|
||||
// arg5
|
||||
pushq %r9
|
||||
// arg4--arg0
|
||||
movq %r8, %r9
|
||||
movq %r10, %r8
|
||||
movq %rdx, %rcx
|
||||
movq %rsi, %rdx
|
||||
movq %rdi, %rsi
|
||||
// num
|
||||
movq %rax, %rdi
|
||||
|
||||
// num - %rdi
|
||||
// arg0 - %rsi
|
||||
// arg1 - %rdx
|
||||
// arg2 - %rcx
|
||||
// arg3 - %r8
|
||||
// arg4 - %r9
|
||||
// arg5 - *0x8(%rsp)
|
||||
call __occlum_syscall
|
||||
|
||||
// Restore registers
|
||||
popq %r9
|
||||
popq %r8
|
||||
popq %r10
|
||||
popq %rdx
|
||||
popq %rsi
|
||||
popq %rdi
|
||||
|
||||
popq %rbp
|
||||
ret
|
Loading…
Reference in New Issue
Block a user