OLD | NEW |
---|---|
1 #ifndef _NACL_SYSDEP_H | 1 #ifndef _NACL_SYSDEP_H |
2 #define _NACL_SYSDEP_H 1 | 2 #define _NACL_SYSDEP_H 1 |
3 | 3 |
4 #if !defined(__ASSEMBLER__) | 4 #if !defined(__ASSEMBLER__) |
5 #include <futex_emulation.h> | 5 #include <futex_emulation.h> |
6 #include <irt_syscalls.h> | |
6 #include <lowlevellock.h> | 7 #include <lowlevellock.h> |
7 | 8 |
8 /* TODO(mseaborn): Don't use these in the NaCl build, or at least | 9 /* TODO(mseaborn): Don't use these in the NaCl build, or at least |
9 don't hard code the value of ENOSYS. */ | 10 don't hard code the value of ENOSYS. */ |
pasko-google - do not use
2011/09/02 16:25:24
this TODO is obsolete, please, remove
we should c
khim
2011/09/02 16:36:09
Done.
| |
10 | 11 |
11 #define INTERNAL_SYSCALL(name, err, nr, args...) \ | 12 #define INTERNAL_SYSCALL(name, err, nr, args...) \ |
12 INTERNAL_SYSCALL_ ## name(err, nr, args) | 13 INTERNAL_SYSCALL_ ## name ## _ ## nr (&err , ## args) |
13 | 14 |
14 #define INTERNAL_SYSCALL_access(err, nr, args...) (-38 /* ENOSYS */) | 15 #define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ |
15 #define INTERNAL_SYSCALL_chmod(err, nr, args...) (-38 /* ENOSYS */) | 16 INTERNAL_SYSCALL_NCS_ ## nr (name, &err , ## args) |
16 #define INTERNAL_SYSCALL_chown(err, nr, args...) (-38 /* ENOSYS */) | 17 |
17 #define INTERNAL_SYSCALL_chown32(err, nr, args...) (-38 /* ENOSYS */) | 18 __extern_always_inline int |
18 #define INTERNAL_SYSCALL_clock_getres(err, nr, args...) (-38 /* ENOSYS */) | 19 INTERNAL_SYSCALL_NCS_3 (int syscall_nr, int *err, int id1, int id2, int id3) |
19 #define INTERNAL_SYSCALL_clock_gettime(err, nr, args...) (-38 /* ENOSYS */) | 20 { |
20 #define INTERNAL_SYSCALL_clock_nanosleep(err, nr, args...) (-38 /* ENOSYS */) | 21 (*err) = (38 /* ENOSYS */); |
pasko-google - do not use
2011/09/02 16:25:24
no need for round brackets
why not just #define E
khim
2011/09/02 16:36:09
Because it's sometimes defined as "12" (from NaCl
| |
21 #define INTERNAL_SYSCALL_clock_settime(err, nr, args...) (-38 /* ENOSYS */) | 22 return 0; |
22 #define INTERNAL_SYSCALL_clone(err, nr, args...) (-38 /* ENOSYS */) | 23 } |
23 #define INTERNAL_SYSCALL_close(err, nr, args...) (-38 /* ENOSYS */) | 24 |
24 #define INTERNAL_SYSCALL_epoll_pwait(err, nr, args...) (-38 /* ENOSYS */) | 25 __extern_always_inline int |
25 #define INTERNAL_SYSCALL_eventfd(err, nr, args...) (-38 /* ENOSYS */) | 26 INTERNAL_SYSCALL_access_2 (int *err, const char *pathname, int mode) |
26 #define INTERNAL_SYSCALL_execve(err, nr, args...) (-38 /* ENOSYS */) | 27 { |
27 #define INTERNAL_SYSCALL_faccessat(err, nr, args...) (-38 /* ENOSYS */) | 28 (*err) = (38 /* ENOSYS */); |
28 #define INTERNAL_SYSCALL_fallocate(err, nr, args...) (-38 /* ENOSYS */) | 29 return 0; |
29 #define INTERNAL_SYSCALL_fadvise64(err, nr, args...) (-38 /* ENOSYS */) | 30 } |
30 #define INTERNAL_SYSCALL_fchmodat(err, nr, args...) (-38 /* ENOSYS */) | 31 |
31 #define INTERNAL_SYSCALL_fchown(err, nr, args...) (-38 /* ENOSYS */) | 32 __extern_always_inline int |
32 #define INTERNAL_SYSCALL_fchown32(err, nr, args...) (-38 /* ENOSYS */) | 33 INTERNAL_SYSCALL_chmod_2 (int *err, const char *path, mode_t mode) |
33 #define INTERNAL_SYSCALL_fchownat(err, nr, args...) (-38 /* ENOSYS */) | 34 { |
34 #define INTERNAL_SYSCALL_fcntl(err, nr, args...) (-38 /* ENOSYS */) | 35 (*err) = (38 /* ENOSYS */); |
35 #define INTERNAL_SYSCALL_fcntl64(err, nr, args...) (-38 /* ENOSYS */) | 36 return 0; |
36 #define INTERNAL_SYSCALL_fstat(err, nr, args...) (-38 /* ENOSYS */) | 37 } |
37 #define INTERNAL_SYSCALL_fstat64(err, nr, args...) (-38 /* ENOSYS */) | 38 |
38 #define INTERNAL_SYSCALL_fstatat64(err, nr, args...) (-38 /* ENOSYS */) | 39 __extern_always_inline int |
39 #define INTERNAL_SYSCALL_fstatfs64(err, nr, args...) (-38 /* ENOSYS */) | 40 INTERNAL_SYSCALL_chown_3 (int *err, const char *path, |
40 #define INTERNAL_SYSCALL_ftruncate64(err, nr, args...) (-38 /* ENOSYS */) | 41 __kernel_uid_t owner, __kernel_gid_t group) |
41 #define INTERNAL_SYSCALL_futimesat(err, nr, args...) (-38 /* ENOSYS */) | 42 { |
42 #define INTERNAL_SYSCALL_getcpu(err, nr, args...) (-38 /* ENOSYS */) | 43 (*err) = (38 /* ENOSYS */); |
43 #define INTERNAL_SYSCALL_getcwd(err, nr, args...) (-38 /* ENOSYS */) | 44 return 0; |
44 #define INTERNAL_SYSCALL_getdents(err, nr, args...) (-38 /* ENOSYS */) | 45 } |
45 #define INTERNAL_SYSCALL_getdents64(err, nr, args...) (-38 /* ENOSYS */) | 46 |
46 #define INTERNAL_SYSCALL_getegid(err, nr, args...) (-38 /* ENOSYS */) | 47 __extern_always_inline int |
47 #define INTERNAL_SYSCALL_getegid32(err, nr, args...) (-38 /* ENOSYS */) | 48 INTERNAL_SYSCALL_chown32_3 (int *err, const char *path, |
48 #define INTERNAL_SYSCALL_geteuid(err, nr, args...) (-38 /* ENOSYS */) | 49 uid_t owner, gid_t group) |
49 #define INTERNAL_SYSCALL_geteuid32(err, nr, args...) (-38 /* ENOSYS */) | 50 { |
50 #define INTERNAL_SYSCALL_getgid(err, nr, args...) (-38 /* ENOSYS */) | 51 (*err) = (38 /* ENOSYS */); |
51 #define INTERNAL_SYSCALL_getgid32(err, nr, args...) (-38 /* ENOSYS */) | 52 return 0; |
52 #define INTERNAL_SYSCALL_getgroups(err, nr, args...) (-38 /* ENOSYS */) | 53 } |
53 #define INTERNAL_SYSCALL_getgroups32(err, nr, args...) (-38 /* ENOSYS */) | 54 |
54 #define INTERNAL_SYSCALL_getpmsg(err, nr, args...) (-38 /* ENOSYS */) | 55 __extern_always_inline int |
55 #define INTERNAL_SYSCALL_getpriority(err, nr, args...) (-38 /* ENOSYS */) | 56 INTERNAL_SYSCALL_clock_getres_2 (int *err, clockid_t clk_id, |
56 #define INTERNAL_SYSCALL_getresgid(err, nr, args...) (-38 /* ENOSYS */) | 57 struct timespec *res) |
57 #define INTERNAL_SYSCALL_getresgid32(err, nr, args...) (-38 /* ENOSYS */) | 58 { |
58 #define INTERNAL_SYSCALL_getresuid(err, nr, args...) (-38 /* ENOSYS */) | 59 (*err) = (38 /* ENOSYS */); |
59 #define INTERNAL_SYSCALL_getresuid32(err, nr, args...) (-38 /* ENOSYS */) | 60 return 0; |
60 #define INTERNAL_SYSCALL_getrlimit(err, nr, args...) (-38 /* ENOSYS */) | 61 } |
61 #define INTERNAL_SYSCALL_gettid(err, nr, args...) (-38 /* ENOSYS */) | 62 |
62 #define INTERNAL_SYSCALL_getuid(err, nr, args...) (-38 /* ENOSYS */) | 63 __extern_always_inline int |
63 #define INTERNAL_SYSCALL_getuid32(err, nr, args...) (-38 /* ENOSYS */) | 64 INTERNAL_SYSCALL_clock_gettime_2 (int *err, clockid_t clk_id, |
64 #define INTERNAL_SYSCALL_ioctl(err, nr, args...) (-38 /* ENOSYS */) | 65 struct timespec *tp) |
65 #define INTERNAL_SYSCALL_ipc(err, nr, args...) (-38 /* ENOSYS */) | 66 { |
66 #define INTERNAL_SYSCALL_kill(err, nr, args...) (-38 /* ENOSYS */) | 67 (*err) = (38 /* ENOSYS */); |
67 #define INTERNAL_SYSCALL_lchown(err, nr, args...) (-38 /* ENOSYS */) | 68 return 0; |
68 #define INTERNAL_SYSCALL_lchown32(err, nr, args...) (-38 /* ENOSYS */) | 69 } |
69 #define INTERNAL_SYSCALL_link(err, nr, args...) (-38 /* ENOSYS */) | 70 |
70 #define INTERNAL_SYSCALL_linkat(err, nr, args...) (-38 /* ENOSYS */) | 71 __extern_always_inline int |
71 #define INTERNAL_SYSCALL__llseek(err, nr, args...) (-38 /* ENOSYS */) | 72 INTERNAL_SYSCALL_clock_nanosleep_4 (int *err, clockid_t clock_id, int flags, |
72 #define INTERNAL_SYSCALL_lstat(err, nr, args...) (-38 /* ENOSYS */) | 73 const struct timespec *request, |
73 #define INTERNAL_SYSCALL_lstat64(err, nr, args...) (-38 /* ENOSYS */) | 74 struct timespec *remain) |
74 #define INTERNAL_SYSCALL_madvise(err, nr, args...) (-38 /* ENOSYS */) | 75 { |
75 #define INTERNAL_SYSCALL_mkdir(err, nr, args...) (-38 /* ENOSYS */) | 76 (*err) = (38 /* ENOSYS */); |
76 #define INTERNAL_SYSCALL_mkdirat(err, nr, args...) (-38 /* ENOSYS */) | 77 return 0; |
77 #define INTERNAL_SYSCALL_mknod(err, nr, args...) (-38 /* ENOSYS */) | 78 } |
78 #define INTERNAL_SYSCALL_mknodat(err, nr, args...) (-38 /* ENOSYS */) | 79 |
79 #define INTERNAL_SYSCALL_mq_notify(err, nr, args...) (-38 /* ENOSYS */) | 80 __extern_always_inline int |
80 #define INTERNAL_SYSCALL_mq_open(err, nr, args...) (-38 /* ENOSYS */) | 81 INTERNAL_SYSCALL_clock_settime_2 (int *err, clockid_t clk_id, |
81 #define INTERNAL_SYSCALL_mq_unlink(err, nr, args...) (-38 /* ENOSYS */) | 82 const struct timespec *tp) |
82 #define INTERNAL_SYSCALL_munmap(err, nr, args...) (-38 /* ENOSYS */) | 83 { |
83 #define INTERNAL_SYSCALL_newfstatat(err, nr, args...) (-38 /* ENOSYS */) | 84 (*err) = (38 /* ENOSYS */); |
84 #define INTERNAL_SYSCALL_open(err, nr, args...) (-38 /* ENOSYS */) | 85 return 0; |
85 #define INTERNAL_SYSCALL_openat(err, nr, args...) (-38 /* ENOSYS */) | 86 } |
86 #define INTERNAL_SYSCALL_poll(err, nr, args...) (-38 /* ENOSYS */) | 87 |
87 #define INTERNAL_SYSCALL_ppoll(err, nr, args...) (-38 /* ENOSYS */) | 88 __extern_always_inline int |
88 #define INTERNAL_SYSCALL_pread(err, nr, args...) (-38 /* ENOSYS */) | 89 INTERNAL_SYSCALL_close_1 (int *err, unsigned int fd) |
89 #define INTERNAL_SYSCALL_ptrace(err, nr, args...) (-38 /* ENOSYS */) | 90 { |
90 #define INTERNAL_SYSCALL_putpmsg(err, nr, args...) (-38 /* ENOSYS */) | 91 (*err) = __nacl_irt_close(fd); |
91 #define INTERNAL_SYSCALL_pwrite(err, nr, args...) (-38 /* ENOSYS */) | 92 return 0; |
92 #define INTERNAL_SYSCALL_pselect6(err, nr, args...) (-38 /* ENOSYS */) | 93 } |
93 #define INTERNAL_SYSCALL_readahead(err, nr, args...) (-38 /* ENOSYS */) | 94 |
94 #define INTERNAL_SYSCALL_readlink(err, nr, args...) (-38 /* ENOSYS */) | 95 __extern_always_inline int |
95 #define INTERNAL_SYSCALL_readlinkat(err, nr, args...) (-38 /* ENOSYS */) | 96 INTERNAL_SYSCALL_epoll_pwait_6 (int *err, int epfd, struct epoll_event *events, |
96 #define INTERNAL_SYSCALL_readv(err, nr, args...) (-38 /* ENOSYS */) | 97 int maxevents, int timeout, |
97 #define INTERNAL_SYSCALL_reboot(err, nr, args...) (-38 /* ENOSYS */) | 98 const sigset_t *sigmask, size_t sigsetsize) |
98 #define INTERNAL_SYSCALL_rename(err, nr, args...) (-38 /* ENOSYS */) | 99 { |
99 #define INTERNAL_SYSCALL_renameat(err, nr, args...) (-38 /* ENOSYS */) | 100 (*err) = (38 /* ENOSYS */); |
100 #define INTERNAL_SYSCALL_rmdir(err, nr, args...) (-38 /* ENOSYS */) | 101 return 0; |
101 #define INTERNAL_SYSCALL_rt_sigaction(err, nr, args...) (-38 /* ENOSYS */) | 102 } |
102 #define INTERNAL_SYSCALL_rt_sigpending(err, nr, args...) (-38 /* ENOSYS */) | 103 |
103 #define INTERNAL_SYSCALL_rt_sigprocmask(err, nr, args...) (-38 /* ENOSYS */) | 104 __extern_always_inline int |
104 #define INTERNAL_SYSCALL_rt_sigqueueinfo(err, nr, args...) (-38 /* ENOSYS */) | 105 INTERNAL_SYSCALL_execve_3 (int *err, const char *filename, char *const argv[], |
105 #define INTERNAL_SYSCALL_rt_sigsuspend(err, nr, args...) (-38 /* ENOSYS */) | 106 char *const envp[]) |
106 #define INTERNAL_SYSCALL_rt_sigtimedwait(err, nr, args...) (-38 /* ENOSYS */) | 107 { |
107 #define INTERNAL_SYSCALL_sched_get_priority_max(err, nr, args...) (-38 /* ENOSYS */) | 108 (*err) = (38 /* ENOSYS */); |
108 #define INTERNAL_SYSCALL_sched_get_priority_min(err, nr, args...) (-38 /* ENOSYS */) | 109 return 0; |
109 #define INTERNAL_SYSCALL_sched_getaffinity(err, nr, args...) (-38 /* ENOSYS */) | 110 } |
110 #define INTERNAL_SYSCALL_sched_getparam(err, nr, args...) (-38 /* ENOSYS */) | 111 |
111 #define INTERNAL_SYSCALL_sched_getscheduler(err, nr, args...) (-38 /* ENOSYS */) | 112 __extern_always_inline int |
112 #define INTERNAL_SYSCALL_sched_setaffinity(err, nr, args...) (-38 /* ENOSYS */) | 113 INTERNAL_SYSCALL_eventfd2_2 (int *err, unsigned int initval, int flags) |
113 #define INTERNAL_SYSCALL_sched_setscheduler(err, nr, args...) (-38 /* ENOSYS */) | 114 { |
114 #define INTERNAL_SYSCALL_set_robust_list(err, nr, args...) (-38 /* ENOSYS */) | 115 (*err) = (38 /* ENOSYS */); |
115 #define INTERNAL_SYSCALL_set_tid_address(err, nr, args...) (-38 /* ENOSYS */) | 116 return 0; |
116 #define INTERNAL_SYSCALL_setfsgid(err, nr, args...) (-38 /* ENOSYS */) | 117 } |
117 #define INTERNAL_SYSCALL_setfsgid32(err, nr, args...) (-38 /* ENOSYS */) | 118 |
118 #define INTERNAL_SYSCALL_setfsuid(err, nr, args...) (-38 /* ENOSYS */) | 119 __extern_always_inline int |
119 #define INTERNAL_SYSCALL_setfsuid32(err, nr, args...) (-38 /* ENOSYS */) | 120 INTERNAL_SYSCALL_eventfd_1 (int *err, unsigned int initval) |
120 #define INTERNAL_SYSCALL_setgid(err, nr, args...) (-38 /* ENOSYS */) | 121 { |
121 #define INTERNAL_SYSCALL_setgid32(err, nr, args...) (-38 /* ENOSYS */) | 122 return INTERNAL_SYSCALL_eventfd2_2(err, initval, 0); |
122 #define INTERNAL_SYSCALL_setgroups(err, nr, args...) (-38 /* ENOSYS */) | 123 } |
123 #define INTERNAL_SYSCALL_setgroups32(err, nr, args...) (-38 /* ENOSYS */) | 124 |
124 #define INTERNAL_SYSCALL_setregid(err, nr, args...) (-38 /* ENOSYS */) | 125 __extern_always_inline int |
125 #define INTERNAL_SYSCALL_setregid32(err, nr, args...) (-38 /* ENOSYS */) | 126 INTERNAL_SYSCALL_faccessat_3 (int *err, int dirfd, const char *pathname, |
126 #define INTERNAL_SYSCALL_setresgid(err, nr, args...) (-38 /* ENOSYS */) | 127 int mode) |
127 #define INTERNAL_SYSCALL_setresgid32(err, nr, args...) (-38 /* ENOSYS */) | 128 { |
128 #define INTERNAL_SYSCALL_setresuid(err, nr, args...) (-38 /* ENOSYS */) | 129 (*err) = (38 /* ENOSYS */); |
129 #define INTERNAL_SYSCALL_setresuid32(err, nr, args...) (-38 /* ENOSYS */) | 130 return 0; |
130 #define INTERNAL_SYSCALL_setreuid(err, nr, args...) (-38 /* ENOSYS */) | 131 } |
131 #define INTERNAL_SYSCALL_setreuid32(err, nr, args...) (-38 /* ENOSYS */) | 132 |
132 #define INTERNAL_SYSCALL_setrlimit(err, nr, args...) (-38 /* ENOSYS */) | 133 __extern_always_inline int |
133 #define INTERNAL_SYSCALL_setuid(err, nr, args...) (-38 /* ENOSYS */) | 134 INTERNAL_SYSCALL_fchmod_2 (int *err, int fd, mode_t mode) |
134 #define INTERNAL_SYSCALL_setuid32(err, nr, args...) (-38 /* ENOSYS */) | 135 { |
135 #define INTERNAL_SYSCALL_signalfd(err, nr, args...) (-38 /* ENOSYS */) | 136 (*err) = (38 /* ENOSYS */); |
136 #define INTERNAL_SYSCALL_stat(err, nr, args...) (-38 /* ENOSYS */) | 137 return 0; |
137 #define INTERNAL_SYSCALL_stat64(err, nr, args...) (-38 /* ENOSYS */) | 138 } |
138 #define INTERNAL_SYSCALL_statfs64(err, nr, args...) (-38 /* ENOSYS */) | 139 |
139 #define INTERNAL_SYSCALL_symlink(err, nr, args...) (-38 /* ENOSYS */) | 140 __extern_always_inline int |
140 #define INTERNAL_SYSCALL_symlinkat(err, nr, args...) (-38 /* ENOSYS */) | 141 INTERNAL_SYSCALL_fchmodat_3 (int *err, int dirfd, const char *pathname, |
141 #define INTERNAL_SYSCALL_sync_file_range(err, nr, args...) (-38 /* ENOSYS */) | 142 mode_t mode) |
142 #define INTERNAL_SYSCALL__sysctl(err, nr, args...) (-38 /* ENOSYS */) | 143 { |
143 #define INTERNAL_SYSCALL_tgkill(err, nr, args...) (-38 /* ENOSYS */) | 144 (*err) = (38 /* ENOSYS */); |
144 #define INTERNAL_SYSCALL_time(err, nr, args...) (-38 /* ENOSYS */) | 145 return 0; |
145 #define INTERNAL_SYSCALL_timer_create(err, nr, args...) (-38 /* ENOSYS */) | 146 } |
146 #define INTERNAL_SYSCALL_timer_delete(err, nr, args...) (-38 /* ENOSYS */) | 147 |
147 #define INTERNAL_SYSCALL_timer_getoverrun(err, nr, args...) (-38 /* ENOSYS */) | 148 __extern_always_inline int |
148 #define INTERNAL_SYSCALL_timer_gettime(err, nr, args...) (-38 /* ENOSYS */) | 149 INTERNAL_SYSCALL_fchown_3 (int *err, int fd, |
149 #define INTERNAL_SYSCALL_timer_settime(err, nr, args...) (-38 /* ENOSYS */) | 150 __kernel_uid_t owner, __kernel_gid_t group) |
150 #define INTERNAL_SYSCALL_times(err, nr, args...) (-38 /* ENOSYS */) | 151 { |
151 #define INTERNAL_SYSCALL_tkill(err, nr, args...) (-38 /* ENOSYS */) | 152 (*err) = (38 /* ENOSYS */); |
152 #define INTERNAL_SYSCALL_truncate64(err, nr, args...) (-38 /* ENOSYS */) | 153 return 0; |
153 #define INTERNAL_SYSCALL_ugetrlimit(err, nr, args...) (-38 /* ENOSYS */) | 154 } |
154 #define INTERNAL_SYSCALL_unlink(err, nr, args...) (-38 /* ENOSYS */) | 155 |
155 #define INTERNAL_SYSCALL_unlinkat(err, nr, args...) (-38 /* ENOSYS */) | 156 __extern_always_inline int |
156 #define INTERNAL_SYSCALL_ustat(err, nr, args...) (-38 /* ENOSYS */) | 157 INTERNAL_SYSCALL_fchown32_3 (int *err, int fd, |
157 #define INTERNAL_SYSCALL_utime(err, nr, args...) (-38 /* ENOSYS */) | 158 uid_t owner, gid_t group) |
158 #define INTERNAL_SYSCALL_utimensat(err, nr, args...) (-38 /* ENOSYS */) | 159 { |
159 #define INTERNAL_SYSCALL_utimes(err, nr, args...) (-38 /* ENOSYS */) | 160 (*err) = (38 /* ENOSYS */); |
160 #define INTERNAL_SYSCALL_wait4(err, nr, args...) (-38 /* ENOSYS */) | 161 return 0; |
161 #define INTERNAL_SYSCALL_waitid(err, nr, args...) (-38 /* ENOSYS */) | 162 } |
162 #define INTERNAL_SYSCALL_write(err, nr, args...) (-38 /* ENOSYS */) | 163 |
163 #define INTERNAL_SYSCALL_writev(err, nr, args...) (-38 /* ENOSYS */) | 164 __extern_always_inline int |
164 #define INTERNAL_SYSCALL_NCS(name, err, nr, args...) (-38 /* ENOSYS */) | 165 INTERNAL_SYSCALL_fchownat_5 (int *err, int dirfd, const char *pathname, |
165 #define INTERNAL_SYSCALL_futex(err, nr, args...) \ | 166 uid_t owner, gid_t group, int flags) |
166 INTERNAL_SYSCALL_futex ## nr(args) | 167 { |
168 (*err) = (38 /* ENOSYS */); | |
169 return 0; | |
170 } | |
171 | |
172 __extern_always_inline int | |
173 INTERNAL_SYSCALL_fcntl_3 (int *err, int fd, int cmd, void *arg) | |
174 { | |
175 (*err) = (38 /* ENOSYS */); | |
176 return 0; | |
177 } | |
178 | |
179 __extern_always_inline int | |
180 INTERNAL_SYSCALL_fcntl64_3 (int *err, int fd, int cmd, | |
181 union __attribute__ ((__transparent_union__)) | |
182 { | |
183 unsigned long long ullarg; | |
184 long long llarg; | |
185 unsigned long ularg; | |
186 long larg; | |
187 unsigned int uiarg; | |
188 int iarg; | |
189 void *parg; | |
190 } arg) | |
191 { | |
192 (*err) = (38 /* ENOSYS */); | |
193 return 0; | |
194 } | |
167 | 195 |
168 __errordecl (__futex_emulation_unknown_operation, | 196 __errordecl (__futex_emulation_unknown_operation, |
169 "unknown futex operation or argument"); | 197 "unknown futex operation or argument"); |
170 | 198 |
171 struct __attribute__ ((__packed__)) decoded_futex_operation | 199 struct __attribute__ ((__packed__)) decoded_futex_operation |
172 { | 200 { |
173 unsigned int operation :7; | 201 unsigned int operation :7; |
174 unsigned int private :1; | 202 unsigned int private :1; |
175 unsigned int realtime :1; | 203 unsigned int realtime :1; |
176 unsigned int padding :23; | 204 unsigned int padding :23; |
177 }; | 205 }; |
178 | 206 |
179 union __attribute__ ((__transparent_union__)) encoded_futex_operation | 207 union __attribute__ ((__transparent_union__)) encoded_futex_operation |
180 { | 208 { |
181 unsigned int encoded_futex_operation; | 209 unsigned int encoded_futex_operation; |
182 int const_futex_operation; | 210 int const_futex_operation; |
183 struct decoded_futex_operation decoded_futex_operation; | 211 struct decoded_futex_operation decoded_futex_operation; |
184 }; | 212 }; |
185 | 213 |
186 __extern_always_inline unsigned int | 214 __extern_always_inline void |
187 INTERNAL_SYSCALL_futex2 (union __attribute__ ((__transparent_union__)) | 215 INTERNAL_SYSCALL_futex_2 (int *err, |
188 » » » { | 216 » » » union __attribute__ ((__transparent_union__)) |
189 » » » volatile int *addr; | 217 » » » { |
190 » » » volatile unsigned int *uaddr; | 218 » » » volatile int *addr; |
191 » » » } addr, | 219 » » » volatile unsigned int *uaddr; |
192 » » » union encoded_futex_operation futex_operation) | 220 » » » } addr, |
221 » » » union encoded_futex_operation futex_operation) | |
193 { | 222 { |
194 switch (futex_operation.decoded_futex_operation.operation) | 223 switch (futex_operation.decoded_futex_operation.operation) |
pasko-google - do not use
2011/09/02 16:25:24
switch? why?
this is easier to read:
if (blah ==
khim
2011/09/02 16:36:09
All other functions use switch.
| |
195 { | 224 { |
196 case FUTEX_UNLOCK_PI: | 225 case FUTEX_UNLOCK_PI: |
197 » return (-38 /* ENOSYS */); | 226 » (*err) = (38 /* ENOSYS */); |
227 » return; | |
198 default: | 228 default: |
199 if (__builtin_constant_p ( | 229 if (__builtin_constant_p ( |
200 futex_operation.decoded_futex_operation.operation)) | 230 futex_operation.decoded_futex_operation.operation)) |
201 __futex_emulation_unknown_operation (); | 231 __futex_emulation_unknown_operation (); |
232 (*err) = 0; | |
202 } | 233 } |
203 return 0; | |
204 } | 234 } |
205 | 235 |
206 __extern_always_inline unsigned int | 236 __extern_always_inline unsigned int |
207 INTERNAL_SYSCALL_futex3 (union __attribute__ ((__transparent_union__)) | 237 INTERNAL_SYSCALL_futex_3 (int *err, |
208 » » » { | 238 » » » union __attribute__ ((__transparent_union__)) |
209 » » » volatile int *addr; | 239 » » » { |
210 » » » volatile unsigned int *uaddr; | 240 » » » volatile int *addr; |
211 » » » } addr, | 241 » » » volatile unsigned int *uaddr; |
212 » » » union encoded_futex_operation futex_operation, | 242 » » » } addr, |
213 » » » int val) | 243 » » » union encoded_futex_operation futex_operation, |
214 { | 244 » » » int val) |
245 { | |
246 int count; | |
215 switch (futex_operation.decoded_futex_operation.operation) | 247 switch (futex_operation.decoded_futex_operation.operation) |
216 { | 248 { |
217 case FUTEX_WAKE: | 249 case FUTEX_WAKE: |
218 » return __nacl_futex_wake (addr.addr, val, __FUTEX_BITSET_MATCH_ANY); | 250 » (*err) = __nacl_futex_wake (addr.addr, val, __FUTEX_BITSET_MATCH_ANY, |
251 » » » » &count); | |
252 » return count; | |
219 default: | 253 default: |
220 if (__builtin_constant_p ( | 254 if (__builtin_constant_p ( |
221 futex_operation.decoded_futex_operation.operation)) | 255 futex_operation.decoded_futex_operation.operation)) |
222 __futex_emulation_unknown_operation (); | 256 __futex_emulation_unknown_operation (); |
257 (*err) = 0; | |
223 } | 258 } |
224 return 0; | 259 return 0; |
225 } | 260 } |
226 | 261 |
227 __extern_always_inline unsigned int | 262 __extern_always_inline unsigned int |
228 INTERNAL_SYSCALL_futex4 (union __attribute__ ((__transparent_union__)) | 263 INTERNAL_SYSCALL_futex_4 (int *err, |
229 » » » { | 264 » » » union __attribute__ ((__transparent_union__)) |
230 » » » volatile int *addr; | 265 » » » { |
231 » » » volatile unsigned int *uaddr; | 266 » » » volatile int *addr; |
232 » » » } addr, | 267 » » » volatile unsigned int *uaddr; |
233 » » » union encoded_futex_operation futex_operation, | 268 » » » } addr, |
234 » » » int val1, | 269 » » » union encoded_futex_operation futex_operation, |
235 » » » /* We need to accept 0 here. May be better to | 270 » » » int val1, |
236 » » » replace 0 with NULL in NPTL code? */ | 271 » » » /* We need to accept 0 here. May be better to |
237 » » » union __attribute__ ((__transparent_union__)) | 272 » » » replace 0 with NULL in NPTL code? */ |
238 » » » { | 273 » » » union __attribute__ ((__transparent_union__)) |
239 » » » const struct timespec *timeout; | 274 » » » { |
240 » » » int null_timeout; | 275 » » » const struct timespec *timeout; |
241 » » » } val2) | 276 » » » int null_timeout; |
277 » » » } val2) | |
242 { | 278 { |
243 switch (futex_operation.decoded_futex_operation.operation) | 279 switch (futex_operation.decoded_futex_operation.operation) |
244 { | 280 { |
245 case FUTEX_WAIT: | 281 case FUTEX_WAIT: |
246 » return __nacl_futex_wait (addr.addr, val1, __FUTEX_BITSET_MATCH_ANY, | 282 » (*err) = __nacl_futex_wait (addr.addr, val1, __FUTEX_BITSET_MATCH_ANY, |
247 » » » » val2.timeout); | 283 » » » » val2.timeout); |
248 /* TODO(khim): handle PI-locks in some less hacky way. */ | 284 » return 0; |
285 /* TODO(khim): hook up PI-locks to some IRT-handleable functions. */ | |
249 case FUTEX_LOCK_PI: | 286 case FUTEX_LOCK_PI: |
250 case FUTEX_UNLOCK_PI: | 287 case FUTEX_UNLOCK_PI: |
251 case FUTEX_TRYLOCK_PI: | 288 case FUTEX_TRYLOCK_PI: |
252 » return (-38 /* ENOSYS */); | 289 » (*err) = (38 /* ENOSYS */); |
290 » return 0; | |
253 default: | 291 default: |
254 if (__builtin_constant_p ( | 292 if (__builtin_constant_p ( |
255 futex_operation.decoded_futex_operation.operation)) | 293 futex_operation.decoded_futex_operation.operation)) |
256 __futex_emulation_unknown_operation (); | 294 __futex_emulation_unknown_operation (); |
295 (*err) = 0; | |
257 } | 296 } |
258 return 0; | 297 return 0; |
259 } | 298 } |
299 | |
260 __extern_always_inline unsigned int | 300 __extern_always_inline unsigned int |
261 INTERNAL_SYSCALL_futex6 (union __attribute__ ((__transparent_union__)) | 301 INTERNAL_SYSCALL_futex_6 (int *err, |
262 » » » { | 302 » » » union __attribute__ ((__transparent_union__)) |
263 » » » volatile int *addr; | 303 » » » { |
264 » » » volatile unsigned int *uaddr; | 304 » » » volatile int *addr; |
265 » » » } addr1, | 305 » » » volatile unsigned int *uaddr; |
266 » » » union encoded_futex_operation futex_operation, | 306 » » » } addr1, |
267 » » » int val1, | 307 » » » union encoded_futex_operation futex_operation, |
268 » » » int val2, | 308 » » » int val1, |
269 » » » union __attribute__ ((__transparent_union__)) | 309 » » » int val2, |
270 » » » { | 310 » » » union __attribute__ ((__transparent_union__)) |
271 » » » volatile int *addr; | 311 » » » { |
272 » » » volatile unsigned int *uaddr; | 312 » » » volatile int *addr; |
273 » » » } addr2, | 313 » » » volatile unsigned int *uaddr; |
274 » » » int val3) | 314 » » » } addr2, |
275 { | 315 » » » int val3) |
316 { | |
317 int count; | |
276 switch (futex_operation.decoded_futex_operation.operation) | 318 switch (futex_operation.decoded_futex_operation.operation) |
277 { | 319 { |
278 case FUTEX_WAKE_OP: | 320 case FUTEX_WAKE_OP: |
279 » return __nacl_futex_wake_op (addr1.addr, addr2.addr, val1, val2, val3); | 321 » (*err) = __nacl_futex_wake_op (addr1.addr, addr2.addr, |
322 » » » » val1, val2, val3, &count); | |
323 » return count; | |
280 case FUTEX_CMP_REQUEUE: | 324 case FUTEX_CMP_REQUEUE: |
281 » return __nacl_futex_cmp_requeue (addr1.addr, addr2.addr, | 325 » (*err) = __nacl_futex_cmp_requeue (addr1.addr, addr2.addr, |
282 » » » » » val1, val2, val3); | 326 » » » » » val1, val2, val3, &count); |
327 » return count; | |
283 default: | 328 default: |
284 if (__builtin_constant_p ( | 329 if (__builtin_constant_p ( |
285 futex_operation.decoded_futex_operation.operation)) | 330 futex_operation.decoded_futex_operation.operation)) |
286 __futex_emulation_unknown_operation (); | 331 __futex_emulation_unknown_operation (); |
332 (*err) = 0; | |
287 } | 333 } |
288 return 0; | 334 return 0; |
289 } | 335 } |
336 | |
337 __extern_always_inline int | |
338 INTERNAL_SYSCALL_futimesat_3 (int *err, int dirfd, const char *pathname, | |
339 const struct timeval times[2]) | |
340 { | |
341 (*err) = (38 /* ENOSYS */); | |
342 return 0; | |
343 } | |
344 | |
345 __extern_always_inline int | |
346 INTERNAL_SYSCALL_getcpu_3 (int *err, unsigned *cpu, unsigned *node, | |
347 struct getcpu_cache *tcache) | |
348 { | |
349 (*err) = (38 /* ENOSYS */); | |
350 return 0; | |
351 } | |
352 | |
353 /* NOTE! The user-level library version returns a character pointer. | |
354 | |
355 The system call just returns the length of the buffer filled (which includes | |
356 the ending '\0' character), or zero in case of error. */ | |
357 __extern_always_inline int | |
358 INTERNAL_SYSCALL_getcwd_2 (int *err, char *buf, size_t size) | |
359 { | |
360 (*err) = (38 /* ENOSYS */); | |
361 return 0; | |
362 } | |
363 | |
364 __extern_always_inline __kernel_gid_t | |
365 INTERNAL_SYSCALL_getegid_0 (int *err) | |
366 { | |
367 (*err) = (38 /* ENOSYS */); | |
368 return 0; | |
369 } | |
370 | |
371 __extern_always_inline gid_t | |
372 INTERNAL_SYSCALL_getegid32_0 (int *err) | |
373 { | |
374 (*err) = (38 /* ENOSYS */); | |
375 return 0; | |
376 } | |
377 | |
378 __extern_always_inline __kernel_uid_t | |
379 INTERNAL_SYSCALL_geteuid_0 (int *err) | |
380 { | |
381 (*err) = (38 /* ENOSYS */); | |
382 return 0; | |
383 } | |
384 | |
385 __extern_always_inline uid_t | |
386 INTERNAL_SYSCALL_geteuid32_0 (int *err) | |
387 { | |
388 (*err) = (38 /* ENOSYS */); | |
389 return 0; | |
390 } | |
391 | |
392 __extern_always_inline __kernel_gid_t | |
393 INTERNAL_SYSCALL_getgid_0 (int *err) | |
394 { | |
395 (*err) = (38 /* ENOSYS */); | |
396 return 0; | |
397 } | |
398 | |
399 __extern_always_inline gid_t | |
400 INTERNAL_SYSCALL_getgid32_0 (int *err) | |
401 { | |
402 (*err) = (38 /* ENOSYS */); | |
403 return 0; | |
404 } | |
405 | |
406 __extern_always_inline int | |
407 INTERNAL_SYSCALL_getgroups_2 (int *err, int size, __kernel_gid_t *list) | |
408 { | |
409 (*err) = (38 /* ENOSYS */); | |
410 return 0; | |
411 } | |
412 | |
413 __extern_always_inline int | |
414 INTERNAL_SYSCALL_getgroups32_2 (int *err, int size, gid_t *list) | |
415 { | |
416 (*err) = (38 /* ENOSYS */); | |
417 return 0; | |
418 } | |
419 | |
420 __extern_always_inline int | |
421 INTERNAL_SYSCALL_getmsg_4 (int *err, int fildes, const struct strbuf *ctlptr, | |
422 const struct strbuf *dataptr, int *pflags) | |
423 { | |
424 (*err) = (38 /* ENOSYS */); | |
425 return 0; | |
426 } | |
427 | |
428 __extern_always_inline int | |
429 INTERNAL_SYSCALL_getpmsg_5 (int *err, int fildes, const struct strbuf *ctlptr, | |
430 const struct strbuf *dataptr, int *pband, int *pflags ) | |
431 { | |
432 (*err) = (38 /* ENOSYS */); | |
433 return 0; | |
434 } | |
435 | |
436 /* The return value of getpriority syscall is biased by this value | |
437 to avoid returning negative values. */ | |
438 __extern_always_inline int | |
439 INTERNAL_SYSCALL_getpriority_2 (int *err, int which, int who) | |
440 { | |
441 (*err) = (38 /* ENOSYS */); | |
442 return 0; | |
443 } | |
444 | |
445 __extern_always_inline int | |
446 INTERNAL_SYSCALL_getresgid_3 (int *err, __kernel_gid_t *rgid, | |
447 __kernel_gid_t *egid, __kernel_gid_t *sgid) | |
448 { | |
449 (*err) = (38 /* ENOSYS */); | |
450 return 0; | |
451 } | |
452 | |
453 __extern_always_inline int | |
454 INTERNAL_SYSCALL_getresgid32_3 (int *err, gid_t *rgid, gid_t *egid, gid_t *sgid) | |
455 { | |
456 (*err) = (38 /* ENOSYS */); | |
457 return 0; | |
458 } | |
459 | |
460 __extern_always_inline int | |
461 INTERNAL_SYSCALL_getresuid_3 (int *err, __kernel_uid_t *ruid, | |
462 __kernel_uid_t *euid, __kernel_uid_t *suid) | |
463 { | |
464 (*err) = (38 /* ENOSYS */); | |
465 return 0; | |
466 } | |
467 | |
468 __extern_always_inline int | |
469 INTERNAL_SYSCALL_getresuid32_3 (int *err, uid_t *ruid, uid_t *euid, uid_t *ugid) | |
470 { | |
471 (*err) = (38 /* ENOSYS */); | |
472 return 0; | |
473 } | |
474 | |
475 __extern_always_inline __kernel_uid_t | |
476 INTERNAL_SYSCALL_getuid_0 (int *err) | |
477 { | |
478 (*err) = (38 /* ENOSYS */); | |
479 return 0; | |
480 } | |
481 | |
482 __extern_always_inline uid_t | |
483 INTERNAL_SYSCALL_getuid32_0 (int *err) | |
484 { | |
485 (*err) = (38 /* ENOSYS */); | |
486 return 0; | |
487 } | |
488 | |
489 __extern_always_inline uid_t | |
490 INTERNAL_SYSCALL_open_3 (int *err, const char *pathname, int flags, mode_t mode) | |
491 { | |
492 int newfd; | |
493 (*err) = __nacl_irt_open (pathname, flags, mode, &newfd); | |
494 return newfd; | |
495 } | |
496 | |
497 __extern_always_inline uid_t | |
498 INTERNAL_SYSCALL_openat_4 (int *err, int dirfd, const char *pathname, | |
499 int flags, mode_t mode) | |
500 { | |
501 (*err) = (38 /* ENOSYS */); | |
502 return 0; | |
503 } | |
504 | |
505 __extern_always_inline int | |
506 INTERNAL_SYSCALL_ioctl_3 (int *err, int d, int request, | |
507 union __attribute__ ((__transparent_union__)) | |
508 { | |
509 unsigned long long ullarg; | |
510 long long llarg; | |
511 unsigned long ularg; | |
512 long larg; | |
513 unsigned int uiarg; | |
514 int iarg; | |
515 void *parg; | |
516 } arg) | |
517 { | |
518 (*err) = (38 /* ENOSYS */); | |
519 return 0; | |
520 } | |
521 | |
522 __extern_always_inline int | |
523 INTERNAL_SYSCALL_ipc_6 (int *err, unsigned int call, int first, int second, | |
524 int third, void *ptr, long fifth) | |
525 { | |
526 (*err) = (38 /* ENOSYS */); | |
527 return 0; | |
528 } | |
529 | |
530 __extern_always_inline int | |
531 INTERNAL_SYSCALL_ipc_5 (int *err, unsigned int call, int first, int second, | |
532 int third, void *ptr) | |
533 { | |
534 return INTERNAL_SYSCALL_ipc_6 (err, call, first, second, third, ptr, 0); | |
535 return 0; | |
536 } | |
537 | |
538 __extern_always_inline int | |
539 INTERNAL_SYSCALL_kill_2 (int *err, pid_t pid, int sig) | |
540 { | |
541 (*err) = (38 /* ENOSYS */); | |
542 return 0; | |
543 } | |
544 | |
545 __extern_always_inline int | |
546 INTERNAL_SYSCALL_laccess_2 (int *err, const char *pathname, int mode) | |
547 { | |
548 (*err) = (38 /* ENOSYS */); | |
549 return 0; | |
550 } | |
551 | |
552 __extern_always_inline int | |
553 INTERNAL_SYSCALL_lchown_3 (int *err, const char *path, | |
554 __kernel_uid_t owner, __kernel_gid_t group) | |
555 { | |
556 (*err) = (38 /* ENOSYS */); | |
557 return 0; | |
558 } | |
559 | |
560 __extern_always_inline int | |
561 INTERNAL_SYSCALL_lchown32_3 (int *err, const char *path, | |
562 uid_t owner, gid_t group) | |
563 { | |
564 (*err) = (38 /* ENOSYS */); | |
565 return 0; | |
566 } | |
567 | |
568 __extern_always_inline int | |
569 INTERNAL_SYSCALL_link_2 (int *err, const char *oldpath, const char *newpath) | |
570 { | |
571 (*err) = (38 /* ENOSYS */); | |
572 return 0; | |
573 } | |
574 | |
575 __extern_always_inline int | |
576 INTERNAL_SYSCALL_linkat_5 (int *err, int olddfd, const char *oldname, | |
577 int newdfd, const char *newname, int flags) | |
578 { | |
579 (*err) = (38 /* ENOSYS */); | |
580 return 0; | |
581 } | |
582 | |
583 __extern_always_inline int | |
584 INTERNAL_SYSCALL_madvise_3 (int *err, void *addr, size_t length, int advice) | |
585 { | |
586 (*err) = (38 /* ENOSYS */); | |
587 return 0; | |
588 } | |
589 | |
590 __extern_always_inline int | |
591 INTERNAL_SYSCALL_mkdir_2 (int *err, const char *pathname, mode_t mode) | |
592 { | |
593 (*err) = (38 /* ENOSYS */); | |
594 return 0; | |
595 } | |
596 | |
597 __extern_always_inline int | |
598 INTERNAL_SYSCALL_mkdirat_3 (int *err, int dirfd, const char *pathname, | |
599 mode_t mode) | |
600 { | |
601 (*err) = (38 /* ENOSYS */); | |
602 return 0; | |
603 } | |
604 | |
605 __extern_always_inline int | |
606 INTERNAL_SYSCALL_mknod_3 (int *err, const char *pathname, | |
607 mode_t mode, dev_t dev) | |
608 { | |
609 (*err) = (38 /* ENOSYS */); | |
610 return 0; | |
611 } | |
612 | |
613 __extern_always_inline int | |
614 INTERNAL_SYSCALL_mknodat_4 (int *err, int dirfd, const char *pathname, | |
615 mode_t mode, dev_t dev) | |
616 { | |
617 (*err) = (38 /* ENOSYS */); | |
618 return 0; | |
619 } | |
620 | |
621 struct mq_attr; | |
622 __extern_always_inline int/*mqd_t*/ | |
623 INTERNAL_SYSCALL_mq_open_4 (int *err, const char *name, int oflag, mode_t mode, | |
624 struct mq_attr *attr) | |
625 { | |
626 (*err) = (38 /* ENOSYS */); | |
627 return 0; | |
628 } | |
629 | |
630 __extern_always_inline int | |
631 INTERNAL_SYSCALL_mq_notify_2 (int *err, int/*mqd_t*/ mqdes, | |
632 const struct sigevent *notification) | |
633 { | |
634 (*err) = (38 /* ENOSYS */); | |
635 return 0; | |
636 } | |
637 | |
638 __extern_always_inline int | |
639 INTERNAL_SYSCALL_mq_unlink_1 (int *err, const char *name) | |
640 { | |
641 (*err) = (38 /* ENOSYS */); | |
642 return 0; | |
643 } | |
644 | |
645 __extern_always_inline int | |
646 INTERNAL_SYSCALL_munmap_2 (int *err, void *addr, size_t length) | |
647 { | |
648 (*err) = __nacl_irt_munmap(addr, length); | |
649 return 0; | |
650 } | |
651 | |
652 __extern_always_inline int | |
653 INTERNAL_SYSCALL_poll_3 (int *err, struct pollfd *fds, nfds_t nfds, int timeout) | |
654 { | |
655 (*err) = (38 /* ENOSYS */); | |
656 return 0; | |
657 } | |
658 | |
659 __extern_always_inline int | |
660 INTERNAL_SYSCALL_ppoll_5 (int *err, struct pollfd *fds, nfds_t nfds, | |
661 const struct timespec *timeout, | |
662 const sigset_t *sigmask, size_t sigsetsize) | |
663 { | |
664 (*err) = (38 /* ENOSYS */); | |
665 return 0; | |
666 } | |
667 | |
668 __extern_always_inline long | |
669 INTERNAL_SYSCALL_ptrace_4 (int *err, enum __ptrace_request request, pid_t pid, | |
670 void *addr, void *data) | |
671 { | |
672 (*err) = (38 /* ENOSYS */); | |
673 return 0; | |
674 } | |
675 | |
676 __extern_always_inline int | |
677 INTERNAL_SYSCALL_putmsg_4 (int *err, int fildes, const struct strbuf *ctlptr, | |
678 const struct strbuf *dataptr, int flags) | |
679 { | |
680 (*err) = (38 /* ENOSYS */); | |
681 return 0; | |
682 } | |
683 | |
684 __extern_always_inline int | |
685 INTERNAL_SYSCALL_putpmsg_5 (int *err, int fildes, const struct strbuf *ctlptr, | |
686 const struct strbuf *dataptr, int band, int flags) | |
687 { | |
688 (*err) = (38 /* ENOSYS */); | |
689 return 0; | |
690 } | |
691 | |
692 __extern_always_inline int | |
693 INTERNAL_SYSCALL_readahead_4 (int *err, int fd, | |
694 __LONG_LONG_PAIR(long offset_high, | |
695 long offset_low), size_t count) | |
696 { | |
697 #if 0 | |
698 off64_t offset = ((off64_t)offset_high) << 32 | offset_low; | |
290 #endif | 699 #endif |
700 (*err) = (38 /* ENOSYS */); | |
701 return 0; | |
702 } | |
703 | |
704 __extern_always_inline ssize_t | |
705 INTERNAL_SYSCALL_readv_3 (int *err, int fd, const | |
706 struct iovec *iov, int iovcnt) | |
707 { | |
708 (*err) = (38 /* ENOSYS */); | |
709 return 0; | |
710 } | |
711 | |
712 __extern_always_inline ssize_t | |
713 INTERNAL_SYSCALL_readlink_3 (int *err, const char *path, | |
714 char *buf, size_t bufsiz) | |
715 { | |
716 (*err) = (38 /* ENOSYS */); | |
717 return 0; | |
718 } | |
719 | |
720 __extern_always_inline ssize_t | |
721 INTERNAL_SYSCALL_readlinkat_4 (int *err, int dirfd, const char *pathname, | |
722 char *buf, size_t bufsiz) | |
723 { | |
724 (*err) = (38 /* ENOSYS */); | |
725 return 0; | |
726 } | |
727 | |
728 __extern_always_inline int | |
729 INTERNAL_SYSCALL_reboot_4 (int *err, int magic1, int magic2, int cmd, void *arg) | |
730 { | |
731 (*err) = (38 /* ENOSYS */); | |
732 return 0; | |
733 } | |
734 | |
735 __extern_always_inline int | |
736 INTERNAL_SYSCALL_reboot_3 (int *err, int magic1, int magic2, int howto) | |
737 { | |
738 return INTERNAL_SYSCALL_reboot_4 (err, magic1, magic2, howto, NULL); | |
739 } | |
740 | |
741 __extern_always_inline int | |
742 INTERNAL_SYSCALL_rename_2 (int *err, const char *oldpath, const char *newpath) | |
743 { | |
744 (*err) = (38 /* ENOSYS */); | |
745 return 0; | |
746 } | |
747 | |
748 __extern_always_inline int | |
749 INTERNAL_SYSCALL_renameat_4 (int *err, int olddfd, const char *oldname, | |
750 int newdfd, const char *newname) | |
751 { | |
752 (*err) = (38 /* ENOSYS */); | |
753 return 0; | |
754 } | |
755 | |
756 __extern_always_inline int | |
757 INTERNAL_SYSCALL_rmdir_1 (int *err, const char *pathname) | |
758 { | |
759 (*err) = (38 /* ENOSYS */); | |
760 return 0; | |
761 } | |
762 | |
763 __extern_always_inline int | |
764 INTERNAL_SYSCALL_rt_sigpending_2(int *err, sigset_t *set, size_t sigsetsize) | |
765 { | |
766 (*err) = (38 /* ENOSYS */); | |
767 return 0; | |
768 } | |
769 | |
770 __extern_always_inline int | |
771 INTERNAL_SYSCALL_rt_sigprocmask_4 (int *err, int how, const sigset_t *set, | |
772 sigset_t *oldset, size_t sigsetsize) | |
773 { | |
774 (*err) = (38 /* ENOSYS */); | |
775 return 0; | |
776 } | |
777 | |
778 __extern_always_inline int | |
779 INTERNAL_SYSCALL_rt_sigqueueinfo_3 (int *err, pid_t pid, int sig, | |
780 siginfo_t *info) | |
781 { | |
782 (*err) = (38 /* ENOSYS */); | |
783 return 0; | |
784 } | |
785 | |
786 __extern_always_inline int | |
787 INTERNAL_SYSCALL_rt_sigsuspend_2 (int *err, const sigset_t *mask, | |
788 size_t sigsetsize) | |
789 { | |
790 (*err) = (38 /* ENOSYS */); | |
791 return 0; | |
792 } | |
793 | |
794 __extern_always_inline int | |
795 INTERNAL_SYSCALL_rt_sigtimedwait_4 (int *err, const sigset_t *set, | |
796 siginfo_t *info, | |
797 const struct timespec *timeout, | |
798 size_t sigsetsize) | |
799 { | |
800 (*err) = (38 /* ENOSYS */); | |
801 return 0; | |
802 } | |
803 | |
804 __extern_always_inline int | |
805 INTERNAL_SYSCALL_sched_getaffinity_3 (int *err, pid_t pid, size_t cpusetsize, | |
806 cpu_set_t *mask) | |
807 { | |
808 (*err) = (38 /* ENOSYS */); | |
809 return 0; | |
810 } | |
811 | |
812 __extern_always_inline int | |
813 INTERNAL_SYSCALL_sched_getparam_2 (int *err, pid_t pid, | |
814 struct sched_param *param) | |
815 { | |
816 (*err) = (38 /* ENOSYS */); | |
817 return 0; | |
818 } | |
819 | |
820 __extern_always_inline int | |
821 INTERNAL_SYSCALL_sched_get_priority_min_1 (int *err, int policy) | |
822 { | |
823 (*err) = (38 /* ENOSYS */); | |
824 return 0; | |
825 } | |
826 | |
827 __extern_always_inline int | |
828 INTERNAL_SYSCALL_sched_get_priority_max_1 (int *err, int policy) | |
829 { | |
830 (*err) = (38 /* ENOSYS */); | |
831 return 0; | |
832 } | |
833 | |
834 __extern_always_inline int | |
835 INTERNAL_SYSCALL_sched_getscheduler_1 (int *err, pid_t pid) | |
836 { | |
837 (*err) = (38 /* ENOSYS */); | |
838 return 0; | |
839 } | |
840 | |
841 __extern_always_inline int | |
842 INTERNAL_SYSCALL_sched_setaffinity_3 (int *err, pid_t pid, size_t cpusetsize, | |
843 const cpu_set_t *mask) | |
844 { | |
845 (*err) = (38 /* ENOSYS */); | |
846 return 0; | |
847 } | |
848 | |
849 __extern_always_inline int | |
850 INTERNAL_SYSCALL_sched_setparam_2 (int *err, pid_t pid, | |
851 struct sched_param *param) | |
852 { | |
853 (*err) = (38 /* ENOSYS */); | |
854 return 0; | |
855 } | |
856 | |
857 __extern_always_inline int | |
858 INTERNAL_SYSCALL_sched_setscheduler_3 (int *err, pid_t pid, int policy, | |
859 const struct sched_param *param) | |
860 { | |
861 (*err) = (38 /* ENOSYS */); | |
862 return 0; | |
863 } | |
864 | |
865 __extern_always_inline int | |
866 INTERNAL_SYSCALL_setfsgid_1 (int *err, __kernel_gid_t gid) | |
867 { | |
868 (*err) = (38 /* ENOSYS */); | |
869 return 0; | |
870 } | |
871 | |
872 __extern_always_inline int | |
873 INTERNAL_SYSCALL_setfsgid32_1 (int *err, gid_t gid) | |
874 { | |
875 (*err) = (38 /* ENOSYS */); | |
876 return 0; | |
877 } | |
878 | |
879 __extern_always_inline int | |
880 INTERNAL_SYSCALL_setfsuid_1 (int *err, __kernel_uid_t uid) | |
881 { | |
882 (*err) = (38 /* ENOSYS */); | |
883 return 0; | |
884 } | |
885 | |
886 __extern_always_inline int | |
887 INTERNAL_SYSCALL_setfsuid32_1 (int *err, uid_t uid) | |
888 { | |
889 (*err) = (38 /* ENOSYS */); | |
890 return 0; | |
891 } | |
892 | |
893 __extern_always_inline int | |
894 INTERNAL_SYSCALL_setgid_1 (int *err, __kernel_gid_t gid) | |
895 { | |
896 (*err) = (38 /* ENOSYS */); | |
897 return 0; | |
898 } | |
899 | |
900 __extern_always_inline int | |
901 INTERNAL_SYSCALL_setgid32_1 (int *err, gid_t gid) | |
902 { | |
903 (*err) = (38 /* ENOSYS */); | |
904 return 0; | |
905 } | |
906 | |
907 __extern_always_inline int | |
908 INTERNAL_SYSCALL_setgroups_2 (int *err, int size, const __kernel_gid_t *list) | |
909 { | |
910 (*err) = (38 /* ENOSYS */); | |
911 return 0; | |
912 } | |
913 | |
914 __extern_always_inline int | |
915 INTERNAL_SYSCALL_setgroups32_2 (int *err, int size, const gid_t *list) | |
916 { | |
917 (*err) = (38 /* ENOSYS */); | |
918 return 0; | |
919 } | |
920 | |
921 __extern_always_inline int | |
922 INTERNAL_SYSCALL_setpriority_3 (int *err, int which, int who, int prio) | |
923 { | |
924 (*err) = (38 /* ENOSYS */); | |
925 return 0; | |
926 } | |
927 | |
928 __extern_always_inline int | |
929 INTERNAL_SYSCALL_setregid_2 (int *err, __kernel_gid_t rgid, __kernel_gid_t egid) | |
930 { | |
931 (*err) = (38 /* ENOSYS */); | |
932 return 0; | |
933 } | |
934 | |
935 __extern_always_inline int | |
936 INTERNAL_SYSCALL_setregid32_2 (int *err, gid_t rgid, gid_t egid) | |
937 { | |
938 (*err) = (38 /* ENOSYS */); | |
939 return 0; | |
940 } | |
941 | |
942 __extern_always_inline int | |
943 INTERNAL_SYSCALL_setresgid_3 (int *err, __kernel_gid_t rgid, | |
944 __kernel_gid_t egid, __kernel_gid_t sgid) | |
945 { | |
946 (*err) = (38 /* ENOSYS */); | |
947 return 0; | |
948 } | |
949 | |
950 __extern_always_inline int | |
951 INTERNAL_SYSCALL_setresgid32_3 (int *err, gid_t rgid, gid_t egid, gid_t sgid) | |
952 { | |
953 (*err) = (38 /* ENOSYS */); | |
954 return 0; | |
955 } | |
956 | |
957 __extern_always_inline int | |
958 INTERNAL_SYSCALL_setresuid_3 (int *err, __kernel_uid_t ruid, | |
959 __kernel_uid_t euid, __kernel_uid_t suid) | |
960 { | |
961 (*err) = (38 /* ENOSYS */); | |
962 return 0; | |
963 } | |
964 | |
965 __extern_always_inline int | |
966 INTERNAL_SYSCALL_setresuid32_3 (int *err, uid_t ruid, uid_t euid, uid_t suid) | |
967 { | |
968 (*err) = (38 /* ENOSYS */); | |
969 return 0; | |
970 } | |
971 | |
972 __extern_always_inline int | |
973 INTERNAL_SYSCALL_setreuid_2 (int *err, __kernel_uid_t ruid, __kernel_uid_t euid) | |
974 { | |
975 (*err) = (38 /* ENOSYS */); | |
976 return 0; | |
977 } | |
978 | |
979 __extern_always_inline int | |
980 INTERNAL_SYSCALL_setreuid32_2 (int *err, uid_t ruid, uid_t euid) | |
981 { | |
982 (*err) = (38 /* ENOSYS */); | |
983 return 0; | |
984 } | |
985 | |
986 __extern_always_inline int | |
987 INTERNAL_SYSCALL_set_robust_list_2 (int *err, struct robust_list_head *head, | |
988 size_t len) | |
989 { | |
990 (*err) = (38 /* ENOSYS */); | |
991 return 0; | |
992 } | |
993 | |
994 __extern_always_inline int | |
995 INTERNAL_SYSCALL_setuid_1 (int *err, __kernel_uid_t uid) | |
996 { | |
997 (*err) = (38 /* ENOSYS */); | |
998 return 0; | |
999 } | |
1000 | |
1001 __extern_always_inline int | |
1002 INTERNAL_SYSCALL_setuid32_1 (int *err, uid_t uid) | |
1003 { | |
1004 (*err) = (38 /* ENOSYS */); | |
1005 return 0; | |
1006 } | |
1007 | |
1008 __extern_always_inline int | |
1009 INTERNAL_SYSCALL_signalfd4_4 (int *err, int fd, const sigset_t *mask, | |
1010 size_t sigsetsize, int flags) | |
1011 { | |
1012 (*err) = (38 /* ENOSYS */); | |
1013 return 0; | |
1014 } | |
1015 | |
1016 __extern_always_inline int | |
1017 INTERNAL_SYSCALL_signalfd_3 (int *err, int fd, const sigset_t *mask, | |
1018 size_t sigsetsize) | |
1019 { | |
1020 return INTERNAL_SYSCALL_signalfd4_4 (err, fd, mask, sigsetsize, 0); | |
1021 } | |
1022 | |
1023 __extern_always_inline int | |
1024 INTERNAL_SYSCALL_symlink_2 (int *err, const char *oldpath, const char *newpath) | |
1025 { | |
1026 (*err) = (38 /* ENOSYS */); | |
1027 return 0; | |
1028 } | |
1029 | |
1030 __extern_always_inline int | |
1031 INTERNAL_SYSCALL_symlinkat_3 (int *err, const char *oldpath, | |
1032 int newdirfd, const char *newpath) | |
1033 { | |
1034 (*err) = (38 /* ENOSYS */); | |
1035 return 0; | |
1036 } | |
1037 | |
1038 __extern_always_inline int | |
1039 INTERNAL_SYSCALL_sync_file_range_6 (int *err, int fd, | |
1040 __LONG_LONG_PAIR(long offset_high, | |
1041 long offset_low), | |
1042 __LONG_LONG_PAIR(long nbytes_high, | |
1043 long nbytes_low), | |
1044 unsigned int flags) | |
1045 { | |
1046 #if 0 | |
1047 off64_t offset = ((off64_t)offset_high) << 32 | offset_low; | |
1048 off64_t nbytes = ((off64_t)nbytes_high) << 32 | nbytes_low; | |
1049 #endif | |
1050 (*err) = (38 /* ENOSYS */); | |
1051 return 0; | |
1052 } | |
1053 | |
1054 __extern_always_inline int | |
1055 INTERNAL_SYSCALL__sysctl_1 (int *err, struct __sysctl_args *args) | |
1056 { | |
1057 (*err) = (38 /* ENOSYS */); | |
1058 return 0; | |
1059 } | |
1060 | |
1061 __extern_always_inline int | |
1062 INTERNAL_SYSCALL_tgkill_3 (int *err, gid_t tgid, pid_t tid, int sig) | |
1063 { | |
1064 (*err) = (38 /* ENOSYS */); | |
1065 return 0; | |
1066 } | |
1067 | |
1068 __extern_always_inline int | |
1069 INTERNAL_SYSCALL_timer_create_3 (int *err, clockid_t clockid, | |
1070 struct sigevent *evp, | |
1071 __kernel_timer_t *timerid) | |
1072 { | |
1073 (*err) = (38 /* ENOSYS */); | |
1074 return 0; | |
1075 } | |
1076 | |
1077 __extern_always_inline int | |
1078 INTERNAL_SYSCALL_timer_delete_1 (int *err, __kernel_timer_t timerid) | |
1079 { | |
1080 (*err) = (38 /* ENOSYS */); | |
1081 return 0; | |
1082 } | |
1083 | |
1084 __extern_always_inline int | |
1085 INTERNAL_SYSCALL_timer_getoverrun_1 (int *err, __kernel_timer_t timerid) | |
1086 { | |
1087 (*err) = (38 /* ENOSYS */); | |
1088 return 0; | |
1089 } | |
1090 | |
1091 __extern_always_inline int | |
1092 INTERNAL_SYSCALL_timer_gettime_2 (int *err, __kernel_timer_t timerid, | |
1093 struct itimerspec *curr_value) | |
1094 { | |
1095 (*err) = (38 /* ENOSYS */); | |
1096 return 0; | |
1097 } | |
1098 | |
1099 __extern_always_inline int | |
1100 INTERNAL_SYSCALL_timer_settime_4 (int *err, __kernel_timer_t timerid, int flags, | |
1101 const struct itimerspec *new_value, | |
1102 struct itimerspec * old_value) | |
1103 { | |
1104 (*err) = (38 /* ENOSYS */); | |
1105 return 0; | |
1106 } | |
1107 | |
1108 __extern_always_inline clock_t | |
1109 INTERNAL_SYSCALL_times_1 (int *err, struct tms *buf) | |
1110 { | |
1111 (*err) = (38 /* ENOSYS */); | |
1112 return 0; | |
1113 } | |
1114 | |
1115 __extern_always_inline int | |
1116 INTERNAL_SYSCALL_tkill_2 (int *err, pid_t tid, int sig) | |
1117 { | |
1118 (*err) = (38 /* ENOSYS */); | |
1119 return 0; | |
1120 } | |
1121 | |
1122 __extern_always_inline int | |
1123 INTERNAL_SYSCALL_unlink_1 (int *err, const char *pathname) | |
1124 { | |
1125 (*err) = (38 /* ENOSYS */); | |
1126 return 0; | |
1127 } | |
1128 | |
1129 __extern_always_inline int | |
1130 INTERNAL_SYSCALL_unlinkat_3 (int *err, int dirfd, const char *pathname, | |
1131 int flags) | |
1132 { | |
1133 (*err) = (38 /* ENOSYS */); | |
1134 return 0; | |
1135 } | |
1136 | |
1137 __extern_always_inline int | |
1138 INTERNAL_SYSCALL_ustat_2 (int *err, dev_t dev, struct ustat *ubuf) | |
1139 { | |
1140 (*err) = (38 /* ENOSYS */); | |
1141 return 0; | |
1142 } | |
1143 | |
1144 __extern_always_inline int | |
1145 INTERNAL_SYSCALL_utime_2 (int *err, const char *filename, | |
1146 const struct utimbuf *times) | |
1147 { | |
1148 (*err) = (38 /* ENOSYS */); | |
1149 return 0; | |
1150 } | |
1151 | |
1152 __extern_always_inline int | |
1153 INTERNAL_SYSCALL_utimes_2 (int *err, const char *filename, | |
1154 const struct timeval times[2]) | |
1155 { | |
1156 (*err) = (38 /* ENOSYS */); | |
1157 return 0; | |
1158 } | |
1159 | |
1160 __extern_always_inline int | |
1161 INTERNAL_SYSCALL_utimensat_4 (int *err, int dirfd, const char *pathname, | |
1162 const struct timespec times[2], int flags) | |
1163 { | |
1164 (*err) = (38 /* ENOSYS */); | |
1165 return 0; | |
1166 } | |
1167 | |
1168 __extern_always_inline pid_t | |
1169 INTERNAL_SYSCALL_wait3_3 (int *err, int *status, int options, | |
1170 struct rusage *rusage) | |
1171 { | |
1172 (*err) = (38 /* ENOSYS */); | |
1173 return 0; | |
1174 } | |
1175 | |
1176 __extern_always_inline pid_t | |
1177 INTERNAL_SYSCALL_wait4_4 (int *err, pid_t pid, int *status, int options, | |
1178 struct rusage *rusage) | |
1179 { | |
1180 (*err) = (38 /* ENOSYS */); | |
1181 return 0; | |
1182 } | |
1183 | |
1184 __extern_always_inline ssize_t | |
1185 INTERNAL_SYSCALL_write_3 (int *err, int fd, const void *buf, size_t count) | |
1186 { | |
1187 size_t nwrote; | |
1188 (*err) = __nacl_irt_write (fd, buf, count, &nwrote); | |
1189 return nwrote; | |
1190 } | |
1191 | |
1192 __extern_always_inline ssize_t | |
1193 INTERNAL_SYSCALL_writev_3 (int *err, int fd, const | |
1194 struct iovec *iov, int iovcnt) | |
1195 { | |
1196 (*err) = (38 /* ENOSYS */); | |
1197 return 0; | |
1198 } | |
1199 #endif | |
291 | 1200 |
292 #include_next <sysdep.h> | 1201 #include_next <sysdep.h> |
293 | 1202 |
1203 #if !defined(__ASSEMBLER__) && \ | |
1204 defined(THREAD_SELF) && defined(CLOCK_IDFIELD_SIZE) | |
1205 #include <tls.h> | |
1206 | |
1207 /* We don't support redefinition of this function. We always use 30 bits of the | |
1208 address of pthread structure as TID. */ | |
1209 __extern_always_inline pid_t | |
1210 INTERNAL_SYSCALL_gettid_0 (int *err) | |
1211 { | |
1212 (*err) = 0; | |
1213 /* Native Client does not have a notion of a thread ID, so we make | |
1214 one up. This must be small enough to leave space for number | |
1215 identifying the clock. Use CLOCK_IDFIELD_SIZE to guarantee | |
1216 that. */ | |
1217 return ((unsigned int) THREAD_SELF) >> CLOCK_IDFIELD_SIZE; | |
1218 } | |
1219 | |
1220 /* We can not return error code - this function is not supposed to fail. | |
1221 It should return pid (which is equal to tid for the main process). | |
1222 It's only ever called from main process so we just return TID. */ | |
1223 __extern_always_inline int | |
1224 INTERNAL_SYSCALL_set_tid_address_1 (int *err, volatile int *tidptr) | |
1225 { | |
1226 return INTERNAL_SYSCALL_gettid_0 (err); | |
1227 } | |
1228 #endif | |
1229 | |
1230 #undef INTERNAL_SYSCALL_DECL | |
1231 #define INTERNAL_SYSCALL_DECL(err) int err | |
1232 | |
1233 #undef INTERNAL_SYSCALL_ERRNO | |
1234 #define INTERNAL_SYSCALL_ERRNO(val, err) err | |
pasko-google - do not use
2011/09/02 16:25:24
(err)
khim
2011/09/02 16:36:09
Done.
| |
1235 | |
1236 #undef INTERNAL_SYSCALL_ERROR_P | |
1237 #define INTERNAL_SYSCALL_ERROR_P(val, err) err | |
pasko-google - do not use
2011/09/02 16:25:24
(err)
khim
2011/09/02 16:36:09
Done.
| |
1238 | |
1239 /* Define a macro which expands inline into the wrapper code for a IRT | |
1240 call. */ | |
1241 # undef INLINE_SYSCALL | |
1242 # define INLINE_SYSCALL(name, nr, args...) \ | |
1243 ({ \ | |
1244 INTERNAL_SYSCALL_DECL (err); \ | |
1245 unsigned long int resultvar = INTERNAL_SYSCALL (name, err, nr , ## args); \ | |
1246 if (__builtin_expect (err, 0)) \ | |
1247 { \ | |
1248 __set_errno (err); \ | |
1249 resultvar = (unsigned long int) -1; \ | |
1250 } \ | |
1251 (long int) resultvar; }) | |
1252 | |
1253 #undef INTERNAL_VSYSCALL | |
1254 #define INTERNAL_VSYSCALL INTERNAL_SYSCALL | |
1255 | |
294 #undef __NR_fallocate | 1256 #undef __NR_fallocate |
295 #undef __NR_pselect6 | 1257 #undef __NR_pselect6 |
296 #undef __NR_rt_sigaction | 1258 #undef __NR_rt_sigaction |
297 | 1259 |
298 #ifndef __x86_64__ | 1260 #ifndef __x86_64__ |
299 #undef PSEUDO | 1261 #undef PSEUDO |
300 #define PSEUDO(name, syscall_name, args) \ | 1262 #define PSEUDO(name, syscall_name, args) \ |
301 .text; \ | 1263 .text; \ |
302 ENTRY (name) \ | 1264 ENTRY (name) \ |
303 mov $-38, %eax; \ | 1265 mov $-38, %eax; \ |
304 L(pseudo_end): \ | 1266 L(pseudo_end): \ |
305 NACLRET | 1267 NACLRET |
306 | 1268 |
307 #undef PSEUDO_END | 1269 #undef PSEUDO_END |
308 #define PSEUDO_END(name) \ | 1270 #define PSEUDO_END(name) \ |
309 SYSCALL_ERROR_HANDLER \ | 1271 SYSCALL_ERROR_HANDLER \ |
310 END (name) | 1272 END (name) |
311 | 1273 |
312 #undef PSEUDO_NOERRNO | 1274 #undef PSEUDO_NOERRNO |
313 #define PSEUDO_NOERRNO(name, syscall_name, args)\ | 1275 #define PSEUDO_NOERRNO(name, syscall_name, args)\ |
314 .text; \ | 1276 .text; \ |
315 ENTRY (name) \ | 1277 ENTRY (name) \ |
316 mov $-38, %eax | 1278 mov $-38, %eax |
317 | 1279 |
318 #undef PSEUDO_END_NOERRNO | 1280 #undef PSEUDO_END_NOERRNO |
319 #define PSEUDO_END_NOERRNO(name) \ | 1281 #define PSEUDO_END_NOERRNO(name) \ |
320 END (name) | 1282 END (name) |
321 | 1283 |
1284 #undef ret_NOERRNO | |
322 #define ret_NOERRNO NACLRET | 1285 #define ret_NOERRNO NACLRET |
323 | 1286 |
324 /* The function has to return the error code. */ | 1287 /* The function has to return the error code. */ |
325 #undef PSEUDO_ERRVAL | 1288 #undef PSEUDO_ERRVAL |
326 #define PSEUDO_ERRVAL(name, syscall_name, args) \ | 1289 #define PSEUDO_ERRVAL(name, syscall_name, args) \ |
327 .text; \ | 1290 .text; \ |
328 ENTRY (name) \ | 1291 ENTRY (name) \ |
329 mov $38, %eax | 1292 mov $38, %eax |
330 | 1293 |
331 #undef PSEUDO_END_ERRVAL | 1294 #undef PSEUDO_END_ERRVAL |
332 #define PSEUDO_END_ERRVAL(name) \ | 1295 #define PSEUDO_END_ERRVAL(name) \ |
333 END (name) | 1296 END (name) |
334 | 1297 |
335 #undef SYSCALL_ERROR_HANDLER_TLS_STORE | 1298 #undef SYSCALL_ERROR_HANDLER_TLS_STORE |
336 #define SYSCALL_ERROR_HANDLER_TLS_STORE(src, destoff) \ | 1299 #define SYSCALL_ERROR_HANDLER_TLS_STORE(src, destoff) \ |
337 movl %gs:0, %eax; \ | 1300 movl %gs:0, %eax; \ |
338 movl src, (%eax,destoff) | 1301 movl src, (%eax,destoff) |
339 | 1302 |
340 #endif | 1303 #endif |
341 #endif | 1304 #endif |
OLD | NEW |