Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / native_client / src / trusted / service_runtime / nacl_syscall_list.c
1 /*
2  * Copyright (c) 2014 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.
5  */
6
7 #include "native_client/src/trusted/service_runtime/nacl_syscall_common.h"
8 #include "native_client/src/trusted/service_runtime/nacl_syscall_handlers.h"
9 #include "native_client/src/trusted/service_runtime/nacl_syscall_register.h"
10 #include "native_client/src/trusted/service_runtime/nacl_text.h"
11 #include "native_client/src/trusted/service_runtime/sys_exception.h"
12 #include "native_client/src/trusted/service_runtime/sys_fdio.h"
13 #include "native_client/src/trusted/service_runtime/sys_filename.h"
14 #include "native_client/src/trusted/service_runtime/sys_imc.h"
15 #include "native_client/src/trusted/service_runtime/sys_list_mappings.h"
16 #include "native_client/src/trusted/service_runtime/sys_memory.h"
17 #include "native_client/src/trusted/service_runtime/sys_parallel_io.h"
18 #include "native_client/src/trusted/service_runtime/sys_random.h"
19 #include "native_client/src/trusted/service_runtime/include/bits/nacl_syscalls.h"
20
21 /*
22  * The following declarations define wrapper functions which read in
23  * syscall arguments and call the syscall implementation functions listed
24  * here.
25  */
26 NACL_DEFINE_SYSCALL_0(NaClSysNull)
27 NACL_DEFINE_SYSCALL_1(NaClSysNameService)
28 NACL_DEFINE_SYSCALL_1(NaClSysDup)
29 NACL_DEFINE_SYSCALL_2(NaClSysDup2)
30 NACL_DEFINE_SYSCALL_3(NaClSysOpen)
31 NACL_DEFINE_SYSCALL_1(NaClSysClose)
32 NACL_DEFINE_SYSCALL_3(NaClSysRead)
33 NACL_DEFINE_SYSCALL_3(NaClSysWrite)
34 NACL_DEFINE_SYSCALL_3(NaClSysLseek)
35 NACL_DEFINE_SYSCALL_2(NaClSysFstat)
36 NACL_DEFINE_SYSCALL_2(NaClSysStat)
37 NACL_DEFINE_SYSCALL_3(NaClSysGetdents)
38 NACL_DEFINE_SYSCALL_1(NaClSysIsatty)
39 NACL_DEFINE_SYSCALL_1(NaClSysBrk)
40 NACL_DEFINE_SYSCALL_6(NaClSysMmap)
41 NACL_DEFINE_SYSCALL_3(NaClSysMprotect)
42 NACL_DEFINE_SYSCALL_2(NaClSysListMappings)
43 NACL_DEFINE_SYSCALL_2(NaClSysMunmap)
44 NACL_DEFINE_SYSCALL_1(NaClSysExit)
45 NACL_DEFINE_SYSCALL_0(NaClSysGetpid)
46 NACL_DEFINE_SYSCALL_1(NaClSysThreadExit)
47 NACL_DEFINE_SYSCALL_1(NaClSysGetTimeOfDay)
48 NACL_DEFINE_SYSCALL_0(NaClSysClock)
49 NACL_DEFINE_SYSCALL_2(NaClSysNanosleep)
50 NACL_DEFINE_SYSCALL_2(NaClSysClockGetRes)
51 NACL_DEFINE_SYSCALL_2(NaClSysClockGetTime)
52 NACL_DEFINE_SYSCALL_2(NaClSysMkdir)
53 NACL_DEFINE_SYSCALL_1(NaClSysRmdir)
54 NACL_DEFINE_SYSCALL_1(NaClSysChdir)
55 NACL_DEFINE_SYSCALL_2(NaClSysGetcwd)
56 NACL_DEFINE_SYSCALL_1(NaClSysUnlink)
57 NACL_DEFINE_SYSCALL_2(NaClSysTruncate)
58 NACL_DEFINE_SYSCALL_2(NaClSysLstat)
59 NACL_DEFINE_SYSCALL_2(NaClSysLink)
60 NACL_DEFINE_SYSCALL_2(NaClSysRename)
61 NACL_DEFINE_SYSCALL_2(NaClSysSymlink)
62 NACL_DEFINE_SYSCALL_2(NaClSysChmod)
63 NACL_DEFINE_SYSCALL_2(NaClSysAccess)
64 NACL_DEFINE_SYSCALL_3(NaClSysReadlink)
65 NACL_DEFINE_SYSCALL_2(NaClSysUtimes)
66 NACL_DEFINE_SYSCALL_4(NaClSysPRead)
67 NACL_DEFINE_SYSCALL_4(NaClSysPWrite)
68 NACL_DEFINE_SYSCALL_1(NaClSysImcMakeBoundSock)
69 NACL_DEFINE_SYSCALL_1(NaClSysImcAccept)
70 NACL_DEFINE_SYSCALL_1(NaClSysImcConnect)
71 NACL_DEFINE_SYSCALL_3(NaClSysImcSendmsg)
72 NACL_DEFINE_SYSCALL_3(NaClSysImcRecvmsg)
73 NACL_DEFINE_SYSCALL_1(NaClSysImcMemObjCreate)
74 NACL_DEFINE_SYSCALL_1(NaClSysTlsInit)
75 NACL_DEFINE_SYSCALL_4(NaClSysThreadCreate)
76 NACL_DEFINE_SYSCALL_0(NaClSysTlsGet)
77 NACL_DEFINE_SYSCALL_1(NaClSysThreadNice)
78 NACL_DEFINE_SYSCALL_0(NaClSysMutexCreate)
79 NACL_DEFINE_SYSCALL_1(NaClSysMutexLock)
80 NACL_DEFINE_SYSCALL_1(NaClSysMutexUnlock)
81 NACL_DEFINE_SYSCALL_1(NaClSysMutexTrylock)
82 NACL_DEFINE_SYSCALL_0(NaClSysCondCreate)
83 NACL_DEFINE_SYSCALL_2(NaClSysCondWait)
84 NACL_DEFINE_SYSCALL_1(NaClSysCondSignal)
85 NACL_DEFINE_SYSCALL_1(NaClSysCondBroadcast)
86 NACL_DEFINE_SYSCALL_3(NaClSysCondTimedWaitAbs)
87 NACL_DEFINE_SYSCALL_1(NaClSysImcSocketPair)
88 NACL_DEFINE_SYSCALL_1(NaClSysSemCreate)
89 NACL_DEFINE_SYSCALL_1(NaClSysSemWait)
90 NACL_DEFINE_SYSCALL_1(NaClSysSemPost)
91 NACL_DEFINE_SYSCALL_1(NaClSysSemGetValue)
92 NACL_DEFINE_SYSCALL_0(NaClSysSchedYield)
93 NACL_DEFINE_SYSCALL_2(NaClSysSysconf)
94 NACL_DEFINE_SYSCALL_3(NaClSysDyncodeCreate)
95 NACL_DEFINE_SYSCALL_3(NaClSysDyncodeModify)
96 NACL_DEFINE_SYSCALL_2(NaClSysDyncodeDelete)
97 NACL_DEFINE_SYSCALL_1(NaClSysSecondTlsSet)
98 NACL_DEFINE_SYSCALL_0(NaClSysSecondTlsGet)
99 NACL_DEFINE_SYSCALL_2(NaClSysExceptionHandler)
100 NACL_DEFINE_SYSCALL_2(NaClSysExceptionStack)
101 NACL_DEFINE_SYSCALL_0(NaClSysExceptionClearFlag)
102 NACL_DEFINE_SYSCALL_0(NaClSysTestInfoLeak)
103 NACL_DEFINE_SYSCALL_1(NaClSysTestCrash)
104 NACL_DEFINE_SYSCALL_3(NaClSysFutexWaitAbs)
105 NACL_DEFINE_SYSCALL_2(NaClSysFutexWake)
106 NACL_DEFINE_SYSCALL_2(NaClSysGetRandomBytes)
107
108 /*
109  * This fills in the global table of syscall handlers (nacl_syscall[]),
110  * which maps syscall numbers to syscall implementation functions via
111  * wrapper functions which read in the syscall arguments.
112  */
113 static void RegisterSyscalls(void) {
114   NACL_REGISTER_SYSCALL(NaClSysNull, NACL_sys_null);
115   NACL_REGISTER_SYSCALL(NaClSysNameService, NACL_sys_nameservice);
116   NACL_REGISTER_SYSCALL(NaClSysDup, NACL_sys_dup);
117   NACL_REGISTER_SYSCALL(NaClSysDup2, NACL_sys_dup2);
118   NACL_REGISTER_SYSCALL(NaClSysOpen, NACL_sys_open);
119   NACL_REGISTER_SYSCALL(NaClSysClose, NACL_sys_close);
120   NACL_REGISTER_SYSCALL(NaClSysRead, NACL_sys_read);
121   NACL_REGISTER_SYSCALL(NaClSysWrite, NACL_sys_write);
122   NACL_REGISTER_SYSCALL(NaClSysLseek, NACL_sys_lseek);
123   NACL_REGISTER_SYSCALL(NaClSysFstat, NACL_sys_fstat);
124   NACL_REGISTER_SYSCALL(NaClSysStat, NACL_sys_stat);
125   NACL_REGISTER_SYSCALL(NaClSysGetdents, NACL_sys_getdents);
126   NACL_REGISTER_SYSCALL(NaClSysIsatty, NACL_sys_isatty);
127   NACL_REGISTER_SYSCALL(NaClSysBrk, NACL_sys_brk);
128   NACL_REGISTER_SYSCALL(NaClSysMmap, NACL_sys_mmap);
129   NACL_REGISTER_SYSCALL(NaClSysMprotect, NACL_sys_mprotect);
130   NACL_REGISTER_SYSCALL(NaClSysListMappings, NACL_sys_list_mappings);
131   NACL_REGISTER_SYSCALL(NaClSysMunmap, NACL_sys_munmap);
132   NACL_REGISTER_SYSCALL(NaClSysExit, NACL_sys_exit);
133   NACL_REGISTER_SYSCALL(NaClSysGetpid, NACL_sys_getpid);
134   NACL_REGISTER_SYSCALL(NaClSysThreadExit, NACL_sys_thread_exit);
135   NACL_REGISTER_SYSCALL(NaClSysGetTimeOfDay, NACL_sys_gettimeofday);
136   NACL_REGISTER_SYSCALL(NaClSysClock, NACL_sys_clock);
137   NACL_REGISTER_SYSCALL(NaClSysNanosleep, NACL_sys_nanosleep);
138   NACL_REGISTER_SYSCALL(NaClSysClockGetRes, NACL_sys_clock_getres);
139   NACL_REGISTER_SYSCALL(NaClSysClockGetTime, NACL_sys_clock_gettime);
140   NACL_REGISTER_SYSCALL(NaClSysMkdir, NACL_sys_mkdir);
141   NACL_REGISTER_SYSCALL(NaClSysRmdir, NACL_sys_rmdir);
142   NACL_REGISTER_SYSCALL(NaClSysChdir, NACL_sys_chdir);
143   NACL_REGISTER_SYSCALL(NaClSysGetcwd, NACL_sys_getcwd);
144   NACL_REGISTER_SYSCALL(NaClSysUnlink, NACL_sys_unlink);
145   NACL_REGISTER_SYSCALL(NaClSysTruncate, NACL_sys_truncate);
146   NACL_REGISTER_SYSCALL(NaClSysLstat, NACL_sys_lstat);
147   NACL_REGISTER_SYSCALL(NaClSysLink, NACL_sys_link);
148   NACL_REGISTER_SYSCALL(NaClSysRename, NACL_sys_rename);
149   NACL_REGISTER_SYSCALL(NaClSysSymlink, NACL_sys_symlink);
150   NACL_REGISTER_SYSCALL(NaClSysChmod, NACL_sys_chmod);
151   NACL_REGISTER_SYSCALL(NaClSysAccess, NACL_sys_access);
152   NACL_REGISTER_SYSCALL(NaClSysReadlink, NACL_sys_readlink);
153   NACL_REGISTER_SYSCALL(NaClSysUtimes, NACL_sys_utimes);
154   NACL_REGISTER_SYSCALL(NaClSysPRead, NACL_sys_pread);
155   NACL_REGISTER_SYSCALL(NaClSysPWrite, NACL_sys_pwrite);
156   NACL_REGISTER_SYSCALL(NaClSysImcMakeBoundSock, NACL_sys_imc_makeboundsock);
157   NACL_REGISTER_SYSCALL(NaClSysImcAccept, NACL_sys_imc_accept);
158   NACL_REGISTER_SYSCALL(NaClSysImcConnect, NACL_sys_imc_connect);
159   NACL_REGISTER_SYSCALL(NaClSysImcSendmsg, NACL_sys_imc_sendmsg);
160   NACL_REGISTER_SYSCALL(NaClSysImcRecvmsg, NACL_sys_imc_recvmsg);
161   NACL_REGISTER_SYSCALL(NaClSysImcMemObjCreate, NACL_sys_imc_mem_obj_create);
162   NACL_REGISTER_SYSCALL(NaClSysTlsInit, NACL_sys_tls_init);
163   NACL_REGISTER_SYSCALL(NaClSysThreadCreate, NACL_sys_thread_create);
164   NACL_REGISTER_SYSCALL(NaClSysTlsGet, NACL_sys_tls_get);
165   NACL_REGISTER_SYSCALL(NaClSysThreadNice, NACL_sys_thread_nice);
166   NACL_REGISTER_SYSCALL(NaClSysMutexCreate, NACL_sys_mutex_create);
167   NACL_REGISTER_SYSCALL(NaClSysMutexLock, NACL_sys_mutex_lock);
168   NACL_REGISTER_SYSCALL(NaClSysMutexUnlock, NACL_sys_mutex_unlock);
169   NACL_REGISTER_SYSCALL(NaClSysMutexTrylock, NACL_sys_mutex_trylock);
170   NACL_REGISTER_SYSCALL(NaClSysCondCreate, NACL_sys_cond_create);
171   NACL_REGISTER_SYSCALL(NaClSysCondWait, NACL_sys_cond_wait);
172   NACL_REGISTER_SYSCALL(NaClSysCondSignal, NACL_sys_cond_signal);
173   NACL_REGISTER_SYSCALL(NaClSysCondBroadcast, NACL_sys_cond_broadcast);
174   NACL_REGISTER_SYSCALL(NaClSysCondTimedWaitAbs, NACL_sys_cond_timed_wait_abs);
175   NACL_REGISTER_SYSCALL(NaClSysImcSocketPair, NACL_sys_imc_socketpair);
176   NACL_REGISTER_SYSCALL(NaClSysSemCreate, NACL_sys_sem_create);
177   NACL_REGISTER_SYSCALL(NaClSysSemWait, NACL_sys_sem_wait);
178   NACL_REGISTER_SYSCALL(NaClSysSemPost, NACL_sys_sem_post);
179   NACL_REGISTER_SYSCALL(NaClSysSemGetValue, NACL_sys_sem_get_value);
180   NACL_REGISTER_SYSCALL(NaClSysSchedYield, NACL_sys_sched_yield);
181   NACL_REGISTER_SYSCALL(NaClSysSysconf, NACL_sys_sysconf);
182   NACL_REGISTER_SYSCALL(NaClSysDyncodeCreate, NACL_sys_dyncode_create);
183   NACL_REGISTER_SYSCALL(NaClSysDyncodeModify, NACL_sys_dyncode_modify);
184   NACL_REGISTER_SYSCALL(NaClSysDyncodeDelete, NACL_sys_dyncode_delete);
185   NACL_REGISTER_SYSCALL(NaClSysSecondTlsSet, NACL_sys_second_tls_set);
186   NACL_REGISTER_SYSCALL(NaClSysSecondTlsGet, NACL_sys_second_tls_get);
187   NACL_REGISTER_SYSCALL(NaClSysExceptionHandler, NACL_sys_exception_handler);
188   NACL_REGISTER_SYSCALL(NaClSysExceptionStack, NACL_sys_exception_stack);
189   NACL_REGISTER_SYSCALL(NaClSysExceptionClearFlag,
190                         NACL_sys_exception_clear_flag);
191   NACL_REGISTER_SYSCALL(NaClSysTestInfoLeak, NACL_sys_test_infoleak);
192   NACL_REGISTER_SYSCALL(NaClSysTestCrash, NACL_sys_test_crash);
193   NACL_REGISTER_SYSCALL(NaClSysFutexWaitAbs, NACL_sys_futex_wait_abs);
194   NACL_REGISTER_SYSCALL(NaClSysFutexWake, NACL_sys_futex_wake);
195   NACL_REGISTER_SYSCALL(NaClSysGetRandomBytes, NACL_sys_get_random_bytes);
196 }
197
198 static void SyscallTableInitEmpty(void) {
199   int i;
200   for (i = 0; i < NACL_MAX_SYSCALLS; ++i) {
201     nacl_syscall[i].handler = &NaClSysNotImplementedDecoder;
202   }
203 }
204
205 void NaClSyscallTableInit(void) {
206   SyscallTableInitEmpty();
207   RegisterSyscalls();
208 }