// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

.globl restricted_enter
restricted_enter:
  // args 0 - 1 are already in place in rdi, rsi

  // save the reason code pointer on the stack
  push  %rdx

  // save the callee saved regs
  push  %rbx
  push  %rbp
  push  %r12
  push  %r13
  push  %r14
  push  %r15
  push  %rsp

  // save the pointer the stack as the context pointer in the syscall
  mov   %rsp,%rdx

  // call the syscall
  call  zx_restricted_enter

  // if we got here it must have failed
  add   $(8*8),%rsp // pop the previous state on the stack
  ret

.globl restricted_return
restricted_return:
  // back from restricted mode, rdi holds the context
  mov  %rdi,%rsp
  pop  %rsp
  pop  %r15
  pop  %r14
  pop  %r13
  pop  %r12
  pop  %rbp
  pop  %rbx

  // pop the reason code pointer from the stack and write the reason
  // code from rsi.
  pop  %rdx
  mov  %rsi,(%rdx)

  // Zero out rax (return ZX_OK).
  xor %eax, %eax

  // return back to whatever the address was on the stack
  ret

.globl breakpoint_for_module_changes
breakpoint_for_module_changes:
  int3
  ret
