fork: generate stub on no-MMU systems
[uclibc-ng.git] / libc / sysdeps / linux / common / stubs.c
blob634dcde0dc16fcf7b2f19b727a27ae0c4feaa813
1 /*
2 * system call not available stub
4 * Copyright (C) 2009 Analog Devices Inc.
6 * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
7 */
9 /* Please keep the list sorted alphabetically, in ascending order
10 * of the stub name! */
12 #include <errno.h>
13 #include <bits/wordsize.h>
14 #include <sys/syscall.h>
16 #ifdef __UCLIBC_HAS_STUBS__
18 __attribute_used__ static int enosys_stub(void)
20 __set_errno(ENOSYS);
21 return -1;
24 __attribute_used__ static int ret_enosys_stub(void)
26 return ENOSYS;
29 #define make_stub(stub) \
30 link_warning(stub, #stub ": this function is not implemented") \
31 strong_alias(enosys_stub, stub)
33 #define make_ret_stub(stub) \
34 link_warning(stub, #stub ": this function is not implemented") \
35 strong_alias(ret_enosys_stub, stub)
37 #ifdef __arm__
38 # define __NR_fadvise64_64 __NR_arm_fadvise64_64
39 # define __NR_fadvise64 __NR_arm_fadvise64_64
40 /* ARM always provides funcs w/out syscalls; disable the stubs */
41 # define __NR_ioperm 0
42 # define __NR_iopl 0
43 #endif
45 #ifdef __mips__
46 # define __NR_fadvise64_64 __NR_fadvise64
47 #endif
49 #ifdef __xtensa__
50 # define __NR_fadvise64 __NR_fadvise64_64
51 #endif
53 #if !defined __NR_accept && !defined __NR_socketcall && defined __UCLIBC_HAS_SOCKET__
54 make_stub(accept)
55 #endif
57 #if !defined __NR_accept4 && !defined __NR_socketcall && defined __UCLIBC_HAS_SOCKET__ && defined __UCLIBC_LINUX_SPECIFIC__
58 make_stub(accept4)
59 #endif
61 #if !defined __NR_arch_prctl && defined __UCLIBC_LINUX_SPECIFIC__
62 make_stub(arch_prctl)
63 #endif
65 #if !defined __NR_bdflush && defined __UCLIBC_LINUX_SPECIFIC__
66 make_stub(bdflush)
67 #endif
69 #if !defined __NR_bind && !defined __NR_socketcall && defined __UCLIBC_HAS_SOCKET__
70 make_stub(bind)
71 #endif
73 #if !defined __NR_capget && defined __UCLIBC_LINUX_SPECIFIC__
74 make_stub(capget)
75 #endif
77 #if !defined __NR_capset && defined __UCLIBC_LINUX_SPECIFIC__
78 make_stub(capset)
79 #endif
81 #if !defined __NR_connect && !defined __NR_socketcall && defined __UCLIBC_HAS_SOCKET__
82 make_stub(connect)
83 #endif
85 #if !defined __NR_epoll_create && defined __UCLIBC_HAS_EPOLL__ \
86 && !defined __NR_epoll_create1
87 make_stub(epoll_create)
88 #endif
90 #if !defined __NR_epoll_ctl && defined __UCLIBC_HAS_EPOLL__
91 make_stub(epoll_ctl)
92 #endif
94 #if !defined __NR_epoll_pwait && defined __UCLIBC_HAS_EPOLL__
95 make_stub(epoll_pwait)
96 #endif
98 #if !defined __NR_epoll_wait && defined __UCLIBC_HAS_EPOLL__ \
99 && !defined __NR_epoll_pwait
100 make_stub(epoll_wait)
101 #endif
103 #if !defined __NR_eventfd && !defined __NR_eventfd2 && defined __UCLIBC_LINUX_SPECIFIC__
104 make_stub(eventfd)
105 #endif
107 #if !defined __NR_fdatasync && !defined __NR_osf_fdatasync
108 make_stub(fdatasync)
109 #endif
111 #ifndef __NR_fgetxattr
112 make_stub(fgetxattr)
113 #endif
115 #ifndef __NR_flistxattr
116 make_stub(flistxattr)
117 #endif
119 #if !defined __ARCH_USE_MMU__ || (!defined __NR_fork && !defined __NR_clone)
120 make_stub(fork)
121 #endif
123 #ifndef __NR_fremovexattr
124 make_stub(fremovexattr)
125 #endif
127 #ifndef __NR_fsetxattr
128 make_stub(fsetxattr)
129 #endif
131 #if !defined __NR_fstatfs && !defined __NR_fstatfs64 \
132 && defined __UCLIBC_LINUX_SPECIFIC__
133 make_stub(fstatfs)
134 #endif
136 #ifndef __NR_get_kernel_syms
137 make_stub(get_kernel_syms)
138 #endif
140 #if !defined __NR_getpeername && !defined __NR_socketcall && defined __UCLIBC_HAS_SOCKET__
141 make_stub(getpeername)
142 #endif
144 #if !defined __NR_getpgrp && !defined __NR_getpgid
145 make_stub(getpgrp)
146 #endif
148 #if !defined __NR_getrandom && defined __UCLIBC_LINUX_SPECIFIC__
149 make_stub(getrandom)
150 #endif
152 #if !defined __NR_getsockname && !defined __NR_socketcall && defined __UCLIBC_HAS_SOCKET__
153 make_stub(getsockname)
154 #endif
156 #if !defined __NR_getsockopt && !defined __NR_socketcall && defined __UCLIBC_HAS_SOCKET__
157 make_stub(getsockopt)
158 #endif
160 #ifndef __NR_getxattr
161 make_stub(getxattr)
162 #endif
164 #if !defined __NR_inotify_add_watch && defined __UCLIBC_LINUX_SPECIFIC__
165 make_stub(inotify_add_watch)
166 #endif
168 #if !defined __NR_inotify_init && defined __UCLIBC_LINUX_SPECIFIC__ \
169 && !defined __NR_inotify_init1
170 make_stub(inotify_init)
171 #endif
173 #if !defined __NR_inotify_init1 && defined __UCLIBC_LINUX_SPECIFIC__
174 make_stub(inotify_init1)
175 #endif
177 #if !defined __NR_inotify_rm_watch && defined __UCLIBC_LINUX_SPECIFIC__
178 make_stub(inotify_rm_watch)
179 #endif
181 #if !defined __NR_ioperm && defined __UCLIBC_LINUX_SPECIFIC__
182 make_stub(ioperm)
183 #endif
185 #if !defined __NR_iopl && defined __UCLIBC_LINUX_SPECIFIC__
186 make_stub(iopl)
187 #endif
189 #ifndef __NR_lgetxattr
190 make_stub(lgetxattr)
191 #endif
193 #if !defined __NR_listen && !defined __NR_socketcall && defined __UCLIBC_HAS_SOCKET__
194 make_stub(listen)
195 #endif
197 #ifndef __NR_listxattr
198 make_stub(listxattr)
199 #endif
201 #ifndef __NR_llistxattr
202 make_stub(llistxattr)
203 #endif
205 #ifndef __NR_lremovexattr
206 make_stub(lremovexattr)
207 #endif
209 #ifndef __NR_lsetxattr
210 make_stub(lsetxattr)
211 #endif
213 #if !defined __NR_madvise && defined __UCLIBC_LINUX_SPECIFIC__
214 make_stub(madvise)
215 #endif
217 #if !defined __NR_modify_ldt && defined __UCLIBC_LINUX_SPECIFIC__
218 make_stub(modify_ldt)
219 #endif
221 #ifndef __NR_openat
222 make_stub(openat)
223 make_stub(openat64)
224 #endif
226 #if !defined __NR_personality && defined __UCLIBC_LINUX_SPECIFIC__
227 make_stub(personality)
228 #endif
230 #if !defined __NR_pipe2 && defined __UCLIBC_LINUX_SPECIFIC__
231 make_stub(pipe2)
232 #endif
234 #if !defined __NR_pivot_root && defined __UCLIBC_LINUX_SPECIFIC__
235 make_stub(pivot_root)
236 #endif
238 #if !defined __NR_fadvise64
239 make_ret_stub(posix_fadvise)
240 #endif
242 #if !defined __NR_fadvise64_64 && __WORDSIZE == 32
243 make_ret_stub(posix_fadvise64)
244 #endif
246 #ifndef __NR_madvise
247 make_ret_stub(posix_madvise)
248 #endif
250 #if !defined __NR_ppoll && defined __UCLIBC_LINUX_SPECIFIC__
251 make_stub(ppoll)
252 #endif
254 #if !defined __NR_prctl && defined __UCLIBC_LINUX_SPECIFIC__
255 make_stub(prctl)
256 #endif
258 #if !defined __NR_readahead && defined __UCLIBC_LINUX_SPECIFIC__
259 make_stub(readahead)
260 #endif
262 #if !defined __NR_reboot && defined __UCLIBC_LINUX_SPECIFIC__
263 make_stub(reboot)
264 #endif
266 #if !defined __NR_recv && !defined __NR_socketcall && !defined __NR_recvfrom && defined __UCLIBC_HAS_SOCKET__
267 make_stub(recv)
268 #endif
270 #if !defined __NR_recvfrom && !defined __NR_socketcall && defined __UCLIBC_HAS_SOCKET__
271 make_stub(recvfrom)
272 #endif
274 #if !defined __NR_recvmsg && !defined __NR_socketcall && defined __UCLIBC_HAS_SOCKET__
275 make_stub(recvmsg)
276 #endif
278 #if !defined __NR_remap_file_pages && defined __UCLIBC_LINUX_SPECIFIC__
279 make_stub(remap_file_pages)
280 #endif
282 #ifndef __NR_removexattr
283 make_stub(removexattr)
284 #endif
286 #ifndef __NR_renameat
287 make_stub(renameat)
288 #endif
290 #if !defined __NR_sched_getaffinity && defined __UCLIBC_LINUX_SPECIFIC__
291 make_stub(sched_getaffinity)
292 #endif
294 #if !defined __NR_getcpu && defined __UCLIBC_LINUX_SPECIFIC__ && ((defined __x86_64__ && !defined __UCLIBC_HAS_TLS__) || !defined __x86_64__)
295 make_stub(sched_getcpu)
296 #endif
298 #if !defined __NR_sched_setaffinity && defined __UCLIBC_LINUX_SPECIFIC__
299 make_stub(sched_setaffinity)
300 #endif
302 #if !defined __NR_send && !defined __NR_socketcall && !defined __NR_sendto && defined __UCLIBC_HAS_SOCKET__
303 make_stub(send)
304 #endif
306 #if !defined __NR_sendfile && !defined __NR_sendfile64 \
307 && defined __UCLIBC_LINUX_SPECIFIC__
308 make_stub(sendfile)
309 #endif
311 #if !defined __NR_sendfile64 && !defined __NR_sendfile && defined __UCLIBC_LINUX_SPECIFIC__
312 make_stub(sendfile64)
313 #endif
315 #if !defined __NR_sendmsg && !defined __NR_socketcall && defined __UCLIBC_HAS_SOCKET__
316 make_stub(sendmsg)
317 #endif
319 #if !defined __NR_sendto && !defined __NR_socketcall && defined __UCLIBC_HAS_SOCKET__
320 make_stub(sendto)
321 #endif
323 #if ((__WORDSIZE == 32 && (!defined __NR_setfsgid32 && !defined __NR_setfsgid)) || (__WORDSIZE == 64 && !defined __NR_setfsgid)) && defined __UCLIBC_LINUX_SPECIFIC__
324 make_stub(setfsgid)
325 #endif
327 #if ((__WORDSIZE == 32 && (!defined __NR_setfsuid32 && !defined __NR_setfsuid)) || (__WORDSIZE == 64 && !defined __NR_setfsuid)) && defined __UCLIBC_LINUX_SPECIFIC__
328 make_stub(setfsuid)
329 #endif
331 #if !defined __NR_setns && defined __UCLIBC_LINUX_SPECIFIC__
332 make_stub(setns)
333 #endif
335 #if !defined __NR_setresgid32 && !defined __NR_setresgid && defined __UCLIBC_LINUX_SPECIFIC__
336 make_stub(setresgid)
337 #endif
339 #if !defined __NR_setresuid32 && !defined __NR_setresuid && defined __UCLIBC_LINUX_SPECIFIC__
340 make_stub(setresuid)
341 #endif
343 #if !defined __NR_setsockopt && !defined __NR_socketcall && defined __UCLIBC_HAS_SOCKET__
344 make_stub(setsockopt)
345 #endif
347 #ifndef __NR_setxattr
348 make_stub(setxattr)
349 #endif
351 #if !defined __NR_shutdown && !defined __NR_socketcall && defined __UCLIBC_HAS_SOCKET__
352 make_stub(shutdown)
353 #endif
355 #if !defined __NR_signalfd4 && !defined __NR_signalfd && defined __UCLIBC_LINUX_SPECIFIC__
356 make_stub(signalfd)
357 #endif
359 #ifndef __NR_rt_sigtimedwait
360 make_stub(sigtimedwait)
361 make_stub(sigwaitinfo)
362 #endif
364 #ifndef __NR_rt_sigqueueinfo
365 make_stub(sigqueue)
366 #endif
368 #if !defined __NR_socket && !defined __NR_socketcall && defined __UCLIBC_HAS_SOCKET__
369 make_stub(socket)
370 #endif
372 #if !defined __NR_socketcall && defined __UCLIBC_HAS_SOCKET__
373 make_stub(socketcall)
374 #endif
376 #if !defined __NR_socketpair && !defined __NR_socketcall && defined __UCLIBC_HAS_SOCKET__
377 make_stub(socketpair)
378 #endif
380 #if !defined __NR_stime && !defined __NR_settimeofday
381 make_stub(stime)
382 make_stub(settimeofday)
383 #endif
385 #if !defined __NR_splice && defined __UCLIBC_LINUX_SPECIFIC__
386 make_stub(splice)
387 #endif
389 #if !defined __NR_swapoff && defined __UCLIBC_LINUX_SPECIFIC__
390 make_stub(swapoff)
391 #endif
393 #if !defined __NR_swapon && defined __UCLIBC_LINUX_SPECIFIC__
394 make_stub(swapon)
395 #endif
397 #if !defined __NR_symlink && !defined __NR_symlinkat
398 make_stub(symlink)
399 #endif
401 #if !defined __NR_sync_file_range && defined __UCLIBC_LINUX_SPECIFIC__
402 make_stub(sync_file_range)
403 #endif
405 #if !defined __NR__sysctl && defined __UCLIBC_LINUX_SPECIFIC__
406 make_stub(_sysctl)
407 #endif
409 #if !defined __NR_sysinfo && defined __UCLIBC_LINUX_SPECIFIC__
410 make_stub(sysinfo)
411 #endif
413 #if !defined __NR_tee && defined __UCLIBC_LINUX_SPECIFIC__
414 make_stub(tee)
415 #endif
417 #if !defined __NR_timerfd_create && defined __UCLIBC_LINUX_SPECIFIC__
418 make_stub(timerfd_create)
419 #endif
421 #if !defined __NR_timerfd_settime && defined __UCLIBC_LINUX_SPECIFIC__
422 make_stub(timerfd_settime)
423 #endif
425 #if !defined __NR_timerfd_gettime && defined __UCLIBC_LINUX_SPECIFIC__
426 make_stub(timerfd_gettime)
427 #endif
429 #ifndef __NR_utimensat
430 make_stub(futimens)
431 make_stub(utimensat)
432 # ifndef __NR_lutimes
433 make_stub(lutimes)
434 # endif
435 #endif
437 #ifndef __NR_utimensat
438 #if !defined __NR_utime && !defined __NR_utimes
439 /*make_stub(utime) obsoleted */
440 make_stub(utimes)
441 #endif
442 #endif
444 #if !defined __NR_umount && !defined __NR_umount2 && defined __UCLIBC_LINUX_SPECIFIC__
445 make_stub(umount)
446 #endif
448 #if !defined __NR_umount2 && defined __UCLIBC_LINUX_SPECIFIC__
449 make_stub(umount2)
450 #endif
452 #if !defined __NR_unshare && defined __UCLIBC_LINUX_SPECIFIC__
453 make_stub(unshare)
454 #endif
456 #if defined __UCLIBC_SV4_DEPRECATED__ && !defined __NR_ustat
457 make_stub(ustat)
458 #endif
460 #if !defined __NR_vhangup && defined __UCLIBC_LINUX_SPECIFIC__
461 make_stub(vhangup)
462 #endif
464 #if !defined __NR_vmsplice && defined __UCLIBC_LINUX_SPECIFIC__
465 make_stub(vmsplice)
466 #endif
468 #endif