2 * Copyright (c) 2012 The Native Client Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file.
8 * NaCl service runtime syscall inline header file.
11 #ifndef NATIVE_CLIENT_SERVICE_RUNTIME_LINUX_NACL_SYSCALL_INL_H_
12 #define NATIVE_CLIENT_SERVICE_RUNTIME_LINUX_NACL_SYSCALL_INL_H_
14 #include "native_client/src/shared/platform/nacl_host_dir.h"
15 #include "native_client/src/trusted/service_runtime/include/sys/errno.h"
16 #include "native_client/src/trusted/service_runtime/nacl_app_thread.h"
17 #include "native_client/src/trusted/service_runtime/sel_ldr.h"
21 * Syscall return value mapper. The linux raw syscall convention is
22 * that anything positive and anything smaller than a certain negative
23 * number are valid return values (think addresses in the 2GB range,
24 * since user addresses may be in the first 3 GB, and the kernel lives
25 * in the 4th GB), and anything else (smallish negative numbers) are
26 * errors from Linux (possibly OSX). In such a case, the syscall
27 * wrapper will take the negative value and store it into the
28 * thread-specific errno variable, and return -1 instead. Since we
29 * are using these wrappers, we merely detect when any host OS syscall
30 * returned -1, and pass -errno back to the NaCl app. (The syscall
31 * wrappers on the NaCl app side will similarly follow the
32 * negative-values-are-errors convention).
34 static INLINE intptr_t NaClXlateSysRet(intptr_t rv) {
35 return (rv != -1) ? rv : -NaClXlateErrno(errno);