1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19: #include <ctype.h>
20: #include <fnmatch.h>
21: #include <stdio.h>
22: #include <stdlib.h>
23: #include <string.h>
24: #include <unistd.h>
25: #include <signal.h>
26: #include <sys/wait.h>
27:
28: #define HEADER_MAX 256
29:
30: static const char *macrofile;
31:
32:
33: static const char *const aio_syms[] =
34: {
35: "AIO_ALLDONE", "AIO_CANCELED", "AIO_NOTCANCELED", "LIO_NOP", "LIO_NOWAIT",
36: "LIO_READ", "LIO_WAIT", "LIO_WRITE",
37:
38: "FD_CLOEXEC", "F_DUPFD", "F_GETFD", "F_GETFL", "F_GETLK", "F_RDLCK",
39: "F_SETFD", "F_SETFL", "F_SETLK", "F_SETLKW", "F_UNLCK", "F_WRLCK",
40: "O_ACCMODE", "O_APPEND", "O_CREAT", "O_DSYNC", "O_EXCL", "O_NOCTTY",
41: "O_NONBLOCK", "O_RDONLY", "O_RDWR", "O_RSYNC", "O_SYNC", "O_TRUNC",
42: "O_WRONLY",
43:
44: "SA_NOCLDSTOP", "SA_SIGINFO", "SIGABRT", "SIGALRM", "SIGBUS", "SIGCHLD",
45: "SIGCONT", "SIGEV_NONE", "SIGEV_SIGNAL", "SIGEV_SIGNAL", "SIGEV_THREAD",
46: "SIGFPE", "SIGHUP", "SIGILL", "SIGINT", "SIGKILL", "SIGPIPE", "SIGQUIT",
47: "SIGRTMAX", "SIGRTMIN", "SIGSEGV", "SIGSTOP", "SIGTERM", "SIGTSTP",
48: "SIGTTIN", "SIGTTOU", "SIGUSR1", "SIGUSR2", "SIG_BLOCK", "SIG_DFL",
49: "SIG_ERR", "SIG_IGN", "SIG_SETMASK", "SIG_UNBLOCK", "SI_ASYNCIO",
50: "SI_MESGQ", "SI_QUEUE", "SI_TIMER", "SI_USER"
51: };
52: static const char *const aio_maybe[] =
53: {
54: "aio_cancel", "aio_error", "aio_fsync", "aio_read", "aio_return",
55: "aio_suspend", "aio_write", "lio_listio",
56:
57: "creat", "fcntl", "open", "SEEK_CUR", "SEEK_END", "SEEK_SET", "S_IRGRP",
58: "S_IROTH", "S_IRUSR", "S_IRWXG", "S_IRWXO", "S_IRWXU", "S_ISBLK",
59: "S_ISCHR", "S_ISDIR", "S_ISFIFO", "S_ISGID", "S_ISREG", "S_ISUID",
60: "S_IWGRP", "S_IWOTH", "S_IWUSR", "S_IXGRP", "S_IXOTH", "S_IXUSR",
61:
62: "kill", "raise", "sigaction", "sigaddset", "sigdelset", "sigemptyset",
63: "sigfillset", "sigismember", "signal", "sigpending", "sigprocmask",
64: "sigqueue", "sigsuspend", "sigtimedwait", "sigwait", "sigwaitinfo"
65: };
66:
67:
68: static const char *const assert_syms[] =
69: {
70: "assert"
71: };
72: static const char *const assert_maybe[] =
73: {
74: };
75:
76:
77: static const char *const ctype_syms[] =
78: {
79: };
80: static const char *const ctype_maybe[] =
81: {
82: "isalnum", "isalpha", "iscntrl", "isdigit", "isgraph", "islower",
83: "isprint", "ispunct", "isspace", "isupper", "isxdigit", "tolower",
84: "toupper"
85: };
86:
87:
88: static const char *const dirent_syms[] =
89: {
90: };
91: static const char *const dirent_maybe[] =
92: {
93: "closedir", "opendir", "readdir", "readdir_r", "rewinddir"
94: };
95:
96:
97: static const char *const errno_syms[] =
98: {
99: "E2BIG", "EACCES", "EAGAIN", "EBADF", "EBADMSG", "EBUSY", "ECANCELED",
100: "ECHILD", "EDEADLK", "EDOM", "EEXIST", "EFAULT", "EFBIG", "EINPROGRESS",
101: "EINTR", "EINVAL", "EIO", "EISDIR", "EMFILE", "EMLINK", "EMSGSIZE",
102: "ENAMETOOLONG", "ENFILE", "ENODEV", "ENOENT", "ENOEXEC", "ENOLCK",
103: "ENOMEM", "ENOSPC", "ENOSYS", "ENOTDIR", "ENOTEMPTY", "ENOTSUP",
104: "ENOTTY", "ENXIO", "EPERM", "EPIPE", "ERANGE", "EROFS", "ESPIPE",
105: "ESRCH", "ETIMEDOUT", "EXDEV"
106: };
107: static const char *const errno_maybe[] =
108: {
109: "errno", "E*"
110: };
111:
112:
113: static const char *const fcntl_syms[] =
114: {
115: "FD_CLOEXEC", "F_DUPFD", "F_GETFD", "F_GETFL", "F_GETLK", "F_RDLCK",
116: "F_SETFD", "F_SETFL", "F_SETLK", "F_SETLKW", "F_UNLCK", "F_WRLCK",
117: "O_ACCMODE", "O_APPEND", "O_CREAT", "O_DSYNC", "O_EXCL", "O_NOCTTY",
118: "O_NONBLOCK", "O_RDONLY", "O_RDWR", "O_RSYNC", "O_SYNC", "O_TRUNC",
119: "O_WRONLY"
120: };
121: static const char *const fcntl_maybe[] =
122: {
123: "creat", "fcntl", "open", "SEEK_CUR", "SEEK_END", "SEEK_SET", "S_IRGRP",
124: "S_IROTH", "S_IRUSR", "S_IRWXG", "S_IRWXO", "S_IRWXU", "S_ISBLK",
125: "S_ISCHR", "S_ISDIR", "S_ISFIFO", "S_ISGID", "S_ISREG", "S_ISUID",
126: "S_IWGRP", "S_IWOTH", "S_IWUSR", "S_IXGRP", "S_IXOTH", "S_IXUSR"
127: };
128:
129:
130: static const char *const float_syms[] =
131: {
132: "DBL_DIG", "DBL_EPSILON", "DBL_MANT_DIG", "DBL_MAX", "DBL_MAX_10_EXP",
133: "DBL_MAX_EXP", "DBL_MIN", "DBL_MIN_10_EXP", "DBL_MIN_EXP", "FLT_DIG",
134: "FLT_EPSILON", "FLT_MANT_DIG", "FLT_MAX", "FLT_MAX_10_EXP", "FLT_MAX_EXP",
135: "FLT_MIN", "FLT_MIN_10_EXP", "FLT_MIN_EXP", "FLT_RADIX", "FLT_ROUNDS",
136: "LDBL_DIG", "LDBL_EPSILON", "LDBL_MANT_DIG", "LDBL_MAX", "LDBL_MAX_10_EXP",
137: "LDBL_MAX_EXP", "LDBL_MIN", "LDBL_MIN_10_EXP", "LDBL_MIN_EXP"
138: };
139: static const char *const float_maybe[] =
140: {
141: };
142:
143:
144: static const char *const grp_syms[] =
145: {
146: };
147: static const char *const grp_maybe[] =
148: {
149: "getgrgid", "getgrgid_r", "getgrnam", "getgrnam_r"
150: };
151:
152:
153: static const char *const limits_syms[] =
154: {
155: "_POSIX_AIO_LISTIO_MAX", "_POSIX_AIO_MAX", "_POSIX_ARG_MAX",
156: "_POSIX_CHILD_MAX", "_POSIX_CLOCKRES_MAX", "_POSIX_DELAYTIMER_MAX",
157: "_POSIX_LINK_MAX", "_POSIX_LOGIN_NAME_MAX", "_POSIX_MAX_CANON",
158: "_POSIX_MAX_INPUT", "_POSIX_MQ_OPEN_MAX", "_POSIX_MQ_PRIO_MAX",
159: "_POSIX_NAME_MAX", "_POSIX_NGROUPS_MAX", "_POSIX_OPEN_MAX",
160: "_POSIX_PATH_MAX", "_POSIX_PIPE_BUF", "_POSIX_RTSIG_MAX",
161: "_POSIX_SEM_NSEMS_MAX", "_POSIX_SEM_VALUE_MAX", "_POSIX_SIGQUEUE_MAX",
162: "_POSIX_SSIZE_MAX", "_POSIX_STREAM_MAX",
163: "_POSIX_THREAD_DESTRUCTOR_ITERATIONS", "_POSIX_THREAD_KEYS_MAX",
164: "_POSIX_THREAD_THREADS_MAX", "_POSIX_TIMER_MAX", "_POSIX_TTY_NAME_MAX",
165: "_POSIX_TZNAME_MAX", "_POSIX_THREAD_DESTRUCTOR_ITERATIONS",
166: "CHAR_BIT", "CHAR_MAX", "CHAR_MIN", "INT_MAX", "INT_MIN", "LONG_MAX",
167: "LONG_MIN", "MB_LEN_MAX", "NGROUPS_MAX", "PAGESIZE", "SCHAR_MAX",
168: "SCHAR_MIN", "SHRT_MAX", "SHRT_MIN", "UCHAR_MAX", "UINT_MAX",
169: "ULONG_MAX", "USHRT_MAX"
170: };
171: static const char *const limits_maybe[] =
172: {
173: "AIO_LISTIO_MAX", "AIO_MAX", "ARG_MAX", "CHILD_MAX", "DELAYTIMER_MAX",
174: "LINK_MAX", "LOGIN_NAME_MAX", "LONG_MAX", "LONG_MIN", "MAX_CANON",
175: "MAX_INPUT", "MQ_OPEN_MAX", "MQ_PRIO_MAX", "NAME_MAX", "OPEN_MAX",
176: "PATH_MAX", "PIPE_BUF", "RTSIG_MAX", "PTHREAD_DESTRUCTOR_ITERATIONS",
177: "PTHREAD_KEYS_MAX", "PTHREAD_STACK_MIN", "PTHREAD_THREADS_MAX"
178: };
179:
180:
181: static const char *const locale_syms[] =
182: {
183: "LC_ALL", "LC_COLLATE", "LC_CTYPE", "LC_MONETARY", "LC_NUMERIC",
184: "LC_TIME", "NULL"
185: };
186: static const char *const locale_maybe[] =
187: {
188: "LC_*", "localeconv", "setlocale"
189: };
190:
191:
192: static const char *const math_syms[] =
193: {
194: "HUGE_VAL"
195: };
196: static const char *const math_maybe[] =
197: {
198: "acos", "asin", "atan2", "atan", "ceil", "cos", "cosh", "exp",
199: "fabs", "floor", "fmod", "frexp", "ldexp", "log10", "log", "modf",
200: "pow", "sin", "sinh", "sqrt", "tan", "tanh",
201: "acosf", "asinf", "atan2f", "atanf", "ceilf", "cosf", "coshf", "expf",
202: "fabsf", "floorf", "fmodf", "frexpf", "ldexpf", "log10f", "logf", "modff",
203: "powf", "sinf", "sinhf", "sqrtf", "tanf", "tanhf",
204: "acosl", "asinl", "atan2l", "atanl", "ceill", "cosl", "coshl", "expl",
205: "fabsl", "floorl", "fmodl", "frexpl", "ldexpl", "log10l", "logl", "modfl",
206: "powl", "sinl", "sinhl", "sqrtl", "tanl", "tanhl"
207: };
208:
209:
210: static const char *const mqueue_syms[] =
211: {
212: };
213: static const char *const mqueue_maybe[] =
214: {
215: "mq_close", "mq_getattr", "mq_notify", "mq_open", "mq_receive",
216: "mq_send", "mq_setattr", "mq_unlink"
217: };
218:
219:
220: static const char *const pthread_syms[] =
221: {
222: "PTHREAD_CANCELED", "PTHREAD_CANCEL_ASYNCHRONOUS",
223: "PTHREAD_CANCEL_DEFERRED", "PTHREAD_CANCEL_DISABLE", "PTHREAD_CANCEL_ENABLE",
224: "PTHREAD_COND_INITIALIZER", "PTHREAD_CREATE_DETACHED",
225: "PTHREAD_CREATE_JOINABLE", "PTHREAD_EXPLICIT_SCHED",
226: "PTHREAD_INHERIT_SCHED", "PTHREAD_MUTEX_INITIALIZER",
227: "PTHREAD_ONCE_INIT", "PTHREAD_PRIO_INHERIT", "PTHREAD_PRIO_NONE",
228: "PTHREAD_PRIO_PROTECT", "PTHREAD_PROCESS_PRIVATE",
229: "PTHREAD_PROCESS_SHARED", "PTHREAD_SCOPE_PROCESS", "PTHREAD_SCOPE_SYSTEM",
230:
231: "SCHED_FIFO", "SCHED_OTHER", "SCHED_RR",
232:
233: "CLK_TCK", "CLOCKS_PER_SEC", "CLOCK_REALTIME", "NULL", "TIMER_ABSTIME"
234: };
235: static const char *const pthread_maybe[] =
236: {
237: "pthread_atfork", "pthread_attr_destroy", "pthread_attr_getdetachstate",
238: "pthread_attr_getinheritsched", "pthread_attr_getschedparam",
239: "pthread_attr_getschedpolicy", "pthread_attr_getscope",
240: "pthread_attr_getstackaddr", "pthread_attr_getstacksize",
241: "pthread_attr_init", "pthread_attr_setdetachstate",
242: "pthread_attr_setinheritsched", "pthread_attr_setschedparam",
243: "pthread_attr_setschedpolicy", "pthread_attr_setscope",
244: "pthread_attr_setstackaddr", "pthread_attr_setstacksize",
245: "pthread_cleanup_pop", "pthread_cleanup_push", "pthread_cond_broadcast",
246: "pthread_cond_destroy", "pthread_cond_init", "pthread_cond_signal",
247: "pthread_cond_timedwait", "pthread_cond_wait", "pthread_condattr_destroy",
248: "pthread_condattr_getpshared", "pthread_condattr_init",
249: "pthread_condattr_setpshared", "pthread_create", "pthread_detach",
250: "pthread_equal", "pthread_exit", "pthread_getspecific", "pthread_join",
251: "pthread_key_create", "pthread_key_destroy", "pthread_kill",
252: "pthread_mutex_destroy", "pthread_mutex_getprioceiling",
253: "pthread_mutex_init", "pthread_mutex_lock", "pthread_mutex_setprioceiling",
254: "pthread_mutex_trylock", "pthread_mutex_unlock", "pthread_mutexattr_destroy",
255: "pthread_mutexattr_getprioceiling", "pthread_mutexattr_getprotocol",
256: "pthread_mutexattr_getpshared", "pthread_mutexattr_init",
257: "pthread_mutexattr_setprioceiling", "pthread_mutexattr_setprotocol",
258: "pthread_mutexattr_setpshared", "pthread_once", "pthread_self",
259: "pthread_setcancelstate", "pthread_setcanceltype", "pthread_setspecific",
260: "pthread_sigmask", "pthread_testcancel"
261:
262: "sched_get_priority_max", "sched_get_priority_min",
263: "sched_get_rr_interval", "sched_getparam", "sched_getscheduler",
264: "sched_setparam", "sched_setscheduler", "sched_yield",
265:
266: "asctime", "asctime_r", "clock", "clock_getres", "clock_gettime",
267: "clock_settime", "ctime", "ctime_r", "difftime", "gmtime", "gmtime_r",
268: "localtime", "localtime_r", "mktime", "nanosleep", "strftime", "time",
269: "timer_create", "timer_delete", "timer_getoverrun", "timer_gettime",
270: "timer_settime", "tzset"
271: };
272:
273:
274: static const char *const pwd_syms[] =
275: {
276: };
277: static const char *const pwd_maybe[] =
278: {
279: "getpwnam", "getpwnam_r", "getpwuid", "getpwuid_r"
280: };
281:
282:
283: static const char *const sched_syms[] =
284: {
285: "SCHED_FIFO", "SCHED_OTHER", "SCHED_RR",
286: };
287: static const char *const sched_maybe[] =
288: {
289: "sched_get_priority_max", "sched_get_priority_min",
290: "sched_get_rr_interval", "sched_getparam", "sched_getscheduler",
291: "sched_setparam", "sched_setscheduler", "sched_yield",
292:
293: "CLK_TCK", "CLOCKS_PER_SEC", "CLOCK_REALTIME", "NULL", "TIMER_ABSTIME"
294: "asctime", "asctime_r", "clock", "clock_getres", "clock_gettime",
295: "clock_settime", "ctime", "ctime_r", "difftime", "gmtime", "gmtime_r",
296: "localtime", "localtime_r", "mktime", "nanosleep", "strftime", "time",
297: "timer_create", "timer_delete", "timer_getoverrun", "timer_gettime",
298: "timer_settime", "tzset"
299: };
300:
301:
302: static const char *const semaphore_syms[] =
303: {
304: };
305: static const char *const semaphore_maybe[] =
306: {
307: "sem_close", "sem_destroy", "sem_getvalue", "sem_init", "sem_open",
308: "sen_post", "sem_trywait", "sem_unlink", "sem_wait"
309: };
310:
311:
312: static const char *const setjmp_syms[] =
313: {
314: };
315: static const char *const setjmp_maybe[] =
316: {
317: "longjmp", "setjmp", "siglongjmp", "sigsetjmp"
318: };
319:
320:
321: static const char *const signal_syms[] =
322: {
323: "SA_NOCLDSTOP", "SA_SIGINFO", "SIGABRT", "SIGALRM", "SIGBUS", "SIGCHLD",
324: "SIGCONT", "SIGEV_NONE", "SIGEV_SIGNAL", "SIGEV_THREAD",
325: "SIGFPE", "SIGHUP", "SIGILL", "SIGINT", "SIGKILL", "SIGPIPE", "SIGQUIT",
326: "SIGRTMAX", "SIGRTMIN", "SIGSEGV", "SIGSTOP", "SIGTERM", "SIGTSTP",
327: "SIGTTIN", "SIGTTOU", "SIGUSR1", "SIGUSR2", "SIG_BLOCK", "SIG_DFL",
328: "SIG_ERR", "SIG_IGN", "SIG_SETMASK", "SIG_UNBLOCK", "SI_ASYNCIO",
329: "SI_MESGQ", "SI_QUEUE", "SI_TIMER", "SI_USER"
330: };
331: static const char *const signal_maybe[] =
332: {
333: "kill", "raise", "sigaction", "sigaddset", "sigdelset", "sigemptyset",
334: "sigfillset", "sigismember", "signal", "sigpending", "sigprocmask",
335: "sigqueue", "sigsuspend", "sigtimedwait", "sigwait", "sigwaitinfo"
336: };
337:
338:
339: static const char *const stdarg_syms[] =
340: {
341: "va_arg", "va_end", "va_start"
342: };
343: static const char *const stdarg_maybe[] =
344: {
345: "va_list"
346: };
347:
348:
349: static const char *const stddef_syms[] =
350: {
351: "NULL", "offsetof"
352: };
353: static const char *const stddef_maybe[] =
354: {
355: };
356:
357:
358: static const char *const stdio_syms[] =
359: {
360: "BUFSIZ", "EOF", "FILENAME_MAX", "FOPEN_MAX", "L_ctermid", "L_cuserid",
361: "L_tmpnam", "NULL", "SEEK_CUR", "SEEK_END", "SEEK_SET", "STREAM_MAX",
362: "TMP_MAX", "stderr", "stdin", "stdout", "_IOFBF", "_IOLBF", "_IONBF"
363: };
364: static const char *const stdio_maybe[] =
365: {
366: "clearerr", "fclose", "fdopen", "feof", "ferror", "fflush", "fgetc",
367: "fgetpos", "fgets", "fileno", "flockfile", "fopen", "fprintf", "fputc",
368: "fputs", "fread", "freopen", "fscanf", "fseek", "fsetpos", "ftell",
369: "ftrylockfile", "funlockfile", "fwrite", "getc", "getchar",
370: "getchar_unlocked", "getc_unlocked", "gets", "perror", "printf", "putc",
371: "putchar", "putchar_unlocked", "putc_unlocked", "puts", "remove", "rename",
372: "rewind", "scanf", "setbuf", "setvbuf", "sprintf", "sscanf", "tmpfile",
373: "tmpnam", "ungetc", "vfprintf", "vprintf", "vsprintf"
374: };
375:
376:
377: static const char *const stdlib_syms[] =
378: {
379: "EXIT_FAILURE", "EXIT_SUCCESS", "MB_CUR_MAX", "NULL", "RAND_MAX"
380: };
381: static const char *const stdlib_maybe[] =
382: {
383: "abort", "abs", "atexit", "atof", "atoi", "atol", "bsearch", "calloc",
384: "div", "exit", "free", "getenv", "labs", "ldiv", "malloc", "mblen",
385: "mbstowcs", "mbtowc", "qsort", "rand", "rand_r", "realloc", "srand",
386: "strtod", "strtol", "strtoul", "system", "wcstombs", "wctomb"
387: };
388:
389:
390: static const char *const string_syms[] =
391: {
392: "NULL"
393: };
394: static const char *const string_maybe[] =
395: {
396: "memchr", "memcmp", "memcpy", "memmove", "memset", "strcat", "strchr",
397: "strcmp", "strcoll", "strcpy", "strcspn", "strerror", "strlen",
398: "strncat", "strncmp", "strncpy", "strpbrk", "strrchr", "strspn",
399: "strstr", "strtok", "strtok_r", "strxfrm"
400: };
401:
402:
403: static const char *const mman_syms[] =
404: {
405: "MAP_FAILED", "MAP_FIXED", "MAP_PRIVATE", "MAP_SHARED", "MCL_CURRENT",
406: "MCL_FUTURE", "MS_ASYNC", "MS_INVALIDATE", "MS_SYNC", "PROT_EXEC",
407: "PROT_NONE", "PROT_READ", "PROT_WRITE"
408: };
409: static const char *const mman_maybe[] =
410: {
411: "mlock", "mlockall", "mmap", "mprotect", "msync", "munlock", "munlockall",
412: "munmap", "shm_open", "shm_unlock"
413: };
414:
415:
416: static const char *const stat_syms[] =
417: {
418: "S_IRGRP", "S_IROTH", "S_IRUSR", "S_IRWXG", "S_IRWXO", "S_IRWXU",
419: "S_ISBLK", "S_ISCHR", "S_ISDIR", "S_ISFIFO", "S_ISGID", "S_ISREG",
420: "S_ISUID", "S_IWGRP", "S_IWOTH", "S_IWUSR", "S_IXGRP", "S_IXOTH",
421: "S_IXUSR", "S_TYPEISMQ", "S_TYPEISSEM", "S_TYPEISSHM"
422: };
423: static const char *const stat_maybe[] =
424: {
425: "chmod", "fchmod", "fstat", "mkdir", "mkfifo", "stat", "umask"
426: };
427:
428:
429: static const char *const times_syms[] =
430: {
431: };
432: static const char *const times_maybe[] =
433: {
434: "times"
435: };
436:
437:
438: static const char *const types_syms[] =
439: {
440: };
441: static const char *const types_maybe[] =
442: {
443: };
444:
445:
446: static const char *const utsname_syms[] =
447: {
448: };
449: static const char *const utsname_maybe[] =
450: {
451: "uname"
452: };
453:
454:
455: static const char *const wait_syms[] =
456: {
457: "WEXITSTATUS", "WIFEXITED", "WIFSIGNALED", "WIFSTOPPED", "WNOHANG",
458: "WSTOPSIG", "WTERMSIG", "WUNTRACED"
459: };
460: static const char *const wait_maybe[] =
461: {
462: "wait", "waitpid"
463: };
464:
465:
466: static const char *const termios_syms[] =
467: {
468: "B0", "B110", "B1200", "B134", "B150", "B1800", "B19200", "B200", "B2400",
469: "B300", "B38400", "B4800", "B50", "B600", "B75", "B9600", "BRKINT", "CLOCAL",
470: "CREAD", "CS5", "CS6", "CS7", "CS8", "CSIZE", "CSTOPN", "ECHO", "ECHOE",
471: "ECHOK", "ECHONL", "HUPCL", "ICANON", "ICRNL", "IEXTEN", "IGNBRK", "IGNCR",
472: "IGNPAR", "INCLR", "INPCK", "ISIG", "ISTRIP", "IXOFF", "IXON", "NCCS",
473: "NOFLSH", "OPOST", "PARENB", "PARMRK", "PARODD", "TCIFLUSH", "TCIOFF",
474: "TCIOFLUSH", "TCOFLUSH", "TCOOFF", "TCOON", "TCSADRAIN", "TCSAFLUSH",
475: "TCSANOW", "TOSTOP", "VEOF", "VEOL", "VERASE", "VINTR", "VKILL", "VMIN",
476: "VQUIT", "VSTART", "VSTOP", "VSUSP", "VTIME"
477: };
478: static const char *const termios_maybe[] =
479: {
480: "cfgetispeed", "cfgetospeed", "cfsetispeed", "cfsetospeed", "tcdrain",
481: "tcflow", "tcflush", "tcgetattr", "tcsendbrk", "tcsetattr"
482: };
483:
484:
485: static const char *const time_syms[] =
486: {
487: "CLK_TCK", "CLOCKS_PER_SEC", "CLOCK_REALTIME", "NULL", "TIMER_ABSTIME"
488: };
489: static const char *const time_maybe[] =
490: {
491: "asctime", "asctime_r", "clock", "clock_getres", "clock_gettime",
492: "clock_settime", "ctime", "ctime_r", "difftime", "gmtime", "gmtime_r",
493: "localtime", "localtime_r", "mktime", "nanosleep", "strftime", "time",
494: "timer_create", "timer_delete", "timer_getoverrun", "timer_gettime",
495: "timer_settime", "tzset"
496: };
497:
498:
499: static const char *const unistd_syms[] =
500: {
501: "F_OK", "NULL", "R_OK", "SEEK_CUR", "SEEK_END", "SEEK_SET", "STDERR_FILENO",
502: "STDIN_FILENO", "STDOUT_FILENO", "W_OK", "X_OK",
503: "_PC_ASYNC_IO", "_PC_CHOWN_RESTRICTED", "_PC_LINK_MAX", "_PC_MAX_CANON",
504: "_PC_MAX_INPUT", "_PC_NAME_MAX", "_PC_NO_TRUNC", "_PC_PATH_MAX",
505: "_PC_PIPE_BUF", "_PC_PRIO_IO", "_PC_SYNC_IO", "_PC_VDISABLE",
506: "_SC_AIO_LISTIO_MAX", "_SC_AIO_MAX", "_SC_AIO_PRIO_DELTA_MAX",
507: "_SC_ARG_MAX", "_SC_ASYNCHRONOUS_IO", "_SC_CHILD_MAX", "_SC_CLK_TCK",
508: "_SC_DELAYTIMER_MAX", "_SC_FSYNC", "_SC_GETGR_R_SIZE_MAX",
509: "_SC_GETPW_R_SIZE_MAX", "_SC_JOB_CONTROL", "_SC_LOGIN_NAME_MAX",
510: "_SC_MAPPED_FILES", "_SC_MEMLOCK", "_SC_MEMLOCK_RANGE",
511: "_SC_MEMORY_PROTECTION", "_SC_MESSAGE_PASSING", "_SC_MQ_OPEN_MAX",
512: "_SC_MQ_PRIO_MAX", "_SC_NGROUPS_MAX", "_SC_OPEN_MAX", "_SC_PAGESIZE",
513: "_SC_PRIORITIZED_IO", "_SC_PRIORITY_SCHEDULING", "_SC_REALTIME_SIGNALS",
514: "_SC_RTSIG_MAX", "_SC_SAVED_IDS", "_SC_SEMAPHORES", "_SC_SEM_NSEMS_MAX",
515: "_SC_SEM_VALUE_MAX", "_SC_SHARED_MEMORY_OBJECTS", "_SC_SIGQUEUE_MAX",
516: "_SC_STREAM_MAX", "_SC_SYNCHRONIZED_IO", "_SC_THREADS",
517: "_SC_THREAD_ATTR_STACKADDR", "_SC_THREAD_ATTR_STACKSIZE",
518: "_SC_THREAD_DESTRUCTOR_ITERATIONS", "_SC_THREAD_PRIO_INHERIT",
519: "_SC_THREAD_PRIORITY_SCHEDULING", "_SC_THREAD_PRIO_PROTECT",
520: "_SC_THREAD_PROCESS_SHARED", "_SC_THREAD_SAFE_FUNCTIONS",
521: "_SC_THREAD_STACK_MIN", "_SC_THREAD_THREADS_MAX", "_SC_TIMERS",
522: "_SC_TIMER_MAX", "_SC_TTY_NAME_MAX", "_SC_TZNAME_MAX", "_SC_VERSION"
523: };
524: static const char *const unistd_maybe[] =
525: {
526: "_POSIX_ASYNCHRONOUS_IO", "_POSIX_ASYNC_IO", "_POSIX_CHOWN_RESTRICTED",
527: "_POSIX_FSYNC", "_POSIX_JOB_CONTROL", "_POSIX_MAPPED_FILES",
528: "_POSIX_MEMLOCK", "_POSIX_MEMLOCK_RANGE", "_MEMORY_PROTECTION",