Fixes for redox-exec on aarch64
This commit is contained in:
@@ -9,13 +9,18 @@ pub(crate) const STACK_SIZE: usize = 1024 * 1024;
|
||||
/// Deactive TLS, used before exec() on Redox to not trick target executable into thinking TLS
|
||||
/// is already initialized as if it was a thread.
|
||||
pub unsafe fn deactivate_tcb(open_via_dup: usize) -> Result<()> {
|
||||
//TODO: aarch64
|
||||
Err(Error::new(ENOSYS))
|
||||
let mut env = syscall::EnvRegisters::default();
|
||||
|
||||
let file = FdGuard::new(syscall::dup(open_via_dup, b"regs/env")?);
|
||||
|
||||
env.tpidr_el0 = 0;
|
||||
|
||||
let _ = syscall::write(*file, &mut env)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn copy_env_regs(cur_pid_fd: usize, new_pid_fd: usize) -> Result<()> {
|
||||
// Copy environment registers.
|
||||
/*TODO
|
||||
{
|
||||
let cur_env_regs_fd = FdGuard::new(syscall::dup(cur_pid_fd, b"regs/env")?);
|
||||
let new_env_regs_fd = FdGuard::new(syscall::dup(new_pid_fd, b"regs/env")?);
|
||||
@@ -24,7 +29,6 @@ pub fn copy_env_regs(cur_pid_fd: usize, new_pid_fd: usize) -> Result<()> {
|
||||
let _ = syscall::read(*cur_env_regs_fd, &mut env_regs)?;
|
||||
let _ = syscall::write(*new_env_regs_fd, &env_regs)?;
|
||||
}
|
||||
*/
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -58,6 +62,8 @@ __relibc_internal_fork_wrapper:
|
||||
str x29, [sp, #-8]!
|
||||
str x30, [sp, #-8]!
|
||||
|
||||
sub sp, sp, #32
|
||||
|
||||
//TODO: store floating point regs
|
||||
|
||||
mov x0, sp
|
||||
@@ -71,7 +77,7 @@ __relibc_internal_fork_wrapper:
|
||||
.type __relibc_internal_fork_ret, @function
|
||||
__relibc_internal_fork_ret:
|
||||
ldr x0, [sp]
|
||||
ldr x1, [sp], #8
|
||||
ldr x1, [sp, #8]
|
||||
bl __relibc_internal_fork_hook
|
||||
|
||||
//TODO: load floating point regs
|
||||
@@ -80,6 +86,7 @@ __relibc_internal_fork_ret:
|
||||
|
||||
.p2align 4
|
||||
2:
|
||||
add sp, sp, #32
|
||||
ldr x30, [sp], #8
|
||||
ldr x29, [sp], #8
|
||||
ldr x28, [sp], #8
|
||||
|
||||
Reference in New Issue
Block a user