21 use_all_headers(false)
33 std::list<irep_idt> ctype_syms=
35 "isalnum",
"isalpha",
"isblank",
"iscntrl",
"isdigit",
"isgraph",
36 "islower",
"isprint",
"ispunct",
"isspace",
"isupper",
"isxdigit",
42 std::list<irep_idt> fcntl_syms=
44 "creat",
"fcntl",
"open"
49 std::list<irep_idt> locale_syms=
56 std::list<irep_idt> math_syms=
58 "acos",
"acosh",
"asin",
"asinh",
"atan",
"atan2",
"atanh",
59 "cbrt",
"ceil",
"copysign",
"cos",
"cosh",
"erf",
"erfc",
"exp",
60 "exp2",
"expm1",
"fabs",
"fdim",
"floor",
"fma",
"fmax",
"fmin",
61 "fmod",
"fpclassify",
"fpclassifyl",
"fpclassifyf",
"frexp",
62 "hypot",
"ilogb",
"isfinite",
"isinf",
"isnan",
"isnormal",
63 "j0",
"j1",
"jn",
"ldexp",
"lgamma",
"llrint",
"llround",
"log",
64 "log10",
"log1p",
"log2",
"logb",
"lrint",
"lround",
"modf",
"nan",
65 "nearbyint",
"nextafter",
"pow",
"remainder",
"remquo",
"rint",
66 "round",
"scalbln",
"scalbn",
"signbit",
"sin",
"sinh",
"sqrt",
67 "tan",
"tanh",
"tgamma",
"trunc",
"y0",
"y1",
"yn",
"isinff",
68 "isinfl",
"isnanf",
"isnanl"
74 std::list<irep_idt> underscore_math_syms;
75 for(
const irep_idt &math_sym : math_syms)
77 std::ostringstream underscore_id;
78 underscore_id <<
"__" << math_sym;
79 underscore_math_syms.push_back(
irep_idt(underscore_id.str()));
84 std::list<irep_idt> pthread_syms=
86 "pthread_cleanup_pop",
"pthread_cleanup_push",
87 "pthread_cond_broadcast",
"pthread_cond_destroy",
88 "pthread_cond_init",
"pthread_cond_signal",
89 "pthread_cond_timedwait",
"pthread_cond_wait",
"pthread_create",
90 "pthread_detach",
"pthread_equal",
"pthread_exit",
91 "pthread_getspecific",
"pthread_join",
"pthread_key_delete",
92 "pthread_mutex_destroy",
"pthread_mutex_init",
93 "pthread_mutex_lock",
"pthread_mutex_trylock",
94 "pthread_mutex_unlock",
"pthread_once",
"pthread_rwlock_destroy",
95 "pthread_rwlock_init",
"pthread_rwlock_rdlock",
96 "pthread_rwlock_unlock",
"pthread_rwlock_wrlock",
97 "pthread_rwlockattr_destroy",
"pthread_rwlockattr_getpshared",
98 "pthread_rwlockattr_init",
"pthread_rwlockattr_setpshared",
99 "pthread_self",
"pthread_setspecific",
101 "tag-__pthread_internal_list",
"tag-__pthread_mutex_s",
107 std::list<irep_idt> setjmp_syms=
109 "_longjmp",
"_setjmp",
"jmp_buf",
"longjmp",
"longjmperror",
"setjmp",
110 "siglongjmp",
"sigsetjmp"
115 std::list<irep_idt> stdio_syms=
117 "asprintf",
"clearerr",
"fclose",
"fdopen",
"feof",
"ferror",
118 "fflush",
"fgetc",
"fgetln",
"fgetpos",
"fgets",
"fgetwc",
119 "fgetws",
"fileno",
"fopen",
"fprintf",
"fpurge",
"fputc",
120 "fputs",
"fputwc",
"fputws",
"fread",
"freopen",
"fropen",
121 "fscanf",
"fseek",
"fsetpos",
"ftell",
"funopen",
"fwide",
122 "fwopen",
"fwprintf",
"fwrite",
"getc",
"getchar",
"getdelim",
123 "getline",
"gets",
"getw",
"getwc",
"getwchar",
"mkdtemp",
124 "mkstemp",
"mktemp",
"perror",
"printf",
"putc",
"putchar",
125 "puts",
"putw",
"putwc",
"putwchar",
"remove",
"rewind",
"scanf",
126 "setbuf",
"setbuffer",
"setlinebuf",
"setvbuf",
"snprintf",
127 "sprintf",
"sscanf",
"swprintf",
"sys_errlist",
128 "sys_nerr",
"tempnam",
"tmpfile",
"tmpnam",
"ungetc",
"ungetwc",
129 "vasprintf",
"vfprintf",
"vfscanf",
"vfwprintf",
"vprintf",
130 "vscanf",
"vsnprintf",
"vsprintf",
"vsscanf",
"vswprintf",
131 "vwprintf",
"wprintf",
133 "tag-__sFILE",
"tag-__sbuf",
134 "tag-_IO_FILE",
"tag-_IO_marker",
139 std::list<irep_idt> stdlib_syms=
141 "abort",
"abs",
"atexit",
"atof",
"atoi",
"atol",
"atoll",
142 "bsearch",
"calloc",
"div",
"exit",
"free",
"getenv",
"labs",
143 "ldiv",
"llabs",
"lldiv",
"malloc",
"mblen",
"mbstowcs",
"mbtowc",
144 "qsort",
"rand",
"realloc",
"srand",
"strtod",
"strtof",
"strtol",
145 "strtold",
"strtoll",
"strtoul",
"strtoull",
"system",
"wcstombs",
151 std::list<irep_idt> string_syms=
153 "strcat",
"strncat",
"strchr",
"strrchr",
"strcmp",
"strncmp",
154 "strcpy",
"strncpy",
"strerror",
"strlen",
"strpbrk",
"strspn",
155 "strcspn",
"strstr",
"strtok",
"strcasecmp",
"strncasecmp",
"strdup",
161 std::list<irep_idt> time_syms=
163 "asctime",
"asctime_r",
"ctime",
"ctime_r",
"difftime",
"gmtime",
164 "gmtime_r",
"localtime",
"localtime_r",
"mktime",
"strftime",
166 "tag-timespec",
"tag-timeval",
"tag-tm"
171 std::list<irep_idt> unistd_syms=
173 "_exit",
"access",
"alarm",
"chdir",
"chown",
"close",
"dup",
174 "dup2",
"execl",
"execle",
"execlp",
"execv",
"execve",
"execvp",
175 "fork",
"fpathconf",
"getcwd",
"getegid",
"geteuid",
"getgid",
176 "getgroups",
"getlogin",
"getpgrp",
"getpid",
"getppid",
"getuid",
177 "isatty",
"link",
"lseek",
"pathconf",
"pause",
"pipe",
"read",
178 "rmdir",
"setgid",
"setpgid",
"setsid",
"setuid",
"sleep",
179 "sysconf",
"tcgetpgrp",
"tcsetpgrp",
"ttyname",
"ttyname_r",
185 std::list<irep_idt> sys_select_syms=
194 std::list<irep_idt> sys_socket_syms=
196 "accept",
"bind",
"connect",
203 std::list<irep_idt> sys_stat_syms=
205 "fstat",
"lstat",
"stat",
211 std::list<irep_idt> fenv_syms=
213 "fenv_t",
"fexcept_t",
"feclearexcept",
"fegetexceptflag",
214 "feraiseexcept",
"fesetexceptflag",
"fetestexcept",
215 "fegetround",
"fesetround",
"fegetenv",
"feholdexcept",
216 "fesetenv",
"feupdateenv"
220 std::list<irep_idt> errno_syms=
222 "__error",
"__errno_location",
"__errno"
228 std::list<irep_idt> sys_types_syms=
235 std::list<irep_idt> sys_wait_syms=
248 std::list<irep_idt> symbols)
250 for(
const irep_idt &symbol : symbols)
263 std::set<std::string> &out_system_headers)
const
268 name_str==
"__func__" ||
269 name_str==
"__FUNCTION__" ||
270 name_str==
"__PRETTY_FUNCTION__" ||
274 name_str==
"envp_size'")
294 if(
has_prefix(file_str,
"gcc_builtin_headers_") &&
298 if(name_str==
"__builtin_va_start" ||
299 name_str==
"__builtin_va_end" ||
300 symbol.
name==ID_gcc_builtin_va_arg)
302 out_system_headers.insert(
"stdarg.h");
307 else if(name_str==
"__assert_fail" ||
308 name_str==
"_assert" ||
309 name_str==
"__assert_c99" ||
310 name_str==
"_wassert")
319 out_system_headers.insert(
id2string(it->second));
327 ((
has_prefix(file_str,
"/Library/Developer/") ||
328 has_prefix(file_str,
"/Applications/Xcode")) &&
329 file_str.find(
"/usr/include/") != std::string::npos))
331 if(file_str.find(
"/bits/") == std::string::npos)
335 file_str.
find(
"/usr/include/") + std::string(
"/usr/include/").size();
336 out_system_headers.insert(file_str.substr(prefix_len));
343 file_str,
"C:\\Program Files (x86)\\Microsoft Visual Studio\\") ||
344 has_prefix(file_str,
"C:\\Program Files\\Microsoft Visual Studio\\")) &&
345 file_str.find(
"\\include\\") != std::string::npos)
348 file_str.
find(
"\\include\\") + std::string(
"\\include\\").size();
349 out_system_headers.insert(file_str.substr(prefix_len));