blob: f4fc0951f837b6c41c12d9e24559477847fa3e9e [file] [log] [blame]
/*
* Copyright (c) 2012 The Native Client Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "native_client/src/trusted/service_runtime/include/bits/nacl_syscalls.h"
#include "native_client/src/trusted/service_runtime/nacl_config.h"
.data
timebuf:
.space 0x200 /* enough for a timeval */
.text
.globl SyscallReturnIsSandboxed
SyscallReturnIsSandboxed:
pushl $0
pushl $timebuf
pushl $1f
movl $NACL_SYSCALL_ADDR(NACL_sys_gettimeofday), %ecx
and $0xffffffe0, %ecx
jmp *%ecx
.p2align 5
/*
* Here we have a whole bundle of halts, with the "return address"
* we pushed being in the middle of the bundle. The syscall return
* should round up this misaligned address to the beginning of the
* next bundle. If it fails to do that, we'll execute hlt and crash.
*/
hlt
1: .p2align 5,0xf4
/*
* Now we're at the next bundle, where the return is rounded to.
* Test the tls_get call as well, since it may have an alternate
* entry/return path in the trampoline implementation.
*/
pushl $2f
movl $NACL_SYSCALL_ADDR(NACL_sys_tls_get), %ecx
andl $0xffffffe0, %ecx
jmp *%ecx
.p2align 5
hlt
2: .p2align 5,0xf4
/*
* Now we're at the next bundle, where the return is rounded to.
*/
movl $1, %eax
addl $0x8, %esp
naclret
.p2align 5 /* -- pnacl toolchain leaves "..." without this */