diff --git a/ptests/ptests.ml b/ptests/ptests.ml
index 79e513c75a36ad5d556520868c82ef411e778ad7..33373150bf3f259221e0959e655d2296ea06ce50 100644
--- a/ptests/ptests.ml
+++ b/ptests/ptests.ml
@@ -592,7 +592,7 @@ type config =
       (** full path of the default toplevel. *)
       dc_filter     : string option; (** optional filter to apply to
                               standard output *)
-      dc_toplevels    : (string * string * string list) list;
+      dc_toplevels    : (string * string * string list * Macros.t) list;
       (** toplevel full path, options to launch the toplevel on, and list
        of output files to monitor beyond stdout and stderr. *)
       dc_dont_run   : bool;
@@ -612,7 +612,7 @@ let default_config () =
     dc_execnow = [];
     dc_filter = None ;
     dc_default_toplevel = !toplevel_path;
-    dc_toplevels = [ !toplevel_path, default_options, [] ];
+    dc_toplevels = [ !toplevel_path, default_options, [], Macros.empty ];
     dc_dont_run = false;
     dc_default_log = []
   }
@@ -674,7 +674,7 @@ let scan_execnow ~once dir (s:string) =
 (* the default toplevel for the current level of options. *)
 let current_default_toplevel = ref !toplevel_path
 let current_default_log = ref []
-let current_default_cmds = ref [!toplevel_path,default_options,[] ]
+let current_default_cmds = ref [!toplevel_path,default_options,[], Macros.empty]
 
 let make_custom_opts =
   let space = Str.regexp " " in
@@ -742,7 +742,7 @@ let config_options =
 
     "OPT",
     (fun _ s current ->
-       let t = current.dc_default_toplevel, s, current.dc_default_log in
+       let t = current.dc_default_toplevel, s, current.dc_default_log, current.dc_macros in
        { current with
 (*           dc_default_toplevel = !current_default_toplevel;*)
            dc_default_log = !current_default_log;
@@ -752,7 +752,7 @@ let config_options =
     (fun _ s current ->
        let new_top =
          List.map
-           (fun (cmd,opts, log) -> cmd, make_custom_opts opts s, log)
+           (fun (cmd,opts, log, macros) -> cmd, make_custom_opts opts s, log, current.dc_macros)
            !current_default_cmds
        in
        { current with dc_toplevels = new_top @ current.dc_toplevels;
@@ -1610,10 +1610,10 @@ let dispatcher () =
       let i = ref 0 in
       let e = ref 0 in
       let nb_files = List.length config.dc_toplevels in
-      let make_toplevel_cmd (toplevel, options, log_files) =
+      let make_toplevel_cmd (toplevel, options, log_files, macros) =
         let n = !i in
         {file; options; toplevel; nb_files; directory; n; log_files;
-         filter = config.dc_filter; macros = config.dc_macros;
+         filter = config.dc_filter; macros;
          execnow=false;
         }
       in
diff --git a/share/compliance/c11_functions.json b/share/compliance/c11_functions.json
new file mode 100644
index 0000000000000000000000000000000000000000..1ec844c35e497dc756f763aa49b8383e23055b27
--- /dev/null
+++ b/share/compliance/c11_functions.json
@@ -0,0 +1,605 @@
+{
+    "description": "C11 reserved function identifiers",
+    "source":"ISO/IEC 9899:2011",
+    "data":[
+        {"ident":"abort", "header":"stdlib.h"},
+        {"ident":"abort_handler_s", "header":"stdlib.h"},
+        {"ident":"abs", "header":"stdlib.h"},
+        {"ident":"acos", "header":"math.h"},
+        {"ident":"acosf", "header":"math.h"},
+        {"ident":"acosh", "header":"math.h"},
+        {"ident":"acoshf", "header":"math.h"},
+        {"ident":"acoshl", "header":"math.h"},
+        {"ident":"acosl", "header":"math.h"},
+        {"ident":"aligned_alloc", "header":"stdlib.h"},
+        {"ident":"asctime", "header":"time.h"},
+        {"ident":"asctime_s", "header":"time.h"},
+        {"ident":"asin", "header":"math.h"},
+        {"ident":"asinf", "header":"math.h"},
+        {"ident":"asinh", "header":"math.h"},
+        {"ident":"asinhf", "header":"math.h"},
+        {"ident":"asinhl", "header":"math.h"},
+        {"ident":"asinl", "header":"math.h"},
+        {"ident":"at_quick_exit", "header":"stdlib.h"},
+        {"ident":"atan", "header":"math.h"},
+        {"ident":"atan2", "header":"math.h"},
+        {"ident":"atan2f", "header":"math.h"},
+        {"ident":"atanf", "header":"math.h"},
+        {"ident":"atanh", "header":"math.h"},
+        {"ident":"atanhf", "header":"math.h"},
+        {"ident":"atanhl", "header":"math.h"},
+        {"ident":"atanl", "header":"math.h"},
+        {"ident":"atexit", "header":"stdlib.h"},
+        {"ident":"atof", "header":"stdlib.h"},
+        {"ident":"atoi", "header":"stdlib.h"},
+        {"ident":"atol", "header":"stdlib.h"},
+        {"ident":"atoll", "header":"stdlib.h"},
+        {"ident":"atomic_compare_exchange_strong", "header":"stdatomic.h"},
+        {"ident":"atomic_compare_exchange_strong_explicit", "header":"stdatomic.h"},
+        {"ident":"atomic_compare_exchange_weak", "header":"stdatomic.h"},
+        {"ident":"atomic_compare_exchange_weak_explicit", "header":"stdatomic.h"},
+        {"ident":"atomic_exchange", "header":"stdatomic.h"},
+        {"ident":"atomic_exchange_explicit", "header":"stdatomic.h"},
+        {"ident":"atomic_fetch_key", "header":"stdatomic.h"},
+        {"ident":"atomic_fetch_key_explicit", "header":"stdatomic.h"},
+        {"ident":"atomic_flag_clear", "header":"stdatomic.h"},
+        {"ident":"atomic_flag_clear_explicit", "header":"stdatomic.h"},
+        {"ident":"atomic_flag_test_and_set", "header":"stdatomic.h"},
+        {"ident":"atomic_flag_test_and_set_explicit", "header":"stdatomic.h"},
+        {"ident":"atomic_init", "header":"stdatomic.h"},
+        {"ident":"atomic_is_lock_free", "header":"stdatomic.h"},
+        {"ident":"atomic_load", "header":"stdatomic.h"},
+        {"ident":"atomic_load_explicit", "header":"stdatomic.h"},
+        {"ident":"atomic_signal_fence", "header":"stdatomic.h"},
+        {"ident":"atomic_store", "header":"stdatomic.h"},
+        {"ident":"atomic_store_explicit", "header":"stdatomic.h"},
+        {"ident":"atomic_thread_fence", "header":"stdatomic.h"},
+        {"ident":"bsearch", "header":"stdlib.h"},
+        {"ident":"bsearch_s", "header":"stdlib.h"},
+        {"ident":"btowc", "header":"wchar.h"},
+        {"ident":"c16rtomb", "header":"uchar.h"},
+        {"ident":"c32rtomb", "header":"uchar.h"},
+        {"ident":"cabs", "header":"complex.h"},
+        {"ident":"cabsf", "header":"complex.h"},
+        {"ident":"cabsl", "header":"complex.h"},
+        {"ident":"cacos", "header":"complex.h"},
+        {"ident":"cacosf", "header":"complex.h"},
+        {"ident":"cacosh", "header":"complex.h"},
+        {"ident":"cacoshf", "header":"complex.h"},
+        {"ident":"cacoshl", "header":"complex.h"},
+        {"ident":"cacosl", "header":"complex.h"},
+        {"ident":"call_once", "header":"threads.h"},
+        {"ident":"calloc", "header":"stdlib.h"},
+        {"ident":"carg", "header":"complex.h"},
+        {"ident":"cargf", "header":"complex.h"},
+        {"ident":"cargl", "header":"complex.h"},
+        {"ident":"casin", "header":"complex.h"},
+        {"ident":"casinf", "header":"complex.h"},
+        {"ident":"casinh", "header":"complex.h"},
+        {"ident":"casinhf", "header":"complex.h"},
+        {"ident":"casinhl", "header":"complex.h"},
+        {"ident":"casinl", "header":"complex.h"},
+        {"ident":"catan", "header":"complex.h"},
+        {"ident":"catanf", "header":"complex.h"},
+        {"ident":"catanh", "header":"complex.h"},
+        {"ident":"catanhf", "header":"complex.h"},
+        {"ident":"catanhl", "header":"complex.h"},
+        {"ident":"catanl", "header":"complex.h"},
+        {"ident":"cbrt", "header":"math.h"},
+        {"ident":"cbrtf", "header":"math.h"},
+        {"ident":"cbrtl", "header":"math.h"},
+        {"ident":"ccos", "header":"complex.h"},
+        {"ident":"ccosf", "header":"complex.h"},
+        {"ident":"ccosh", "header":"complex.h"},
+        {"ident":"ccoshf", "header":"complex.h"},
+        {"ident":"ccoshl", "header":"complex.h"},
+        {"ident":"ccosl", "header":"complex.h"},
+        {"ident":"ceil", "header":"math.h"},
+        {"ident":"ceilf", "header":"math.h"},
+        {"ident":"ceill", "header":"math.h"},
+        {"ident":"cexp", "header":"complex.h"},
+        {"ident":"cexpf", "header":"complex.h"},
+        {"ident":"cexpl", "header":"complex.h"},
+        {"ident":"cimag", "header":"complex.h"},
+        {"ident":"cimagf", "header":"complex.h"},
+        {"ident":"cimagl", "header":"complex.h"},
+        {"ident":"clearerr", "header":"stdio.h"},
+        {"ident":"clock", "header":"time.h"},
+        {"ident":"clog", "header":"complex.h"},
+        {"ident":"clogf", "header":"complex.h"},
+        {"ident":"clogl", "header":"complex.h"},
+        {"ident":"cnd_broadcast", "header":"threads.h"},
+        {"ident":"cnd_destroy", "header":"threads.h"},
+        {"ident":"cnd_init", "header":"threads.h"},
+        {"ident":"cnd_signal", "header":"threads.h"},
+        {"ident":"cnd_timedwait", "header":"threads.h"},
+        {"ident":"cnd_wait", "header":"threads.h"},
+        {"ident":"conj", "header":"complex.h"},
+        {"ident":"conjf", "header":"complex.h"},
+        {"ident":"conjl", "header":"complex.h"},
+        {"ident":"copysign", "header":"math.h"},
+        {"ident":"copysignf", "header":"math.h"},
+        {"ident":"copysignl", "header":"math.h"},
+        {"ident":"cos", "header":"math.h"},
+        {"ident":"cosf", "header":"math.h"},
+        {"ident":"cosh", "header":"math.h"},
+        {"ident":"coshf", "header":"math.h"},
+        {"ident":"coshl", "header":"math.h"},
+        {"ident":"cosl", "header":"math.h"},
+        {"ident":"cpow", "header":"complex.h"},
+        {"ident":"cpowf", "header":"complex.h"},
+        {"ident":"cpowl", "header":"complex.h"},
+        {"ident":"cproj", "header":"complex.h"},
+        {"ident":"cprojf", "header":"complex.h"},
+        {"ident":"cprojl", "header":"complex.h"},
+        {"ident":"creal", "header":"complex.h"},
+        {"ident":"crealf", "header":"complex.h"},
+        {"ident":"creall", "header":"complex.h"},
+        {"ident":"csin", "header":"complex.h"},
+        {"ident":"csinf", "header":"complex.h"},
+        {"ident":"csinh", "header":"complex.h"},
+        {"ident":"csinhf", "header":"complex.h"},
+        {"ident":"csinhl", "header":"complex.h"},
+        {"ident":"csinl", "header":"complex.h"},
+        {"ident":"csqrt", "header":"complex.h"},
+        {"ident":"csqrtf", "header":"complex.h"},
+        {"ident":"csqrtl", "header":"complex.h"},
+        {"ident":"ctan", "header":"complex.h"},
+        {"ident":"ctanf", "header":"complex.h"},
+        {"ident":"ctanh", "header":"complex.h"},
+        {"ident":"ctanhf", "header":"complex.h"},
+        {"ident":"ctanhl", "header":"complex.h"},
+        {"ident":"ctanl", "header":"complex.h"},
+        {"ident":"ctime", "header":"time.h"},
+        {"ident":"ctime_s", "header":"time.h"},
+        {"ident":"difftime", "header":"time.h"},
+        {"ident":"div", "header":"stdlib.h"},
+        {"ident":"erf", "header":"math.h"},
+        {"ident":"erfc", "header":"math.h"},
+        {"ident":"erfcf", "header":"math.h"},
+        {"ident":"erfcl", "header":"math.h"},
+        {"ident":"erff", "header":"math.h"},
+        {"ident":"erfl", "header":"math.h"},
+        {"ident":"exit", "header":"stdlib.h"},
+        {"ident":"exp", "header":"math.h"},
+        {"ident":"exp2", "header":"math.h"},
+        {"ident":"exp2f", "header":"math.h"},
+        {"ident":"exp2l", "header":"math.h"},
+        {"ident":"expf", "header":"math.h"},
+        {"ident":"expl", "header":"math.h"},
+        {"ident":"expm1", "header":"math.h"},
+        {"ident":"expm1f", "header":"math.h"},
+        {"ident":"expm1l", "header":"math.h"},
+        {"ident":"fabs", "header":"math.h"},
+        {"ident":"fabsf", "header":"math.h"},
+        {"ident":"fabsl", "header":"math.h"},
+        {"ident":"fclose", "header":"stdio.h"},
+        {"ident":"fdim", "header":"math.h"},
+        {"ident":"fdimf", "header":"math.h"},
+        {"ident":"fdiml", "header":"math.h"},
+        {"ident":"feclearexcept", "header":"fenv.h"},
+        {"ident":"fegetenv", "header":"fenv.h"},
+        {"ident":"fegetexceptflag", "header":"fenv.h"},
+        {"ident":"fegetround", "header":"fenv.h"},
+        {"ident":"feholdexcept", "header":"fenv.h"},
+        {"ident":"feof", "header":"stdio.h"},
+        {"ident":"feraiseexcept", "header":"fenv.h"},
+        {"ident":"ferror", "header":"stdio.h"},
+        {"ident":"fesetenv", "header":"fenv.h"},
+        {"ident":"fesetexceptflag", "header":"fenv.h"},
+        {"ident":"fesetround", "header":"fenv.h"},
+        {"ident":"fetestexcept", "header":"fenv.h"},
+        {"ident":"feupdateenv", "header":"fenv.h"},
+        {"ident":"fflush", "header":"stdio.h"},
+        {"ident":"fgetc", "header":"stdio.h"},
+        {"ident":"fgetpos", "header":"stdio.h"},
+        {"ident":"fgets", "header":"stdio.h"},
+        {"ident":"fgetwc", "header":"wchar.h"},
+        {"ident":"fgetws", "header":"wchar.h"},
+        {"ident":"floor", "header":"math.h"},
+        {"ident":"floorf", "header":"math.h"},
+        {"ident":"floorl", "header":"math.h"},
+        {"ident":"fma", "header":"math.h"},
+        {"ident":"fmaf", "header":"math.h"},
+        {"ident":"fmal", "header":"math.h"},
+        {"ident":"fmax", "header":"math.h"},
+        {"ident":"fmaxf", "header":"math.h"},
+        {"ident":"fmaxl", "header":"math.h"},
+        {"ident":"fmin", "header":"math.h"},
+        {"ident":"fminf", "header":"math.h"},
+        {"ident":"fminl", "header":"math.h"},
+        {"ident":"fmod", "header":"math.h"},
+        {"ident":"fmodf", "header":"math.h"},
+        {"ident":"fmodl", "header":"math.h"},
+        {"ident":"fopen", "header":"stdio.h"},
+        {"ident":"fopen_s", "header":"stdio.h"},
+        {"ident":"fpclassify", "header":"math.h"},
+        {"ident":"fprintf", "header":"stdio.h"},
+        {"ident":"fprintf_s", "header":"stdio.h"},
+        {"ident":"fputc", "header":"stdio.h"},
+        {"ident":"fputs", "header":"stdio.h"},
+        {"ident":"fputwc", "header":"wchar.h"},
+        {"ident":"fputws", "header":"wchar.h"},
+        {"ident":"fread", "header":"stdio.h"},
+        {"ident":"free", "header":"stdlib.h"},
+        {"ident":"freopen", "header":"stdio.h"},
+        {"ident":"freopen_s", "header":"stdio.h"},
+        {"ident":"frexp", "header":"math.h"},
+        {"ident":"frexpf", "header":"math.h"},
+        {"ident":"frexpl", "header":"math.h"},
+        {"ident":"fscanf", "header":"stdio.h"},
+        {"ident":"fscanf_s", "header":"stdio.h"},
+        {"ident":"fseek", "header":"stdio.h"},
+        {"ident":"fsetpos", "header":"stdio.h"},
+        {"ident":"ftell", "header":"stdio.h"},
+        {"ident":"fwide", "header":"wchar.h"},
+        {"ident":"fwprintf", "header":"wchar.h"},
+        {"ident":"fwprintf_s", "header":"wchar.h"},
+        {"ident":"fwrite", "header":"stdio.h"},
+        {"ident":"fwscanf", "header":"wchar.h"},
+        {"ident":"fwscanf_s", "header":"wchar.h"},
+        {"ident":"getc", "header":"stdio.h"},
+        {"ident":"getchar", "header":"stdio.h"},
+        {"ident":"getenv", "header":"stdlib.h"},
+        {"ident":"getenv_s", "header":"stdlib.h"},
+        {"ident":"gets_s", "header":"stdio.h"},
+        {"ident":"getwc", "header":"wchar.h"},
+        {"ident":"getwchar", "header":"wchar.h"},
+        {"ident":"gmtime", "header":"time.h"},
+        {"ident":"gmtime_s", "header":"time.h"},
+        {"ident":"hypot", "header":"math.h"},
+        {"ident":"hypotf", "header":"math.h"},
+        {"ident":"hypotl", "header":"math.h"},
+        {"ident":"ignore_handler_s", "header":"stdlib.h"},
+        {"ident":"ilogb", "header":"math.h"},
+        {"ident":"ilogbf", "header":"math.h"},
+        {"ident":"ilogbl", "header":"math.h"},
+        {"ident":"imaxabs", "header":"inttypes.h"},
+        {"ident":"imaxdiv", "header":"inttypes.h"},
+        {"ident":"isalnum", "header":"ctype.h"},
+        {"ident":"isalpha", "header":"ctype.h"},
+        {"ident":"isblank", "header":"ctype.h"},
+        {"ident":"iscntrl", "header":"ctype.h"},
+        {"ident":"isdigit", "header":"ctype.h"},
+        {"ident":"isfinite", "header":"math.h"},
+        {"ident":"isgraph", "header":"ctype.h"},
+        {"ident":"isgreater", "header":"math.h"},
+        {"ident":"isgreaterequal", "header":"math.h"},
+        {"ident":"isinf", "header":"math.h"},
+        {"ident":"isless", "header":"math.h"},
+        {"ident":"islessequal", "header":"math.h"},
+        {"ident":"islessgreater", "header":"math.h"},
+        {"ident":"islower", "header":"ctype.h"},
+        {"ident":"isnan", "header":"math.h"},
+        {"ident":"isnormal", "header":"math.h"},
+        {"ident":"isprint", "header":"ctype.h"},
+        {"ident":"ispunct", "header":"ctype.h"},
+        {"ident":"isspace", "header":"ctype.h"},
+        {"ident":"isunordered", "header":"math.h"},
+        {"ident":"isupper", "header":"ctype.h"},
+        {"ident":"iswalnum", "header":"wctype.h"},
+        {"ident":"iswalpha", "header":"wctype.h"},
+        {"ident":"iswblank", "header":"wctype.h"},
+        {"ident":"iswcntrl", "header":"wctype.h"},
+        {"ident":"iswctype", "header":"wctype.h"},
+        {"ident":"iswdigit", "header":"wctype.h"},
+        {"ident":"iswgraph", "header":"wctype.h"},
+        {"ident":"iswlower", "header":"wctype.h"},
+        {"ident":"iswprint", "header":"wctype.h"},
+        {"ident":"iswpunct", "header":"wctype.h"},
+        {"ident":"iswspace", "header":"wctype.h"},
+        {"ident":"iswupper", "header":"wctype.h"},
+        {"ident":"iswxdigit", "header":"wctype.h"},
+        {"ident":"isxdigit", "header":"ctype.h"},
+        {"ident":"kill_dependency", "header":"stdatomic.h"},
+        {"ident":"labs", "header":"stdlib.h"},
+        {"ident":"ldexp", "header":"math.h"},
+        {"ident":"ldexpf", "header":"math.h"},
+        {"ident":"ldexpl", "header":"math.h"},
+        {"ident":"ldiv", "header":"stdlib.h"},
+        {"ident":"lgamma", "header":"math.h"},
+        {"ident":"lgammaf", "header":"math.h"},
+        {"ident":"lgammal", "header":"math.h"},
+        {"ident":"llabs", "header":"stdlib.h"},
+        {"ident":"lldiv", "header":"stdlib.h"},
+        {"ident":"llrint", "header":"math.h"},
+        {"ident":"llrintf", "header":"math.h"},
+        {"ident":"llrintl", "header":"math.h"},
+        {"ident":"llround", "header":"math.h"},
+        {"ident":"llroundf", "header":"math.h"},
+        {"ident":"llroundl", "header":"math.h"},
+        {"ident":"localeconv", "header":"locale.h"},
+        {"ident":"localtime", "header":"time.h"},
+        {"ident":"localtime_s", "header":"time.h"},
+        {"ident":"log", "header":"math.h"},
+        {"ident":"log10", "header":"math.h"},
+        {"ident":"log10f", "header":"math.h"},
+        {"ident":"log10l", "header":"math.h"},
+        {"ident":"log1p", "header":"math.h"},
+        {"ident":"log1pf", "header":"math.h"},
+        {"ident":"log1pl", "header":"math.h"},
+        {"ident":"log2", "header":"math.h"},
+        {"ident":"log2f", "header":"math.h"},
+        {"ident":"log2l", "header":"math.h"},
+        {"ident":"logb", "header":"math.h"},
+        {"ident":"logbf", "header":"math.h"},
+        {"ident":"logbl", "header":"math.h"},
+        {"ident":"logf", "header":"math.h"},
+        {"ident":"logl", "header":"math.h"},
+        {"ident":"longjmp", "header":"setjmp.h"},
+        {"ident":"lrint", "header":"math.h"},
+        {"ident":"lrintf", "header":"math.h"},
+        {"ident":"lrintl", "header":"math.h"},
+        {"ident":"lround", "header":"math.h"},
+        {"ident":"lroundf", "header":"math.h"},
+        {"ident":"lroundl", "header":"math.h"},
+        {"ident":"malloc", "header":"stdlib.h"},
+        {"ident":"mblen", "header":"stdlib.h"},
+        {"ident":"mbrlen", "header":"wchar.h"},
+        {"ident":"mbrtoc16", "header":"uchar.h"},
+        {"ident":"mbrtoc32", "header":"uchar.h"},
+        {"ident":"mbrtowc", "header":"wchar.h"},
+        {"ident":"mbsinit", "header":"wchar.h"},
+        {"ident":"mbsrtowcs", "header":"wchar.h"},
+        {"ident":"mbsrtowcs_s", "header":"wchar.h"},
+        {"ident":"mbstowcs", "header":"stdlib.h"},
+        {"ident":"mbstowcs_s", "header":"stdlib.h"},
+        {"ident":"mbtowc", "header":"stdlib.h"},
+        {"ident":"memchr", "header":"string.h"},
+        {"ident":"memcmp", "header":"string.h"},
+        {"ident":"memcpy", "header":"string.h"},
+        {"ident":"memcpy_s", "header":"string.h"},
+        {"ident":"memmove", "header":"string.h"},
+        {"ident":"memmove_s", "header":"string.h"},
+        {"ident":"memset", "header":"string.h"},
+        {"ident":"memset_s", "header":"string.h"},
+        {"ident":"mktime", "header":"time.h"},
+        {"ident":"modf", "header":"math.h"},
+        {"ident":"modff", "header":"math.h"},
+        {"ident":"modfl", "header":"math.h"},
+        {"ident":"mtx_destroy", "header":"threads.h"},
+        {"ident":"mtx_init", "header":"threads.h"},
+        {"ident":"mtx_lock", "header":"threads.h"},
+        {"ident":"mtx_timedlock", "header":"threads.h"},
+        {"ident":"mtx_trylock", "header":"threads.h"},
+        {"ident":"mtx_unlock", "header":"threads.h"},
+        {"ident":"nan", "header":"math.h"},
+        {"ident":"nanf", "header":"math.h"},
+        {"ident":"nanl", "header":"math.h"},
+        {"ident":"nearbyint", "header":"math.h"},
+        {"ident":"nearbyintf", "header":"math.h"},
+        {"ident":"nearbyintl", "header":"math.h"},
+        {"ident":"nextafter", "header":"math.h"},
+        {"ident":"nextafterf", "header":"math.h"},
+        {"ident":"nextafterl", "header":"math.h"},
+        {"ident":"nexttoward", "header":"math.h"},
+        {"ident":"nexttowardf", "header":"math.h"},
+        {"ident":"nexttowardl", "header":"math.h"},
+        {"ident":"perror", "header":"stdio.h"},
+        {"ident":"pow", "header":"math.h"},
+        {"ident":"powf", "header":"math.h"},
+        {"ident":"powl", "header":"math.h"},
+        {"ident":"printf", "header":"stdio.h"},
+        {"ident":"printf_s", "header":"stdio.h"},
+        {"ident":"putc", "header":"stdio.h"},
+        {"ident":"putchar", "header":"stdio.h"},
+        {"ident":"puts", "header":"stdio.h"},
+        {"ident":"putwc", "header":"wchar.h"},
+        {"ident":"putwchar", "header":"wchar.h"},
+        {"ident":"qsort", "header":"stdlib.h"},
+        {"ident":"qsort_s", "header":"stdlib.h"},
+        {"ident":"quick_exit", "header":"stdlib.h"},
+        {"ident":"raise", "header":"signal.h"},
+        {"ident":"rand", "header":"stdlib.h"},
+        {"ident":"realloc", "header":"stdlib.h"},
+        {"ident":"remainder", "header":"math.h"},
+        {"ident":"remainderf", "header":"math.h"},
+        {"ident":"remainderl", "header":"math.h"},
+        {"ident":"remove", "header":"stdio.h"},
+        {"ident":"remquo", "header":"math.h"},
+        {"ident":"remquof", "header":"math.h"},
+        {"ident":"remquol", "header":"math.h"},
+        {"ident":"rename", "header":"stdio.h"},
+        {"ident":"rewind", "header":"stdio.h"},
+        {"ident":"rint", "header":"math.h"},
+        {"ident":"rintf", "header":"math.h"},
+        {"ident":"rintl", "header":"math.h"},
+        {"ident":"round", "header":"math.h"},
+        {"ident":"roundf", "header":"math.h"},
+        {"ident":"roundl", "header":"math.h"},
+        {"ident":"scalbln", "header":"math.h"},
+        {"ident":"scalblnf", "header":"math.h"},
+        {"ident":"scalblnl", "header":"math.h"},
+        {"ident":"scalbn", "header":"math.h"},
+        {"ident":"scalbnf", "header":"math.h"},
+        {"ident":"scalbnl", "header":"math.h"},
+        {"ident":"scanf", "header":"stdio.h"},
+        {"ident":"scanf_s", "header":"stdio.h"},
+        {"ident":"set_constraint_handler_s", "header":"stdlib.h"},
+        {"ident":"setbuf", "header":"stdio.h"},
+        {"ident":"setjmp", "header":"setjmp.h"},
+        {"ident":"setlocale", "header":"locale.h"},
+        {"ident":"setvbuf", "header":"stdio.h"},
+        {"ident":"signal", "header":"signal.h"},
+        {"ident":"signbit", "header":"math.h"},
+        {"ident":"sin", "header":"math.h"},
+        {"ident":"sinf", "header":"math.h"},
+        {"ident":"sinh", "header":"math.h"},
+        {"ident":"sinhf", "header":"math.h"},
+        {"ident":"sinhl", "header":"math.h"},
+        {"ident":"sinl", "header":"math.h"},
+        {"ident":"snprintf", "header":"stdio.h"},
+        {"ident":"snprintf_s", "header":"stdio.h"},
+        {"ident":"snwprintf_s", "header":"wchar.h"},
+        {"ident":"sprintf", "header":"stdio.h"},
+        {"ident":"sprintf_s", "header":"stdio.h"},
+        {"ident":"sqrt", "header":"math.h"},
+        {"ident":"sqrtf", "header":"math.h"},
+        {"ident":"sqrtl", "header":"math.h"},
+        {"ident":"srand", "header":"stdlib.h"},
+        {"ident":"sscanf", "header":"stdio.h"},
+        {"ident":"sscanf_s", "header":"stdio.h"},
+        {"ident":"strcat", "header":"string.h"},
+        {"ident":"strcat_s", "header":"string.h"},
+        {"ident":"strchr", "header":"string.h"},
+        {"ident":"strcmp", "header":"string.h"},
+        {"ident":"strcoll", "header":"string.h"},
+        {"ident":"strcpy", "header":"string.h"},
+        {"ident":"strcpy_s", "header":"string.h"},
+        {"ident":"strcspn", "header":"string.h"},
+        {"ident":"strerror", "header":"string.h"},
+        {"ident":"strerror_s", "header":"string.h"},
+        {"ident":"strerrorlen_s", "header":"string.h"},
+        {"ident":"strftime", "header":"time.h"},
+        {"ident":"strlen", "header":"string.h"},
+        {"ident":"strncat", "header":"string.h"},
+        {"ident":"strncat_s", "header":"string.h"},
+        {"ident":"strncmp", "header":"string.h"},
+        {"ident":"strncpy", "header":"string.h"},
+        {"ident":"strncpy_s", "header":"string.h"},
+        {"ident":"strnlen_s", "header":"string.h"},
+        {"ident":"strpbrk", "header":"string.h"},
+        {"ident":"strrchr", "header":"string.h"},
+        {"ident":"strspn", "header":"string.h"},
+        {"ident":"strstr", "header":"string.h"},
+        {"ident":"strtod", "header":"stdlib.h"},
+        {"ident":"strtof", "header":"stdlib.h"},
+        {"ident":"strtoimax", "header":"inttypes.h"},
+        {"ident":"strtok", "header":"string.h"},
+        {"ident":"strtok_s", "header":"string.h"},
+        {"ident":"strtol", "header":"stdlib.h"},
+        {"ident":"strtold", "header":"stdlib.h"},
+        {"ident":"strtoll", "header":"stdlib.h"},
+        {"ident":"strtoul", "header":"stdlib.h"},
+        {"ident":"strtoull", "header":"stdlib.h"},
+        {"ident":"strtoumax", "header":"inttypes.h"},
+        {"ident":"strxfrm", "header":"string.h"},
+        {"ident":"swprintf", "header":"wchar.h"},
+        {"ident":"swprintf_s", "header":"wchar.h"},
+        {"ident":"swscanf", "header":"wchar.h"},
+        {"ident":"swscanf_s", "header":"wchar.h"},
+        {"ident":"system", "header":"stdlib.h"},
+        {"ident":"tan", "header":"math.h"},
+        {"ident":"tanf", "header":"math.h"},
+        {"ident":"tanh", "header":"math.h"},
+        {"ident":"tanhf", "header":"math.h"},
+        {"ident":"tanhl", "header":"math.h"},
+        {"ident":"tanl", "header":"math.h"},
+        {"ident":"tgamma", "header":"math.h"},
+        {"ident":"tgammaf", "header":"math.h"},
+        {"ident":"tgammal", "header":"math.h"},
+        {"ident":"thrd_create", "header":"threads.h"},
+        {"ident":"thrd_current", "header":"threads.h"},
+        {"ident":"thrd_detach", "header":"threads.h"},
+        {"ident":"thrd_equal", "header":"threads.h"},
+        {"ident":"thrd_exit", "header":"threads.h"},
+        {"ident":"thrd_join", "header":"threads.h"},
+        {"ident":"thrd_sleep", "header":"threads.h"},
+        {"ident":"thrd_yield", "header":"threads.h"},
+        {"ident":"time", "header":"time.h"},
+        {"ident":"timespec_get", "header":"time.h"},
+        {"ident":"tmpfile", "header":"stdio.h"},
+        {"ident":"tmpfile_s", "header":"stdio.h"},
+        {"ident":"tmpnam", "header":"stdio.h"},
+        {"ident":"tmpnam_s", "header":"stdio.h"},
+        {"ident":"tolower", "header":"ctype.h"},
+        {"ident":"toupper", "header":"ctype.h"},
+        {"ident":"towctrans", "header":"wctype.h"},
+        {"ident":"towlower", "header":"wctype.h"},
+        {"ident":"towupper", "header":"wctype.h"},
+        {"ident":"trunc", "header":"math.h"},
+        {"ident":"truncf", "header":"math.h"},
+        {"ident":"truncl", "header":"math.h"},
+        {"ident":"tss_create", "header":"threads.h"},
+        {"ident":"tss_delete", "header":"threads.h"},
+        {"ident":"tss_get", "header":"threads.h"},
+        {"ident":"tss_set", "header":"threads.h"},
+        {"ident":"ungetc", "header":"stdio.h"},
+        {"ident":"ungetwc", "header":"wchar.h"},
+        {"ident":"va_arg", "header":"stdarg.h"},
+        {"ident":"va_copy", "header":"stdarg.h"},
+        {"ident":"va_end", "header":"stdarg.h"},
+        {"ident":"va_start", "header":"stdarg.h"},
+        {"ident":"vfprintf", "header":"stdio.h"},
+        {"ident":"vfprintf_s", "header":"stdio.h"},
+        {"ident":"vfscanf", "header":"stdio.h"},
+        {"ident":"vfscanf_s", "header":"stdio.h"},
+        {"ident":"vfwprintf", "header":"wchar.h"},
+        {"ident":"vfwprintf_s", "header":"wchar.h"},
+        {"ident":"vfwscanf", "header":"wchar.h"},
+        {"ident":"vfwscanf_s", "header":"wchar.h"},
+        {"ident":"vprintf", "header":"stdio.h"},
+        {"ident":"vprintf_s", "header":"stdio.h"},
+        {"ident":"vscanf", "header":"stdio.h"},
+        {"ident":"vscanf_s", "header":"stdio.h"},
+        {"ident":"vsnprintf", "header":"stdio.h"},
+        {"ident":"vsnprintf_s", "header":"stdio.h"},
+        {"ident":"vsnwprintf_s", "header":"wchar.h"},
+        {"ident":"vsprintf", "header":"stdio.h"},
+        {"ident":"vsprintf_s", "header":"stdio.h"},
+        {"ident":"vsscanf", "header":"stdio.h"},
+        {"ident":"vsscanf_s", "header":"stdio.h"},
+        {"ident":"vswprintf", "header":"wchar.h"},
+        {"ident":"vswprintf_s", "header":"wchar.h"},
+        {"ident":"vswscanf", "header":"wchar.h"},
+        {"ident":"vswscanf_s", "header":"wchar.h"},
+        {"ident":"vwprintf", "header":"wchar.h"},
+        {"ident":"vwprintf_s", "header":"wchar.h"},
+        {"ident":"vwscanf", "header":"wchar.h"},
+        {"ident":"vwscanf_s", "header":"wchar.h"},
+        {"ident":"wcrtomb", "header":"wchar.h"},
+        {"ident":"wcrtomb_s", "header":"wchar.h"},
+        {"ident":"wcscat", "header":"wchar.h"},
+        {"ident":"wcscat_s", "header":"wchar.h"},
+        {"ident":"wcschr", "header":"wchar.h"},
+        {"ident":"wcscmp", "header":"wchar.h"},
+        {"ident":"wcscoll", "header":"wchar.h"},
+        {"ident":"wcscpy", "header":"wchar.h"},
+        {"ident":"wcscpy_s", "header":"wchar.h"},
+        {"ident":"wcscspn", "header":"wchar.h"},
+        {"ident":"wcsftime", "header":"wchar.h"},
+        {"ident":"wcslen", "header":"wchar.h"},
+        {"ident":"wcsncat", "header":"wchar.h"},
+        {"ident":"wcsncat_s", "header":"wchar.h"},
+        {"ident":"wcsncmp", "header":"wchar.h"},
+        {"ident":"wcsncpy", "header":"wchar.h"},
+        {"ident":"wcsncpy_s", "header":"wchar.h"},
+        {"ident":"wcsnlen_s", "header":"wchar.h"},
+        {"ident":"wcspbrk", "header":"wchar.h"},
+        {"ident":"wcsrchr", "header":"wchar.h"},
+        {"ident":"wcsrtombs", "header":"wchar.h"},
+        {"ident":"wcsrtombs_s", "header":"wchar.h"},
+        {"ident":"wcsspn", "header":"wchar.h"},
+        {"ident":"wcsstr", "header":"wchar.h"},
+        {"ident":"wcstod", "header":"wchar.h"},
+        {"ident":"wcstof", "header":"wchar.h"},
+        {"ident":"wcstoimax", "header":"inttypes.h"},
+        {"ident":"wcstok", "header":"wchar.h"},
+        {"ident":"wcstok_s", "header":"wchar.h"},
+        {"ident":"wcstol", "header":"wchar.h"},
+        {"ident":"wcstold", "header":"wchar.h"},
+        {"ident":"wcstoll", "header":"wchar.h"},
+        {"ident":"wcstombs", "header":"stdlib.h"},
+        {"ident":"wcstombs_s", "header":"stdlib.h"},
+        {"ident":"wcstoul", "header":"wchar.h"},
+        {"ident":"wcstoull", "header":"wchar.h"},
+        {"ident":"wcstoumax", "header":"inttypes.h"},
+        {"ident":"wcsxfrm", "header":"wchar.h"},
+        {"ident":"wctob", "header":"wchar.h"},
+        {"ident":"wctomb", "header":"stdlib.h"},
+        {"ident":"wctomb_s", "header":"stdlib.h"},
+        {"ident":"wctrans", "header":"wctype.h"},
+        {"ident":"wctype", "header":"wctype.h"},
+        {"ident":"wmemchr", "header":"wchar.h"},
+        {"ident":"wmemcmp", "header":"wchar.h"},
+        {"ident":"wmemcpy", "header":"wchar.h"},
+        {"ident":"wmemcpy_s", "header":"wchar.h"},
+        {"ident":"wmemmove", "header":"wchar.h"},
+        {"ident":"wmemmove_s", "header":"wchar.h"},
+        {"ident":"wmemset", "header":"wchar.h"},
+        {"ident":"wprintf", "header":"wchar.h"},
+        {"ident":"wprintf_s", "header":"wchar.h"},
+        {"ident":"wscanf", "header":"wchar.h"},
+        {"ident":"wscanf_s", "header":"wchar.h"}
+    ]
+}
diff --git a/share/compliance/glibc_functions.json b/share/compliance/glibc_functions.json
new file mode 100644
index 0000000000000000000000000000000000000000..9e21f7e79ea74fe74d18fbaf24cc9977bba09679
--- /dev/null
+++ b/share/compliance/glibc_functions.json
@@ -0,0 +1,1594 @@
+{
+    "description": "Function and macro identifiers defined in the GNU C Library",
+    "last_update": "2017-11",
+    "source": "glibc - https://www.gnu.org/software/libc/manual/html_node/Function-Index.html",
+    "data":[
+        {"ident":"__fbufsize"},
+        {"ident":"__flbf"},
+        {"ident":"__fpending"},
+        {"ident":"__fpurge"},
+        {"ident":"__freadable"},
+        {"ident":"__freading"},
+        {"ident":"__fsetlocking"},
+        {"ident":"__fwritable"},
+        {"ident":"__fwriting"},
+        {"ident":"__ppc_get_timebase"},
+        {"ident":"__ppc_get_timebase_freq"},
+        {"ident":"__ppc_mdoio"},
+        {"ident":"__ppc_mdoom"},
+        {"ident":"__ppc_set_ppr_low"},
+        {"ident":"__ppc_set_ppr_med"},
+        {"ident":"__ppc_set_ppr_med_high"},
+        {"ident":"__ppc_set_ppr_med_low"},
+        {"ident":"__ppc_set_ppr_very_low"},
+        {"ident":"__ppc_yield"},
+        {"ident":"__va_copy"},
+        {"ident":"_exit"},
+        {"ident":"_Exit"},
+        {"ident":"_flushlbf"},
+        {"ident":"_tolower"},
+        {"ident":"_toupper"},
+        {"ident":"a64l"},
+        {"ident":"abort"},
+        {"ident":"abs"},
+        {"ident":"accept"},
+        {"ident":"access"},
+        {"ident":"acos"},
+        {"ident":"acosf"},
+        {"ident":"acosfN"},
+        {"ident":"acosfNx"},
+        {"ident":"acosh"},
+        {"ident":"acoshf"},
+        {"ident":"acoshfN"},
+        {"ident":"acoshfNx"},
+        {"ident":"acoshl"},
+        {"ident":"acosl"},
+        {"ident":"addmntent"},
+        {"ident":"addseverity"},
+        {"ident":"adjtime"},
+        {"ident":"adjtimex"},
+        {"ident":"aio_cancel"},
+        {"ident":"aio_cancel64"},
+        {"ident":"aio_error"},
+        {"ident":"aio_error64"},
+        {"ident":"aio_fsync"},
+        {"ident":"aio_fsync64"},
+        {"ident":"aio_init"},
+        {"ident":"aio_read"},
+        {"ident":"aio_read64"},
+        {"ident":"aio_return"},
+        {"ident":"aio_return64"},
+        {"ident":"aio_suspend"},
+        {"ident":"aio_suspend64"},
+        {"ident":"aio_write"},
+        {"ident":"aio_write64"},
+        {"ident":"alarm"},
+        {"ident":"aligned_alloc"},
+        {"ident":"alloca"},
+        {"ident":"alphasort"},
+        {"ident":"alphasort64"},
+        {"ident":"argp_error"},
+        {"ident":"argp_failure"},
+        {"ident":"argp_help"},
+        {"ident":"argp_parse"},
+        {"ident":"argp_state_help"},
+        {"ident":"argp_usage"},
+        {"ident":"argz_add"},
+        {"ident":"argz_add_sep"},
+        {"ident":"argz_append"},
+        {"ident":"argz_count"},
+        {"ident":"argz_create"},
+        {"ident":"argz_create_sep"},
+        {"ident":"argz_delete"},
+        {"ident":"argz_extract"},
+        {"ident":"argz_insert"},
+        {"ident":"argz_next"},
+        {"ident":"argz_replace"},
+        {"ident":"argz_stringify"},
+        {"ident":"asctime"},
+        {"ident":"asctime_r"},
+        {"ident":"asin"},
+        {"ident":"asinf"},
+        {"ident":"asinfN"},
+        {"ident":"asinfNx"},
+        {"ident":"asinh"},
+        {"ident":"asinhf"},
+        {"ident":"asinhfN"},
+        {"ident":"asinhfNx"},
+        {"ident":"asinhl"},
+        {"ident":"asinl"},
+        {"ident":"asprintf"},
+        {"ident":"assert"},
+        {"ident":"assert_perror"},
+        {"ident":"atan"},
+        {"ident":"atan2"},
+        {"ident":"atan2f"},
+        {"ident":"atan2fN"},
+        {"ident":"atan2fNx"},
+        {"ident":"atan2l"},
+        {"ident":"atanf"},
+        {"ident":"atanfN"},
+        {"ident":"atanfNx"},
+        {"ident":"atanh"},
+        {"ident":"atanhf"},
+        {"ident":"atanhfN"},
+        {"ident":"atanhfNx"},
+        {"ident":"atanhl"},
+        {"ident":"atanl"},
+        {"ident":"atexit"},
+        {"ident":"atof"},
+        {"ident":"atoi"},
+        {"ident":"atol"},
+        {"ident":"atoll"},
+        {"ident":"backtrace"},
+        {"ident":"backtrace_symbols"},
+        {"ident":"backtrace_symbols_fd"},
+        {"ident":"basename"},
+        {"ident":"basename"},
+        {"ident":"bcmp"},
+        {"ident":"bcopy"},
+        {"ident":"bind"},
+        {"ident":"bind_textdomain_codeset"},
+        {"ident":"bindtextdomain"},
+        {"ident":"brk"},
+        {"ident":"bsearch"},
+        {"ident":"btowc"},
+        {"ident":"bzero"},
+        {"ident":"cabs"},
+        {"ident":"cabsf"},
+        {"ident":"cabsfN"},
+        {"ident":"cabsfNx"},
+        {"ident":"cabsl"},
+        {"ident":"cacos"},
+        {"ident":"cacosf"},
+        {"ident":"cacosfN"},
+        {"ident":"cacosfNx"},
+        {"ident":"cacosh"},
+        {"ident":"cacoshf"},
+        {"ident":"cacoshfN"},
+        {"ident":"cacoshfNx"},
+        {"ident":"cacoshl"},
+        {"ident":"cacosl"},
+        {"ident":"calloc"},
+        {"ident":"canonicalize"},
+        {"ident":"canonicalize_file_name"},
+        {"ident":"canonicalizef"},
+        {"ident":"canonicalizefN"},
+        {"ident":"canonicalizefNx"},
+        {"ident":"canonicalizel"},
+        {"ident":"carg"},
+        {"ident":"cargf"},
+        {"ident":"cargfN"},
+        {"ident":"cargfNx"},
+        {"ident":"cargl"},
+        {"ident":"casin"},
+        {"ident":"casinf"},
+        {"ident":"casinfN"},
+        {"ident":"casinfNx"},
+        {"ident":"casinh"},
+        {"ident":"casinhf"},
+        {"ident":"casinhfN"},
+        {"ident":"casinhfNx"},
+        {"ident":"casinhl"},
+        {"ident":"casinl"},
+        {"ident":"catan"},
+        {"ident":"catanf"},
+        {"ident":"catanfN"},
+        {"ident":"catanfNx"},
+        {"ident":"catanh"},
+        {"ident":"catanhf"},
+        {"ident":"catanhfN"},
+        {"ident":"catanhfNx"},
+        {"ident":"catanhl"},
+        {"ident":"catanl"},
+        {"ident":"catclose"},
+        {"ident":"catgets"},
+        {"ident":"catopen"},
+        {"ident":"cbc_crypt"},
+        {"ident":"cbrt"},
+        {"ident":"cbrtf"},
+        {"ident":"cbrtfN"},
+        {"ident":"cbrtfNx"},
+        {"ident":"cbrtl"},
+        {"ident":"ccos"},
+        {"ident":"ccosf"},
+        {"ident":"ccosfN"},
+        {"ident":"ccosfNx"},
+        {"ident":"ccosh"},
+        {"ident":"ccoshf"},
+        {"ident":"ccoshfN"},
+        {"ident":"ccoshfNx"},
+        {"ident":"ccoshl"},
+        {"ident":"ccosl"},
+        {"ident":"ceil"},
+        {"ident":"ceilf"},
+        {"ident":"ceilfN"},
+        {"ident":"ceilfNx"},
+        {"ident":"ceill"},
+        {"ident":"cexp"},
+        {"ident":"cexpf"},
+        {"ident":"cexpfN"},
+        {"ident":"cexpfNx"},
+        {"ident":"cexpl"},
+        {"ident":"cfgetispeed"},
+        {"ident":"cfgetospeed"},
+        {"ident":"cfmakeraw"},
+        {"ident":"cfsetispeed"},
+        {"ident":"cfsetospeed"},
+        {"ident":"cfsetspeed"},
+        {"ident":"chdir"},
+        {"ident":"chmod"},
+        {"ident":"chmod"},
+        {"ident":"chown"},
+        {"ident":"cimag"},
+        {"ident":"cimagf"},
+        {"ident":"cimagfN"},
+        {"ident":"cimagfNx"},
+        {"ident":"cimagl"},
+        {"ident":"clearenv"},
+        {"ident":"clearerr"},
+        {"ident":"clearerr_unlocked"},
+        {"ident":"clock"},
+        {"ident":"clog"},
+        {"ident":"clog10"},
+        {"ident":"clog10f"},
+        {"ident":"clog10fN"},
+        {"ident":"clog10fNx"},
+        {"ident":"clog10l"},
+        {"ident":"clogf"},
+        {"ident":"clogfN"},
+        {"ident":"clogfNx"},
+        {"ident":"clogl"},
+        {"ident":"close"},
+        {"ident":"closedir"},
+        {"ident":"closelog"},
+        {"ident":"confstr"},
+        {"ident":"conj"},
+        {"ident":"conjf"},
+        {"ident":"conjfN"},
+        {"ident":"conjfNx"},
+        {"ident":"conjl"},
+        {"ident":"connect"},
+        {"ident":"continue"},
+        {"ident":"copysign"},
+        {"ident":"copysignf"},
+        {"ident":"copysignfN"},
+        {"ident":"copysignfNx"},
+        {"ident":"copysignl"},
+        {"ident":"cos"},
+        {"ident":"cosf"},
+        {"ident":"cosfN"},
+        {"ident":"cosfNx"},
+        {"ident":"cosh"},
+        {"ident":"coshf"},
+        {"ident":"coshfN"},
+        {"ident":"coshfNx"},
+        {"ident":"coshl"},
+        {"ident":"cosl"},
+        {"ident":"cpow"},
+        {"ident":"cpowf"},
+        {"ident":"cpowfN"},
+        {"ident":"cpowfNx"},
+        {"ident":"cpowl"},
+        {"ident":"cproj"},
+        {"ident":"cprojf"},
+        {"ident":"cprojfN"},
+        {"ident":"cprojfNx"},
+        {"ident":"cprojl"},
+        {"ident":"CPU_CLR"},
+        {"ident":"CPU_ISSET"},
+        {"ident":"CPU_SET"},
+        {"ident":"CPU_ZERO"},
+        {"ident":"creal"},
+        {"ident":"crealf"},
+        {"ident":"crealfN"},
+        {"ident":"crealfNx"},
+        {"ident":"creall"},
+        {"ident":"creat"},
+        {"ident":"creat64"},
+        {"ident":"crypt"},
+        {"ident":"crypt_r"},
+        {"ident":"csin"},
+        {"ident":"csinf"},
+        {"ident":"csinfN"},
+        {"ident":"csinfNx"},
+        {"ident":"csinh"},
+        {"ident":"csinhf"},
+        {"ident":"csinhfN"},
+        {"ident":"csinhfNx"},
+        {"ident":"csinhl"},
+        {"ident":"csinl"},
+        {"ident":"csqrt"},
+        {"ident":"csqrtf"},
+        {"ident":"csqrtfN"},
+        {"ident":"csqrtfNx"},
+        {"ident":"csqrtl"},
+        {"ident":"ctan"},
+        {"ident":"ctanf"},
+        {"ident":"ctanfN"},
+        {"ident":"ctanfNx"},
+        {"ident":"ctanh"},
+        {"ident":"ctanhf"},
+        {"ident":"ctanhfN"},
+        {"ident":"ctanhfNx"},
+        {"ident":"ctanhl"},
+        {"ident":"ctanl"},
+        {"ident":"ctermid"},
+        {"ident":"ctime"},
+        {"ident":"ctime_r"},
+        {"ident":"cuserid"},
+        {"ident":"dcgettext"},
+        {"ident":"dcngettext"},
+        {"ident":"DES_FAILED"},
+        {"ident":"des_setparity"},
+        {"ident":"dgettext"},
+        {"ident":"difftime"},
+        {"ident":"dirfd"},
+        {"ident":"dirname"},
+        {"ident":"div"},
+        {"ident":"dngettext"},
+        {"ident":"drand48"},
+        {"ident":"drand48_r"},
+        {"ident":"drem"},
+        {"ident":"dremf"},
+        {"ident":"dreml"},
+        {"ident":"DTTOIF"},
+        {"ident":"dup"},
+        {"ident":"dup2"},
+        {"ident":"ecb_crypt"},
+        {"ident":"ecvt"},
+        {"ident":"ecvt_r"},
+        {"ident":"encrypt"},
+        {"ident":"encrypt_r"},
+        {"ident":"endfsent"},
+        {"ident":"endgrent"},
+        {"ident":"endhostent"},
+        {"ident":"endmntent"},
+        {"ident":"endnetent"},
+        {"ident":"endnetgrent"},
+        {"ident":"endprotoent"},
+        {"ident":"endpwent"},
+        {"ident":"endservent"},
+        {"ident":"endutent"},
+        {"ident":"endutxent"},
+        {"ident":"envz_add"},
+        {"ident":"envz_entry"},
+        {"ident":"envz_get"},
+        {"ident":"envz_merge"},
+        {"ident":"envz_remove"},
+        {"ident":"envz_strip"},
+        {"ident":"erand48"},
+        {"ident":"erand48_r"},
+        {"ident":"erf"},
+        {"ident":"erfc"},
+        {"ident":"erfcf"},
+        {"ident":"erfcfN"},
+        {"ident":"erfcfNx"},
+        {"ident":"erfcl"},
+        {"ident":"erff"},
+        {"ident":"erffN"},
+        {"ident":"erffNx"},
+        {"ident":"erfl"},
+        {"ident":"err"},
+        {"ident":"error"},
+        {"ident":"error_at_line"},
+        {"ident":"errx"},
+        {"ident":"execl"},
+        {"ident":"execle"},
+        {"ident":"execlp"},
+        {"ident":"execv"},
+        {"ident":"execve"},
+        {"ident":"execvp"},
+        {"ident":"exit"},
+        {"ident":"exp"},
+        {"ident":"exp10"},
+        {"ident":"exp10f"},
+        {"ident":"exp10fN"},
+        {"ident":"exp10fNx"},
+        {"ident":"exp10l"},
+        {"ident":"exp2"},
+        {"ident":"exp2f"},
+        {"ident":"exp2fN"},
+        {"ident":"exp2fNx"},
+        {"ident":"exp2l"},
+        {"ident":"expf"},
+        {"ident":"expfN"},
+        {"ident":"expfNx"},
+        {"ident":"expl"},
+        {"ident":"explicit_bzero"},
+        {"ident":"expm1"},
+        {"ident":"expm1f"},
+        {"ident":"expm1fN"},
+        {"ident":"expm1fNx"},
+        {"ident":"expm1l"},
+        {"ident":"fabs"},
+        {"ident":"fabsf"},
+        {"ident":"fabsfN"},
+        {"ident":"fabsfNx"},
+        {"ident":"fabsl"},
+        {"ident":"fchdir"},
+        {"ident":"fchmod"},
+        {"ident":"fchown"},
+        {"ident":"fclose"},
+        {"ident":"fcloseall"},
+        {"ident":"fcntl"},
+        {"ident":"fcvt"},
+        {"ident":"fcvt_r"},
+        {"ident":"FD_CLR"},
+        {"ident":"FD_ISSET"},
+        {"ident":"FD_SET"},
+        {"ident":"FD_ZERO"},
+        {"ident":"fdatasync"},
+        {"ident":"fdim"},
+        {"ident":"fdimf"},
+        {"ident":"fdimfN"},
+        {"ident":"fdimfNx"},
+        {"ident":"fdiml"},
+        {"ident":"fdopen"},
+        {"ident":"fdopendir"},
+        {"ident":"feclearexcept"},
+        {"ident":"fedisableexcept"},
+        {"ident":"feenableexcept"},
+        {"ident":"fegetenv"},
+        {"ident":"fegetexcept"},
+        {"ident":"fegetexceptflag"},
+        {"ident":"fegetmode"},
+        {"ident":"fegetround"},
+        {"ident":"feholdexcept"},
+        {"ident":"feof"},
+        {"ident":"feof_unlocked"},
+        {"ident":"feraiseexcept"},
+        {"ident":"ferror"},
+        {"ident":"ferror_unlocked"},
+        {"ident":"fesetenv"},
+        {"ident":"fesetexcept"},
+        {"ident":"fesetexceptflag"},
+        {"ident":"fesetmode"},
+        {"ident":"fesetround"},
+        {"ident":"fetestexcept"},
+        {"ident":"fetestexceptflag"},
+        {"ident":"feupdateenv"},
+        {"ident":"fflush"},
+        {"ident":"fflush_unlocked"},
+        {"ident":"fgetc"},
+        {"ident":"fgetc_unlocked"},
+        {"ident":"fgetgrent"},
+        {"ident":"fgetgrent_r"},
+        {"ident":"fgetpos"},
+        {"ident":"fgetpos64"},
+        {"ident":"fgetpwent"},
+        {"ident":"fgetpwent_r"},
+        {"ident":"fgets"},
+        {"ident":"fgets_unlocked"},
+        {"ident":"fgetwc"},
+        {"ident":"fgetwc_unlocked"},
+        {"ident":"fgetws"},
+        {"ident":"fgetws_unlocked"},
+        {"ident":"fileno"},
+        {"ident":"fileno_unlocked"},
+        {"ident":"finite"},
+        {"ident":"finitef"},
+        {"ident":"finitel"},
+        {"ident":"flockfile"},
+        {"ident":"floor"},
+        {"ident":"floorf"},
+        {"ident":"floorfN"},
+        {"ident":"floorfNx"},
+        {"ident":"floorl"},
+        {"ident":"fma"},
+        {"ident":"fmaf"},
+        {"ident":"fmafN"},
+        {"ident":"fmafNx"},
+        {"ident":"fmal"},
+        {"ident":"fmax"},
+        {"ident":"fmaxf"},
+        {"ident":"fmaxfN"},
+        {"ident":"fmaxfNx"},
+        {"ident":"fmaxl"},
+        {"ident":"fmaxmag"},
+        {"ident":"fmaxmagf"},
+        {"ident":"fmaxmagfN"},
+        {"ident":"fmaxmagfNx"},
+        {"ident":"fmaxmagl"},
+        {"ident":"fmemopen"},
+        {"ident":"fmin"},
+        {"ident":"fminf"},
+        {"ident":"fminfN"},
+        {"ident":"fminfNx"},
+        {"ident":"fminl"},
+        {"ident":"fminmag"},
+        {"ident":"fminmagf"},
+        {"ident":"fminmagfN"},
+        {"ident":"fminmagfNx"},
+        {"ident":"fminmagl"},
+        {"ident":"fmod"},
+        {"ident":"fmodf"},
+        {"ident":"fmodfN"},
+        {"ident":"fmodfNx"},
+        {"ident":"fmodl"},
+        {"ident":"fmtmsg"},
+        {"ident":"fnmatch"},
+        {"ident":"fopen"},
+        {"ident":"fopen64"},
+        {"ident":"fopencookie"},
+        {"ident":"fork"},
+        {"ident":"forkpty"},
+        {"ident":"fpathconf"},
+        {"ident":"fpclassify"},
+        {"ident":"fprintf"},
+        {"ident":"fputc"},
+        {"ident":"fputc_unlocked"},
+        {"ident":"fputs"},
+        {"ident":"fputs_unlocked"},
+        {"ident":"fputwc"},
+        {"ident":"fputwc_unlocked"},
+        {"ident":"fputws"},
+        {"ident":"fputws_unlocked"},
+        {"ident":"fread"},
+        {"ident":"fread_unlocked"},
+        {"ident":"free"},
+        {"ident":"freopen"},
+        {"ident":"freopen64"},
+        {"ident":"frexp"},
+        {"ident":"frexpf"},
+        {"ident":"frexpfN"},
+        {"ident":"frexpfNx"},
+        {"ident":"frexpl"},
+        {"ident":"fromfp"},
+        {"ident":"fromfpf"},
+        {"ident":"fromfpfN"},
+        {"ident":"fromfpfNx"},
+        {"ident":"fromfpl"},
+        {"ident":"fromfpx"},
+        {"ident":"fromfpxf"},
+        {"ident":"fromfpxfN"},
+        {"ident":"fromfpxfNx"},
+        {"ident":"fromfpxl"},
+        {"ident":"fscanf"},
+        {"ident":"fseek"},
+        {"ident":"fseeko"},
+        {"ident":"fseeko64"},
+        {"ident":"fsetpos"},
+        {"ident":"fsetpos64"},
+        {"ident":"fstat"},
+        {"ident":"fstat64"},
+        {"ident":"fsync"},
+        {"ident":"ftell"},
+        {"ident":"ftello"},
+        {"ident":"ftello64"},
+        {"ident":"ftruncate"},
+        {"ident":"ftruncate64"},
+        {"ident":"ftrylockfile"},
+        {"ident":"ftw"},
+        {"ident":"ftw64"},
+        {"ident":"funlockfile"},
+        {"ident":"futimes"},
+        {"ident":"fwide"},
+        {"ident":"fwprintf"},
+        {"ident":"fwrite"},
+        {"ident":"fwrite_unlocked"},
+        {"ident":"fwscanf"},
+        {"ident":"gamma"},
+        {"ident":"gammaf"},
+        {"ident":"gammal"},
+        {"ident":"gcvt"},
+        {"ident":"get_avphys_pages"},
+        {"ident":"get_current_dir_name"},
+        {"ident":"get_nprocs"},
+        {"ident":"get_nprocs_conf"},
+        {"ident":"get_phys_pages"},
+        {"ident":"getauxval"},
+        {"ident":"getc"},
+        {"ident":"getc_unlocked"},
+        {"ident":"getchar"},
+        {"ident":"getchar_unlocked"},
+        {"ident":"getcontext"},
+        {"ident":"getcwd"},
+        {"ident":"getdate"},
+        {"ident":"getdate_r"},
+        {"ident":"getdelim"},
+        {"ident":"getdomainnname"},
+        {"ident":"getegid"},
+        {"ident":"getentropy"},
+        {"ident":"getenv"},
+        {"ident":"geteuid"},
+        {"ident":"getfsent"},
+        {"ident":"getfsfile"},
+        {"ident":"getfsspec"},
+        {"ident":"getgid"},
+        {"ident":"getgrent"},
+        {"ident":"getgrent_r"},
+        {"ident":"getgrgid"},
+        {"ident":"getgrgid_r"},
+        {"ident":"getgrnam"},
+        {"ident":"getgrnam_r"},
+        {"ident":"getgrouplist"},
+        {"ident":"getgroups"},
+        {"ident":"gethostbyaddr"},
+        {"ident":"gethostbyaddr_r"},
+        {"ident":"gethostbyname"},
+        {"ident":"gethostbyname2"},
+        {"ident":"gethostbyname2_r"},
+        {"ident":"gethostbyname_r"},
+        {"ident":"gethostent"},
+        {"ident":"gethostid"},
+        {"ident":"gethostname"},
+        {"ident":"getitimer"},
+        {"ident":"getline"},
+        {"ident":"getloadavg"},
+        {"ident":"getlogin"},
+        {"ident":"getmntent"},
+        {"ident":"getmntent_r"},
+        {"ident":"getnetbyaddr"},
+        {"ident":"getnetbyname"},
+        {"ident":"getnetent"},
+        {"ident":"getnetgrent"},
+        {"ident":"getnetgrent_r"},
+        {"ident":"getopt"},
+        {"ident":"getopt_long"},
+        {"ident":"getopt_long_only"},
+        {"ident":"getpagesize"},
+        {"ident":"getpass"},
+        {"ident":"getpayload"},
+        {"ident":"getpayloadf"},
+        {"ident":"getpayloadfN"},
+        {"ident":"getpayloadfNx"},
+        {"ident":"getpayloadl"},
+        {"ident":"getpeername"},
+        {"ident":"getpgid"},
+        {"ident":"getpgrp"},
+        {"ident":"getpid"},
+        {"ident":"getppid"},
+        {"ident":"getpriority"},
+        {"ident":"getprotobyname"},
+        {"ident":"getprotobynumber"},
+        {"ident":"getprotoent"},
+        {"ident":"getpt"},
+        {"ident":"getpwent"},
+        {"ident":"getpwent_r"},
+        {"ident":"getpwnam"},
+        {"ident":"getpwnam_r"},
+        {"ident":"getpwuid"},
+        {"ident":"getpwuid_r"},
+        {"ident":"getrandom"},
+        {"ident":"getrlimit"},
+        {"ident":"getrlimit64"},
+        {"ident":"getrusage"},
+        {"ident":"gets"},
+        {"ident":"getservbyname"},
+        {"ident":"getservbyport"},
+        {"ident":"getservent"},
+        {"ident":"getsid"},
+        {"ident":"getsockname"},
+        {"ident":"getsockopt"},
+        {"ident":"getsubopt"},
+        {"ident":"gettext"},
+        {"ident":"gettimeofday"},
+        {"ident":"getuid"},
+        {"ident":"getumask"},
+        {"ident":"getutent"},
+        {"ident":"getutent_r"},
+        {"ident":"getutid"},
+        {"ident":"getutid_r"},
+        {"ident":"getutline"},
+        {"ident":"getutline_r"},
+        {"ident":"getutmp"},
+        {"ident":"getutmpx"},
+        {"ident":"getutxent"},
+        {"ident":"getutxid"},
+        {"ident":"getutxline"},
+        {"ident":"getw"},
+        {"ident":"getwc"},
+        {"ident":"getwc_unlocked"},
+        {"ident":"getwchar"},
+        {"ident":"getwchar_unlocked"},
+        {"ident":"getwd"},
+        {"ident":"glob"},
+        {"ident":"glob64"},
+        {"ident":"globfree"},
+        {"ident":"globfree64"},
+        {"ident":"gmtime"},
+        {"ident":"gmtime_r"},
+        {"ident":"grantpt"},
+        {"ident":"grantpt"},
+        {"ident":"gsignal"},
+        {"ident":"gtty"},
+        {"ident":"hasmntopt"},
+        {"ident":"hcreate"},
+        {"ident":"hcreate_r"},
+        {"ident":"hdestroy"},
+        {"ident":"hdestroy_r"},
+        {"ident":"hsearch"},
+        {"ident":"hsearch_r"},
+        {"ident":"htonl"},
+        {"ident":"htons"},
+        {"ident":"hypot"},
+        {"ident":"hypotf"},
+        {"ident":"hypotfN"},
+        {"ident":"hypotfNx"},
+        {"ident":"hypotl"},
+        {"ident":"iconv"},
+        {"ident":"iconv_close"},
+        {"ident":"iconv_open"},
+        {"ident":"if_freenameindex"},
+        {"ident":"if_indextoname"},
+        {"ident":"if_nameindex"},
+        {"ident":"if_nametoindex"},
+        {"ident":"IFTODT"},
+        {"ident":"ilogb"},
+        {"ident":"ilogbf"},
+        {"ident":"ilogbfN"},
+        {"ident":"ilogbfNx"},
+        {"ident":"ilogbl"},
+        {"ident":"imaxabs"},
+        {"ident":"imaxdiv"},
+        {"ident":"index"},
+        {"ident":"inet_addr"},
+        {"ident":"inet_aton"},
+        {"ident":"inet_lnaof"},
+        {"ident":"inet_makeaddr"},
+        {"ident":"inet_netof"},
+        {"ident":"inet_network"},
+        {"ident":"inet_ntoa"},
+        {"ident":"inet_ntop"},
+        {"ident":"inet_pton"},
+        {"ident":"initgroups"},
+        {"ident":"initstate"},
+        {"ident":"initstate_r"},
+        {"ident":"innetgr"},
+        {"ident":"ioctl"},
+        {"ident":"isalnum"},
+        {"ident":"isalpha"},
+        {"ident":"isascii"},
+        {"ident":"isatty"},
+        {"ident":"isblank"},
+        {"ident":"iscanonical"},
+        {"ident":"iscntrl"},
+        {"ident":"isdigit"},
+        {"ident":"iseqsig"},
+        {"ident":"isfinite"},
+        {"ident":"isgraph"},
+        {"ident":"isgreater"},
+        {"ident":"isgreaterequal"},
+        {"ident":"isinf"},
+        {"ident":"isinff"},
+        {"ident":"isinfl"},
+        {"ident":"isless"},
+        {"ident":"islessequal"},
+        {"ident":"islessgreater"},
+        {"ident":"islower"},
+        {"ident":"isnan"},
+        {"ident":"isnan"},
+        {"ident":"isnanf"},
+        {"ident":"isnanl"},
+        {"ident":"isnormal"},
+        {"ident":"isprint"},
+        {"ident":"ispunct"},
+        {"ident":"issignaling"},
+        {"ident":"isspace"},
+        {"ident":"issubnormal"},
+        {"ident":"isunordered"},
+        {"ident":"isupper"},
+        {"ident":"iswalnum"},
+        {"ident":"iswalpha"},
+        {"ident":"iswblank"},
+        {"ident":"iswcntrl"},
+        {"ident":"iswctype"},
+        {"ident":"iswdigit"},
+        {"ident":"iswgraph"},
+        {"ident":"iswlower"},
+        {"ident":"iswprint"},
+        {"ident":"iswpunct"},
+        {"ident":"iswspace"},
+        {"ident":"iswupper"},
+        {"ident":"iswxdigit"},
+        {"ident":"isxdigit"},
+        {"ident":"iszero"},
+        {"ident":"j0"},
+        {"ident":"j0f"},
+        {"ident":"j0fN"},
+        {"ident":"j0fNx"},
+        {"ident":"j0l"},
+        {"ident":"j1"},
+        {"ident":"j1f"},
+        {"ident":"j1fN"},
+        {"ident":"j1fNx"},
+        {"ident":"j1l"},
+        {"ident":"jn"},
+        {"ident":"jnf"},
+        {"ident":"jnfN"},
+        {"ident":"jnfNx"},
+        {"ident":"jnl"},
+        {"ident":"jrand48"},
+        {"ident":"jrand48_r"},
+        {"ident":"kill"},
+        {"ident":"killpg"},
+        {"ident":"l64a"},
+        {"ident":"labs"},
+        {"ident":"lcong48"},
+        {"ident":"lcong48_r"},
+        {"ident":"ldexp"},
+        {"ident":"ldexpf"},
+        {"ident":"ldexpfN"},
+        {"ident":"ldexpfNx"},
+        {"ident":"ldexpl"},
+        {"ident":"ldiv"},
+        {"ident":"lfind"},
+        {"ident":"lgamma"},
+        {"ident":"lgamma_r"},
+        {"ident":"lgammaf"},
+        {"ident":"lgammaf_r"},
+        {"ident":"lgammafN"},
+        {"ident":"lgammafN_r"},
+        {"ident":"lgammafNx"},
+        {"ident":"lgammafNx_r"},
+        {"ident":"lgammal"},
+        {"ident":"lgammal_r"},
+        {"ident":"link"},
+        {"ident":"lio_listio"},
+        {"ident":"lio_listio64"},
+        {"ident":"listen"},
+        {"ident":"llabs"},
+        {"ident":"lldiv"},
+        {"ident":"llogb"},
+        {"ident":"llogbf"},
+        {"ident":"llogbfN"},
+        {"ident":"llogbfNx"},
+        {"ident":"llogbl"},
+        {"ident":"llrint"},
+        {"ident":"llrintf"},
+        {"ident":"llrintfN"},
+        {"ident":"llrintfNx"},
+        {"ident":"llrintl"},
+        {"ident":"llround"},
+        {"ident":"llroundf"},
+        {"ident":"llroundfN"},
+        {"ident":"llroundfNx"},
+        {"ident":"llroundl"},
+        {"ident":"localeconv"},
+        {"ident":"localtime"},
+        {"ident":"localtime_r"},
+        {"ident":"log"},
+        {"ident":"log10"},
+        {"ident":"log10f"},
+        {"ident":"log10fN"},
+        {"ident":"log10fNx"},
+        {"ident":"log10l"},
+        {"ident":"log1p"},
+        {"ident":"log1pf"},
+        {"ident":"log1pfN"},
+        {"ident":"log1pfNx"},
+        {"ident":"log1pl"},
+        {"ident":"log2"},
+        {"ident":"log2f"},
+        {"ident":"log2fN"},
+        {"ident":"log2fNx"},
+        {"ident":"log2l"},
+        {"ident":"logb"},
+        {"ident":"logbf"},
+        {"ident":"logbfN"},
+        {"ident":"logbfNx"},
+        {"ident":"logbl"},
+        {"ident":"logf"},
+        {"ident":"logfN"},
+        {"ident":"logfNx"},
+        {"ident":"login"},
+        {"ident":"login_tty"},
+        {"ident":"logl"},
+        {"ident":"logout"},
+        {"ident":"logwtmp"},
+        {"ident":"longjmp"},
+        {"ident":"lrand48"},
+        {"ident":"lrand48_r"},
+        {"ident":"lrint"},
+        {"ident":"lrintf"},
+        {"ident":"lrintfN"},
+        {"ident":"lrintfNx"},
+        {"ident":"lrintl"},
+        {"ident":"lround"},
+        {"ident":"lroundf"},
+        {"ident":"lroundfN"},
+        {"ident":"lroundfNx"},
+        {"ident":"lroundl"},
+        {"ident":"lsearch"},
+        {"ident":"lseek"},
+        {"ident":"lseek64"},
+        {"ident":"lstat"},
+        {"ident":"lstat64"},
+        {"ident":"lutimes"},
+        {"ident":"madvise"},
+        {"ident":"main"},
+        {"ident":"makecontext"},
+        {"ident":"mallinfo"},
+        {"ident":"malloc"},
+        {"ident":"mallopt"},
+        {"ident":"matherr"},
+        {"ident":"mblen"},
+        {"ident":"mbrlen"},
+        {"ident":"mbrtowc"},
+        {"ident":"mbsinit"},
+        {"ident":"mbsnrtowcs"},
+        {"ident":"mbsrtowcs"},
+        {"ident":"mbstowcs"},
+        {"ident":"mbtowc"},
+        {"ident":"mcheck"},
+        {"ident":"memalign"},
+        {"ident":"memccpy"},
+        {"ident":"memchr"},
+        {"ident":"memcmp"},
+        {"ident":"memcpy"},
+        {"ident":"memfrob"},
+        {"ident":"memmem"},
+        {"ident":"memmove"},
+        {"ident":"mempcpy"},
+        {"ident":"memrchr"},
+        {"ident":"memset"},
+        {"ident":"merge"},
+        {"ident":"mkdir"},
+        {"ident":"mkdtemp"},
+        {"ident":"mkfifo"},
+        {"ident":"mknod"},
+        {"ident":"mkstemp"},
+        {"ident":"mktemp"},
+        {"ident":"mktime"},
+        {"ident":"mlock"},
+        {"ident":"mlockall"},
+        {"ident":"mmap"},
+        {"ident":"mmap64"},
+        {"ident":"modf"},
+        {"ident":"modff"},
+        {"ident":"modffN"},
+        {"ident":"modffNx"},
+        {"ident":"modfl"},
+        {"ident":"mount"},
+        {"ident":"mprobe"},
+        {"ident":"mrand48"},
+        {"ident":"mrand48_r"},
+        {"ident":"mremap"},
+        {"ident":"msync"},
+        {"ident":"mtrace"},
+        {"ident":"munlock"},
+        {"ident":"munlockall"},
+        {"ident":"munmap"},
+        {"ident":"muntrace"},
+        {"ident":"nan"},
+        {"ident":"nanf"},
+        {"ident":"nanfN"},
+        {"ident":"nanfNx"},
+        {"ident":"nanl"},
+        {"ident":"nanosleep"},
+        {"ident":"nearbyint"},
+        {"ident":"nearbyintf"},
+        {"ident":"nearbyintfN"},
+        {"ident":"nearbyintfNx"},
+        {"ident":"nearbyintl"},
+        {"ident":"nextafter"},
+        {"ident":"nextafterf"},
+        {"ident":"nextafterfN"},
+        {"ident":"nextafterfNx"},
+        {"ident":"nextafterl"},
+        {"ident":"nextdown"},
+        {"ident":"nextdownf"},
+        {"ident":"nextdownfN"},
+        {"ident":"nextdownfNx"},
+        {"ident":"nextdownl"},
+        {"ident":"nexttoward"},
+        {"ident":"nexttowardf"},
+        {"ident":"nexttowardl"},
+        {"ident":"nextup"},
+        {"ident":"nextupf"},
+        {"ident":"nextupfN"},
+        {"ident":"nextupfNx"},
+        {"ident":"nextupl"},
+        {"ident":"nftw"},
+        {"ident":"nftw64"},
+        {"ident":"ngettext"},
+        {"ident":"nice"},
+        {"ident":"nl_langinfo"},
+        {"ident":"notfound"},
+        {"ident":"nrand48"},
+        {"ident":"nrand48_r"},
+        {"ident":"ntohl"},
+        {"ident":"ntohs"},
+        {"ident":"ntp_adjtime"},
+        {"ident":"ntp_gettime"},
+        {"ident":"obstack_1grow"},
+        {"ident":"obstack_1grow_fast"},
+        {"ident":"obstack_alignment_mask"},
+        {"ident":"obstack_alloc"},
+        {"ident":"obstack_base"},
+        {"ident":"obstack_blank"},
+        {"ident":"obstack_blank_fast"},
+        {"ident":"obstack_chunk_alloc"},
+        {"ident":"obstack_chunk_free"},
+        {"ident":"obstack_chunk_size"},
+        {"ident":"obstack_copy"},
+        {"ident":"obstack_copy0"},
+        {"ident":"obstack_finish"},
+        {"ident":"obstack_free"},
+        {"ident":"obstack_grow"},
+        {"ident":"obstack_grow0"},
+        {"ident":"obstack_init"},
+        {"ident":"obstack_int_grow"},
+        {"ident":"obstack_int_grow_fast"},
+        {"ident":"obstack_next_free"},
+        {"ident":"obstack_object_size"},
+        {"ident":"obstack_object_size"},
+        {"ident":"obstack_printf"},
+        {"ident":"obstack_ptr_grow"},
+        {"ident":"obstack_ptr_grow_fast"},
+        {"ident":"obstack_room"},
+        {"ident":"obstack_vprintf"},
+        {"ident":"offsetof"},
+        {"ident":"on_exit"},
+        {"ident":"open"},
+        {"ident":"open64"},
+        {"ident":"open_memstream"},
+        {"ident":"opendir"},
+        {"ident":"openlog"},
+        {"ident":"openpty"},
+        {"ident":"parse_printf_format"},
+        {"ident":"pathconf"},
+        {"ident":"pause"},
+        {"ident":"pclose"},
+        {"ident":"perror"},
+        {"ident":"pipe"},
+        {"ident":"popen"},
+        {"ident":"posix_fallocate"},
+        {"ident":"posix_fallocate64"},
+        {"ident":"posix_memalign"},
+        {"ident":"pow"},
+        {"ident":"pow10"},
+        {"ident":"pow10f"},
+        {"ident":"pow10l"},
+        {"ident":"powf"},
+        {"ident":"powfN"},
+        {"ident":"powfNx"},
+        {"ident":"powl"},
+        {"ident":"pread"},
+        {"ident":"pread64"},
+        {"ident":"preadv"},
+        {"ident":"preadv2"},
+        {"ident":"preadv64"},
+        {"ident":"preadv64v2"},
+        {"ident":"printf"},
+        {"ident":"printf_size"},
+        {"ident":"printf_size_info"},
+        {"ident":"psignal"},
+        {"ident":"pthread_getattr_default_np"},
+        {"ident":"pthread_getspecific"},
+        {"ident":"pthread_key_create"},
+        {"ident":"pthread_key_delete"},
+        {"ident":"pthread_setattr_default_np"},
+        {"ident":"pthread_setspecific"},
+        {"ident":"ptsname"},
+        {"ident":"ptsname_r"},
+        {"ident":"putc"},
+        {"ident":"putc_unlocked"},
+        {"ident":"putchar"},
+        {"ident":"putchar_unlocked"},
+        {"ident":"putenv"},
+        {"ident":"putpwent"},
+        {"ident":"puts"},
+        {"ident":"pututline"},
+        {"ident":"pututxline"},
+        {"ident":"putw"},
+        {"ident":"putwc"},
+        {"ident":"putwc_unlocked"},
+        {"ident":"putwchar"},
+        {"ident":"putwchar_unlocked"},
+        {"ident":"pwrite"},
+        {"ident":"pwrite64"},
+        {"ident":"pwritev"},
+        {"ident":"pwritev2"},
+        {"ident":"pwritev64"},
+        {"ident":"pwritev64v2"},
+        {"ident":"qecvt"},
+        {"ident":"qecvt_r"},
+        {"ident":"qfcvt"},
+        {"ident":"qfcvt_r"},
+        {"ident":"qgcvt"},
+        {"ident":"qsort"},
+        {"ident":"raise"},
+        {"ident":"rand"},
+        {"ident":"rand_r"},
+        {"ident":"random"},
+        {"ident":"random_r"},
+        {"ident":"rawmemchr"},
+        {"ident":"read"},
+        {"ident":"readdir"},
+        {"ident":"readdir64"},
+        {"ident":"readdir64_r"},
+        {"ident":"readdir_r"},
+        {"ident":"readlink"},
+        {"ident":"readv"},
+        {"ident":"realloc"},
+        {"ident":"reallocarray"},
+        {"ident":"realpath"},
+        {"ident":"recv"},
+        {"ident":"recvfrom"},
+        {"ident":"regcomp"},
+        {"ident":"regerror"},
+        {"ident":"regexec"},
+        {"ident":"regfree"},
+        {"ident":"register_printf_function"},
+        {"ident":"remainder"},
+        {"ident":"remainderf"},
+        {"ident":"remainderfN"},
+        {"ident":"remainderfNx"},
+        {"ident":"remainderl"},
+        {"ident":"remove"},
+        {"ident":"rename"},
+        {"ident":"return"},
+        {"ident":"rewind"},
+        {"ident":"rewinddir"},
+        {"ident":"rindex"},
+        {"ident":"rint"},
+        {"ident":"rintf"},
+        {"ident":"rintfN"},
+        {"ident":"rintfNx"},
+        {"ident":"rintl"},
+        {"ident":"rmdir"},
+        {"ident":"round"},
+        {"ident":"roundeven"},
+        {"ident":"roundevenf"},
+        {"ident":"roundevenfN"},
+        {"ident":"roundevenfNx"},
+        {"ident":"roundevenl"},
+        {"ident":"roundf"},
+        {"ident":"roundfN"},
+        {"ident":"roundfNx"},
+        {"ident":"roundl"},
+        {"ident":"rpmatch"},
+        {"ident":"S_ISBLK"},
+        {"ident":"S_ISCHR"},
+        {"ident":"S_ISDIR"},
+        {"ident":"S_ISFIFO"},
+        {"ident":"S_ISLNK"},
+        {"ident":"S_ISREG"},
+        {"ident":"S_ISSOCK"},
+        {"ident":"S_TYPEISMQ"},
+        {"ident":"S_TYPEISSEM"},
+        {"ident":"S_TYPEISSHM"},
+        {"ident":"sbrk"},
+        {"ident":"scalb"},
+        {"ident":"scalbf"},
+        {"ident":"scalbl"},
+        {"ident":"scalbln"},
+        {"ident":"scalblnf"},
+        {"ident":"scalblnfN"},
+        {"ident":"scalblnfNx"},
+        {"ident":"scalblnl"},
+        {"ident":"scalbn"},
+        {"ident":"scalbnf"},
+        {"ident":"scalbnfN"},
+        {"ident":"scalbnfNx"},
+        {"ident":"scalbnl"},
+        {"ident":"scandir"},
+        {"ident":"scandir64"},
+        {"ident":"scanf"},
+        {"ident":"sched_get_priority_max"},
+        {"ident":"sched_get_priority_min"},
+        {"ident":"sched_getaffinity"},
+        {"ident":"sched_getparam"},
+        {"ident":"sched_getscheduler"},
+        {"ident":"sched_rr_get_interval"},
+        {"ident":"sched_setaffinity"},
+        {"ident":"sched_setparam"},
+        {"ident":"sched_setscheduler"},
+        {"ident":"sched_yield"},
+        {"ident":"secure_getenv"},
+        {"ident":"seed48"},
+        {"ident":"seed48_r"},
+        {"ident":"seekdir"},
+        {"ident":"select"},
+        {"ident":"sem_close"},
+        {"ident":"sem_destroy"},
+        {"ident":"sem_getvalue"},
+        {"ident":"sem_init"},
+        {"ident":"sem_open"},
+        {"ident":"sem_post"},
+        {"ident":"sem_timedwait"},
+        {"ident":"sem_trywait"},
+        {"ident":"sem_unlink"},
+        {"ident":"sem_wait"},
+        {"ident":"semctl"},
+        {"ident":"semget"},
+        {"ident":"semop"},
+        {"ident":"semtimedop"},
+        {"ident":"send"},
+        {"ident":"sendto"},
+        {"ident":"setbuf"},
+        {"ident":"setbuffer"},
+        {"ident":"setcontext"},
+        {"ident":"setdomainname"},
+        {"ident":"setegid"},
+        {"ident":"setenv"},
+        {"ident":"seteuid"},
+        {"ident":"setfsent"},
+        {"ident":"setgid"},
+        {"ident":"setgrent"},
+        {"ident":"setgroups"},
+        {"ident":"sethostent"},
+        {"ident":"sethostid"},
+        {"ident":"sethostname"},
+        {"ident":"setitimer"},
+        {"ident":"setjmp"},
+        {"ident":"setkey"},
+        {"ident":"setkey_r"},
+        {"ident":"setlinebuf"},
+        {"ident":"setlocale"},
+        {"ident":"setlogmask"},
+        {"ident":"setmntent"},
+        {"ident":"setnetent"},
+        {"ident":"setnetgrent"},
+        {"ident":"setpayload"},
+        {"ident":"setpayloadf"},
+        {"ident":"setpayloadfN"},
+        {"ident":"setpayloadfNx"},
+        {"ident":"setpayloadl"},
+        {"ident":"setpayloadsig"},
+        {"ident":"setpayloadsigf"},
+        {"ident":"setpayloadsigfN"},
+        {"ident":"setpayloadsigfNx"},
+        {"ident":"setpayloadsigl"},
+        {"ident":"setpgid"},
+        {"ident":"setpgrp"},
+        {"ident":"setpriority"},
+        {"ident":"setprotoent"},
+        {"ident":"setpwent"},
+        {"ident":"setregid"},
+        {"ident":"setreuid"},
+        {"ident":"setrlimit"},
+        {"ident":"setrlimit64"},
+        {"ident":"setservent"},
+        {"ident":"setsid"},
+        {"ident":"setsockopt"},
+        {"ident":"setstate"},
+        {"ident":"setstate_r"},
+        {"ident":"settimeofday"},
+        {"ident":"setuid"},
+        {"ident":"setutent"},
+        {"ident":"setutxent"},
+        {"ident":"setvbuf"},
+        {"ident":"shm_open"},
+        {"ident":"shm_unlink"},
+        {"ident":"shutdown"},
+        {"ident":"sigaction"},
+        {"ident":"sigaddset"},
+        {"ident":"sigaltstack"},
+        {"ident":"sigblock"},
+        {"ident":"sigdelset"},
+        {"ident":"sigemptyset"},
+        {"ident":"sigfillset"},
+        {"ident":"siginterrupt"},
+        {"ident":"sigismember"},
+        {"ident":"siglongjmp"},
+        {"ident":"sigmask"},
+        {"ident":"signal"},
+        {"ident":"signbit"},
+        {"ident":"significand"},
+        {"ident":"significandf"},
+        {"ident":"significandl"},
+        {"ident":"sigpause"},
+        {"ident":"sigpending"},
+        {"ident":"sigprocmask"},
+        {"ident":"sigsetjmp"},
+        {"ident":"sigsetmask"},
+        {"ident":"sigstack"},
+        {"ident":"sigsuspend"},
+        {"ident":"sin"},
+        {"ident":"sincos"},
+        {"ident":"sincosf"},
+        {"ident":"sincosfN"},
+        {"ident":"sincosfNx"},
+        {"ident":"sincosl"},
+        {"ident":"sinf"},
+        {"ident":"sinfN"},
+        {"ident":"sinfNx"},
+        {"ident":"sinh"},
+        {"ident":"sinhf"},
+        {"ident":"sinhfN"},
+        {"ident":"sinhfNx"},
+        {"ident":"sinhl"},
+        {"ident":"sinl"},
+        {"ident":"sleep"},
+        {"ident":"snprintf"},
+        {"ident":"socket"},
+        {"ident":"socketpair"},
+        {"ident":"sprintf"},
+        {"ident":"sqrt"},
+        {"ident":"sqrtf"},
+        {"ident":"sqrtfN"},
+        {"ident":"sqrtfNx"},
+        {"ident":"sqrtl"},
+        {"ident":"srand"},
+        {"ident":"srand48"},
+        {"ident":"srand48_r"},
+        {"ident":"srandom"},
+        {"ident":"srandom_r"},
+        {"ident":"sscanf"},
+        {"ident":"ssignal"},
+        {"ident":"stat"},
+        {"ident":"stat64"},
+        {"ident":"stime"},
+        {"ident":"stpcpy"},
+        {"ident":"stpncpy"},
+        {"ident":"strcasecmp"},
+        {"ident":"strcasestr"},
+        {"ident":"strcat"},
+        {"ident":"strchr"},
+        {"ident":"strchrnul"},
+        {"ident":"strcmp"},
+        {"ident":"strcoll"},
+        {"ident":"strcpy"},
+        {"ident":"strcspn"},
+        {"ident":"strdup"},
+        {"ident":"strdupa"},
+        {"ident":"strerror"},
+        {"ident":"strerror_r"},
+        {"ident":"strfmon"},
+        {"ident":"strfromd"},
+        {"ident":"strfromf"},
+        {"ident":"strfromfN"},
+        {"ident":"strfromfNx"},
+        {"ident":"strfroml"},
+        {"ident":"strfry"},
+        {"ident":"strftime"},
+        {"ident":"strlen"},
+        {"ident":"strncasecmp"},
+        {"ident":"strncat"},
+        {"ident":"strncmp"},
+        {"ident":"strncpy"},
+        {"ident":"strndup"},
+        {"ident":"strndupa"},
+        {"ident":"strnlen"},
+        {"ident":"strpbrk"},
+        {"ident":"strptime"},
+        {"ident":"strrchr"},
+        {"ident":"strsep"},
+        {"ident":"strsignal"},
+        {"ident":"strspn"},
+        {"ident":"strstr"},
+        {"ident":"strtod"},
+        {"ident":"strtof"},
+        {"ident":"strtofN"},
+        {"ident":"strtofNx"},
+        {"ident":"strtoimax"},
+        {"ident":"strtok"},
+        {"ident":"strtok_r"},
+        {"ident":"strtol"},
+        {"ident":"strtold"},
+        {"ident":"strtoll"},
+        {"ident":"strtoq"},
+        {"ident":"strtoul"},
+        {"ident":"strtoull"},
+        {"ident":"strtoumax"},
+        {"ident":"strtouq"},
+        {"ident":"strverscmp"},
+        {"ident":"strxfrm"},
+        {"ident":"stty"},
+        {"ident":"success"},
+        {"ident":"SUN_LEN"},
+        {"ident":"swapcontext"},
+        {"ident":"swprintf"},
+        {"ident":"swscanf"},
+        {"ident":"symlink"},
+        {"ident":"sync"},
+        {"ident":"syscall"},
+        {"ident":"sysconf"},
+        {"ident":"sysctl"},
+        {"ident":"syslog"},
+        {"ident":"system"},
+        {"ident":"sysv_signal"},
+        {"ident":"tan"},
+        {"ident":"tanf"},
+        {"ident":"tanfN"},
+        {"ident":"tanfNx"},
+        {"ident":"tanh"},
+        {"ident":"tanhf"},
+        {"ident":"tanhfN"},
+        {"ident":"tanhfNx"},
+        {"ident":"tanhl"},
+        {"ident":"tanl"},
+        {"ident":"tcdrain"},
+        {"ident":"tcflow"},
+        {"ident":"tcflush"},
+        {"ident":"tcgetattr"},
+        {"ident":"tcgetpgrp"},
+        {"ident":"tcgetsid"},
+        {"ident":"tcsendbreak"},
+        {"ident":"tcsetattr"},
+        {"ident":"tcsetpgrp"},
+        {"ident":"tdelete"},
+        {"ident":"tdestroy"},
+        {"ident":"telldir"},
+        {"ident":"TEMP_FAILURE_RETRY"},
+        {"ident":"tempnam"},
+        {"ident":"textdomain"},
+        {"ident":"tfind"},
+        {"ident":"tgamma"},
+        {"ident":"tgammaf"},
+        {"ident":"tgammafN"},
+        {"ident":"tgammafNx"},
+        {"ident":"tgammal"},
+        {"ident":"time"},
+        {"ident":"timegm"},
+        {"ident":"timelocal"},
+        {"ident":"times"},
+        {"ident":"tmpfile"},
+        {"ident":"tmpfile64"},
+        {"ident":"tmpnam"},
+        {"ident":"tmpnam_r"},
+        {"ident":"toascii"},
+        {"ident":"tolower"},
+        {"ident":"totalorder"},
+        {"ident":"totalorderf"},
+        {"ident":"totalorderfN"},
+        {"ident":"totalorderfNx"},
+        {"ident":"totalorderl"},
+        {"ident":"totalordermag"},
+        {"ident":"totalordermagf"},
+        {"ident":"totalordermagfN"},
+        {"ident":"totalordermagfNx"},
+        {"ident":"totalordermagl"},
+        {"ident":"toupper"},
+        {"ident":"towctrans"},
+        {"ident":"towlower"},
+        {"ident":"towupper"},
+        {"ident":"trunc"},
+        {"ident":"truncate"},
+        {"ident":"truncate64"},
+        {"ident":"truncf"},
+        {"ident":"truncfN"},
+        {"ident":"truncfNx"},
+        {"ident":"truncl"},
+        {"ident":"tryagain"},
+        {"ident":"tsearch"},
+        {"ident":"ttyname"},
+        {"ident":"ttyname_r"},
+        {"ident":"twalk"},
+        {"ident":"tzset"},
+        {"ident":"ufromfp"},
+        {"ident":"ufromfpf"},
+        {"ident":"ufromfpfN"},
+        {"ident":"ufromfpfNx"},
+        {"ident":"ufromfpl"},
+        {"ident":"ufromfpx"},
+        {"ident":"ufromfpxf"},
+        {"ident":"ufromfpxfN"},
+        {"ident":"ufromfpxfNx"},
+        {"ident":"ufromfpxl"},
+        {"ident":"ulimit"},
+        {"ident":"umask"},
+        {"ident":"umount"},
+        {"ident":"umount2"},
+        {"ident":"uname"},
+        {"ident":"unavail"},
+        {"ident":"ungetc"},
+        {"ident":"ungetwc"},
+        {"ident":"unlink"},
+        {"ident":"unlockpt"},
+        {"ident":"unsetenv"},
+        {"ident":"updwtmp"},
+        {"ident":"utime"},
+        {"ident":"utimes"},
+        {"ident":"utmpname"},
+        {"ident":"utmpxname"},
+        {"ident":"va_arg"},
+        {"ident":"va_copy"},
+        {"ident":"va_end"},
+        {"ident":"va_start"},
+        {"ident":"valloc"},
+        {"ident":"vasprintf"},
+        {"ident":"verr"},
+        {"ident":"verrx"},
+        {"ident":"versionsort"},
+        {"ident":"versionsort64"},
+        {"ident":"vfork"},
+        {"ident":"vfprintf"},
+        {"ident":"vfscanf"},
+        {"ident":"vfwprintf"},
+        {"ident":"vfwscanf"},
+        {"ident":"vlimit"},
+        {"ident":"vprintf"},
+        {"ident":"vscanf"},
+        {"ident":"vsnprintf"},
+        {"ident":"vsprintf"},
+        {"ident":"vsscanf"},
+        {"ident":"vswprintf"},
+        {"ident":"vswscanf"},
+        {"ident":"vsyslog"},
+        {"ident":"vtimes"},
+        {"ident":"vwarn"},
+        {"ident":"vwarnx"},
+        {"ident":"vwprintf"},
+        {"ident":"vwscanf"},
+        {"ident":"wait"},
+        {"ident":"wait3"},
+        {"ident":"wait4"},
+        {"ident":"waitpid"},
+        {"ident":"warn"},
+        {"ident":"warnx"},
+        {"ident":"WCOREDUMP"},
+        {"ident":"wcpcpy"},
+        {"ident":"wcpncpy"},
+        {"ident":"wcrtomb"},
+        {"ident":"wcscasecmp"},
+        {"ident":"wcscat"},
+        {"ident":"wcschr"},
+        {"ident":"wcschrnul"},
+        {"ident":"wcscmp"},
+        {"ident":"wcscoll"},
+        {"ident":"wcscpy"},
+        {"ident":"wcscspn"},
+        {"ident":"wcsdup"},
+        {"ident":"wcsftime"},
+        {"ident":"wcslen"},
+        {"ident":"wcsncasecmp"},
+        {"ident":"wcsncat"},
+        {"ident":"wcsncmp"},
+        {"ident":"wcsncpy"},
+        {"ident":"wcsnlen"},
+        {"ident":"wcsnrtombs"},
+        {"ident":"wcspbrk"},
+        {"ident":"wcsrchr"},
+        {"ident":"wcsrtombs"},
+        {"ident":"wcsspn"},
+        {"ident":"wcsstr"},
+        {"ident":"wcstod"},
+        {"ident":"wcstof"},
+        {"ident":"wcstofN"},
+        {"ident":"wcstofNx"},
+        {"ident":"wcstoimax"},
+        {"ident":"wcstok"},
+        {"ident":"wcstol"},
+        {"ident":"wcstold"},
+        {"ident":"wcstoll"},
+        {"ident":"wcstombs"},
+        {"ident":"wcstoq"},
+        {"ident":"wcstoul"},
+        {"ident":"wcstoull"},
+        {"ident":"wcstoumax"},
+        {"ident":"wcstouq"},
+        {"ident":"wcswcs"},
+        {"ident":"wcsxfrm"},
+        {"ident":"wctob"},
+        {"ident":"wctomb"},
+        {"ident":"wctrans"},
+        {"ident":"wctype"},
+        {"ident":"WEXITSTATUS"},
+        {"ident":"WIFEXITED"},
+        {"ident":"WIFSIGNALED"},
+        {"ident":"WIFSTOPPED"},
+        {"ident":"wmemchr"},
+        {"ident":"wmemcmp"},
+        {"ident":"wmemcpy"},
+        {"ident":"wmemmove"},
+        {"ident":"wmempcpy"},
+        {"ident":"wmemset"},
+        {"ident":"wordexp"},
+        {"ident":"wordfree"},
+        {"ident":"wprintf"},
+        {"ident":"write"},
+        {"ident":"writev"},
+        {"ident":"wscanf"},
+        {"ident":"WSTOPSIG"},
+        {"ident":"WTERMSIG"},
+        {"ident":"y0"},
+        {"ident":"y0f"},
+        {"ident":"y0fN"},
+        {"ident":"y0fNx"},
+        {"ident":"y0l"},
+        {"ident":"y1"},
+        {"ident":"y1f"},
+        {"ident":"y1fN"},
+        {"ident":"y1fNx"},
+        {"ident":"y1l"},
+        {"ident":"yn"},
+        {"ident":"ynf"},
+        {"ident":"ynfN"},
+        {"ident":"ynfNx"},
+        {"ident":"ynl"}
+    ]
+}
diff --git a/share/compliance/nonstandard_identifiers.json b/share/compliance/nonstandard_identifiers.json
new file mode 100644
index 0000000000000000000000000000000000000000..e25a2fe06e230379f10095260c8b73a26db27fba
--- /dev/null
+++ b/share/compliance/nonstandard_identifiers.json
@@ -0,0 +1,18 @@
+{
+    "description": "Non-ISO C, Non-POSIX identifiers known to the Frama-C standard library",
+    "source":"Manpages, mostly Linux and BSD",
+    "data":[
+        {"ident":"facilitynames", "header":"syslog.h"},
+        {"ident":"getresgid", "header":"unistd.h"},
+        {"ident":"getresuid", "header":"unistd.h"},
+        {"ident":"option", "header":"getopt.h"},
+        {"ident":"prioritynames", "header":"syslog.h"},
+        {"ident":"setresgid", "header":"unistd.h"},
+        {"ident":"setresuid", "header":"unistd.h"},
+        {"ident":"strcspn", "header":"string.h"},
+        {"ident":"strlcat", "header":"string.h"},
+        {"ident":"strlcpy", "header":"string.h"},
+        {"ident":"wcslcat", "header":"wchar.h"},
+        {"ident":"wcslcpy", "header":"wchar.h"}
+    ]
+}
diff --git a/share/compliance/posix_identifiers.json b/share/compliance/posix_identifiers.json
new file mode 100644
index 0000000000000000000000000000000000000000..ba548080fdc7f4e9c61adeb9a96e2d31f9e35156
--- /dev/null
+++ b/share/compliance/posix_identifiers.json
@@ -0,0 +1,2127 @@
+{
+    "description": "POSIX.1-2008 reserved function identifiers (plus a few legacy POSIX identifiers)",
+    "source":"POSIX.1-2008 - Base Specifications, Issue 7 (IEEE Std 1003.1-2008, 2016 Edition)",
+    "id_types":[
+        {"type":"function", "description":"declared as a function; may also be defined as a macro"},
+        {"type":"variable", "description":"external variable"},
+        {"type":"macroOrIdentifier", "description":"declaration or definition; unspecified whether it is a macro or an identifier declared with external linkage"},
+        {"type":"macro", "description":"macro"},
+        {"type":"constant", "description":"symbolic constant"},
+        {"type":"type", "description":"type or structure"}
+    ],
+    "headers":[
+        "aio.h",
+        "arpa/inet.h",
+        "assert.h",
+        "complex.h",
+        "cpio.h",
+        "ctype.h",
+        "dirent.h",
+        "dlfcn.h",
+        "errno.h",
+        "fcntl.h",
+        "fenv.h",
+        "float.h",
+        "fmtmsg.h",
+        "fnmatch.h",
+        "ftw.h",
+        "glob.h",
+        "grp.h",
+        "iconv.h",
+        "inttypes.h",
+        "iso646.h",
+        "langinfo.h",
+        "libgen.h",
+        "limits.h",
+        "locale.h",
+        "math.h",
+        "monetary.h",
+        "mqueue.h",
+        "ndbm.h",
+        "net/if.h",
+        "netdb.h",
+        "netinet/in.h",
+        "netinet/tcp.h",
+        "nl_types.h",
+        "poll.h",
+        "pthread.h",
+        "pwd.h",
+        "regex.h",
+        "sched.h",
+        "search.h",
+        "semaphore.h",
+        "setjmp.h",
+        "signal.h",
+        "spawn.h",
+        "stdarg.h",
+        "stdbool.h",
+        "stddef.h",
+        "stdint.h",
+        "stdio.h",
+        "stdlib.h",
+        "string.h",
+        "strings.h",
+        "stropts.h",
+        "sys/ipc.h",
+        "sys/mman.h",
+        "sys/msg.h",
+        "sys/resource.h",
+        "sys/select.h",
+        "sys/sem.h",
+        "sys/shm.h",
+        "sys/socket.h",
+        "sys/stat.h",
+        "sys/statvfs.h",
+        "sys/time.h",
+        "sys/times.h",
+        "sys/types.h",
+        "sys/uio.h",
+        "sys/un.h",
+        "sys/utsname.h",
+        "sys/wait.h",
+        "syslog.h",
+        "tar.h",
+        "termios.h",
+        "tgmath.h",
+        "time.h",
+        "trace.h",
+        "ulimit.h",
+        "unistd.h",
+        "utime.h",
+        "utmpx.h",
+        "wchar.h",
+        "wctype.h",
+        "wordexp.h"
+    ],
+    "extension_names":{
+        "ADV":"Advisory Information",
+        "CX":"Extension to the ISO C standard",
+        "FSC":"File Synchronization",
+        "IP6":"IPV6",
+        "MC1":"Non-Robust Mutex Priority Protection or Non-Robust Mutex Priority Inheritance or Robust Mutex Priority Protection or Robust Mutex Priority Inheritance",
+        "ML":"Process Memory Locking",
+        "MLR":"Range Memory Locking",
+        "MON":"Monotonic Clock",
+        "OB":"Obsolescent",
+        "PS":"Process Scheduling",
+        "REM":"Removed from POSIX.1-2008 (but present in a previous version)",
+        "RPP":"Robust Mutex Priority Protection",
+        "SHM":"Shared Memory Objects",
+        "SIO":"Synchronized Input and Output",
+        "SS":"Process Sporadic Server",
+        "TCT":"Thread CPU-Time Clocks",
+        "TEF":"Trace Event Filter",
+        "TPP":"Non-Robust Mutex Priority Protection",
+        "TPS":"Thread Execution Scheduling",
+        "TRC":"Trace",
+        "TRI":"Trace Inherit",
+        "TRL":"Trace Log",
+        "TSA":"Thread Stack Address Attribute",
+        "TSH":"Thread Process-Shared Synchronization",
+        "TSP":"Thread Sporadic Server",
+        "TSS":"Thread Stack Size Attribute",
+        "TYM":"Typed Memory Objects",
+        "XSI":"X/Open System Interfaces",
+        "XSR":"XSI STREAMS"
+    },
+    "data":[
+        {"ident":"__bool_true_false_are_defined", "id_type":"macro", "header":"stdbool.h", "extensions":[]},
+        {"ident":"_Complex_I", "id_type":"macro", "header":"complex.h", "extensions":[]},
+        {"ident":"_CS_PATH", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"_CS_POSIX_V7_ILP32_OFF32_CFLAGS", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"_CS_POSIX_V7_ILP32_OFF32_LDFLAGS", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"_CS_POSIX_V7_ILP32_OFF32_LIBS", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"_CS_POSIX_V7_ILP32_OFFBIG_CFLAGS", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"_CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"_CS_POSIX_V7_ILP32_OFFBIG_LIBS", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"_CS_POSIX_V7_LP64_OFF64_CFLAGS", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"_CS_POSIX_V7_LP64_OFF64_LDFLAGS", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"_CS_POSIX_V7_LP64_OFF64_LIBS", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"_CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"_CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"_CS_POSIX_V7_LPBIG_OFFBIG_LIBS", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"_CS_POSIX_V7_THREADS_CFLAGS", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"_CS_POSIX_V7_THREADS_LDFLAGS", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"_CS_POSIX_V7_WIDTH_RESTRICTED_ENVS", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"_CS_V7_ENV", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"_Exit", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"_exit", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"_Imaginary_I", "id_type":"macro", "header":"complex.h", "extensions":[]},
+        {"ident":"_IOFBF", "id_type":"macro", "header":"stdio.h", "extensions":[]},
+        {"ident":"_IOLBF", "id_type":"macro", "header":"stdio.h", "extensions":[]},
+        {"ident":"_IONBF", "id_type":"macro", "header":"stdio.h", "extensions":[]},
+        {"ident":"_longjmp", "id_type":"function", "header":"setjmp.h", "extensions":["OB","XSI"]},
+        {"ident":"_POSIX2_VERSION", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"_POSIX_AIO_LISTIO_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_AIO_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_ARG_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_CHILD_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_CLOCKRES_MIN", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_DELAYTIMER_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_HOST_NAME_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_LINK_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_LOGIN_NAME_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_MAX_CANON", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_MAX_INPUT", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_MQ_OPEN_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_MQ_PRIO_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_NAME_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_NGROUPS_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_OPEN_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_PATH_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_PIPE_BUF", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_RE_DUP_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_RTSIG_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_SEM_NSEMS_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_SEM_VALUE_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_SIGQUEUE_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_SS_REPL_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_SSIZE_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_STREAM_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_SYMLINK_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_SYMLOOP_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_THREAD_DESTRUCTOR_ITERATIONS", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_THREAD_KEYS_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_THREAD_THREADS_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_TIMER_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_TRACE_EVENT_NAME_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_TRACE_NAME_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_TRACE_SYS_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_TRACE_USER_EVENT_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_TTY_NAME_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_TZNAME_MAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"_POSIX_VDISABLE", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"_POSIX_VERSION", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"_setjmp", "id_type":"function", "header":"setjmp.h", "extensions":["OB","XSI"]},
+        {"ident":"_tolower", "id_type":"function", "header":"ctype.h", "extensions":["OB","XSI"]},
+        {"ident":"_toupper", "id_type":"function", "header":"ctype.h", "extensions":["OB","XSI"]},
+        {"ident":"_XOPEN_VERSION", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"a64l", "id_type":"function", "header":"stdlib.h", "extensions":["XSI"]},
+        {"ident":"abort", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"abs", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"accept", "id_type":"function", "header":"sys/socket.h", "extensions":["XSI"]},
+        {"ident":"access", "id_type":"function", "header":"unistd.h", "extensions":["ADV"]},
+        {"ident":"acos", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"acosf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"acosh", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"acoshf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"acoshl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"acosl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"addrinfo", "id_type":"type", "header":"netdb.h", "extensions":[]},
+        {"ident":"AF_INET", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"AF_INET6", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"AF_UNIX", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"AF_UNSPEC", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"AI_ADDRCONFIG", "id_type":"constant", "header":"netdb.h", "extensions":[]},
+        {"ident":"AI_ALL", "id_type":"constant", "header":"netdb.h", "extensions":[]},
+        {"ident":"AI_CANONNAME", "id_type":"constant", "header":"netdb.h", "extensions":[]},
+        {"ident":"AI_NUMERICHOST", "id_type":"constant", "header":"netdb.h", "extensions":[]},
+        {"ident":"AI_NUMERICSERV", "id_type":"constant", "header":"netdb.h", "extensions":[]},
+        {"ident":"AI_PASSIVE", "id_type":"constant", "header":"netdb.h", "extensions":[]},
+        {"ident":"AI_V4MAPPED", "id_type":"constant", "header":"netdb.h", "extensions":[]},
+        {"ident":"AIO_ALLDONE", "id_type":"constant", "header":"aio.h", "extensions":[]},
+        {"ident":"aio_cancel", "id_type":"function", "header":"aio.h", "extensions":[]},
+        {"ident":"AIO_CANCELED", "id_type":"constant", "header":"aio.h", "extensions":[]},
+        {"ident":"aio_error", "id_type":"function", "header":"aio.h", "extensions":[]},
+        {"ident":"aio_fsync", "id_type":"function", "header":"aio.h", "extensions":["FSC","SIO"]},
+        {"ident":"AIO_NOTCANCELED", "id_type":"constant", "header":"aio.h", "extensions":[]},
+        {"ident":"aio_read", "id_type":"function", "header":"aio.h", "extensions":[]},
+        {"ident":"aio_return", "id_type":"function", "header":"aio.h", "extensions":[]},
+        {"ident":"aio_suspend", "id_type":"function", "header":"aio.h", "extensions":[]},
+        {"ident":"aio_write", "id_type":"function", "header":"aio.h", "extensions":[]},
+        {"ident":"aiocb", "id_type":"type", "header":"aio.h", "extensions":["FSC","SIO"]},
+        {"ident":"alarm", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"alphasort", "id_type":"function", "header":"dirent.h", "extensions":[]},
+        {"ident":"and", "id_type":"macro", "header":"iso646.h", "extensions":["CX"]},
+        {"ident":"and_eq", "id_type":"macro", "header":"iso646.h", "extensions":[]},
+        {"ident":"asctime", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"asctime_r", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"asin", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"asinf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"asinh", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"asinhf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"asinhl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"asinl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"assert", "id_type":"macro", "header":"assert.h", "extensions":[]},
+        {"ident":"AT_EACCESS", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"AT_FDCWD", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"AT_REMOVEDIR", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"AT_SYMLINK_FOLLOW", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"AT_SYMLINK_NOFOLLOW", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"atan", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"atan2", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"atan2f", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"atan2l", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"atanf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"atanh", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"atanhf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"atanhl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"atanl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"atexit", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"atof", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"atoi", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"atol", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"atoll", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"B0", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"B110", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"B1200", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"B134", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"B150", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"B1800", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"B19200", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"B200", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"B2400", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"B300", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"B38400", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"B4800", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"B50", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"B600", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"B75", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"B9600", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"bandinfo", "id_type":"type", "header":"stropts.h", "extensions":[]},
+        {"ident":"basename", "id_type":"function", "header":"libgen.h", "extensions":[]},
+        {"ident":"bind", "id_type":"function", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"bitand", "id_type":"macro", "header":"iso646.h", "extensions":[]},
+        {"ident":"bitor", "id_type":"macro", "header":"iso646.h", "extensions":[]},
+        {"ident":"blkcnt_t", "id_type":"type", "header":"sys/types.h", "extensions":["XSI"]},
+        {"ident":"blksize_t", "id_type":"type", "header":"sys/types.h", "extensions":["XSI"]},
+        {"ident":"bool", "id_type":"macro", "header":"stdbool.h", "extensions":[]},
+        {"ident":"BOOT_TIME", "id_type":"constant", "header":"utmpx.h", "extensions":[]},
+        {"ident":"BRKINT", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"BSDLY", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"bsearch", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"btowc", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"BUFSIZ", "id_type":"type", "header":"stdio.h", "extensions":[]},
+        {"ident":"cabs", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"cabsf", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"cabsl", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"cacos", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"cacosf", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"cacosh", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"cacoshf", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"cacoshl", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"cacosl", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"calloc", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"carg", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"cargf", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"cargl", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"casin", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"casinf", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"casinh", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"casinhf", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"casinhl", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"casinl", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"catan", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"catanf", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"catanh", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"catanhf", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"catanhl", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"catanl", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"catclose", "id_type":"function", "header":"nl_types.h", "extensions":[]},
+        {"ident":"catgets", "id_type":"function", "header":"nl_types.h", "extensions":[]},
+        {"ident":"catopen", "id_type":"function", "header":"nl_types.h", "extensions":[]},
+        {"ident":"cbrt", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"cbrtf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"cbrtl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"cc_t", "id_type":"type", "header":"termios.h", "extensions":[]},
+        {"ident":"ccos", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"ccosf", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"ccosh", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"ccoshf", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"ccoshl", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"ccosl", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"ceil", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"ceilf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"ceill", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"cexp", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"cexpf", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"cexpl", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"cfgetispeed", "id_type":"function", "header":"termios.h", "extensions":[]},
+        {"ident":"cfgetospeed", "id_type":"function", "header":"termios.h", "extensions":[]},
+        {"ident":"cfsetispeed", "id_type":"function", "header":"termios.h", "extensions":[]},
+        {"ident":"cfsetospeed", "id_type":"function", "header":"termios.h", "extensions":[]},
+        {"ident":"CHAR_BIT", "id_type":"macro", "header":"limits.h", "extensions":[]},
+        {"ident":"CHAR_MAX", "id_type":"macro", "header":"limits.h", "extensions":[]},
+        {"ident":"CHAR_MIN", "id_type":"macro", "header":"limits.h", "extensions":[]},
+        {"ident":"chdir", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"chmod", "id_type":"function", "header":"sys/stat.h", "extensions":["OB"]},
+        {"ident":"chown", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"chroot", "id_type":"function", "header":"unistd.h", "extensions":["OB","REM"]},
+        {"ident":"cimag", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"cimagf", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"cimagl", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"clearerr", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"CLOCAL", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"clock", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"clock_getcpuclockid", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"clock_getres", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"clock_gettime", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"CLOCK_MONOTONIC", "id_type":"macro", "header":"time.h", "extensions":["MON"]},
+        {"ident":"clock_nanosleep", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"CLOCK_PROCESS_CPUTIME_ID", "id_type":"macro", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"CLOCK_REALTIME", "id_type":"macro", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"clock_settime", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"clock_t", "id_type":"type", "header":"sys/types.h", "extensions":[]},
+        {"ident":"CLOCK_THREAD_CPUTIME_ID", "id_type":"macro", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"clockid_t", "id_type":"type", "header":"sys/types.h", "extensions":["TCT"]},
+        {"ident":"CLOCKS_PER_SEC", "id_type":"macro", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"clog", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"clogf", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"clogl", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"close", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"closedir", "id_type":"function", "header":"dirent.h", "extensions":[]},
+        {"ident":"closelog", "id_type":"function", "header":"syslog.h", "extensions":[]},
+        {"ident":"CMSG_DATA", "id_type":"macro", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"CMSG_FIRSTHDR", "id_type":"macro", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"CMSG_NXTHDR", "id_type":"macro", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"cmsghdr", "id_type":"type", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"compl", "id_type":"macro", "header":"iso646.h", "extensions":[]},
+        {"ident":"complex", "id_type":"macro", "header":"complex.h", "extensions":[]},
+        {"ident":"confstr", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"conj", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"conjf", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"conjl", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"connect", "id_type":"function", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"copysign", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"copysignf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"copysignl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"cos", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"cosf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"cosh", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"coshf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"coshl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"cosl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"cpow", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"cpowf", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"cpowl", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"cproj", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"cprojf", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"cprojl", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"CRDLY", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"CREAD", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"creal", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"crealf", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"creall", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"creat", "id_type":"function", "header":"fcntl.h", "extensions":[]},
+        {"ident":"crypt", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"csin", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"csinf", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"csinh", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"csinhf", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"csinhl", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"csinl", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"CSIZE", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"csqrt", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"csqrtf", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"csqrtl", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"CSTOPB", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"ctan", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"ctanf", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"ctanh", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"ctanhf", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"ctanhl", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"ctanl", "id_type":"function", "header":"complex.h", "extensions":[]},
+        {"ident":"ctermid", "id_type":"function", "header":"stdio.h", "extensions":["CX"]},
+        {"ident":"ctime", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"ctime_r", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"datum", "id_type":"type", "header":"ndbm.h", "extensions":[]},
+        {"ident":"daylight", "id_type":"variable", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"DBM", "id_type":"type", "header":"ndbm.h", "extensions":[]},
+        {"ident":"dbm_clearerr", "id_type":"function", "header":"ndbm.h", "extensions":[]},
+        {"ident":"dbm_close", "id_type":"function", "header":"ndbm.h", "extensions":[]},
+        {"ident":"dbm_delete", "id_type":"function", "header":"ndbm.h", "extensions":[]},
+        {"ident":"dbm_error", "id_type":"function", "header":"ndbm.h", "extensions":[]},
+        {"ident":"dbm_fetch", "id_type":"function", "header":"ndbm.h", "extensions":[]},
+        {"ident":"dbm_firstkey", "id_type":"function", "header":"ndbm.h", "extensions":[]},
+        {"ident":"DBM_INSERT", "id_type":"constant", "header":"ndbm.h", "extensions":[]},
+        {"ident":"dbm_nextkey", "id_type":"function", "header":"ndbm.h", "extensions":[]},
+        {"ident":"dbm_open", "id_type":"function", "header":"ndbm.h", "extensions":[]},
+        {"ident":"DBM_REPLACE", "id_type":"constant", "header":"ndbm.h", "extensions":[]},
+        {"ident":"dbm_store", "id_type":"function", "header":"ndbm.h", "extensions":[]},
+        {"ident":"DEAD_PROCESS", "id_type":"constant", "header":"utmpx.h", "extensions":[]},
+        {"ident":"dev_t", "id_type":"type", "header":"sys/types.h", "extensions":["XSI"]},
+        {"ident":"difftime", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"DIR", "id_type":"type", "header":"dirent.h", "extensions":[]},
+        {"ident":"dirent", "id_type":"type", "header":"dirent.h", "extensions":[]},
+        {"ident":"dirfd", "id_type":"function", "header":"dirent.h", "extensions":[]},
+        {"ident":"dirname", "id_type":"function", "header":"libgen.h", "extensions":[]},
+        {"ident":"div", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"div_t", "id_type":"type", "header":"stdlib.h", "extensions":[]},
+        {"ident":"dlclose", "id_type":"function", "header":"dlfcn.h", "extensions":[]},
+        {"ident":"dlerror", "id_type":"function", "header":"dlfcn.h", "extensions":[]},
+        {"ident":"dlopen", "id_type":"function", "header":"dlfcn.h", "extensions":[]},
+        {"ident":"dlsym", "id_type":"function", "header":"dlfcn.h", "extensions":[]},
+        {"ident":"dprintf", "id_type":"function", "header":"stdio.h", "extensions":["CX"]},
+        {"ident":"drand48", "id_type":"function", "header":"stdlib.h", "extensions":["XSI"]},
+        {"ident":"dup", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"dup2", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"duplocale", "id_type":"function", "header":"locale.h", "extensions":["CX"]},
+        {"ident":"E2BIG", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EACCES", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EADDRINUSE", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EADDRNOTAVAIL", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EAFNOSUPPORT", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EAGAIN", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EAI_AGAIN", "id_type":"constant", "header":"netdb.h", "extensions":[]},
+        {"ident":"EAI_BADFLAGS", "id_type":"constant", "header":"netdb.h", "extensions":[]},
+        {"ident":"EAI_FAIL", "id_type":"constant", "header":"netdb.h", "extensions":[]},
+        {"ident":"EAI_FAMILY", "id_type":"constant", "header":"netdb.h", "extensions":[]},
+        {"ident":"EAI_MEMORY", "id_type":"constant", "header":"netdb.h", "extensions":[]},
+        {"ident":"EAI_NONAME", "id_type":"constant", "header":"netdb.h", "extensions":[]},
+        {"ident":"EAI_OVERFLOW", "id_type":"constant", "header":"netdb.h", "extensions":[]},
+        {"ident":"EAI_SERVICE", "id_type":"constant", "header":"netdb.h", "extensions":[]},
+        {"ident":"EAI_SOCKTYPE", "id_type":"constant", "header":"netdb.h", "extensions":[]},
+        {"ident":"EAI_SYSTEM", "id_type":"constant", "header":"netdb.h", "extensions":[]},
+        {"ident":"EALREADY", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EBADF", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EBADMSG", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EBUSY", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ECANCELED", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ECHILD", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ECHO", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"ECHOE", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"ECHOK", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"ECHONL", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"ECONNABORTED", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ECONNREFUSED", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ECONNRESET", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EDEADLK", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EDESTADDRREQ", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EDOM", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EDQUOT", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EEXIST", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EFAULT", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EFBIG", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EHOSTUNREACH", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EIDRM", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EILSEQ", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EINPROGRESS", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EINTR", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EINVAL", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EIO", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EISCONN", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EISDIR", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ELOOP", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EMFILE", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EMLINK", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EMPTY", "id_type":"constant", "header":"utmpx.h", "extensions":[]},
+        {"ident":"EMSGSIZE", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EMULTIHOP", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENAMETOOLONG", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"encrypt", "id_type":"function", "header":"unistd.h", "extensions":["XSI"]},
+        {"ident":"endgrent", "id_type":"function", "header":"grp.h", "extensions":["XSI"]},
+        {"ident":"endhostent", "id_type":"function", "header":"netdb.h", "extensions":[]},
+        {"ident":"endnetent", "id_type":"function", "header":"netdb.h", "extensions":[]},
+        {"ident":"endprotoent", "id_type":"function", "header":"netdb.h", "extensions":[]},
+        {"ident":"endpwent", "id_type":"function", "header":"pwd.h", "extensions":["XSI"]},
+        {"ident":"endservent", "id_type":"function", "header":"netdb.h", "extensions":[]},
+        {"ident":"endutxent", "id_type":"function", "header":"utmpx.h", "extensions":[]},
+        {"ident":"ENETDOWN", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENETRESET", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENETUNREACH", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENFILE", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENOBUFS", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENODATA", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENODEV", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENOENT", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENOEXEC", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENOLCK", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENOLINK", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENOMEM", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENOMSG", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENOPROTOOPT", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENOSPC", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENOSR", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENOSTR", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENOSYS", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENOTCONN", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENOTDIR", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENOTEMPTY", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENOTRECOVERABLE", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENOTSOCK", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENOTSUP", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENOTTY", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ENTRY", "id_type":"type", "header":"search.h", "extensions":[]},
+        {"ident":"entry", "id_type":"type", "header":"search.h", "extensions":[]},
+        {"ident":"ENXIO", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EOF", "id_type":"macro", "header":"stdio.h", "extensions":[]},
+        {"ident":"EOPNOTSUPP", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EOVERFLOW", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EOWNERDEAD", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EPERM", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EPIPE", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EPROTO", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EPROTONOSUPPORT", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EPROTOTYPE", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"erand48", "id_type":"function", "header":"stdlib.h", "extensions":["XSI"]},
+        {"ident":"ERANGE", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"erf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"erfc", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"erfcf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"erfcl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"erff", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"erfl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"EROFS", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"errno", "id_type":"macroOrIdentifier", "header":"errno.h", "extensions":[]},
+        {"ident":"ESPIPE", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ESRCH", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ESTALE", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ETIME", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ETIMEDOUT", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"ETXTBSY", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EWOULDBLOCK", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"EXDEV", "id_type":"macro", "header":"errno.h", "extensions":[]},
+        {"ident":"execl", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"execle", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"execlp", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"execv", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"execve", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"execvp", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"exit", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"EXIT_FAILURE", "id_type":"macro", "header":"stdlib.h", "extensions":[]},
+        {"ident":"EXIT_SUCCESS", "id_type":"macro", "header":"stdlib.h", "extensions":[]},
+        {"ident":"exp", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"exp2", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"exp2f", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"exp2l", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"expf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"expl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"expm1", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"expm1f", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"expm1l", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"F_DUPFD", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"F_DUPFD_CLOEXEC", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"F_GETFD", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"F_GETFL", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"F_GETLK", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"F_GETOWN", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"F_LOCK", "id_type":"constant", "header":"unistd.h", "extensions":["XSI"]},
+        {"ident":"F_OK", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"F_SETFD", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"F_SETFL", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"F_SETLK", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"F_SETLKW", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"F_SETOWN", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"F_TEST", "id_type":"constant", "header":"unistd.h", "extensions":["XSI"]},
+        {"ident":"F_TLOCK", "id_type":"constant", "header":"unistd.h", "extensions":["XSI"]},
+        {"ident":"F_ULOCK", "id_type":"constant", "header":"unistd.h", "extensions":["XSI"]},
+        {"ident":"fabs", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"fabsf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"fabsl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"faccessat", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"false", "id_type":"macro", "header":"stdbool.h", "extensions":[]},
+        {"ident":"fattach", "id_type":"function", "header":"stropts.h", "extensions":[]},
+        {"ident":"fchdir", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"fchmod", "id_type":"function", "header":"sys/stat.h", "extensions":["OB"]},
+        {"ident":"fchmodat", "id_type":"function", "header":"sys/stat.h", "extensions":["OB"]},
+        {"ident":"fchown", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"fchownat", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"fclose", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"fcntl", "id_type":"function", "header":"fcntl.h", "extensions":[]},
+        {"ident":"FD_CLOEXEC", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"FD_CLR", "id_type":"function", "header":"sys/select.h", "extensions":[]},
+        {"ident":"FD_ISSET", "id_type":"function", "header":"sys/select.h", "extensions":[]},
+        {"ident":"FD_SET", "id_type":"function", "header":"sys/select.h", "extensions":[]},
+        {"ident":"fd_set", "id_type":"type", "header":"sys/select.h", "extensions":[]},
+        {"ident":"FD_SETSIZE", "id_type":"constant", "header":"sys/select.h", "extensions":[]},
+        {"ident":"FD_ZERO", "id_type":"function", "header":"sys/select.h", "extensions":[]},
+        {"ident":"fdatasync", "id_type":"function", "header":"unistd.h", "extensions":["SIO"]},
+        {"ident":"fdetach", "id_type":"function", "header":"stropts.h", "extensions":[]},
+        {"ident":"fdim", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"fdimf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"fdiml", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"fdopen", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"fdopendir", "id_type":"function", "header":"dirent.h", "extensions":[]},
+        {"ident":"feclearexcept", "id_type":"function", "header":"fenv.h", "extensions":[]},
+        {"ident":"fegetenv", "id_type":"function", "header":"fenv.h", "extensions":[]},
+        {"ident":"fegetexceptflag", "id_type":"function", "header":"fenv.h", "extensions":[]},
+        {"ident":"fegetround", "id_type":"function", "header":"fenv.h", "extensions":[]},
+        {"ident":"feholdexcept", "id_type":"function", "header":"fenv.h", "extensions":[]},
+        {"ident":"fenv_t", "id_type":"type", "header":"fenv.h", "extensions":[]},
+        {"ident":"feof", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"feraiseexcept", "id_type":"function", "header":"fenv.h", "extensions":[]},
+        {"ident":"ferror", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"fesetenv", "id_type":"function", "header":"fenv.h", "extensions":[]},
+        {"ident":"fesetexceptflag", "id_type":"function", "header":"fenv.h", "extensions":[]},
+        {"ident":"fesetround", "id_type":"function", "header":"fenv.h", "extensions":[]},
+        {"ident":"fetestexcept", "id_type":"function", "header":"fenv.h", "extensions":[]},
+        {"ident":"feupdateenv", "id_type":"function", "header":"fenv.h", "extensions":[]},
+        {"ident":"fexcept_t", "id_type":"type", "header":"fenv.h", "extensions":[]},
+        {"ident":"fexecve", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"FFDLY", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"fflush", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"ffs", "id_type":"function", "header":"strings.h", "extensions":["XSI"]},
+        {"ident":"fgetc", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"fgetpos", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"fgets", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"fgetwc", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"fgetws", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"FILE", "id_type":"type", "header":"stdio.h", "extensions":["CX"]},
+        {"ident":"FILENAME_MAX", "id_type":"macro", "header":"stdio.h", "extensions":[]},
+        {"ident":"fileno", "id_type":"function", "header":"stdio.h", "extensions":["CX"]},
+        {"ident":"flock", "id_type":"type", "header":"fcntl.h", "extensions":[]},
+        {"ident":"flockfile", "id_type":"function", "header":"stdio.h", "extensions":["CX"]},
+        {"ident":"floor", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"floorf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"floorl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"fma", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"fmaf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"fmal", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"fmax", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"fmaxf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"fmaxl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"fmemopen", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"fmin", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"fminf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"fminl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"fmod", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"fmodf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"fmodl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"fmtmsg", "id_type":"function", "header":"fmtmsg.h", "extensions":[]},
+        {"ident":"FNM_NOESCAPE", "id_type":"constant", "header":"fnmatch.h", "extensions":[]},
+        {"ident":"FNM_NOMATCH", "id_type":"constant", "header":"fnmatch.h", "extensions":[]},
+        {"ident":"FNM_PATHNAME", "id_type":"constant", "header":"fnmatch.h", "extensions":[]},
+        {"ident":"FNM_PERIOD", "id_type":"constant", "header":"fnmatch.h", "extensions":[]},
+        {"ident":"fnmatch", "id_type":"function", "header":"fnmatch.h", "extensions":[]},
+        {"ident":"fopen", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"FOPEN_MAX", "id_type":"macro", "header":"stdio.h", "extensions":[]},
+        {"ident":"fork", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"fpathconf", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"fpos_t", "id_type":"type", "header":"stdio.h", "extensions":[]},
+        {"ident":"fprintf", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"fputc", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"fputs", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"fputwc", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"fputws", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"fread", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"free", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"freeaddrinfo", "id_type":"function", "header":"netdb.h", "extensions":[]},
+        {"ident":"freelocale", "id_type":"function", "header":"locale.h", "extensions":["CX"]},
+        {"ident":"freopen", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"frexp", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"frexpf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"frexpl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"fsblkcnt_t", "id_type":"type", "header":"sys/types.h", "extensions":[]},
+        {"ident":"fscanf", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"fseek", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"fseeko", "id_type":"function", "header":"stdio.h", "extensions":["CX"]},
+        {"ident":"fsetpos", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"fsfilcnt_t", "id_type":"type", "header":"sys/types.h", "extensions":[]},
+        {"ident":"fstat", "id_type":"function", "header":"sys/stat.h", "extensions":["OB"]},
+        {"ident":"fstatat", "id_type":"function", "header":"sys/stat.h", "extensions":["OB"]},
+        {"ident":"fstatvfs", "id_type":"function", "header":"sys/statvfs.h", "extensions":[]},
+        {"ident":"fsync", "id_type":"function", "header":"unistd.h", "extensions":["FSC"]},
+        {"ident":"ftell", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"ftello", "id_type":"function", "header":"stdio.h", "extensions":["CX"]},
+        {"ident":"ftok", "id_type":"function", "header":"sys/ipc.h", "extensions":[]},
+        {"ident":"ftruncate", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"ftrylockfile", "id_type":"function", "header":"stdio.h", "extensions":["CX"]},
+        {"ident":"ftw", "id_type":"function", "header":"ftw.h", "extensions":["OB"]},
+        {"ident":"FTW", "id_type":"type", "header":"ftw.h", "extensions":["OB"]},
+        {"ident":"FTW_CHDIR", "id_type":"constant", "header":"ftw.h", "extensions":["OB"]},
+        {"ident":"FTW_D", "id_type":"constant", "header":"ftw.h", "extensions":["OB"]},
+        {"ident":"FTW_DEPTH", "id_type":"constant", "header":"ftw.h", "extensions":["OB"]},
+        {"ident":"FTW_DNR", "id_type":"constant", "header":"ftw.h", "extensions":["OB"]},
+        {"ident":"FTW_DP", "id_type":"constant", "header":"ftw.h", "extensions":["OB"]},
+        {"ident":"FTW_F", "id_type":"constant", "header":"ftw.h", "extensions":["OB"]},
+        {"ident":"FTW_MOUNT", "id_type":"constant", "header":"ftw.h", "extensions":["OB"]},
+        {"ident":"FTW_NS", "id_type":"constant", "header":"ftw.h", "extensions":["OB"]},
+        {"ident":"FTW_PHYS", "id_type":"constant", "header":"ftw.h", "extensions":["OB"]},
+        {"ident":"FTW_SL", "id_type":"constant", "header":"ftw.h", "extensions":["OB"]},
+        {"ident":"FTW_SLN", "id_type":"constant", "header":"ftw.h", "extensions":["OB"]},
+        {"ident":"funlockfile", "id_type":"function", "header":"stdio.h", "extensions":["CX"]},
+        {"ident":"futimens", "id_type":"function", "header":"sys/stat.h", "extensions":["OB"]},
+        {"ident":"fwide", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"fwprintf", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"fwrite", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"fwscanf", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"gai_strerror", "id_type":"function", "header":"netdb.h", "extensions":[]},
+        {"ident":"getaddrinfo", "id_type":"function", "header":"netdb.h", "extensions":["IP6"]},
+        {"ident":"GETALL", "id_type":"constant", "header":"sys/sem.h", "extensions":[]},
+        {"ident":"getc", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"getc_unlocked", "id_type":"function", "header":"stdio.h", "extensions":["CX"]},
+        {"ident":"getchar", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"getchar_unlocked", "id_type":"function", "header":"stdio.h", "extensions":["CX"]},
+        {"ident":"getcwd", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"getdate", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"getdelim", "id_type":"function", "header":"stdio.h", "extensions":["CX"]},
+        {"ident":"getegid", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"getenv", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"geteuid", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"getgid", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"getgrent", "id_type":"function", "header":"grp.h", "extensions":[]},
+        {"ident":"getgrgid", "id_type":"function", "header":"grp.h", "extensions":[]},
+        {"ident":"getgrgid_r", "id_type":"function", "header":"grp.h", "extensions":[]},
+        {"ident":"getgrnam", "id_type":"function", "header":"grp.h", "extensions":[]},
+        {"ident":"getgrnam_r", "id_type":"function", "header":"grp.h", "extensions":[]},
+        {"ident":"getgroups", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"gethostbyaddr", "id_type":"function", "header":"netdb.h", "extensions":["OB","REM"]},
+        {"ident":"gethostbyname", "id_type":"function", "header":"netdb.h", "extensions":["OB","REM"]},
+        {"ident":"gethostent", "id_type":"function", "header":"netdb.h", "extensions":[]},
+        {"ident":"gethostid", "id_type":"function", "header":"unistd.h", "extensions":["XSI"]},
+        {"ident":"gethostname", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"getitimer", "id_type":"function", "header":"sys/time.h", "extensions":["IP6"]},
+        {"ident":"getline", "id_type":"function", "header":"stdio.h", "extensions":["CX"]},
+        {"ident":"getlogin", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"getlogin_r", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"getmsg", "id_type":"function", "header":"stropts.h", "extensions":[]},
+        {"ident":"getnameinfo", "id_type":"function", "header":"netdb.h", "extensions":[]},
+        {"ident":"GETNCNT", "id_type":"constant", "header":"sys/sem.h", "extensions":[]},
+        {"ident":"getnetbyaddr", "id_type":"function", "header":"netdb.h", "extensions":[]},
+        {"ident":"getnetbyname", "id_type":"function", "header":"netdb.h", "extensions":[]},
+        {"ident":"getnetent", "id_type":"function", "header":"netdb.h", "extensions":[]},
+        {"ident":"getopt", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"getpeername", "id_type":"function", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"getpgid", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"getpgrp", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"GETPID", "id_type":"constant", "header":"sys/sem.h", "extensions":[]},
+        {"ident":"getpid", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"getpmsg", "id_type":"function", "header":"stropts.h", "extensions":[]},
+        {"ident":"getppid", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"getpriority", "id_type":"function", "header":"sys/resource.h", "extensions":[]},
+        {"ident":"getprotobyname", "id_type":"function", "header":"netdb.h", "extensions":[]},
+        {"ident":"getprotobynumber", "id_type":"function", "header":"netdb.h", "extensions":[]},
+        {"ident":"getprotoent", "id_type":"function", "header":"netdb.h", "extensions":[]},
+        {"ident":"getpwent", "id_type":"function", "header":"pwd.h", "extensions":[]},
+        {"ident":"getpwnam", "id_type":"function", "header":"pwd.h", "extensions":[]},
+        {"ident":"getpwnam_r", "id_type":"function", "header":"pwd.h", "extensions":[]},
+        {"ident":"getpwuid", "id_type":"function", "header":"pwd.h", "extensions":[]},
+        {"ident":"getpwuid_r", "id_type":"function", "header":"pwd.h", "extensions":[]},
+        {"ident":"getrlimit", "id_type":"function", "header":"sys/resource.h", "extensions":[]},
+        {"ident":"getrusage", "id_type":"function", "header":"sys/resource.h", "extensions":[]},
+        {"ident":"gets", "id_type":"function", "header":"stdio.h", "extensions":["OB"]},
+        {"ident":"getservbyname", "id_type":"function", "header":"netdb.h", "extensions":[]},
+        {"ident":"getservbyport", "id_type":"function", "header":"netdb.h", "extensions":[]},
+        {"ident":"getservent", "id_type":"function", "header":"netdb.h", "extensions":[]},
+        {"ident":"getsid", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"getsockname", "id_type":"function", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"getsockopt", "id_type":"function", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"getsubopt", "id_type":"function", "header":"stdlib.h", "extensions":["CX"]},
+        {"ident":"gettimeofday", "id_type":"function", "header":"sys/time.h", "extensions":["IP6"]},
+        {"ident":"getuid", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"getutxent", "id_type":"function", "header":"utmpx.h", "extensions":[]},
+        {"ident":"getutxid", "id_type":"function", "header":"utmpx.h", "extensions":[]},
+        {"ident":"getutxline", "id_type":"function", "header":"utmpx.h", "extensions":[]},
+        {"ident":"GETVAL", "id_type":"constant", "header":"sys/sem.h", "extensions":[]},
+        {"ident":"getwc", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"getwchar", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"GETZCNT", "id_type":"constant", "header":"sys/sem.h", "extensions":[]},
+        {"ident":"gid_t", "id_type":"type", "header":"sys/types.h", "extensions":[]},
+        {"ident":"glob", "id_type":"function", "header":"glob.h", "extensions":[]},
+        {"ident":"GLOB_ABORTED", "id_type":"constant", "header":"glob.h", "extensions":[]},
+        {"ident":"GLOB_APPEND", "id_type":"constant", "header":"glob.h", "extensions":[]},
+        {"ident":"GLOB_DOOFFS", "id_type":"constant", "header":"glob.h", "extensions":[]},
+        {"ident":"GLOB_ERR", "id_type":"constant", "header":"glob.h", "extensions":[]},
+        {"ident":"GLOB_MARK", "id_type":"constant", "header":"glob.h", "extensions":[]},
+        {"ident":"GLOB_NOCHECK", "id_type":"constant", "header":"glob.h", "extensions":[]},
+        {"ident":"GLOB_NOESCAPE", "id_type":"constant", "header":"glob.h", "extensions":[]},
+        {"ident":"GLOB_NOMATCH", "id_type":"constant", "header":"glob.h", "extensions":[]},
+        {"ident":"GLOB_NOSORT", "id_type":"constant", "header":"glob.h", "extensions":[]},
+        {"ident":"GLOB_NOSPACE", "id_type":"constant", "header":"glob.h", "extensions":[]},
+        {"ident":"glob_t", "id_type":"type", "header":"glob.h", "extensions":[]},
+        {"ident":"globfree", "id_type":"function", "header":"glob.h", "extensions":[]},
+        {"ident":"gmtime", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"gmtime_r", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"grantpt", "id_type":"function", "header":"stdlib.h", "extensions":["XSI"]},
+        {"ident":"group", "id_type":"type", "header":"grp.h", "extensions":["XSI"]},
+        {"ident":"h_errno", "id_type":"macroOrIdentifier", "header":"netdb.h", "extensions":["OB","REM"]},
+        {"ident":"hcreate", "id_type":"function", "header":"search.h", "extensions":[]},
+        {"ident":"hdestroy", "id_type":"function", "header":"search.h", "extensions":[]},
+        {"ident":"hostent", "id_type":"type", "header":"netdb.h", "extensions":[]},
+        {"ident":"hsearch", "id_type":"function", "header":"search.h", "extensions":[]},
+        {"ident":"htonl", "id_type":"function", "header":"arpa/inet.h", "extensions":[]},
+        {"ident":"htons", "id_type":"function", "header":"arpa/inet.h", "extensions":[]},
+        {"ident":"HUGE_VAL", "id_type":"macro", "header":"math.h", "extensions":[]},
+        {"ident":"HUGE_VALF", "id_type":"macro", "header":"math.h", "extensions":[]},
+        {"ident":"HUGE_VALL", "id_type":"macro", "header":"math.h", "extensions":[]},
+        {"ident":"HUPCL", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"hypot", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"hypotf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"hypotl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"I", "id_type":"macro", "header":"complex.h", "extensions":[]},
+        {"ident":"ICANON", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"iconv", "id_type":"function", "header":"iconv.h", "extensions":[]},
+        {"ident":"iconv_close", "id_type":"function", "header":"iconv.h", "extensions":[]},
+        {"ident":"iconv_open", "id_type":"function", "header":"iconv.h", "extensions":[]},
+        {"ident":"iconv_t", "id_type":"type", "header":"iconv.h", "extensions":[]},
+        {"ident":"ICRNL", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"id_t", "id_type":"type", "header":"sys/types.h", "extensions":[]},
+        {"ident":"IEXTEN", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"if_freenameindex", "id_type":"function", "header":"net/if.h", "extensions":[]},
+        {"ident":"if_indextoname", "id_type":"function", "header":"net/if.h", "extensions":[]},
+        {"ident":"if_nameindex", "id_type":"function", "header":"net/if.h", "extensions":[]},
+        {"ident":"IF_NAMESIZE", "id_type":"constant", "header":"net/if.h", "extensions":[]},
+        {"ident":"if_nametoindex", "id_type":"function", "header":"net/if.h", "extensions":[]},
+        {"ident":"IGNBRK", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"IGNCR", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"IGNPAR", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"ilogb", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"ilogbf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"ilogbl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"imaginary", "id_type":"macro", "header":"complex.h", "extensions":[]},
+        {"ident":"imaxabs", "id_type":"function", "header":"inttypes.h", "extensions":[]},
+        {"ident":"imaxdiv", "id_type":"function", "header":"inttypes.h", "extensions":[]},
+        {"ident":"in6_addr", "id_type":"type", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"IN6_IS_ADDR_LINKLOCAL", "id_type":"constant", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"IN6_IS_ADDR_LOOPBACK", "id_type":"constant", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"IN6_IS_ADDR_MC_GLOBAL", "id_type":"constant", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"IN6_IS_ADDR_MC_LINKLOCAL", "id_type":"constant", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"IN6_IS_ADDR_MC_NODELOCAL", "id_type":"constant", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"IN6_IS_ADDR_MC_ORGLOCAL", "id_type":"constant", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"IN6_IS_ADDR_MC_SITELOCAL", "id_type":"constant", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"IN6_IS_ADDR_MULTICAST", "id_type":"constant", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"IN6_IS_ADDR_SITELOCAL", "id_type":"constant", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"IN6_IS_ADDR_UNSPECIFIED", "id_type":"constant", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"IN6_IS_ADDR_V4COMPAT", "id_type":"constant", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"IN6_IS_ADDR_V4MAPPED", "id_type":"constant", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"in6addr_any", "id_type":"variable", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"in6addr_loopback", "id_type":"variable", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"in_addr", "id_type":"type", "header":"netinet/in.h", "extensions":[]},
+        {"ident":"in_addr_t", "id_type":"type", "header":"netinet/in.h", "extensions":[]},
+        {"ident":"in_port_t", "id_type":"type", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"INADDR_ANY", "id_type":"constant", "header":"netinet/in.h", "extensions":[]},
+        {"ident":"INADDR_BROADCAST", "id_type":"constant", "header":"netinet/in.h", "extensions":[]},
+        {"ident":"INET6_ADDRSTRLEN", "id_type":"constant", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"inet_addr", "id_type":"function", "header":"arpa/inet.h", "extensions":[]},
+        {"ident":"INET_ADDRSTRLEN", "id_type":"constant", "header":"netinet/in.h", "extensions":[]},
+        {"ident":"inet_ntoa", "id_type":"function", "header":"arpa/inet.h", "extensions":[]},
+        {"ident":"inet_ntop", "id_type":"function", "header":"arpa/inet.h", "extensions":[]},
+        {"ident":"inet_pton", "id_type":"function", "header":"arpa/inet.h", "extensions":[]},
+        {"ident":"INFINITY", "id_type":"macro", "header":"math.h", "extensions":[]},
+        {"ident":"INIT_PROCESS", "id_type":"constant", "header":"utmpx.h", "extensions":[]},
+        {"ident":"initstate", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"INLCR", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"ino_t", "id_type":"type", "header":"sys/types.h", "extensions":["XSI"]},
+        {"ident":"INPCK", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"insque", "id_type":"function", "header":"search.h", "extensions":[]},
+        {"ident":"INT_MAX", "id_type":"macro", "header":"limits.h", "extensions":[]},
+        {"ident":"INT_MIN", "id_type":"macro", "header":"limits.h", "extensions":[]},
+        {"ident":"ioctl", "id_type":"function", "header":"stropts.h", "extensions":["OB","XSR"]},
+        {"ident":"iovec", "id_type":"type", "header":"sys/uio.h", "extensions":["XSI"]},
+        {"ident":"IPC_CREAT", "id_type":"constant", "header":"sys/ipc.h", "extensions":[]},
+        {"ident":"IPC_EXCL", "id_type":"constant", "header":"sys/ipc.h", "extensions":[]},
+        {"ident":"IPC_NOWAIT", "id_type":"constant", "header":"sys/ipc.h", "extensions":[]},
+        {"ident":"ipc_perm", "id_type":"type", "header":"sys/ipc.h", "extensions":[]},
+        {"ident":"IPPROTO_ICMP", "id_type":"constant", "header":"netinet/in.h", "extensions":[]},
+        {"ident":"IPPROTO_IP", "id_type":"constant", "header":"netinet/in.h", "extensions":[]},
+        {"ident":"IPPROTO_IPV6", "id_type":"constant", "header":"netinet/in.h", "extensions":[]},
+        {"ident":"IPPROTO_RAW", "id_type":"constant", "header":"netinet/in.h", "extensions":[]},
+        {"ident":"IPPROTO_TCP", "id_type":"constant", "header":"netinet/in.h", "extensions":[]},
+        {"ident":"IPPROTO_UDP", "id_type":"constant", "header":"netinet/in.h", "extensions":[]},
+        {"ident":"IPV6_JOIN_GROUP", "id_type":"constant", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"IPV6_LEAVE_GROUP", "id_type":"constant", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"ipv6_mreq", "id_type":"type", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"IPV6_MULTICAST_HOPS", "id_type":"constant", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"IPV6_MULTICAST_IF", "id_type":"constant", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"IPV6_MULTICAST_LOOP", "id_type":"constant", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"IPV6_UNICAST_HOPS", "id_type":"constant", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"IPV6_V6ONLY", "id_type":"constant", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"isalnum", "id_type":"function", "header":"ctype.h", "extensions":[]},
+        {"ident":"isalnum_l", "id_type":"function", "header":"ctype.h", "extensions":["CX"]},
+        {"ident":"isalpha", "id_type":"function", "header":"ctype.h", "extensions":[]},
+        {"ident":"isalpha_l", "id_type":"function", "header":"ctype.h", "extensions":["CX"]},
+        {"ident":"isascii", "id_type":"function", "header":"ctype.h", "extensions":["OB","XSI"]},
+        {"ident":"isastream", "id_type":"function", "header":"stropts.h", "extensions":[]},
+        {"ident":"isatty", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"isblank", "id_type":"function", "header":"ctype.h", "extensions":[]},
+        {"ident":"isblank_l", "id_type":"function", "header":"ctype.h", "extensions":["CX"]},
+        {"ident":"iscntrl", "id_type":"function", "header":"ctype.h", "extensions":[]},
+        {"ident":"iscntrl_l", "id_type":"function", "header":"ctype.h", "extensions":["CX"]},
+        {"ident":"isdigit", "id_type":"function", "header":"ctype.h", "extensions":[]},
+        {"ident":"isdigit_l", "id_type":"function", "header":"ctype.h", "extensions":["CX"]},
+        {"ident":"isgraph", "id_type":"function", "header":"ctype.h", "extensions":[]},
+        {"ident":"isgraph_l", "id_type":"function", "header":"ctype.h", "extensions":["CX"]},
+        {"ident":"ISIG", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"islower", "id_type":"function", "header":"ctype.h", "extensions":[]},
+        {"ident":"islower_l", "id_type":"function", "header":"ctype.h", "extensions":["CX"]},
+        {"ident":"isprint", "id_type":"function", "header":"ctype.h", "extensions":[]},
+        {"ident":"isprint_l", "id_type":"function", "header":"ctype.h", "extensions":["CX"]},
+        {"ident":"ispunct", "id_type":"function", "header":"ctype.h", "extensions":[]},
+        {"ident":"ispunct_l", "id_type":"function", "header":"ctype.h", "extensions":["CX"]},
+        {"ident":"isspace", "id_type":"function", "header":"ctype.h", "extensions":[]},
+        {"ident":"isspace_l", "id_type":"function", "header":"ctype.h", "extensions":["CX"]},
+        {"ident":"ISTRIP", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"isupper", "id_type":"function", "header":"ctype.h", "extensions":[]},
+        {"ident":"isupper_l", "id_type":"function", "header":"ctype.h", "extensions":["CX"]},
+        {"ident":"iswalnum", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswalnum_l", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswalpha", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswalpha_l", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswblank", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswblank_l", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswcntrl", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswcntrl_l", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswctype", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswctype_l", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswdigit", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswdigit_l", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswgraph", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswgraph_l", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswlower", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswlower_l", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswprint", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswprint_l", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswpunct", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswpunct_l", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswspace", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswspace_l", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswupper", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswupper_l", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswxdigit", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"iswxdigit_l", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"isxdigit", "id_type":"function", "header":"ctype.h", "extensions":[]},
+        {"ident":"isxdigit_l", "id_type":"function", "header":"ctype.h", "extensions":["CX"]},
+        {"ident":"ITIMER_PROF", "id_type":"constant", "header":"sys/time.h", "extensions":["IP6"]},
+        {"ident":"ITIMER_REAL", "id_type":"constant", "header":"sys/time.h", "extensions":["IP6"]},
+        {"ident":"ITIMER_VIRTUAL", "id_type":"constant", "header":"sys/time.h", "extensions":["IP6"]},
+        {"ident":"itimerspec", "id_type":"type", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"itimerval", "id_type":"type", "header":"sys/time.h", "extensions":["IP6"]},
+        {"ident":"IXANY", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"IXOFF", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"IXON", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"j0", "id_type":"function", "header":"math.h", "extensions":["XSI"]},
+        {"ident":"j1", "id_type":"function", "header":"math.h", "extensions":["XSI"]},
+        {"ident":"jn", "id_type":"function", "header":"math.h", "extensions":["XSI"]},
+        {"ident":"jrand48", "id_type":"function", "header":"stdlib.h", "extensions":["XSI"]},
+        {"ident":"key_t", "id_type":"type", "header":"sys/types.h", "extensions":[]},
+        {"ident":"kill", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"killpg", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"l64a", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"L_ctermid", "id_type":"type", "header":"stdio.h", "extensions":[]},
+        {"ident":"L_tmpnam", "id_type":"type", "header":"stdio.h", "extensions":[]},
+        {"ident":"labs", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"lchown", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"lcong48", "id_type":"function", "header":"stdlib.h", "extensions":["XSI"]},
+        {"ident":"lconv", "id_type":"type", "header":"locale.h", "extensions":[]},
+        {"ident":"ldexp", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"ldexpf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"ldexpl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"ldiv", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"ldiv_t", "id_type":"type", "header":"stdlib.h", "extensions":[]},
+        {"ident":"lfind", "id_type":"function", "header":"search.h", "extensions":[]},
+        {"ident":"lgamma", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"lgammaf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"lgammal", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"linger", "id_type":"type", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"link", "id_type":"function", "header":"unistd.h", "extensions":["IP6"]},
+        {"ident":"linkat", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"lio_listio", "id_type":"function", "header":"aio.h", "extensions":[]},
+        {"ident":"LIO_NOP", "id_type":"constant", "header":"aio.h", "extensions":[]},
+        {"ident":"LIO_NOWAIT", "id_type":"constant", "header":"aio.h", "extensions":[]},
+        {"ident":"LIO_READ", "id_type":"constant", "header":"aio.h", "extensions":[]},
+        {"ident":"LIO_WAIT", "id_type":"constant", "header":"aio.h", "extensions":[]},
+        {"ident":"LIO_WRITE", "id_type":"constant", "header":"aio.h", "extensions":[]},
+        {"ident":"listen", "id_type":"function", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"llabs", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"lldiv", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"lldiv_t", "id_type":"type", "header":"stdlib.h", "extensions":[]},
+        {"ident":"LLONG_MAX", "id_type":"macro", "header":"limits.h", "extensions":[]},
+        {"ident":"LLONG_MIN", "id_type":"macro", "header":"limits.h", "extensions":[]},
+        {"ident":"llrint", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"llrintf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"llrintl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"llround", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"llroundf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"llroundl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"locale_t", "id_type":"type", "header":"wchar.h", "extensions":["CX"]},
+        {"ident":"localeconv", "id_type":"function", "header":"locale.h", "extensions":[]},
+        {"ident":"localtime", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"localtime_r", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"lockf", "id_type":"function", "header":"unistd.h", "extensions":["XSI"]},
+        {"ident":"log", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"log10", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"log10f", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"log10l", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"log1p", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"log1pf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"log1pl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"log2", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"log2f", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"log2l", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"LOG_ALERT", "id_type":"macro", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_AUTH", "id_type":"constant", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_CONS", "id_type":"constant", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_CRIT", "id_type":"macro", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_CRON", "id_type":"constant", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_DAEMON", "id_type":"constant", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_DEBUG", "id_type":"macro", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_EMERG", "id_type":"macro", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_ERR", "id_type":"macro", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_INFO", "id_type":"macro", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_KERN", "id_type":"constant", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_LOCAL0", "id_type":"constant", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_LOCAL1", "id_type":"constant", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_LOCAL2", "id_type":"constant", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_LOCAL3", "id_type":"constant", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_LOCAL4", "id_type":"constant", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_LOCAL5", "id_type":"constant", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_LOCAL6", "id_type":"constant", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_LOCAL7", "id_type":"constant", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_LPR", "id_type":"constant", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_MAIL", "id_type":"constant", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_MASK", "id_type":"macro", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_NDELAY", "id_type":"constant", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_NEWS", "id_type":"constant", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_NOTICE", "id_type":"macro", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_NOWAIT", "id_type":"constant", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_ODELAY", "id_type":"constant", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_PID", "id_type":"constant", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_USER", "id_type":"constant", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_UUCP", "id_type":"constant", "header":"syslog.h", "extensions":[]},
+        {"ident":"LOG_WARNING", "id_type":"macro", "header":"syslog.h", "extensions":[]},
+        {"ident":"logb", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"logbf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"logbl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"logf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"LOGIN_PROCESS", "id_type":"constant", "header":"utmpx.h", "extensions":[]},
+        {"ident":"logl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"LONG_BIT", "id_type":"macro", "header":"limits.h", "extensions":[]},
+        {"ident":"LONG_MAX", "id_type":"macro", "header":"limits.h", "extensions":[]},
+        {"ident":"LONG_MIN", "id_type":"macro", "header":"limits.h", "extensions":[]},
+        {"ident":"longjmp", "id_type":"function", "header":"setjmp.h", "extensions":[]},
+        {"ident":"lrand48", "id_type":"function", "header":"stdlib.h", "extensions":["XSI"]},
+        {"ident":"lrint", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"lrintf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"lrintl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"lround", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"lroundf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"lroundl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"lsearch", "id_type":"function", "header":"search.h", "extensions":[]},
+        {"ident":"lseek", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"lstat", "id_type":"function", "header":"sys/stat.h", "extensions":["OB"]},
+        {"ident":"M_1_PI", "id_type":"constant", "header":"math.h", "extensions":[]},
+        {"ident":"M_2_PI", "id_type":"constant", "header":"math.h", "extensions":[]},
+        {"ident":"M_2_SQRTPI", "id_type":"constant", "header":"math.h", "extensions":[]},
+        {"ident":"M_E", "id_type":"constant", "header":"math.h", "extensions":[]},
+        {"ident":"M_LN10", "id_type":"constant", "header":"math.h", "extensions":[]},
+        {"ident":"M_LN2", "id_type":"constant", "header":"math.h", "extensions":[]},
+        {"ident":"M_LOG10E", "id_type":"constant", "header":"math.h", "extensions":[]},
+        {"ident":"M_LOG2E", "id_type":"constant", "header":"math.h", "extensions":[]},
+        {"ident":"M_PI", "id_type":"constant", "header":"math.h", "extensions":[]},
+        {"ident":"M_PI_2", "id_type":"constant", "header":"math.h", "extensions":[]},
+        {"ident":"M_PI_4", "id_type":"constant", "header":"math.h", "extensions":[]},
+        {"ident":"M_SQRT1_2", "id_type":"constant", "header":"math.h", "extensions":[]},
+        {"ident":"M_SQRT2", "id_type":"constant", "header":"math.h", "extensions":[]},
+        {"ident":"malloc", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"MAP_FAILED", "id_type":"constant", "header":"sys/mman.h", "extensions":[]},
+        {"ident":"MAP_FIXED", "id_type":"constant", "header":"sys/mman.h", "extensions":[]},
+        {"ident":"MAP_PRIVATE", "id_type":"constant", "header":"sys/mman.h", "extensions":[]},
+        {"ident":"MAP_SHARED", "id_type":"constant", "header":"sys/mman.h", "extensions":[]},
+        {"ident":"MAXFLOAT", "id_type":"constant", "header":"math.h", "extensions":[]},
+        {"ident":"MB_CUR_MAX", "id_type":"macro", "header":"stdlib.h", "extensions":[]},
+        {"ident":"MB_LEN_MAX", "id_type":"macro", "header":"limits.h", "extensions":[]},
+        {"ident":"mblen", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"mbrlen", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"mbrtowc", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"mbsinit", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"mbsnrtowcs", "id_type":"function", "header":"wchar.h", "extensions":["CX"]},
+        {"ident":"mbsrtowcs", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"mbstate_t", "id_type":"type", "header":"wchar.h", "extensions":["CX"]},
+        {"ident":"mbstowcs", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"mbtowc", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"MCL_CURRENT", "id_type":"constant", "header":"sys/mman.h", "extensions":["ML"]},
+        {"ident":"MCL_FUTURE", "id_type":"constant", "header":"sys/mman.h", "extensions":["ML"]},
+        {"ident":"memccpy", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"memchr", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"memcmp", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"memcpy", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"memmove", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"memset", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"MINSIGSTKSZ", "id_type":"macro", "header":"signal.h", "extensions":[]},
+        {"ident":"mkdir", "id_type":"function", "header":"sys/stat.h", "extensions":["OB"]},
+        {"ident":"mkdirat", "id_type":"function", "header":"sys/stat.h", "extensions":["OB"]},
+        {"ident":"mkdtemp", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"mkfifo", "id_type":"function", "header":"sys/stat.h", "extensions":["OB"]},
+        {"ident":"mkfifoat", "id_type":"function", "header":"sys/stat.h", "extensions":["OB"]},
+        {"ident":"mknod", "id_type":"function", "header":"sys/stat.h", "extensions":["OB"]},
+        {"ident":"mknodat", "id_type":"function", "header":"sys/stat.h", "extensions":["OB"]},
+        {"ident":"mkstemp", "id_type":"function", "header":"stdlib.h", "extensions":["CX"]},
+        {"ident":"mktime", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"mlock", "id_type":"function", "header":"sys/mman.h", "extensions":["MLR"]},
+        {"ident":"mlockall", "id_type":"function", "header":"sys/mman.h", "extensions":["ML"]},
+        {"ident":"MM_APPL", "id_type":"constant", "header":"fmtmsg.h", "extensions":[]},
+        {"ident":"MM_CONSOLE", "id_type":"constant", "header":"fmtmsg.h", "extensions":[]},
+        {"ident":"MM_ERROR", "id_type":"constant", "header":"fmtmsg.h", "extensions":[]},
+        {"ident":"MM_FIRM", "id_type":"constant", "header":"fmtmsg.h", "extensions":[]},
+        {"ident":"MM_HALT", "id_type":"constant", "header":"fmtmsg.h", "extensions":[]},
+        {"ident":"MM_HARD", "id_type":"constant", "header":"fmtmsg.h", "extensions":[]},
+        {"ident":"MM_INFO", "id_type":"constant", "header":"fmtmsg.h", "extensions":[]},
+        {"ident":"MM_NOSEV", "id_type":"constant", "header":"fmtmsg.h", "extensions":[]},
+        {"ident":"MM_NRECOV", "id_type":"constant", "header":"fmtmsg.h", "extensions":[]},
+        {"ident":"MM_OPSYS", "id_type":"constant", "header":"fmtmsg.h", "extensions":[]},
+        {"ident":"MM_PRINT", "id_type":"constant", "header":"fmtmsg.h", "extensions":[]},
+        {"ident":"MM_RECOVER", "id_type":"constant", "header":"fmtmsg.h", "extensions":[]},
+        {"ident":"MM_SOFT", "id_type":"constant", "header":"fmtmsg.h", "extensions":[]},
+        {"ident":"MM_UTIL", "id_type":"constant", "header":"fmtmsg.h", "extensions":[]},
+        {"ident":"MM_WARNING", "id_type":"constant", "header":"fmtmsg.h", "extensions":[]},
+        {"ident":"mmap", "id_type":"function", "header":"sys/mman.h", "extensions":["TYM"]},
+        {"ident":"mode_t", "id_type":"type", "header":"sys/types.h", "extensions":[]},
+        {"ident":"modf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"modff", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"modfl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"MORECTL", "id_type":"constant", "header":"stropts.h", "extensions":[]},
+        {"ident":"MOREDATA", "id_type":"constant", "header":"stropts.h", "extensions":[]},
+        {"ident":"mprotect", "id_type":"function", "header":"sys/mman.h", "extensions":[]},
+        {"ident":"mq_attr", "id_type":"type", "header":"mqueue.h", "extensions":[]},
+        {"ident":"mq_close", "id_type":"function", "header":"mqueue.h", "extensions":[]},
+        {"ident":"mq_getattr", "id_type":"function", "header":"mqueue.h", "extensions":[]},
+        {"ident":"mq_notify", "id_type":"function", "header":"mqueue.h", "extensions":[]},
+        {"ident":"mq_open", "id_type":"function", "header":"mqueue.h", "extensions":[]},
+        {"ident":"mq_receive", "id_type":"function", "header":"mqueue.h", "extensions":[]},
+        {"ident":"mq_send", "id_type":"function", "header":"mqueue.h", "extensions":[]},
+        {"ident":"mq_setattr", "id_type":"function", "header":"mqueue.h", "extensions":[]},
+        {"ident":"mq_timedreceive", "id_type":"function", "header":"mqueue.h", "extensions":[]},
+        {"ident":"mq_timedsend", "id_type":"function", "header":"mqueue.h", "extensions":[]},
+        {"ident":"mq_unlink", "id_type":"function", "header":"mqueue.h", "extensions":[]},
+        {"ident":"mrand48", "id_type":"function", "header":"stdlib.h", "extensions":["XSI"]},
+        {"ident":"MS_ASYNC", "id_type":"constant", "header":"sys/mman.h", "extensions":["XSI","SIO"]},
+        {"ident":"MS_INVALIDATE", "id_type":"constant", "header":"sys/mman.h", "extensions":["XSI","SIO"]},
+        {"ident":"MS_SYNC", "id_type":"constant", "header":"sys/mman.h", "extensions":["XSI","SIO"]},
+        {"ident":"MSG_ANY", "id_type":"constant", "header":"stropts.h", "extensions":[]},
+        {"ident":"MSG_BAND", "id_type":"constant", "header":"stropts.h", "extensions":[]},
+        {"ident":"MSG_CTRUNC", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"MSG_DONTROUTE", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"MSG_EOR", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"MSG_HIPRI", "id_type":"constant", "header":"stropts.h", "extensions":[]},
+        {"ident":"MSG_NOERROR", "id_type":"constant", "header":"sys/msg.h", "extensions":[]},
+        {"ident":"MSG_NOSIGNAL", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"MSG_OOB", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"MSG_PEEK", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"MSG_TRUNC", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"MSG_WAITALL", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"msgctl", "id_type":"function", "header":"sys/msg.h", "extensions":[]},
+        {"ident":"msgget", "id_type":"function", "header":"sys/msg.h", "extensions":[]},
+        {"ident":"msghdr", "id_type":"type", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"msglen_t", "id_type":"type", "header":"sys/msg.h", "extensions":[]},
+        {"ident":"msgqnum_t", "id_type":"type", "header":"sys/msg.h", "extensions":[]},
+        {"ident":"msgrcv", "id_type":"function", "header":"sys/msg.h", "extensions":[]},
+        {"ident":"msgsnd", "id_type":"function", "header":"sys/msg.h", "extensions":[]},
+        {"ident":"msqid_ds", "id_type":"type", "header":"sys/msg.h", "extensions":[]},
+        {"ident":"msync", "id_type":"function", "header":"sys/mman.h", "extensions":["XSI","SIO"]},
+        {"ident":"munlock", "id_type":"function", "header":"sys/mman.h", "extensions":["MLR"]},
+        {"ident":"munlockall", "id_type":"function", "header":"sys/mman.h", "extensions":["ML"]},
+        {"ident":"munmap", "id_type":"function", "header":"sys/mman.h", "extensions":[]},
+        {"ident":"nan", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"NAN", "id_type":"macro", "header":"math.h", "extensions":[]},
+        {"ident":"nanf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"nanl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"nanosleep", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"NCCS", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"nearbyint", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"nearbyintf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"nearbyintl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"netent", "id_type":"type", "header":"netdb.h", "extensions":[]},
+        {"ident":"NEW_TIME", "id_type":"constant", "header":"utmpx.h", "extensions":[]},
+        {"ident":"newlocale", "id_type":"function", "header":"locale.h", "extensions":["CX"]},
+        {"ident":"nextafter", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"nextafterf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"nextafterl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"nexttoward", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"nexttowardf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"nexttowardl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"nfds_t", "id_type":"type", "header":"poll.h", "extensions":[]},
+        {"ident":"nftw", "id_type":"function", "header":"ftw.h", "extensions":["OB"]},
+        {"ident":"NI_DGRAM", "id_type":"constant", "header":"netdb.h", "extensions":[]},
+        {"ident":"NI_NAMEREQD", "id_type":"constant", "header":"netdb.h", "extensions":[]},
+        {"ident":"NI_NOFQDN", "id_type":"constant", "header":"netdb.h", "extensions":[]},
+        {"ident":"NI_NUMERICHOST", "id_type":"constant", "header":"netdb.h", "extensions":[]},
+        {"ident":"NI_NUMERICSCOPE", "id_type":"constant", "header":"netdb.h", "extensions":[]},
+        {"ident":"NI_NUMERICSERV", "id_type":"constant", "header":"netdb.h", "extensions":[]},
+        {"ident":"nice", "id_type":"function", "header":"unistd.h", "extensions":["XSI"]},
+        {"ident":"NL_ARGMAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"nl_langinfo", "id_type":"function", "header":"langinfo.h", "extensions":[]},
+        {"ident":"nl_langinfo_l", "id_type":"function", "header":"langinfo.h", "extensions":[]},
+        {"ident":"NL_LANGMAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"NL_MSGMAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"NL_SETMAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"NL_TEXTMAX", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"NLDLY", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"nlink_t", "id_type":"type", "header":"sys/types.h", "extensions":[]},
+        {"ident":"NOFLSH", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"not", "id_type":"macro", "header":"iso646.h", "extensions":["ADV"]},
+        {"ident":"not_eq", "id_type":"macro", "header":"iso646.h", "extensions":[]},
+        {"ident":"nrand48", "id_type":"function", "header":"stdlib.h", "extensions":["XSI"]},
+        {"ident":"ntohl", "id_type":"function", "header":"arpa/inet.h", "extensions":[]},
+        {"ident":"ntohs", "id_type":"function", "header":"arpa/inet.h", "extensions":[]},
+        {"ident":"NULL", "id_type":"macro", "header":"stddef.h", "extensions":[]},
+        {"ident":"NZERO", "id_type":"constant", "header":"limits.h", "extensions":[]},
+        {"ident":"O_ACCMODE", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"O_APPEND", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"O_CLOEXEC", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"O_CREAT", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"O_DIRECTORY", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"O_DSYNC", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"O_EXCL", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"O_EXEC", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"O_NOCTTY", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"O_NOFOLLOW", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"O_NONBLOCK", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"O_RDONLY", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"O_RDWR", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"O_RSYNC", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"O_SEARCH", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"O_SYNC", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"O_TRUNC", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"O_TTY_INIT", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"O_WRONLY", "id_type":"constant", "header":"fcntl.h", "extensions":[]},
+        {"ident":"OCRNL", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"OFDEL", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"off_t", "id_type":"type", "header":"stdio.h", "extensions":["CX"]},
+        {"ident":"offsetof", "id_type":"macro", "header":"stddef.h", "extensions":[]},
+        {"ident":"OFILL", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"OLD_TIME", "id_type":"constant", "header":"utmpx.h", "extensions":[]},
+        {"ident":"ONLCR", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"ONLRET", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"ONOCR", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"open", "id_type":"function", "header":"fcntl.h", "extensions":["ADV"]},
+        {"ident":"open_memstream", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"open_wmemstream", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"openat", "id_type":"function", "header":"fcntl.h", "extensions":[]},
+        {"ident":"opendir", "id_type":"function", "header":"dirent.h", "extensions":[]},
+        {"ident":"openlog", "id_type":"function", "header":"syslog.h", "extensions":[]},
+        {"ident":"OPOST", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"optarg", "id_type":"variable", "header":"unistd.h", "extensions":[]},
+        {"ident":"opterr", "id_type":"variable", "header":"unistd.h", "extensions":[]},
+        {"ident":"optind", "id_type":"variable", "header":"unistd.h", "extensions":[]},
+        {"ident":"optopt", "id_type":"variable", "header":"unistd.h", "extensions":[]},
+        {"ident":"or", "id_type":"macro", "header":"iso646.h", "extensions":["XSI"]},
+        {"ident":"or_eq", "id_type":"macro", "header":"iso646.h", "extensions":[]},
+        {"ident":"P_tmpdir", "id_type":"macro", "header":"stdio.h", "extensions":[]},
+        {"ident":"PARENB", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"PARMRK", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"PARODD", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"passwd", "id_type":"type", "header":"pwd.h", "extensions":["XSI"]},
+        {"ident":"pathconf", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"pause", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"pclose", "id_type":"function", "header":"stdio.h", "extensions":["CX"]},
+        {"ident":"perror", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"pid_t", "id_type":"type", "header":"signal.h", "extensions":["PS"]},
+        {"ident":"pipe", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"poll", "id_type":"function", "header":"poll.h", "extensions":[]},
+        {"ident":"POLLERR", "id_type":"constant", "header":"poll.h", "extensions":[]},
+        {"ident":"pollfd", "id_type":"type", "header":"poll.h", "extensions":[]},
+        {"ident":"POLLHUP", "id_type":"constant", "header":"poll.h", "extensions":[]},
+        {"ident":"POLLIN", "id_type":"constant", "header":"poll.h", "extensions":[]},
+        {"ident":"POLLNVAL", "id_type":"constant", "header":"poll.h", "extensions":[]},
+        {"ident":"POLLOUT", "id_type":"constant", "header":"poll.h", "extensions":[]},
+        {"ident":"POLLPRI", "id_type":"constant", "header":"poll.h", "extensions":[]},
+        {"ident":"POLLRDBAND", "id_type":"constant", "header":"poll.h", "extensions":[]},
+        {"ident":"POLLRDNORM", "id_type":"constant", "header":"poll.h", "extensions":[]},
+        {"ident":"POLLWRBAND", "id_type":"constant", "header":"poll.h", "extensions":[]},
+        {"ident":"POLLWRNORM", "id_type":"constant", "header":"poll.h", "extensions":[]},
+        {"ident":"popen", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"POSIX_FADV_DONTNEED", "id_type":"constant", "header":"fcntl.h", "extensions":["ADV"]},
+        {"ident":"POSIX_FADV_NOREUSE", "id_type":"constant", "header":"fcntl.h", "extensions":["ADV"]},
+        {"ident":"POSIX_FADV_NORMAL", "id_type":"constant", "header":"fcntl.h", "extensions":["ADV"]},
+        {"ident":"POSIX_FADV_RANDOM", "id_type":"constant", "header":"fcntl.h", "extensions":["ADV"]},
+        {"ident":"POSIX_FADV_SEQUENTIAL", "id_type":"constant", "header":"fcntl.h", "extensions":["ADV"]},
+        {"ident":"POSIX_FADV_WILLNEED", "id_type":"constant", "header":"fcntl.h", "extensions":["ADV"]},
+        {"ident":"posix_fadvise", "id_type":"function", "header":"fcntl.h", "extensions":["ADV"]},
+        {"ident":"posix_fallocate", "id_type":"function", "header":"fcntl.h", "extensions":["ADV"]},
+        {"ident":"posix_madvise", "id_type":"function", "header":"sys/mman.h", "extensions":["ADV"]},
+        {"ident":"posix_mem_offset", "id_type":"function", "header":"sys/mman.h", "extensions":["TYM"]},
+        {"ident":"posix_memalign", "id_type":"function", "header":"stdlib.h", "extensions":["ADV"]},
+        {"ident":"posix_openpt", "id_type":"function", "header":"stdlib.h", "extensions":["XSI"]},
+        {"ident":"posix_spawn", "id_type":"function", "header":"spawn.h", "extensions":[]},
+        {"ident":"posix_spawn_file_actions_addclose", "id_type":"function", "header":"spawn.h", "extensions":[]},
+        {"ident":"posix_spawn_file_actions_adddup2", "id_type":"function", "header":"spawn.h", "extensions":[]},
+        {"ident":"posix_spawn_file_actions_addopen", "id_type":"function", "header":"spawn.h", "extensions":[]},
+        {"ident":"posix_spawn_file_actions_destroy", "id_type":"function", "header":"spawn.h", "extensions":[]},
+        {"ident":"posix_spawn_file_actions_init", "id_type":"function", "header":"spawn.h", "extensions":[]},
+        {"ident":"posix_spawnattr_destroy", "id_type":"function", "header":"spawn.h", "extensions":[]},
+        {"ident":"posix_spawnattr_getflags", "id_type":"function", "header":"spawn.h", "extensions":[]},
+        {"ident":"posix_spawnattr_getpgroup", "id_type":"function", "header":"spawn.h", "extensions":[]},
+        {"ident":"posix_spawnattr_getschedparam", "id_type":"function", "header":"spawn.h", "extensions":["PS"]},
+        {"ident":"posix_spawnattr_getschedpolicy", "id_type":"function", "header":"spawn.h", "extensions":["PS"]},
+        {"ident":"posix_spawnattr_getsigdefault", "id_type":"function", "header":"spawn.h", "extensions":[]},
+        {"ident":"posix_spawnattr_getsigmask", "id_type":"function", "header":"spawn.h", "extensions":[]},
+        {"ident":"posix_spawnattr_init", "id_type":"function", "header":"spawn.h", "extensions":[]},
+        {"ident":"posix_spawnattr_setflags", "id_type":"function", "header":"spawn.h", "extensions":[]},
+        {"ident":"posix_spawnattr_setpgroup", "id_type":"function", "header":"spawn.h", "extensions":[]},
+        {"ident":"posix_spawnattr_setschedparam", "id_type":"function", "header":"spawn.h", "extensions":["PS"]},
+        {"ident":"posix_spawnattr_setschedpolicy", "id_type":"function", "header":"spawn.h", "extensions":["PS"]},
+        {"ident":"posix_spawnattr_setsigdefault", "id_type":"function", "header":"spawn.h", "extensions":[]},
+        {"ident":"posix_spawnattr_setsigmask", "id_type":"function", "header":"spawn.h", "extensions":[]},
+        {"ident":"posix_spawnp", "id_type":"function", "header":"spawn.h", "extensions":[]},
+        {"ident":"posix_trace_attr_destroy", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_attr_getclockres", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_attr_getcreatetime", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_attr_getgenversion", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_attr_getinherited", "id_type":"function", "header":"trace.h", "extensions":["TRI"]},
+        {"ident":"posix_trace_attr_getlogfullpolicy", "id_type":"function", "header":"trace.h", "extensions":["TRL"]},
+        {"ident":"posix_trace_attr_getlogsize", "id_type":"function", "header":"trace.h", "extensions":["TRL"]},
+        {"ident":"posix_trace_attr_getmaxdatasize", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_attr_getmaxsystemeventsize", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_attr_getmaxusereventsize", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_attr_getname", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_attr_getstreamfullpolicy", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_attr_getstreamsize", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_attr_init", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_attr_setinherited", "id_type":"function", "header":"trace.h", "extensions":["TRI"]},
+        {"ident":"posix_trace_attr_setlogfullpolicy", "id_type":"function", "header":"trace.h", "extensions":["TRL"]},
+        {"ident":"posix_trace_attr_setlogsize", "id_type":"function", "header":"trace.h", "extensions":["TRL"]},
+        {"ident":"posix_trace_attr_setmaxdatasize", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_attr_setname", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_attr_setstreamfullpolicy", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_attr_setstreamsize", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_clear", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_close", "id_type":"function", "header":"trace.h", "extensions":["TRL"]},
+        {"ident":"posix_trace_create", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_create_withlog", "id_type":"function", "header":"trace.h", "extensions":["TRL"]},
+        {"ident":"posix_trace_event", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_event_info", "id_type":"type", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_eventid_equal", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_eventid_get_name", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_eventid_open", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_eventset_add", "id_type":"function", "header":"trace.h", "extensions":["TEF"]},
+        {"ident":"posix_trace_eventset_del", "id_type":"function", "header":"trace.h", "extensions":["TEF"]},
+        {"ident":"posix_trace_eventset_empty", "id_type":"function", "header":"trace.h", "extensions":["TEF"]},
+        {"ident":"posix_trace_eventset_fill", "id_type":"function", "header":"trace.h", "extensions":["TEF"]},
+        {"ident":"posix_trace_eventset_ismember", "id_type":"function", "header":"trace.h", "extensions":["TEF"]},
+        {"ident":"posix_trace_eventtypelist_getnext_id", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_eventtypelist_rewind", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_flush", "id_type":"function", "header":"trace.h", "extensions":["TRL"]},
+        {"ident":"posix_trace_get_attr", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_get_filter", "id_type":"function", "header":"trace.h", "extensions":["TEF"]},
+        {"ident":"posix_trace_get_status", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_getnext_event", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_open", "id_type":"function", "header":"trace.h", "extensions":["TRL"]},
+        {"ident":"posix_trace_rewind", "id_type":"function", "header":"trace.h", "extensions":["TRL"]},
+        {"ident":"posix_trace_set_filter", "id_type":"function", "header":"trace.h", "extensions":["TEF"]},
+        {"ident":"posix_trace_shutdown", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_start", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_status_info", "id_type":"type", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_stop", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_timedgetnext_event", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"posix_trace_trid_eventid_open", "id_type":"function", "header":"trace.h", "extensions":["TEF"]},
+        {"ident":"posix_trace_trygetnext_event", "id_type":"function", "header":"trace.h", "extensions":[]},
+        {"ident":"POSIX_TYPED_MEM_ALLOCATE", "id_type":"constant", "header":"sys/mman.h", "extensions":["TYM"]},
+        {"ident":"POSIX_TYPED_MEM_ALLOCATE_CONTIG", "id_type":"constant", "header":"sys/mman.h", "extensions":["TYM"]},
+        {"ident":"posix_typed_mem_get_info", "id_type":"function", "header":"sys/mman.h", "extensions":["TYM"]},
+        {"ident":"posix_typed_mem_info", "id_type":"type", "header":"sys/mman.h", "extensions":["TYM"]},
+        {"ident":"POSIX_TYPED_MEM_MAP_ALLOCATABLE", "id_type":"constant", "header":"sys/mman.h", "extensions":["TYM"]},
+        {"ident":"posix_typed_mem_open", "id_type":"function", "header":"sys/mman.h", "extensions":["TYM"]},
+        {"ident":"pow", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"powf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"powl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"pread", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"printf", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"PRIO_PGRP", "id_type":"constant", "header":"sys/resource.h", "extensions":[]},
+        {"ident":"PRIO_PROCESS", "id_type":"constant", "header":"sys/resource.h", "extensions":[]},
+        {"ident":"PRIO_USER", "id_type":"constant", "header":"sys/resource.h", "extensions":[]},
+        {"ident":"PROT_EXEC", "id_type":"constant", "header":"sys/mman.h", "extensions":[]},
+        {"ident":"PROT_NONE", "id_type":"constant", "header":"sys/mman.h", "extensions":[]},
+        {"ident":"PROT_READ", "id_type":"constant", "header":"sys/mman.h", "extensions":[]},
+        {"ident":"PROT_WRITE", "id_type":"constant", "header":"sys/mman.h", "extensions":[]},
+        {"ident":"protoent", "id_type":"type", "header":"netdb.h", "extensions":[]},
+        {"ident":"pselect", "id_type":"function", "header":"sys/select.h", "extensions":[]},
+        {"ident":"psiginfo", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"psignal", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"pthread_atfork", "id_type":"function", "header":"pthread.h", "extensions":["OB"]},
+        {"ident":"pthread_attr_destroy", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_attr_getdetachstate", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_attr_getguardsize", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_attr_getinheritsched", "id_type":"function", "header":"pthread.h", "extensions":["TPS"]},
+        {"ident":"pthread_attr_getschedparam", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_attr_getschedpolicy", "id_type":"function", "header":"pthread.h", "extensions":["TPS"]},
+        {"ident":"pthread_attr_getscope", "id_type":"function", "header":"pthread.h", "extensions":["TPS"]},
+        {"ident":"pthread_attr_getstack", "id_type":"function", "header":"pthread.h", "extensions":["TSA","TSS"]},
+        {"ident":"pthread_attr_getstacksize", "id_type":"function", "header":"pthread.h", "extensions":["TSS"]},
+        {"ident":"pthread_attr_init", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_attr_setdetachstate", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_attr_setguardsize", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_attr_setinheritsched", "id_type":"function", "header":"pthread.h", "extensions":["TPS"]},
+        {"ident":"pthread_attr_setschedparam", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_attr_setschedpolicy", "id_type":"function", "header":"pthread.h", "extensions":["TPS"]},
+        {"ident":"pthread_attr_setscope", "id_type":"function", "header":"pthread.h", "extensions":["TPS"]},
+        {"ident":"pthread_attr_setstack", "id_type":"function", "header":"pthread.h", "extensions":["TSA","TSS"]},
+        {"ident":"pthread_attr_setstacksize", "id_type":"function", "header":"pthread.h", "extensions":["TSS"]},
+        {"ident":"pthread_attr_t", "id_type":"type", "header":"sys/types.h", "extensions":["TPS"]},
+        {"ident":"pthread_barrier_destroy", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_barrier_init", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_barrier_t", "id_type":"type", "header":"sys/types.h", "extensions":[]},
+        {"ident":"pthread_barrier_wait", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_barrierattr_destroy", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_barrierattr_getpshared", "id_type":"function", "header":"pthread.h", "extensions":["TSH"]},
+        {"ident":"pthread_barrierattr_init", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_barrierattr_setpshared", "id_type":"function", "header":"pthread.h", "extensions":["TSH"]},
+        {"ident":"pthread_barrierattr_t", "id_type":"type", "header":"sys/types.h", "extensions":["TSH"]},
+        {"ident":"pthread_cancel", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_cleanup_pop", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_cleanup_push", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_cond_broadcast", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_cond_destroy", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_cond_init", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_cond_signal", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_cond_t", "id_type":"type", "header":"sys/types.h", "extensions":[]},
+        {"ident":"pthread_cond_timedwait", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_cond_wait", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_condattr_destroy", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_condattr_getclock", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_condattr_getpshared", "id_type":"function", "header":"pthread.h", "extensions":["TSH"]},
+        {"ident":"pthread_condattr_init", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_condattr_setclock", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_condattr_setpshared", "id_type":"function", "header":"pthread.h", "extensions":["TSH"]},
+        {"ident":"pthread_condattr_t", "id_type":"type", "header":"sys/types.h", "extensions":["TSH"]},
+        {"ident":"pthread_create", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_detach", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_equal", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_exit", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_getconcurrency", "id_type":"function", "header":"pthread.h", "extensions":["OB","XSI"]},
+        {"ident":"pthread_getcpuclockid", "id_type":"function", "header":"pthread.h", "extensions":["TCT"]},
+        {"ident":"pthread_getschedparam", "id_type":"function", "header":"pthread.h", "extensions":["TPS"]},
+        {"ident":"pthread_getspecific", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_join", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_key_create", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_key_delete", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_key_t", "id_type":"type", "header":"sys/types.h", "extensions":[]},
+        {"ident":"pthread_kill", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"pthread_mutex_consistent", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_mutex_destroy", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_mutex_getprioceiling", "id_type":"function", "header":"pthread.h", "extensions":["RPP","TPP"]},
+        {"ident":"pthread_mutex_init", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_mutex_lock", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_mutex_setprioceiling", "id_type":"function", "header":"pthread.h", "extensions":["RPP","TPP"]},
+        {"ident":"pthread_mutex_t", "id_type":"type", "header":"sys/types.h", "extensions":["RPP","TPP"]},
+        {"ident":"pthread_mutex_timedlock", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_mutex_trylock", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_mutex_unlock", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_mutexattr_destroy", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_mutexattr_getprioceiling", "id_type":"function", "header":"pthread.h", "extensions":["RPP","TPP"]},
+        {"ident":"pthread_mutexattr_getprotocol", "id_type":"function", "header":"pthread.h", "extensions":["MC1"]},
+        {"ident":"pthread_mutexattr_getpshared", "id_type":"function", "header":"pthread.h", "extensions":["TSH"]},
+        {"ident":"pthread_mutexattr_getrobust", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_mutexattr_gettype", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_mutexattr_init", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_mutexattr_setprioceiling", "id_type":"function", "header":"pthread.h", "extensions":["RPP","TPP"]},
+        {"ident":"pthread_mutexattr_setprotocol", "id_type":"function", "header":"pthread.h", "extensions":["MC1"]},
+        {"ident":"pthread_mutexattr_setpshared", "id_type":"function", "header":"pthread.h", "extensions":["TSH"]},
+        {"ident":"pthread_mutexattr_setrobust", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_mutexattr_settype", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_mutexattr_t", "id_type":"type", "header":"sys/types.h", "extensions":["RPP","TPP"]},
+        {"ident":"pthread_once", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_once_t", "id_type":"type", "header":"sys/types.h", "extensions":[]},
+        {"ident":"pthread_rwlock_destroy", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_rwlock_init", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_rwlock_rdlock", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_rwlock_t", "id_type":"type", "header":"sys/types.h", "extensions":[]},
+        {"ident":"pthread_rwlock_timedrdlock", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_rwlock_timedwrlock", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_rwlock_tryrdlock", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_rwlock_trywrlock", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_rwlock_unlock", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_rwlock_wrlock", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_rwlockattr_destroy", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_rwlockattr_getpshared", "id_type":"function", "header":"pthread.h", "extensions":["TSH"]},
+        {"ident":"pthread_rwlockattr_init", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_rwlockattr_setpshared", "id_type":"function", "header":"pthread.h", "extensions":["TSH"]},
+        {"ident":"pthread_rwlockattr_t", "id_type":"type", "header":"sys/types.h", "extensions":["TSH"]},
+        {"ident":"pthread_self", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_setcancelstate", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_setcanceltype", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_setconcurrency", "id_type":"function", "header":"pthread.h", "extensions":["OB","XSI"]},
+        {"ident":"pthread_setschedparam", "id_type":"function", "header":"pthread.h", "extensions":["TPS"]},
+        {"ident":"pthread_setschedprio", "id_type":"function", "header":"pthread.h", "extensions":["TPS"]},
+        {"ident":"pthread_setspecific", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_sigmask", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"pthread_spin_destroy", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_spin_init", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_spin_lock", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_spin_trylock", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_spin_unlock", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"pthread_spinlock_t", "id_type":"type", "header":"sys/types.h", "extensions":[]},
+        {"ident":"pthread_t", "id_type":"type", "header":"sys/types.h", "extensions":[]},
+        {"ident":"pthread_testcancel", "id_type":"function", "header":"pthread.h", "extensions":[]},
+        {"ident":"ptrdiff_t", "id_type":"macro", "header":"stddef.h", "extensions":[]},
+        {"ident":"ptsname", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"putc", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"putc_unlocked", "id_type":"function", "header":"stdio.h", "extensions":["CX"]},
+        {"ident":"putchar", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"putchar_unlocked", "id_type":"function", "header":"stdio.h", "extensions":["CX"]},
+        {"ident":"putenv", "id_type":"function", "header":"stdlib.h", "extensions":["XSI"]},
+        {"ident":"putmsg", "id_type":"function", "header":"stropts.h", "extensions":[]},
+        {"ident":"putpmsg", "id_type":"function", "header":"stropts.h", "extensions":[]},
+        {"ident":"puts", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"pututxline", "id_type":"function", "header":"utmpx.h", "extensions":[]},
+        {"ident":"putwc", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"putwchar", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"pwrite", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"qsort", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"R_OK", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"raise", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"rand", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"RAND_MAX", "id_type":"macro", "header":"stdlib.h", "extensions":[]},
+        {"ident":"rand_r", "id_type":"function", "header":"stdlib.h", "extensions":["OB","CX"]},
+        {"ident":"random", "id_type":"function", "header":"stdlib.h", "extensions":["ADV"]},
+        {"ident":"read", "id_type":"function", "header":"unistd.h", "extensions":["OB","XSR"]},
+        {"ident":"readdir", "id_type":"function", "header":"dirent.h", "extensions":[]},
+        {"ident":"readdir_r", "id_type":"function", "header":"dirent.h", "extensions":[]},
+        {"ident":"readlink", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"readlinkat", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"readv", "id_type":"function", "header":"sys/uio.h", "extensions":["XSI"]},
+        {"ident":"realloc", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"realpath", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"recv", "id_type":"function", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"recvfrom", "id_type":"function", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"recvmsg", "id_type":"function", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"REG_BADBR", "id_type":"constant", "header":"regex.h", "extensions":[]},
+        {"ident":"REG_BADPAT", "id_type":"constant", "header":"regex.h", "extensions":[]},
+        {"ident":"REG_BADRPT", "id_type":"constant", "header":"regex.h", "extensions":[]},
+        {"ident":"REG_EBRACE", "id_type":"constant", "header":"regex.h", "extensions":[]},
+        {"ident":"REG_EBRACK", "id_type":"constant", "header":"regex.h", "extensions":[]},
+        {"ident":"REG_ECOLLATE", "id_type":"constant", "header":"regex.h", "extensions":[]},
+        {"ident":"REG_ECTYPE", "id_type":"constant", "header":"regex.h", "extensions":[]},
+        {"ident":"REG_EESCAPE", "id_type":"constant", "header":"regex.h", "extensions":[]},
+        {"ident":"REG_EPAREN", "id_type":"constant", "header":"regex.h", "extensions":[]},
+        {"ident":"REG_ERANGE", "id_type":"constant", "header":"regex.h", "extensions":[]},
+        {"ident":"REG_ESPACE", "id_type":"constant", "header":"regex.h", "extensions":[]},
+        {"ident":"REG_ESUBREG", "id_type":"constant", "header":"regex.h", "extensions":[]},
+        {"ident":"REG_EXTENDED", "id_type":"constant", "header":"regex.h", "extensions":[]},
+        {"ident":"REG_ICASE", "id_type":"constant", "header":"regex.h", "extensions":[]},
+        {"ident":"REG_NEWLINE", "id_type":"constant", "header":"regex.h", "extensions":[]},
+        {"ident":"REG_NOMATCH", "id_type":"constant", "header":"regex.h", "extensions":[]},
+        {"ident":"REG_NOSUB", "id_type":"constant", "header":"regex.h", "extensions":[]},
+        {"ident":"REG_NOTBOL", "id_type":"constant", "header":"regex.h", "extensions":[]},
+        {"ident":"REG_NOTEOL", "id_type":"constant", "header":"regex.h", "extensions":[]},
+        {"ident":"regcomp", "id_type":"function", "header":"regex.h", "extensions":[]},
+        {"ident":"regerror", "id_type":"function", "header":"regex.h", "extensions":[]},
+        {"ident":"regex_t", "id_type":"type", "header":"regex.h", "extensions":[]},
+        {"ident":"regexec", "id_type":"function", "header":"regex.h", "extensions":[]},
+        {"ident":"regfree", "id_type":"function", "header":"regex.h", "extensions":[]},
+        {"ident":"regmatch_t", "id_type":"type", "header":"regex.h", "extensions":[]},
+        {"ident":"regoff_t", "id_type":"type", "header":"regex.h", "extensions":[]},
+        {"ident":"remainder", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"remainderf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"remainderl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"remove", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"remque", "id_type":"function", "header":"search.h", "extensions":[]},
+        {"ident":"remquo", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"remquof", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"remquol", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"rename", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"renameat", "id_type":"function", "header":"stdio.h", "extensions":["CX"]},
+        {"ident":"rewind", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"rewinddir", "id_type":"function", "header":"dirent.h", "extensions":[]},
+        {"ident":"rint", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"rintf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"rintl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"RLIM_INFINITY", "id_type":"constant", "header":"sys/resource.h", "extensions":[]},
+        {"ident":"RLIM_SAVED_CUR", "id_type":"constant", "header":"sys/resource.h", "extensions":[]},
+        {"ident":"RLIM_SAVED_MAX", "id_type":"constant", "header":"sys/resource.h", "extensions":[]},
+        {"ident":"rlim_t", "id_type":"type", "header":"sys/resource.h", "extensions":[]},
+        {"ident":"rlimit", "id_type":"type", "header":"sys/resource.h", "extensions":[]},
+        {"ident":"RLIMIT_AS", "id_type":"constant", "header":"sys/resource.h", "extensions":[]},
+        {"ident":"RLIMIT_CORE", "id_type":"constant", "header":"sys/resource.h", "extensions":[]},
+        {"ident":"RLIMIT_CPU", "id_type":"constant", "header":"sys/resource.h", "extensions":[]},
+        {"ident":"RLIMIT_DATA", "id_type":"constant", "header":"sys/resource.h", "extensions":[]},
+        {"ident":"RLIMIT_FSIZE", "id_type":"constant", "header":"sys/resource.h", "extensions":[]},
+        {"ident":"RLIMIT_NOFILE", "id_type":"constant", "header":"sys/resource.h", "extensions":[]},
+        {"ident":"RLIMIT_STACK", "id_type":"constant", "header":"sys/resource.h", "extensions":[]},
+        {"ident":"rmdir", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"round", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"roundf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"roundl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"rusage", "id_type":"type", "header":"sys/resource.h", "extensions":[]},
+        {"ident":"RUSAGE_CHILDREN", "id_type":"constant", "header":"sys/resource.h", "extensions":[]},
+        {"ident":"RUSAGE_SELF", "id_type":"constant", "header":"sys/resource.h", "extensions":[]},
+        {"ident":"S_IFMT", "id_type":"constant", "header":"sys/stat.h", "extensions":["OB"]},
+        {"ident":"SA_NOCLDSTOP", "id_type":"macro", "header":"signal.h", "extensions":[]},
+        {"ident":"SA_NOCLDWAIT", "id_type":"macro", "header":"signal.h", "extensions":[]},
+        {"ident":"SA_NODEFER", "id_type":"macro", "header":"signal.h", "extensions":[]},
+        {"ident":"SA_ONSTACK", "id_type":"macro", "header":"signal.h", "extensions":[]},
+        {"ident":"SA_RESETHAND", "id_type":"macro", "header":"signal.h", "extensions":[]},
+        {"ident":"SA_RESTART", "id_type":"macro", "header":"signal.h", "extensions":[]},
+        {"ident":"SA_SIGINFO", "id_type":"macro", "header":"signal.h", "extensions":[]},
+        {"ident":"scalbln", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"scalblnf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"scalblnl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"scalbn", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"scalbnf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"scalbnl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"scandir", "id_type":"function", "header":"dirent.h", "extensions":[]},
+        {"ident":"scanf", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"SCHAR_MAX", "id_type":"macro", "header":"limits.h", "extensions":[]},
+        {"ident":"SCHAR_MIN", "id_type":"macro", "header":"limits.h", "extensions":[]},
+        {"ident":"sched_get_priority_max", "id_type":"function", "header":"sched.h", "extensions":["PS","TPS"]},
+        {"ident":"sched_get_priority_min", "id_type":"function", "header":"sched.h", "extensions":["PS","TPS"]},
+        {"ident":"sched_getparam", "id_type":"function", "header":"sched.h", "extensions":["PS"]},
+        {"ident":"sched_getscheduler", "id_type":"function", "header":"sched.h", "extensions":["PS"]},
+        {"ident":"sched_param", "id_type":"type", "header":"sched.h", "extensions":["TPS"]},
+        {"ident":"sched_rr_get_interval", "id_type":"function", "header":"sched.h", "extensions":["PS","TPS"]},
+        {"ident":"sched_setparam", "id_type":"function", "header":"sched.h", "extensions":["PS"]},
+        {"ident":"sched_setscheduler", "id_type":"function", "header":"sched.h", "extensions":["PS"]},
+        {"ident":"sched_yield", "id_type":"function", "header":"sched.h", "extensions":[]},
+        {"ident":"SCM_RIGHTS", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"seed48", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"SEEK_CUR", "id_type":"macro", "header":"stdio.h", "extensions":[]},
+        {"ident":"SEEK_END", "id_type":"macro", "header":"stdio.h", "extensions":[]},
+        {"ident":"SEEK_SET", "id_type":"macro", "header":"stdio.h", "extensions":[]},
+        {"ident":"seekdir", "id_type":"function", "header":"dirent.h", "extensions":["XSI"]},
+        {"ident":"select", "id_type":"function", "header":"sys/select.h", "extensions":[]},
+        {"ident":"sem_close", "id_type":"function", "header":"semaphore.h", "extensions":[]},
+        {"ident":"sem_destroy", "id_type":"function", "header":"semaphore.h", "extensions":[]},
+        {"ident":"sem_getvalue", "id_type":"function", "header":"semaphore.h", "extensions":[]},
+        {"ident":"sem_init", "id_type":"function", "header":"semaphore.h", "extensions":[]},
+        {"ident":"sem_open", "id_type":"function", "header":"semaphore.h", "extensions":[]},
+        {"ident":"sem_post", "id_type":"function", "header":"semaphore.h", "extensions":[]},
+        {"ident":"sem_timedwait", "id_type":"function", "header":"semaphore.h", "extensions":[]},
+        {"ident":"sem_trywait", "id_type":"function", "header":"semaphore.h", "extensions":[]},
+        {"ident":"SEM_UNDO", "id_type":"constant", "header":"sys/sem.h", "extensions":[]},
+        {"ident":"sem_unlink", "id_type":"function", "header":"semaphore.h", "extensions":[]},
+        {"ident":"sem_wait", "id_type":"function", "header":"semaphore.h", "extensions":[]},
+        {"ident":"sembuf", "id_type":"type", "header":"sys/sem.h", "extensions":[]},
+        {"ident":"semctl", "id_type":"function", "header":"sys/sem.h", "extensions":[]},
+        {"ident":"semget", "id_type":"function", "header":"sys/sem.h", "extensions":[]},
+        {"ident":"semid_ds", "id_type":"type", "header":"sys/sem.h", "extensions":[]},
+        {"ident":"semop", "id_type":"function", "header":"sys/sem.h", "extensions":[]},
+        {"ident":"send", "id_type":"function", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"sendmsg", "id_type":"function", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"sendto", "id_type":"function", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"servent", "id_type":"type", "header":"netdb.h", "extensions":[]},
+        {"ident":"SETALL", "id_type":"constant", "header":"sys/sem.h", "extensions":[]},
+        {"ident":"setbuf", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"setegid", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"setenv", "id_type":"function", "header":"stdlib.h", "extensions":["CX"]},
+        {"ident":"seteuid", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"setgid", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"setgrent", "id_type":"function", "header":"grp.h", "extensions":["XSI"]},
+        {"ident":"sethostent", "id_type":"function", "header":"netdb.h", "extensions":[]},
+        {"ident":"setitimer", "id_type":"function", "header":"sys/time.h", "extensions":["IP6"]},
+        {"ident":"setjmp", "id_type":"function", "header":"setjmp.h", "extensions":[]},
+        {"ident":"setkey", "id_type":"function", "header":"stdlib.h", "extensions":["XSI"]},
+        {"ident":"setlocale", "id_type":"function", "header":"locale.h", "extensions":[]},
+        {"ident":"setlogmask", "id_type":"function", "header":"syslog.h", "extensions":[]},
+        {"ident":"setnetent", "id_type":"function", "header":"netdb.h", "extensions":[]},
+        {"ident":"setpgid", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"setpgrp", "id_type":"function", "header":"unistd.h", "extensions":["OB","XSI"]},
+        {"ident":"setpriority", "id_type":"function", "header":"sys/resource.h", "extensions":[]},
+        {"ident":"setprotoent", "id_type":"function", "header":"netdb.h", "extensions":[]},
+        {"ident":"setpwent", "id_type":"function", "header":"pwd.h", "extensions":["XSI"]},
+        {"ident":"setregid", "id_type":"function", "header":"unistd.h", "extensions":["XSI"]},
+        {"ident":"setreuid", "id_type":"function", "header":"unistd.h", "extensions":["XSI"]},
+        {"ident":"setrlimit", "id_type":"function", "header":"sys/resource.h", "extensions":[]},
+        {"ident":"setservent", "id_type":"function", "header":"netdb.h", "extensions":[]},
+        {"ident":"setsid", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"setsockopt", "id_type":"function", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"setstate", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"setuid", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"setutxent", "id_type":"function", "header":"utmpx.h", "extensions":[]},
+        {"ident":"SETVAL", "id_type":"constant", "header":"sys/sem.h", "extensions":[]},
+        {"ident":"setvbuf", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"shm_open", "id_type":"function", "header":"sys/mman.h", "extensions":["SHM"]},
+        {"ident":"SHM_RDONLY", "id_type":"constant", "header":"sys/shm.h", "extensions":[]},
+        {"ident":"SHM_RND", "id_type":"constant", "header":"sys/shm.h", "extensions":[]},
+        {"ident":"shm_unlink", "id_type":"function", "header":"sys/mman.h", "extensions":["SHM"]},
+        {"ident":"shmat", "id_type":"function", "header":"sys/shm.h", "extensions":[]},
+        {"ident":"shmatt_t", "id_type":"type", "header":"sys/shm.h", "extensions":[]},
+        {"ident":"shmctl", "id_type":"function", "header":"sys/shm.h", "extensions":[]},
+        {"ident":"shmdt", "id_type":"function", "header":"sys/shm.h", "extensions":[]},
+        {"ident":"shmget", "id_type":"function", "header":"sys/shm.h", "extensions":[]},
+        {"ident":"shmid_ds", "id_type":"type", "header":"sys/shm.h", "extensions":[]},
+        {"ident":"SHMLBA", "id_type":"constant", "header":"sys/shm.h", "extensions":[]},
+        {"ident":"SHRT_MAX", "id_type":"macro", "header":"limits.h", "extensions":[]},
+        {"ident":"SHRT_MIN", "id_type":"macro", "header":"limits.h", "extensions":[]},
+        {"ident":"SHUT_RD", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"SHUT_RDWR", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"SHUT_WR", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"shutdown", "id_type":"function", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"sig_atomic_t", "id_type":"type", "header":"signal.h", "extensions":[]},
+        {"ident":"SIG_BLOCK", "id_type":"macro", "header":"signal.h", "extensions":[]},
+        {"ident":"SIG_DFL", "id_type":"macro", "header":"signal.h", "extensions":[]},
+        {"ident":"SIG_ERR", "id_type":"macro", "header":"signal.h", "extensions":[]},
+        {"ident":"SIG_HOLD", "id_type":"macro", "header":"signal.h", "extensions":[]},
+        {"ident":"SIG_IGN", "id_type":"macro", "header":"signal.h", "extensions":[]},
+        {"ident":"SIG_SETMASK", "id_type":"macro", "header":"signal.h", "extensions":[]},
+        {"ident":"SIG_UNBLOCK", "id_type":"macro", "header":"signal.h", "extensions":[]},
+        {"ident":"sigaction", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"sigaction", "id_type":"type", "header":"signal.h", "extensions":[]},
+        {"ident":"sigaddset", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"sigaltstack", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"sigdelset", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"sigemptyset", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"SIGEV_NONE", "id_type":"constant", "header":"signal.h", "extensions":[]},
+        {"ident":"SIGEV_SIGNAL", "id_type":"constant", "header":"signal.h", "extensions":[]},
+        {"ident":"SIGEV_THREAD", "id_type":"constant", "header":"signal.h", "extensions":[]},
+        {"ident":"sigevent", "id_type":"type", "header":"signal.h", "extensions":["CX"]},
+        {"ident":"sigfillset", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"sighold", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"sigignore", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"siginfo_t", "id_type":"type", "header":"signal.h", "extensions":[]},
+        {"ident":"siginterrupt", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"sigismember", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"siglongjmp", "id_type":"function", "header":"setjmp.h", "extensions":["CX"]},
+        {"ident":"signal", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"signgam", "id_type":"variable", "header":"math.h", "extensions":[]},
+        {"ident":"sigpause", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"sigpending", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"sigprocmask", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"sigqueue", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"sigrelse", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"sigset", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"sigset_t", "id_type":"type", "header":"signal.h", "extensions":[]},
+        {"ident":"sigsetjmp", "id_type":"function", "header":"setjmp.h", "extensions":["CX"]},
+        {"ident":"SIGSTKSZ", "id_type":"macro", "header":"signal.h", "extensions":[]},
+        {"ident":"sigsuspend", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"sigtimedwait", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"sigval", "id_type":"type", "header":"signal.h", "extensions":[]},
+        {"ident":"sigwait", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"sigwaitinfo", "id_type":"function", "header":"signal.h", "extensions":[]},
+        {"ident":"sin", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"sinf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"sinh", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"sinhf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"sinhl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"sinl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"size_t", "id_type":"macro", "header":"stddef.h", "extensions":["TSA","TSS"]},
+        {"ident":"sleep", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"snprintf", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"SO_ACCEPTCONN", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"SO_BROADCAST", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"SO_DEBUG", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"SO_DONTROUTE", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"SO_ERROR", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"SO_KEEPALIVE", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"SO_LINGER", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"SO_OOBINLINE", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"SO_RCVBUF", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"SO_RCVLOWAT", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"SO_RCVTIMEO", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"SO_REUSEADDR", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"SO_SNDBUF", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"SO_SNDLOWAT", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"SO_SNDTIMEO", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"SO_TYPE", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"SOCK_DGRAM", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"SOCK_RAW", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"SOCK_SEQPACKET", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"SOCK_STREAM", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"sockaddr", "id_type":"type", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"sockaddr_in", "id_type":"type", "header":"netinet/in.h", "extensions":[]},
+        {"ident":"sockaddr_in6", "id_type":"type", "header":"netinet/in.h", "extensions":["IP6"]},
+        {"ident":"sockaddr_un", "id_type":"type", "header":"sys/un.h", "extensions":[]},
+        {"ident":"sockatmark", "id_type":"function", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"socket", "id_type":"function", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"socketpair", "id_type":"function", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"SOL_SOCKET", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"SOMAXCONN", "id_type":"constant", "header":"sys/socket.h", "extensions":["IP6"]},
+        {"ident":"speed_t", "id_type":"type", "header":"termios.h", "extensions":[]},
+        {"ident":"sprintf", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"sqrt", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"sqrtf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"sqrtl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"srand", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"srand48", "id_type":"function", "header":"stdlib.h", "extensions":["XSI"]},
+        {"ident":"srandom", "id_type":"function", "header":"stdlib.h", "extensions":["XSI"]},
+        {"ident":"SS_DISABLE", "id_type":"macro", "header":"signal.h", "extensions":[]},
+        {"ident":"SS_ONSTACK", "id_type":"macro", "header":"signal.h", "extensions":[]},
+        {"ident":"sscanf", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"SSIZE_MAX", "id_type":"macro", "header":"limits.h", "extensions":[]},
+        {"ident":"ssize_t", "id_type":"type", "header":"stdio.h", "extensions":["CX"]},
+        {"ident":"ST_NOSUID", "id_type":"constant", "header":"sys/statvfs.h", "extensions":[]},
+        {"ident":"ST_RDONLY", "id_type":"constant", "header":"sys/statvfs.h", "extensions":[]},
+        {"ident":"stack_t", "id_type":"type", "header":"signal.h", "extensions":[]},
+        {"ident":"stat", "id_type":"function", "header":"sys/stat.h", "extensions":["OB"]},
+        {"ident":"stat", "id_type":"type", "header":"sys/stat.h", "extensions":["OB"]},
+        {"ident":"static_assert", "id_type":"macro", "header":"assert.h", "extensions":[]},
+        {"ident":"statvfs", "id_type":"function", "header":"sys/statvfs.h", "extensions":[]},
+        {"ident":"statvfs", "id_type":"type", "header":"sys/statvfs.h", "extensions":[]},
+        {"ident":"stderr", "id_type":"macro", "header":"stdio.h", "extensions":[]},
+        {"ident":"STDERR_FILENO", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"stdin", "id_type":"macro", "header":"stdio.h", "extensions":[]},
+        {"ident":"STDIN_FILENO", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"stdout", "id_type":"macro", "header":"stdio.h", "extensions":[]},
+        {"ident":"STDOUT_FILENO", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"stpcpy", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"stpncpy", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"str_list", "id_type":"type", "header":"stropts.h", "extensions":[]},
+        {"ident":"str_mlist", "id_type":"type", "header":"stropts.h", "extensions":[]},
+        {"ident":"strbuf", "id_type":"type", "header":"stropts.h", "extensions":[]},
+        {"ident":"strcasecmp", "id_type":"function", "header":"strings.h", "extensions":[]},
+        {"ident":"strcasecmp_l", "id_type":"function", "header":"strings.h", "extensions":[]},
+        {"ident":"strcat", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"strchr", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"strcmp", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"strcoll", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"strcoll_l", "id_type":"function", "header":"string.h", "extensions":["CX"]},
+        {"ident":"strcpy", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"strcspn", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"strdup", "id_type":"function", "header":"string.h", "extensions":["XSI"]},
+        {"ident":"strerror", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"strerror_l", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"strerror_r", "id_type":"function", "header":"string.h", "extensions":["CX"]},
+        {"ident":"strfdinsert", "id_type":"type", "header":"stropts.h", "extensions":[]},
+        {"ident":"strfmon", "id_type":"function", "header":"monetary.h", "extensions":[]},
+        {"ident":"strfmon_l", "id_type":"function", "header":"monetary.h", "extensions":[]},
+        {"ident":"strftime", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"strftime_l", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"strioctl", "id_type":"type", "header":"stropts.h", "extensions":[]},
+        {"ident":"strlen", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"strncasecmp", "id_type":"function", "header":"strings.h", "extensions":[]},
+        {"ident":"strncasecmp_l", "id_type":"function", "header":"strings.h", "extensions":[]},
+        {"ident":"strncat", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"strncmp", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"strncpy", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"strndup", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"strnlen", "id_type":"function", "header":"string.h", "extensions":["CX"]},
+        {"ident":"strpbrk", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"strpeek", "id_type":"type", "header":"stropts.h", "extensions":[]},
+        {"ident":"strptime", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"strrchr", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"strrecvfd", "id_type":"type", "header":"stropts.h", "extensions":[]},
+        {"ident":"strsignal", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"strspn", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"strstr", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"strtod", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"strtof", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"strtoimax", "id_type":"function", "header":"inttypes.h", "extensions":[]},
+        {"ident":"strtok", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"strtok_r", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"strtol", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"strtold", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"strtoll", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"strtoul", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"strtoull", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"strtoumax", "id_type":"function", "header":"inttypes.h", "extensions":[]},
+        {"ident":"strxfrm", "id_type":"function", "header":"string.h", "extensions":[]},
+        {"ident":"strxfrm_l", "id_type":"function", "header":"string.h", "extensions":["CX"]},
+        {"ident":"suseconds_t", "id_type":"type", "header":"sys/types.h", "extensions":["XSI"]},
+        {"ident":"swab", "id_type":"function", "header":"unistd.h", "extensions":["XSI"]},
+        {"ident":"swprintf", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"swscanf", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"symlink", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"symlinkat", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"sync", "id_type":"function", "header":"unistd.h", "extensions":["XSI"]},
+        {"ident":"sysconf", "id_type":"function", "header":"unistd.h", "extensions":["ADV"]},
+        {"ident":"syslog", "id_type":"function", "header":"syslog.h", "extensions":[]},
+        {"ident":"system", "id_type":"function", "header":"stdlib.h", "extensions":["IP6"]},
+        {"ident":"t_scalar_t", "id_type":"type", "header":"stropts.h", "extensions":[]},
+        {"ident":"t_uscalar_t", "id_type":"type", "header":"stropts.h", "extensions":[]},
+        {"ident":"TABDLY", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"tan", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"tanf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"tanh", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"tanhf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"tanhl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"tanl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"tcdrain", "id_type":"function", "header":"termios.h", "extensions":[]},
+        {"ident":"tcflag_t", "id_type":"type", "header":"termios.h", "extensions":[]},
+        {"ident":"tcflow", "id_type":"function", "header":"termios.h", "extensions":[]},
+        {"ident":"tcflush", "id_type":"function", "header":"termios.h", "extensions":[]},
+        {"ident":"tcgetattr", "id_type":"function", "header":"termios.h", "extensions":[]},
+        {"ident":"tcgetpgrp", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"tcgetsid", "id_type":"function", "header":"termios.h", "extensions":[]},
+        {"ident":"TCIFLUSH", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"TCIOFF", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"TCIOFLUSH", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"TCION", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"TCOFLUSH", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"TCOOFF", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"TCOON", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"TCP_NODELAY", "id_type":"constant", "header":"netinet/tcp.h", "extensions":[]},
+        {"ident":"TCSADRAIN", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"TCSAFLUSH", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"TCSANOW", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"tcsendbreak", "id_type":"function", "header":"termios.h", "extensions":[]},
+        {"ident":"tcsetattr", "id_type":"function", "header":"termios.h", "extensions":[]},
+        {"ident":"tcsetpgrp", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"tdelete", "id_type":"function", "header":"search.h", "extensions":[]},
+        {"ident":"telldir", "id_type":"function", "header":"dirent.h", "extensions":["XSI"]},
+        {"ident":"tempnam", "id_type":"function", "header":"stdio.h", "extensions":["OB","XSI"]},
+        {"ident":"termios", "id_type":"type", "header":"termios.h", "extensions":[]},
+        {"ident":"tfind", "id_type":"function", "header":"search.h", "extensions":[]},
+        {"ident":"tgamma", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"tgammaf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"tgammal", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"time", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"time_t", "id_type":"type", "header":"sys/types.h", "extensions":["SS","TSP"]},
+        {"ident":"TIMER_ABSTIME", "id_type":"constant", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"timer_create", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"timer_delete", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"timer_getoverrun", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"timer_gettime", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"timer_settime", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"timer_t", "id_type":"type", "header":"sys/types.h", "extensions":["CX"]},
+        {"ident":"times", "id_type":"function", "header":"sys/times.h", "extensions":["OB"]},
+        {"ident":"timespec", "id_type":"type", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"timeval", "id_type":"type", "header":"sys/time.h", "extensions":["IP6"]},
+        {"ident":"timezone", "id_type":"variable", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"tm", "id_type":"type", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"TMP_MAX", "id_type":"macro", "header":"stdio.h", "extensions":[]},
+        {"ident":"tmpfile", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"tmpnam", "id_type":"function", "header":"stdio.h", "extensions":["OB"]},
+        {"ident":"tms", "id_type":"type", "header":"sys/times.h", "extensions":["OB"]},
+        {"ident":"toascii", "id_type":"function", "header":"ctype.h", "extensions":["OB","XSI"]},
+        {"ident":"tolower", "id_type":"function", "header":"ctype.h", "extensions":[]},
+        {"ident":"tolower_l", "id_type":"function", "header":"ctype.h", "extensions":["CX"]},
+        {"ident":"TOSTOP", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"toupper", "id_type":"function", "header":"ctype.h", "extensions":[]},
+        {"ident":"toupper_l", "id_type":"function", "header":"ctype.h", "extensions":["CX"]},
+        {"ident":"towctrans", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"towctrans_l", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"towlower", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"towlower_l", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"towupper", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"towupper_l", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"trace_attr_t", "id_type":"type", "header":"sys/types.h", "extensions":["OB","TRC"]},
+        {"ident":"trace_event_id_t", "id_type":"type", "header":"sys/types.h", "extensions":["OB","TRC"]},
+        {"ident":"trace_event_set_t", "id_type":"type", "header":"sys/types.h", "extensions":["OB","TEF"]},
+        {"ident":"trace_id_t", "id_type":"type", "header":"sys/types.h", "extensions":["OB","TRC"]},
+        {"ident":"true", "id_type":"macro", "header":"stdbool.h", "extensions":[]},
+        {"ident":"trunc", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"truncate", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"truncf", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"truncl", "id_type":"function", "header":"math.h", "extensions":[]},
+        {"ident":"tsearch", "id_type":"function", "header":"search.h", "extensions":[]},
+        {"ident":"ttyname", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"ttyname_r", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"twalk", "id_type":"function", "header":"search.h", "extensions":[]},
+        {"ident":"tzname", "id_type":"variable", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"tzset", "id_type":"function", "header":"time.h", "extensions":["IP6"]},
+        {"ident":"UCHAR_MAX", "id_type":"macro", "header":"limits.h", "extensions":[]},
+        {"ident":"ucontext_t", "id_type":"type", "header":"signal.h", "extensions":[]},
+        {"ident":"uid_t", "id_type":"type", "header":"sys/types.h", "extensions":[]},
+        {"ident":"UINT_MAX", "id_type":"macro", "header":"limits.h", "extensions":[]},
+        {"ident":"ulimit", "id_type":"function", "header":"ulimit.h", "extensions":[]},
+        {"ident":"ULLONG_MAX", "id_type":"macro", "header":"limits.h", "extensions":[]},
+        {"ident":"ULONG_MAX", "id_type":"macro", "header":"limits.h", "extensions":[]},
+        {"ident":"umask", "id_type":"function", "header":"sys/stat.h", "extensions":["OB"]},
+        {"ident":"uname", "id_type":"function", "header":"sys/utsname.h", "extensions":[]},
+        {"ident":"ungetc", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"ungetwc", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"unlink", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"unlinkat", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"unlockpt", "id_type":"function", "header":"stdlib.h", "extensions":["XSI"]},
+        {"ident":"unsetenv", "id_type":"function", "header":"stdlib.h", "extensions":["CX"]},
+        {"ident":"USER_PROCESS", "id_type":"constant", "header":"utmpx.h", "extensions":[]},
+        {"ident":"USHRT_MAX", "id_type":"macro", "header":"limits.h", "extensions":[]},
+        {"ident":"usleep", "id_type":"function", "header":"unistd.h", "extensions":["OB","REM"]},
+        {"ident":"utimbuf", "id_type":"type", "header":"utime.h", "extensions":[]},
+        {"ident":"utime", "id_type":"function", "header":"utime.h", "extensions":[]},
+        {"ident":"utimensat", "id_type":"function", "header":"sys/stat.h", "extensions":["OB"]},
+        {"ident":"utimes", "id_type":"function", "header":"sys/time.h", "extensions":["IP6"]},
+        {"ident":"utmpx", "id_type":"type", "header":"utmpx.h", "extensions":[]},
+        {"ident":"utsname", "id_type":"type", "header":"sys/utsname.h", "extensions":[]},
+        {"ident":"va_arg", "id_type":"type", "header":"stdarg.h", "extensions":[]},
+        {"ident":"va_copy", "id_type":"macro", "header":"stdarg.h", "extensions":[]},
+        {"ident":"va_end", "id_type":"macro", "header":"stdarg.h", "extensions":[]},
+        {"ident":"va_list", "id_type":"type", "header":"stdarg.h", "extensions":[]},
+        {"ident":"va_start", "id_type":"macro", "header":"stdarg.h", "extensions":[]},
+        {"ident":"vdprintf", "id_type":"function", "header":"stdio.h", "extensions":["CX"]},
+        {"ident":"vfprintf", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"vfscanf", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"vfwprintf", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"vfwscanf", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"vprintf", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"vscanf", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"vsnprintf", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"vsprintf", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"vsscanf", "id_type":"function", "header":"stdio.h", "extensions":[]},
+        {"ident":"vswprintf", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"vswscanf", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"VTDLY", "id_type":"constant", "header":"termios.h", "extensions":[]},
+        {"ident":"vwprintf", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"vwscanf", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"W_OK", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"wait", "id_type":"function", "header":"sys/wait.h", "extensions":[]},
+        {"ident":"waitid", "id_type":"function", "header":"sys/wait.h", "extensions":[]},
+        {"ident":"waitpid", "id_type":"function", "header":"sys/wait.h", "extensions":[]},
+        {"ident":"WCHAR_MAX", "id_type":"macro", "header":"wchar.h", "extensions":[]},
+        {"ident":"WCHAR_MIN", "id_type":"macro", "header":"wchar.h", "extensions":[]},
+        {"ident":"wchar_t", "id_type":"macro", "header":"stddef.h", "extensions":["CX"]},
+        {"ident":"WCONTINUED", "id_type":"constant", "header":"sys/wait.h", "extensions":["XSI"]},
+        {"ident":"wcpcpy", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcpncpy", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcrtomb", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcscasecmp", "id_type":"function", "header":"wchar.h", "extensions":["CX"]},
+        {"ident":"wcscasecmp_l", "id_type":"function", "header":"wchar.h", "extensions":["CX"]},
+        {"ident":"wcscat", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcschr", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcscmp", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcscoll", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcscoll_l", "id_type":"function", "header":"wchar.h", "extensions":["CX"]},
+        {"ident":"wcscpy", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcscspn", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcsdup", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcsftime", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcslen", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcsncasecmp", "id_type":"function", "header":"wchar.h", "extensions":["CX"]},
+        {"ident":"wcsncasecmp_l", "id_type":"function", "header":"wchar.h", "extensions":["CX"]},
+        {"ident":"wcsncat", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcsncmp", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcsncpy", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcsnlen", "id_type":"function", "header":"wchar.h", "extensions":["CX"]},
+        {"ident":"wcsnrtombs", "id_type":"function", "header":"wchar.h", "extensions":["CX"]},
+        {"ident":"wcspbrk", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcsrchr", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcsrtombs", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcsspn", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcsstr", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcstod", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcstof", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcstoimax", "id_type":"function", "header":"inttypes.h", "extensions":[]},
+        {"ident":"wcstok", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcstol", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcstold", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcstoll", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcstombs", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"wcstoul", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcstoull", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcstoumax", "id_type":"function", "header":"inttypes.h", "extensions":[]},
+        {"ident":"wcswidth", "id_type":"function", "header":"wchar.h", "extensions":["XSI"]},
+        {"ident":"wcsxfrm", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wcsxfrm_l", "id_type":"function", "header":"wchar.h", "extensions":["CX"]},
+        {"ident":"wctob", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wctomb", "id_type":"function", "header":"stdlib.h", "extensions":[]},
+        {"ident":"wctrans", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"wctrans_l", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"wctrans_t", "id_type":"type", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"wctype", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"wctype_l", "id_type":"function", "header":"wctype.h", "extensions":["OB","XSI"]},
+        {"ident":"wctype_t", "id_type":"type", "header":"wchar.h", "extensions":["OB","XSI"]},
+        {"ident":"wcwidth", "id_type":"function", "header":"wchar.h", "extensions":["XSI"]},
+        {"ident":"WEOF", "id_type":"macro", "header":"wchar.h", "extensions":[]},
+        {"ident":"WEXITED", "id_type":"constant", "header":"sys/wait.h", "extensions":[]},
+        {"ident":"WEXITSTATUS", "id_type":"constant", "header":"sys/wait.h", "extensions":["CX"]},
+        {"ident":"WIFCONTINUED", "id_type":"constant", "header":"sys/wait.h", "extensions":[]},
+        {"ident":"WIFEXITED", "id_type":"constant", "header":"sys/wait.h", "extensions":["CX"]},
+        {"ident":"WIFSIGNALED", "id_type":"constant", "header":"sys/wait.h", "extensions":["CX"]},
+        {"ident":"WIFSTOPPED", "id_type":"constant", "header":"sys/wait.h", "extensions":["CX"]},
+        {"ident":"wint_t", "id_type":"type", "header":"wchar.h", "extensions":["OB","XSI"]},
+        {"ident":"wmemchr", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wmemcmp", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wmemcpy", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wmemmove", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"wmemset", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"WNOHANG", "id_type":"constant", "header":"sys/wait.h", "extensions":["CX"]},
+        {"ident":"WNOWAIT", "id_type":"constant", "header":"sys/wait.h", "extensions":[]},
+        {"ident":"WORD_BIT", "id_type":"macro", "header":"limits.h", "extensions":[]},
+        {"ident":"wordexp", "id_type":"function", "header":"wordexp.h", "extensions":[]},
+        {"ident":"wordexp_t", "id_type":"type", "header":"wordexp.h", "extensions":[]},
+        {"ident":"wordfree", "id_type":"function", "header":"wordexp.h", "extensions":[]},
+        {"ident":"wprintf", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"WRDE_APPEND", "id_type":"constant", "header":"wordexp.h", "extensions":[]},
+        {"ident":"WRDE_BADCHAR", "id_type":"constant", "header":"wordexp.h", "extensions":[]},
+        {"ident":"WRDE_BADVAL", "id_type":"constant", "header":"wordexp.h", "extensions":[]},
+        {"ident":"WRDE_CMDSUB", "id_type":"constant", "header":"wordexp.h", "extensions":[]},
+        {"ident":"WRDE_DOOFFS", "id_type":"constant", "header":"wordexp.h", "extensions":[]},
+        {"ident":"WRDE_NOCMD", "id_type":"constant", "header":"wordexp.h", "extensions":[]},
+        {"ident":"WRDE_NOSPACE", "id_type":"constant", "header":"wordexp.h", "extensions":[]},
+        {"ident":"WRDE_REUSE", "id_type":"constant", "header":"wordexp.h", "extensions":[]},
+        {"ident":"WRDE_SHOWERR", "id_type":"constant", "header":"wordexp.h", "extensions":[]},
+        {"ident":"WRDE_SYNTAX", "id_type":"constant", "header":"wordexp.h", "extensions":[]},
+        {"ident":"WRDE_UNDEF", "id_type":"constant", "header":"wordexp.h", "extensions":[]},
+        {"ident":"write", "id_type":"function", "header":"unistd.h", "extensions":[]},
+        {"ident":"writev", "id_type":"function", "header":"sys/uio.h", "extensions":["XSI"]},
+        {"ident":"wscanf", "id_type":"function", "header":"wchar.h", "extensions":[]},
+        {"ident":"WSTOPPED", "id_type":"constant", "header":"sys/wait.h", "extensions":[]},
+        {"ident":"WSTOPSIG", "id_type":"constant", "header":"sys/wait.h", "extensions":["CX"]},
+        {"ident":"WTERMSIG", "id_type":"constant", "header":"sys/wait.h", "extensions":["CX"]},
+        {"ident":"WUNTRACED", "id_type":"constant", "header":"sys/wait.h", "extensions":["CX"]},
+        {"ident":"X_OK", "id_type":"constant", "header":"unistd.h", "extensions":[]},
+        {"ident":"xor", "id_type":"macro", "header":"iso646.h", "extensions":[]},
+        {"ident":"xor_eq", "id_type":"macro", "header":"iso646.h", "extensions":[]},
+        {"ident":"y0", "id_type":"function", "header":"math.h", "extensions":["XSI"]},
+        {"ident":"y1", "id_type":"function", "header":"math.h", "extensions":["XSI"]},
+        {"ident":"yn", "id_type":"function", "header":"math.h", "extensions":["XSI"]}
+    ]
+}
diff --git a/share/libc/arpa/inet.h b/share/libc/arpa/inet.h
index 8e9cf21bdc537ec1fb4e4f53f1f946fd149858e8..773e7d87a2e5f1132865407f3879b5a3fc392785 100644
--- a/share/libc/arpa/inet.h
+++ b/share/libc/arpa/inet.h
@@ -23,4 +23,10 @@
 // According to POSIX, definitions from both arpa/inet.h and netinet/in.h
 // may be exported by one another, so everything is defined in a common file.
 
+#ifndef __FC_ARPA_INET
+#define __FC_ARPA_INET
+#include "features.h"
+__PUSH_FC_STDLIB
 #include "../__fc_inet.h"
+__POP_FC_STDLIB
+#endif
diff --git a/share/libc/getopt.h b/share/libc/getopt.h
index 6788b728779835daa8f5d3e12b7e9d08a85d47d0..b7f2116363d0e4cbf4068287e0f98a9f9e7756cf 100644
--- a/share/libc/getopt.h
+++ b/share/libc/getopt.h
@@ -27,14 +27,7 @@ __PUSH_FC_STDLIB
 
 __BEGIN_DECLS
 
-extern char *optarg;
-extern int optind, opterr, optopt;
-
-/*@ 
-  assigns \result, *optarg, optind, opterr, optopt 
-             \from argc, argv[0..argc-1], optstring[0..];
- */
-extern int getopt(int argc, char * const argv[], const char *optstring);
+#include "unistd.h"
 
 /* GNU specific */
 struct option
diff --git a/share/libc/locale.h b/share/libc/locale.h
index 11f0244bcb3cf4b8f4df547113ba2de04669bf37..6cc0e08923d1ce49e3075c5195407f7d4ff324c2 100644
--- a/share/libc/locale.h
+++ b/share/libc/locale.h
@@ -131,20 +131,20 @@ struct lconv
                                   | LC_IDENTIFICATION_MASK      \
                                   )
 
-extern struct lconv* __frama_c_locale;
-extern char*__frama_c_locale_names[512];
+extern struct lconv* __fc_locale;
+extern char*__fc_locale_names[512];
 
 /*@ 
   requires locale_null_or_valid_string: locale == \null || valid_read_string(locale);
-  assigns __frama_c_locale \from category, locale[..];
-  assigns \result \from __frama_c_locale,category, locale[..];
+  assigns __fc_locale \from category, locale[..];
+  assigns \result \from __fc_locale,category, locale[..];
   ensures result_null_or_locale_name: \result==\null || (\valid(\result) 
-      && \exists ℤ i ; \result == __frama_c_locale_names[i]) ;
+      && \exists ℤ i ; \result == __fc_locale_names[i]) ;
 */
 extern char *setlocale(int category, const char *locale);
 
 /*@ assigns \nothing;
-  ensures result_current_locale: \result == __frama_c_locale;
+  ensures result_current_locale: \result == __fc_locale;
  */
 extern struct lconv *localeconv(void);
 
diff --git a/share/libc/netinet/in.h b/share/libc/netinet/in.h
index 8e9cf21bdc537ec1fb4e4f53f1f946fd149858e8..e582651699c7282ef7ec944c133d44e3d351f50a 100644
--- a/share/libc/netinet/in.h
+++ b/share/libc/netinet/in.h
@@ -23,4 +23,10 @@
 // According to POSIX, definitions from both arpa/inet.h and netinet/in.h
 // may be exported by one another, so everything is defined in a common file.
 
+#ifndef __FC_NETINET_IN
+#define __FC_NETINET_IN
+#include "features.h"
+__PUSH_FC_STDLIB
 #include "../__fc_inet.h"
+__POP_FC_STDLIB
+#endif
diff --git a/share/libc/sys/select.h b/share/libc/sys/select.h
index 8e1608d267e3da518ee4f933fc4e891b2e3a3a30..dc854567f329a5d5114a336774aa5d0b1bbe6688 100644
--- a/share/libc/sys/select.h
+++ b/share/libc/sys/select.h
@@ -26,7 +26,7 @@
 __PUSH_FC_STDLIB
 __BEGIN_DECLS
 
-#include "__fc_select.h"
+#include "../__fc_select.h"
 
 __END_DECLS
 __POP_FC_STDLIB
diff --git a/share/libc/sys/socket.h b/share/libc/sys/socket.h
index 20b339c5ed8e978866fbbcb07cd91fdd55b3c0b0..c8d2a9ae4c3ce84d3762610595f048d30339c701 100644
--- a/share/libc/sys/socket.h
+++ b/share/libc/sys/socket.h
@@ -46,7 +46,7 @@ struct sockaddr_storage {
   sa_family_t   ss_family;
 };
 
-#include "../__fc_define_iovec.h"
+#include "sys/uio.h"
 
 struct cmsghdr {
   socklen_t  cmsg_len;
diff --git a/share/libc/sys/time.h b/share/libc/sys/time.h
index b860763f4d3909a5c198a66af5701417801f78c9..426f637688704543ab931b8ea5d48424d621bdaf 100644
--- a/share/libc/sys/time.h
+++ b/share/libc/sys/time.h
@@ -205,6 +205,11 @@ extern int timerisset(struct timeval *tvp);
 #define timercmp(a, b, _CMP) _timercmp(a, b)
 extern int _timercmp(struct timeval *a, struct timeval *b);
 
+// From POSIX, and for better compatibility with existing code bases:
+// "Inclusion of the <sys/time.h> header may make visible all symbols
+// from the <sys/select.h> header."
+#include "select.h"
+
 __END_DECLS
 __POP_FC_STDLIB
 #endif
diff --git a/share/libc/syslog.h b/share/libc/syslog.h
index 937e3fcfbe3a1a9e781946dcc26615d65afade6c..107ccb5fd3471df1cefa5512a76f14f495180b19 100644
--- a/share/libc/syslog.h
+++ b/share/libc/syslog.h
@@ -29,7 +29,7 @@ __PUSH_FC_STDLIB
 
 __BEGIN_DECLS
 
-typedef struct _code {
+typedef struct __fc_code {
 	const char	*c_name;
 	int	c_val;
 } CODE;
diff --git a/share/libc/unistd.h b/share/libc/unistd.h
index 9ee67070df73b4a30d6884ac5c8f021896bac633..e0c2a6817d3815b62976ad186b17f3947b859aec 100644
--- a/share/libc/unistd.h
+++ b/share/libc/unistd.h
@@ -34,7 +34,7 @@ __PUSH_FC_STDLIB
 #include "__fc_define_pid_t.h"
 #include "__fc_define_useconds_t.h"
 #include "__fc_define_intptr_t.h"
-#include "__fc_select.h"
+
 
 
 #include "limits.h"
@@ -1096,7 +1096,7 @@ extern int          tcsetpgrp(int, pid_t);
 extern int          truncate(const char *, off_t);
 
 extern volatile char __fc_ttyname[TTY_NAME_MAX];
-extern char *__fc_p_ttyname = __fc_ttyname;
+volatile char *__fc_p_ttyname = __fc_ttyname;
 
 /*@
   // missing: may assign to errno: EBADF, ENOTTY
@@ -1188,6 +1188,15 @@ int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid);
  */
 int setresgid(gid_t rgid, gid_t egid, gid_t sgid);
 
+extern char *optarg;
+extern int optind, opterr, optopt;
+
+/*@
+  assigns \result, *optarg, optind, opterr, optopt
+             \from argc, argv[0..argc-1], optstring[0..];
+ */
+extern int getopt(int argc, char * const argv[], const char *optstring);
+
 
 __END_DECLS
 
diff --git a/src/plugins/variadic/tests/known/oracle/exec.res.oracle b/src/plugins/variadic/tests/known/oracle/exec.res.oracle
index ccda67e7ad24969af80102884259c962ece1a69b..956067e6dbe9bc926d55bc7e9ce53dea74f565d3 100644
--- a/src/plugins/variadic/tests/known/oracle/exec.res.oracle
+++ b/src/plugins/variadic/tests/known/oracle/exec.res.oracle
@@ -35,7 +35,6 @@
   sentinel ∈ {0}
   __retres ∈ {0}
 /* Generated by Frama-C */
-#include "sys/time.h"
 #include "unistd.h"
 int main(void)
 {
diff --git a/src/plugins/variadic/tests/known/oracle/exec_failed_requirement.res.oracle b/src/plugins/variadic/tests/known/oracle/exec_failed_requirement.res.oracle
index cb9e737d1bb5298bcc7fd0690090dfd1d7406b6c..47d6f5693dc5bbb245732803a89a277b5287f17b 100644
--- a/src/plugins/variadic/tests/known/oracle/exec_failed_requirement.res.oracle
+++ b/src/plugins/variadic/tests/known/oracle/exec_failed_requirement.res.oracle
@@ -17,7 +17,6 @@
 [eva:final-states] Values at end of function main:
   NON TERMINATING FUNCTION
 /* Generated by Frama-C */
-#include "sys/time.h"
 #include "unistd.h"
 int main(void)
 {
diff --git a/tests/libc/check_compliance.ml b/tests/libc/check_compliance.ml
new file mode 100644
index 0000000000000000000000000000000000000000..ce69f25c601c328fdde8185f26d6a87ccc7d4e4f
--- /dev/null
+++ b/tests/libc/check_compliance.ml
@@ -0,0 +1,144 @@
+open Cil_types
+
+let add_headers tbl id headers =
+  try
+    let old_headers = Hashtbl.find tbl id in
+    Hashtbl.replace tbl id (old_headers @ headers)
+  with Not_found ->
+    Hashtbl.replace tbl id headers
+
+class stdlib_visitor = object
+  inherit Visitor.frama_c_inplace
+  val in_stdlib = ref false
+  val idents : (string, string list) Hashtbl.t = Hashtbl.create 500
+
+  method! vglob_aux g =
+    match Cil.findAttribute "fc_stdlib" (Cil.global_attributes g) with
+    | [] ->
+      in_stdlib := false;
+      Cil.SkipChildren
+    | attrparams ->
+      let headers =
+        Extlib.filter_map' (fun ap ->
+            match ap with
+            | AStr s -> s
+            | _ -> assert false
+          ) (Extlib.string_suffix ".h") attrparams
+      in
+      in_stdlib := true;
+      begin
+        match g with
+        | GEnumTag ({eorig_name = id}, _loc) | GEnumTagDecl ({eorig_name = id}, _loc)
+        | GCompTag ({corig_name = id}, _loc) | GCompTagDecl ({corig_name = id}, _loc)
+        | GVar ({vorig_name = id}, _, _loc) | GVarDecl ({vorig_name = id}, _loc)
+        | GFunDecl (_, {vorig_name = id}, _loc)
+        | GFun ({svar = {vorig_name = id}}, _loc) ->
+          add_headers idents id headers
+        | _ -> ()
+      end;
+      Cil.DoChildren
+
+  method get_idents = idents
+end
+
+let run_once = ref false
+
+module StringSet = Set.Make(String)
+
+let get_idents dir f =
+  let file = Filename.concat dir f in
+  let open Yojson.Basic.Util in
+  Kernel.feedback "parsing %s" f;
+  let json = Yojson.Basic.from_file file in
+  let elements = json |> member "data" |> to_list in
+  List.fold_left (fun acc e ->
+      let ident = e |> member "ident" |> to_string in
+      StringSet.add ident acc
+    ) StringSet.empty elements
+
+let get_ident_headers dir f =
+  let file = Filename.concat dir f in
+  let idents = Hashtbl.create 500 in
+  let open Yojson.Basic.Util in
+  Kernel.feedback "parsing %s" f;
+  let json = Yojson.Basic.from_file file in
+  let elements = json |> member "data" |> to_list in
+  List.iter (fun e ->
+      let ident = e |> member "ident" |> to_string in
+      let header = e |> member "header" |> to_string in
+      Hashtbl.replace idents ident header
+    ) elements;
+  idents
+
+let get_ident_headers_and_extensions dir f =
+  let file = Filename.concat dir f in
+  let idents = Hashtbl.create 500 in
+  let open Yojson.Basic.Util in
+  Kernel.feedback "parsing %s" f;
+  let json = Yojson.Basic.from_file file in
+  let elements = json |> member "data" |> to_list in
+  List.iter (fun e ->
+      let ident = e |> member "ident" |> to_string in
+      let header = e |> member "header" |> to_string in
+      let extensions = e |> member "extensions" |> to_list in
+      Hashtbl.replace idents ident (header, extensions)
+    ) elements;
+  idents
+
+let () =
+  Db.Main.extend (fun () ->
+      if not !run_once then begin
+        run_once := true;
+        let vis = new stdlib_visitor in
+        ignore (Visitor.visitFramacFile (vis :> Visitor.frama_c_visitor) (Ast.get ()));
+        let fc_stdlib_idents = vis#get_idents in
+        let dir = Filename.concat Config.datadir "compliance" in
+        let c11_idents = get_ident_headers dir "c11_functions.json" in
+        let glibc_idents = get_idents dir "glibc_functions.json" in
+        let posix_idents = get_ident_headers_and_extensions dir "posix_identifiers.json" in
+        let nonstandard_idents = get_idents dir "nonstandard_identifiers.json" in
+        Hashtbl.iter (fun id headers ->
+            if not (Extlib.string_prefix "__" id) &&
+               not (Extlib.string_prefix "Frama_C" id) &&
+               List.filter (fun h -> not (Extlib.string_prefix "__fc" h))
+                 headers <> []
+            then
+              let id_in_c11 = Hashtbl.mem c11_idents id in
+              let id_in_posix = Hashtbl.mem posix_idents id in
+              let id_in_glibc = StringSet.mem id glibc_idents in
+              let id_in_nonstd = StringSet.mem id nonstandard_idents in
+              if id_in_c11 then begin
+                (* Check that the header is the expected one.
+                   Note that some symbols may appear in more than one header,
+                   possibly due to collisions
+                   (e.g. 'flock' as type and function). *)
+                let h = Hashtbl.find c11_idents id in
+                if not (List.mem h headers) then
+                  Kernel.warning "<%a>:%s : C11 says %s"
+                    (Pretty_utils.pp_list ~sep:"," Format.pp_print_string) headers
+                    id h
+              end
+              else if id_in_posix then begin
+                (* check the header is the expected one *)
+                let (h, _) = Hashtbl.find posix_idents id in
+                (* arpa/inet.h and netinet/in.h are special cases: due to mutual
+                   inclusion, there are always issues with their symbols;
+                   also, timezone is a special case, since it is a type in
+                   sys/time.h, but a variable in time.h in POSIX. However, its
+                   declaration as extern is erased by rmtmps, since it is
+                   unused. *)
+                if not (List.mem h headers) &&
+                   not (List.mem "arpa/inet.h" headers && h = "netinet/in.h" ||
+                        List.mem "netinet/in.h" headers && h = "arpa/inet.h") &&
+                   id <> "timezone"
+                then
+                  Kernel.warning "<%a>:%s : POSIX says %s"
+                    (Pretty_utils.pp_list ~sep:"," Format.pp_print_string) headers
+                    id h
+              end
+              else if not (id_in_glibc || id_in_nonstd) then
+                Kernel.warning "<%a>:%s : unknown identifier"
+                  (Pretty_utils.pp_list ~sep:"," Format.pp_print_string) headers
+                  id
+          ) fc_stdlib_idents;
+      end)
diff --git a/tests/libc/fc_libc.c b/tests/libc/fc_libc.c
index 3baf405b45968983fc9f4ef2316aaf1822b023ba..108fa7a3ad4a0cdf546d0127c2aec388f32077ae 100644
--- a/tests/libc/fc_libc.c
+++ b/tests/libc/fc_libc.c
@@ -2,9 +2,11 @@
    EXECNOW: make -s @PTEST_DIR@/check_libc_naming_conventions.cmxs
    EXECNOW: make -s @PTEST_DIR@/check_const.cmxs
    EXECNOW: make -s @PTEST_DIR@/check_parsing_individual_headers.cmxs
+   EXECNOW: make -s @PTEST_DIR@/check_compliance.cmxs
    OPT: -load-module @PTEST_DIR@/check_libc_naming_conventions -print -cpp-extra-args='-nostdinc -Ishare/libc' -metrics -metrics-libc -load-module @PTEST_DIR@/check_const -load-module metrics -eva @EVA_CONFIG@ -then -lib-entry -no-print -metrics-no-libc
    OPT: -print -print-libc
    OPT: -load-module @PTEST_DIR@/check_parsing_individual_headers
+   OPT: -load-module @PTEST_DIR@/check_compliance -kernel-msg-key printer:attrs
    CMD: ./tests/libc/check_full_libc.sh
    OPT:
 **/
diff --git a/tests/libc/oracle/fc_libc.0.res.oracle b/tests/libc/oracle/fc_libc.0.res.oracle
index 6e3d1931e3a29df6f54f71de3d15181b471bbc54..7edeeaacb72c89e076fde32302ba704b09368783 100644
--- a/tests/libc/oracle/fc_libc.0.res.oracle
+++ b/tests/libc/oracle/fc_libc.0.res.oracle
@@ -4,10 +4,10 @@
 [eva] Initial state computed
 [eva:initial-state] Values of globals at initialization
   
-[eva] tests/libc/fc_libc.c:149: assertion got status valid.
-[eva] tests/libc/fc_libc.c:150: assertion got status valid.
 [eva] tests/libc/fc_libc.c:151: assertion got status valid.
 [eva] tests/libc/fc_libc.c:152: assertion got status valid.
+[eva] tests/libc/fc_libc.c:153: assertion got status valid.
+[eva] tests/libc/fc_libc.c:154: assertion got status valid.
 [eva] Recording results for main
 [eva] done for function main
 [eva] ====== VALUES COMPUTED ======
@@ -157,12 +157,12 @@
    wcstombs (0 call); wctomb (0 call); wmemchr (0 call); wmemcmp (0 call);
    wmemmove (0 call); write (0 call); 
   
-  'Extern' global variables (15)
+  'Extern' global variables (17)
   ==============================
    __fc_basename; __fc_dirname; __fc_getpwuid_pw_dir; __fc_getpwuid_pw_name;
-   __fc_getpwuid_pw_passwd; __fc_getpwuid_pw_shell; __fc_hostname;
-   __fc_mblen_state; __fc_mbtowc_state; __fc_ttyname; __fc_wctomb_state;
-   optarg; opterr; optopt; tzname
+   __fc_getpwuid_pw_passwd; __fc_getpwuid_pw_shell; __fc_hostname; __fc_locale;
+   __fc_locale_names; __fc_mblen_state; __fc_mbtowc_state; __fc_ttyname;
+   __fc_wctomb_state; optarg; opterr; optopt; tzname
   
   Potential entry points (1)
   ==========================
@@ -172,7 +172,7 @@
   ============== 
   Sloc = 1083
   Decision point = 204
-  Global variables = 66
+  Global variables = 68
   If = 195
   Loop = 43
   Goto = 89
@@ -186,7 +186,6 @@
 #include "__fc_builtin.c"
 #include "__fc_builtin.h"
 #include "__fc_define_fd_set_t.h"
-#include "__fc_define_useconds_t.h"
 #include "__fc_gcc_builtins.h"
 #include "__fc_select.h"
 #include "alloca.h"
@@ -214,6 +213,7 @@
 #include "math.h"
 #include "netdb.c"
 #include "netdb.h"
+#include "netinet/in.h"
 #include "poll.h"
 #include "pthread.h"
 #include "pwd.h"
diff --git a/tests/libc/oracle/fc_libc.1.res.oracle b/tests/libc/oracle/fc_libc.1.res.oracle
index 417ea214e24ff7f7103182badf324309869ad81f..d0942621eceadea65324eea022577dd0fad7f0f9 100644
--- a/tests/libc/oracle/fc_libc.1.res.oracle
+++ b/tests/libc/oracle/fc_libc.1.res.oracle
@@ -17,6 +17,13 @@ struct __fc_fenv_t {
    unsigned short __unused5 ;
 };
 typedef struct __fc_fenv_t fenv_t;
+typedef int wchar_t;
+typedef int ssize_t;
+typedef unsigned int gid_t;
+typedef unsigned int uid_t;
+typedef long off_t;
+typedef int pid_t;
+typedef unsigned int useconds_t;
 struct option {
    char const *name ;
    int has_arg ;
@@ -35,7 +42,6 @@ struct __fc_glob_t {
    int (*gl_stat)(char const * __restrict , void * __restrict ) ;
 };
 typedef struct __fc_glob_t glob_t;
-typedef int wchar_t;
 struct __fc_div_t {
    int quot ;
    int rem ;
@@ -119,9 +125,6 @@ struct __fc_pthread_t {
    int _fc ;
 };
 typedef struct __fc_pthread_t pthread_t;
-typedef int pid_t;
-typedef unsigned int gid_t;
-typedef unsigned int uid_t;
 typedef unsigned long sigset_t;
 union sigval {
    int sival_int ;
@@ -151,7 +154,6 @@ struct sockaddr {
    sa_family_t sa_family ;
    char sa_data[14] ;
 };
-typedef int ssize_t;
 struct iovec {
    void *iov_base ;
    size_t iov_len ;
@@ -239,7 +241,6 @@ typedef unsigned int blksize_t;
 typedef unsigned int dev_t;
 typedef unsigned int mode_t;
 typedef unsigned int nlink_t;
-typedef long off_t;
 struct stat {
    dev_t st_dev ;
    ino_t st_ino ;
@@ -301,7 +302,6 @@ struct __fc_fd_set {
    long __fc_fd_set[(unsigned int)1024 / ((unsigned int)8 * sizeof(long))] ;
 };
 typedef struct __fc_fd_set fd_set;
-typedef unsigned int useconds_t;
 struct flock {
    short l_type ;
    short l_whence ;
@@ -343,11 +343,11 @@ struct __fc_sigjmp_buf {
    sigset_t sigs ;
 };
 typedef struct __fc_sigjmp_buf sigjmp_buf;
-struct _code {
+struct __fc_code {
    char const *c_name ;
    int c_val ;
 };
-typedef struct _code CODE;
+typedef struct __fc_code CODE;
 typedef unsigned long rlim_t;
 struct rlimit {
    rlim_t rlim_cur ;
@@ -1147,95 +1147,6 @@ int fesetenv(fenv_t const *envp)
   return __retres;
 }
 
-extern char *optarg;
-
-int optind;
-
-extern int opterr;
-
-extern int optopt;
-
-/*@ assigns \result, *optarg, optind, opterr, optopt;
-    assigns \result
-      \from argc, *(argv + (0 .. argc - 1)), *(optstring + (0 ..));
-    assigns *optarg
-      \from argc, *(argv + (0 .. argc - 1)), *(optstring + (0 ..));
-    assigns optind
-      \from argc, *(argv + (0 .. argc - 1)), *(optstring + (0 ..));
-    assigns opterr
-      \from argc, *(argv + (0 .. argc - 1)), *(optstring + (0 ..));
-    assigns optopt
-      \from argc, *(argv + (0 .. argc - 1)), *(optstring + (0 ..));
- */
-extern int getopt(int argc, char * const *argv, char const *optstring);
-
-/*@ assigns \result, *optarg, optind, opterr, optopt,
-            *((longopts + (0 ..))->flag);
-    assigns \result
-      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
-            *(longopts + (0 ..));
-    assigns *optarg
-      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
-            *(longopts + (0 ..));
-    assigns optind
-      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
-            *(longopts + (0 ..));
-    assigns opterr
-      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
-            *(longopts + (0 ..));
-    assigns optopt
-      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
-            *(longopts + (0 ..));
-    assigns *((longopts + (0 ..))->flag)
-      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
-            *(longopts + (0 ..));
- */
-extern int getopt_long(int argc, char * const *argv, char const *shortopts,
-                       struct option const *longopts, int *longind);
-
-/*@ assigns \result, *optarg, optind, opterr, optopt,
-            *((longopts + (0 ..))->flag);
-    assigns \result
-      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
-            *(longopts + (0 ..));
-    assigns *optarg
-      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
-            *(longopts + (0 ..));
-    assigns optind
-      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
-            *(longopts + (0 ..));
-    assigns opterr
-      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
-            *(longopts + (0 ..));
-    assigns optopt
-      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
-            *(longopts + (0 ..));
-    assigns *((longopts + (0 ..))->flag)
-      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
-            *(longopts + (0 ..));
- */
-extern int getopt_long_only(int argc, char * const *argv,
-                            char const *shortopts,
-                            struct option const *longopts, int *longind);
-
-int optind = 1;
-int glob(char const *pattern, int flags,
-         int (*errfunc)(char const *epath, int eerrno), glob_t *pglob);
-
-void globfree(glob_t *pglob);
-
-/*@ ghost extern int __fc_heap_status __attribute__((__FRAMA_C_MODEL__)); */
-
-/*@
-axiomatic dynamic_allocation {
-  predicate is_allocable{L}(ℤ n) 
-    reads __fc_heap_status;
-  
-  axiom never_allocable{L}:
-    ∀ ℤ i; i < 0 ∨ i > 4294967295U ⇒ ¬is_allocable(i);
-  
-  }
- */
 /*@
 axiomatic MemCmp {
   logic ℤ memcmp{L1, L2}(char *s1, char *s2, ℤ n) 
@@ -1523,3398 +1434,2896 @@ predicate valid_wstring_or_null{L}(wchar_t *s) =
   s ≡ \null ∨ valid_wstring(s);
 
 */
-/*@ requires valid_nptr: \valid_read(nptr);
+/*@ ghost int __fc_fds[1024]; */
+/*@ requires valid_string_path: valid_read_string(path);
+    requires valid_amode: (amode & ~((4 | 2) | 1)) ≡ 0 ∨ amode ≡ 0;
+    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
     assigns \result;
-    assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+    assigns \result
+      \from (indirect: path), (indirect: *(path + (0 ..))), (indirect: amode);
  */
-extern double atof(char const *nptr);
-
-int atoi(char const *p);
+extern int access(char const *path, int amode);
 
-/*@ requires valid_nptr: \valid_read(nptr);
+/*@ requires valid_string_path: valid_read_string(path);
+    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
     assigns \result;
-    assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+    assigns \result \from (indirect: path), (indirect: *(path + (0 ..)));
  */
-extern long atol(char const *nptr);
+extern int chdir(char const *path);
 
-/*@ requires valid_nptr: \valid_read(nptr);
+/*@ requires valid_string_path: valid_read_string(path);
+    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
     assigns \result;
-    assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+    assigns \result \from (indirect: path), (indirect: *(path + (0 ..)));
  */
-extern long long atoll(char const *nptr);
+extern int chroot(char const *path);
 
-/*@ requires valid_nptr: \valid_read(nptr);
-    requires separation: \separated(nptr, endptr);
-    assigns \result, *endptr;
-    assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
-    assigns *endptr
-      \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr);
-    
-    behavior no_storage:
-      assumes null_endptr: endptr ≡ \null;
-      assigns \result;
-      assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
-    
-    behavior store_position:
-      assumes nonnull_endptr: endptr ≢ \null;
-      requires valid_endptr: \valid(endptr);
-      ensures initialization: \initialized(\old(endptr));
-      ensures valid_endptr: \valid_read(\old(endptr));
-      ensures position_subset: \subset(*\old(endptr), \old(nptr) + (0 ..));
-      assigns \result, *endptr;
-      assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
-      assigns *endptr
-        \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr);
-    
-    complete behaviors store_position, no_storage;
-    disjoint behaviors store_position, no_storage;
+/*@ requires valid_string_path: valid_read_string(path);
+    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns \result;
+    assigns \result
+      \from (indirect: path), (indirect: *(path + (0 ..))),
+            (indirect: owner), (indirect: group);
  */
-extern double strtod(char const * __restrict nptr, char ** __restrict endptr);
+extern int chown(char const *path, uid_t owner, gid_t group);
 
-/*@ requires valid_nptr: \valid_read(nptr);
-    requires separation: \separated(nptr, endptr);
-    assigns \result, *endptr;
-    assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
-    assigns *endptr
-      \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr);
-    
-    behavior no_storage:
-      assumes null_endptr: endptr ≡ \null;
-      assigns \result;
-      assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
-    
-    behavior store_position:
-      assumes nonnull_endptr: endptr ≢ \null;
-      requires valid_endptr: \valid(endptr);
-      ensures initialization: \initialized(\old(endptr));
-      ensures valid_endptr: \valid_read(\old(endptr));
-      ensures position_subset: \subset(*\old(endptr), \old(nptr) + (0 ..));
-      assigns \result, *endptr;
-      assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
-      assigns *endptr
-        \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr);
-    
-    complete behaviors store_position, no_storage;
-    disjoint behaviors store_position, no_storage;
+/*@ requires valid_fd: 0 ≤ fd < 1024;
+    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns __fc_fds[fd], \result;
+    assigns __fc_fds[fd] \from fd, __fc_fds[fd];
+    assigns \result \from (indirect: fd), (indirect: __fc_fds[fd]);
  */
-extern float strtof(char const * __restrict nptr, char ** __restrict endptr);
+extern int close(int fd);
 
-/*@ requires valid_nptr: \valid_read(nptr);
-    requires separation: \separated(nptr, endptr);
-    assigns \result, *endptr;
-    assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
-    assigns *endptr
-      \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr);
-    
-    behavior no_storage:
-      assumes null_endptr: endptr ≡ \null;
-      assigns \result;
-      assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
-    
-    behavior store_position:
-      assumes nonnull_endptr: endptr ≢ \null;
-      requires valid_endptr: \valid(endptr);
-      ensures initialization: \initialized(\old(endptr));
-      ensures valid_endptr: \valid_read(\old(endptr));
-      ensures position_subset: \subset(*\old(endptr), \old(nptr) + (0 ..));
-      assigns \result, *endptr;
-      assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
-      assigns *endptr
-        \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr);
-    
-    complete behaviors store_position, no_storage;
-    disjoint behaviors store_position, no_storage;
+/*@ requires valid_fildes: 0 ≤ fildes < 1024;
+    ensures
+      result_valid_fildes_or_error:
+        \result ≡ -1 ∨ (\old(fildes) ≤ \result < 1024);
+    assigns __fc_fds[fildes ..], \result;
+    assigns __fc_fds[fildes ..] \from fildes;
+    assigns \result \from fildes;
  */
-extern long double strtold(char const * __restrict nptr,
-                           char ** __restrict endptr);
+extern int dup(int fildes);
 
-/*@ requires valid_nptr: \valid_read(nptr);
-    requires separation: \separated(nptr, endptr);
-    requires base_range: base ≡ 0 ∨ (2 ≤ base ≤ 36);
-    assigns \result, *endptr;
+/*@ requires valid_fildes: 0 ≤ fildes < 1024;
+    requires valid_fildes2: 0 ≤ fildes2 < 1024;
+    ensures
+      result_fildes2_or_error: \result ≡ \old(fildes2) ∨ \result ≡ -1;
+    assigns __fc_fds[fildes2], \result;
+    assigns __fc_fds[fildes2] \from fildes, fildes2, __fc_fds[fildes2];
     assigns \result
-      \from (indirect: nptr), (indirect: *(nptr + (0 ..))), (indirect: base);
-    assigns *endptr
-      \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
-            (indirect: base);
-    
-    behavior no_storage:
-      assumes null_endptr: endptr ≡ \null;
-      assigns \result;
-      assigns \result
-        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
-              (indirect: base);
-    
-    behavior store_position:
-      assumes nonnull_endptr: endptr ≢ \null;
-      requires valid_endptr: \valid(endptr);
-      ensures initialization: \initialized(\old(endptr));
-      ensures valid_endptr: \valid_read(\old(endptr));
-      ensures position_subset: \subset(*\old(endptr), \old(nptr) + (0 ..));
-      assigns \result, *endptr;
-      assigns \result
-        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
-              (indirect: base);
-      assigns *endptr
-        \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
-              (indirect: base);
-    
-    complete behaviors store_position, no_storage;
-    disjoint behaviors store_position, no_storage;
+      \from fildes, fildes2, __fc_fds[fildes], __fc_fds[fildes2];
  */
-extern long strtol(char const * __restrict nptr, char ** __restrict endptr,
-                   int base);
+extern int dup2(int fildes, int fildes2);
 
-/*@ requires valid_nptr: \valid_read(nptr);
-    requires separation: \separated(nptr, endptr);
-    requires base_range: base ≡ 0 ∨ (2 ≤ base ≤ 36);
-    assigns \result, *endptr;
-    assigns \result
-      \from (indirect: nptr), (indirect: *(nptr + (0 ..))), (indirect: base);
-    assigns *endptr
-      \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
-            (indirect: base);
-    
-    behavior no_storage:
-      assumes null_endptr: endptr ≡ \null;
-      assigns \result;
-      assigns \result
-        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
-              (indirect: base);
-    
-    behavior store_position:
-      assumes nonnull_endptr: endptr ≢ \null;
-      requires valid_endptr: \valid(endptr);
-      ensures initialization: \initialized(\old(endptr));
-      ensures valid_endptr: \valid_read(\old(endptr));
-      ensures position_subset: \subset(*\old(endptr), \old(nptr) + (0 ..));
-      assigns \result, *endptr;
-      assigns \result
-        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
-              (indirect: base);
-      assigns *endptr
-        \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
-              (indirect: base);
-    
-    complete behaviors store_position, no_storage;
-    disjoint behaviors store_position, no_storage;
+/*@ requires valid_string_path: valid_read_string(path);
+    requires valid_string_arg: valid_read_string(arg);
+    assigns \result;
+    assigns \result \from *(path + (0 ..)), *(arg + (0 ..));
  */
-extern long long strtoll(char const * __restrict nptr,
-                         char ** __restrict endptr, int base);
+extern int execl(char const *path, char const *arg, void * const *__va_params);
 
-/*@ requires valid_nptr: \valid_read(nptr);
-    requires separation: \separated(nptr, endptr);
-    requires base_range: base ≡ 0 ∨ (2 ≤ base ≤ 36);
-    assigns \result, *endptr;
-    assigns \result
-      \from (indirect: nptr), (indirect: *(nptr + (0 ..))), (indirect: base);
-    assigns *endptr
-      \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
-            (indirect: base);
-    
-    behavior no_storage:
-      assumes null_endptr: endptr ≡ \null;
-      assigns \result;
-      assigns \result
-        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
-              (indirect: base);
-    
-    behavior store_position:
-      assumes nonnull_endptr: endptr ≢ \null;
-      requires valid_endptr: \valid(endptr);
-      ensures initialization: \initialized(\old(endptr));
-      ensures valid_endptr: \valid_read(\old(endptr));
-      ensures position_subset: \subset(*\old(endptr), \old(nptr) + (0 ..));
-      assigns \result, *endptr;
-      assigns \result
-        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
-              (indirect: base);
-      assigns *endptr
-        \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
-              (indirect: base);
-    
-    complete behaviors store_position, no_storage;
-    disjoint behaviors store_position, no_storage;
+/*@ requires valid_string_path: valid_read_string(path);
+    requires valid_string_arg: valid_read_string(arg);
+    assigns \result;
+    assigns \result \from *(path + (0 ..)), *(arg + (0 ..));
  */
-extern unsigned long strtoul(char const * __restrict nptr,
-                             char ** __restrict endptr, int base);
+extern int execle(char const *path, char const *arg,
+                  void * const *__va_params);
 
-/*@ requires valid_nptr: \valid_read(nptr);
-    requires separation: \separated(nptr, endptr);
-    requires base_range: base ≡ 0 ∨ (2 ≤ base ≤ 36);
-    assigns \result, *endptr;
-    assigns \result
-      \from (indirect: nptr), (indirect: *(nptr + (0 ..))), (indirect: base);
-    assigns *endptr
-      \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
-            (indirect: base);
-    
-    behavior no_storage:
-      assumes null_endptr: endptr ≡ \null;
-      assigns \result;
-      assigns \result
-        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
-              (indirect: base);
-    
-    behavior store_position:
-      assumes nonnull_endptr: endptr ≢ \null;
-      requires valid_endptr: \valid(endptr);
-      ensures initialization: \initialized(\old(endptr));
-      ensures valid_endptr: \valid_read(\old(endptr));
-      ensures position_subset: \subset(*\old(endptr), \old(nptr) + (0 ..));
-      assigns \result, *endptr;
-      assigns \result
-        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
-              (indirect: base);
-      assigns *endptr
-        \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
-              (indirect: base);
-    
-    complete behaviors store_position, no_storage;
-    disjoint behaviors store_position, no_storage;
+/*@ requires valid_string_path: valid_read_string(path);
+    requires valid_string_arg: valid_read_string(arg);
+    assigns \result;
+    assigns \result \from *(path + (0 ..)), *(arg + (0 ..));
  */
-extern unsigned long long strtoull(char const * __restrict nptr,
-                                   char ** __restrict endptr, int base);
-
-/*@ ghost
-extern int __fc_random_counter __attribute__((__unused__, __FRAMA_C_MODEL__));
-*/
+extern int execlp(char const *path, char const *arg,
+                  void * const *__va_params);
 
-unsigned long const __fc_rand_max = (unsigned long)32767;
-/*@ ensures result_range: 0 ≤ \result ≤ __fc_rand_max;
-    assigns \result, __fc_random_counter;
-    assigns \result \from __fc_random_counter;
-    assigns __fc_random_counter \from __fc_random_counter;
+/*@ requires valid_string_path: valid_read_string(path);
+    requires valid_string_argv0: valid_read_string(*(argv + 0));
+    assigns \result;
+    assigns \result \from *(path + (0 ..)), *(argv + (0 ..));
  */
-extern int rand(void);
+extern int execv(char const *path, char * const *argv);
 
-/*@ assigns __fc_random_counter;
-    assigns __fc_random_counter \from seed; */
-extern void srand(unsigned int seed);
+/*@ requires valid_path: valid_read_string(path);
+    requires valid_argv0: valid_read_string(*(argv + 0));
+    assigns \result;
+    assigns \result \from *(path + (0 ..)), *(argv + (0 ..));
+ */
+extern int execve(char const *path, char * const *argv, char * const *env);
 
-/*@ ensures result_range: 0 ≤ \result ≤ __fc_rand_max;
+/*@ requires valid_string_path: valid_read_string(path);
+    requires valid_string_argv0: valid_read_string(*(argv + 0));
     assigns \result;
-    assigns \result \from __fc_random_counter;
+    assigns \result \from *(path + (0 ..)), *(argv + (0 ..));
  */
-extern long random(void);
+extern int execvp(char const *path, char * const *argv);
 
-/*@ assigns __fc_random_counter;
-    assigns __fc_random_counter \from seed; */
-extern void srandom(unsigned int seed);
+/*@ ensures never_terminates: \false;
+    assigns \nothing; */
+extern  __attribute__((__noreturn__)) void _exit(int);
 
-int __fc_random48_init __attribute__((__FRAMA_C_MODEL__));
-unsigned short __fc_random48_counter[3] __attribute__((__FRAMA_C_MODEL__));
-unsigned short *__fc_p_random48_counter = __fc_random48_counter;
-/*@ ensures random48_initialized: __fc_random48_init ≡ 1;
-    assigns __fc_random48_counter[0 .. 2], __fc_random48_init;
-    assigns __fc_random48_counter[0 .. 2] \from seed;
-    assigns __fc_random48_init \from \nothing;
+/*@ ensures
+      result_ok_child_or_error:
+        \result ≡ 0 ∨ \result > 0 ∨ \result ≡ -1;
+    assigns \result;
+    assigns \result \from \nothing;
  */
-extern void srand48(long seed);
+extern pid_t fork(void);
 
-/*@ requires
-      initialization: initialized_seed16v: \initialized(seed16v + (0 .. 2));
-    ensures random48_initialized: __fc_random48_init ≡ 1;
-    ensures result_counter: \result ≡ __fc_p_random48_counter;
-    assigns __fc_random48_counter[0 .. 2], __fc_random48_init, \result;
-    assigns __fc_random48_counter[0 .. 2]
-      \from (indirect: *(seed16v + (0 .. 2)));
-    assigns __fc_random48_init \from \nothing;
-    assigns \result \from __fc_p_random48_counter;
+/*@ requires valid_buf: \valid(buf + (0 .. size - 1));
+    ensures result_ok_or_error: \result ≡ \null ∨ \result ≡ \old(buf);
+    assigns *(buf + (0 .. size - 1)), \result;
+    assigns *(buf + (0 .. size - 1)) \from (indirect: buf), (indirect: size);
+    assigns \result \from buf, (indirect: size);
  */
-extern unsigned short *seed48(unsigned short * /*[3]*/ seed16v);
+extern char *getcwd(char *buf, size_t size);
 
-/*@ ensures random48_initialized: __fc_random48_init ≡ 1;
-    assigns __fc_random48_counter[0 .. 2], __fc_random48_init;
-    assigns __fc_random48_counter[0 .. 2] \from *(param + (0 .. 5));
-    assigns __fc_random48_init \from \nothing;
- */
-extern void lcong48(unsigned short * /*[7]*/ param);
+/*@ assigns \result;
+    assigns \result \from \nothing; */
+extern gid_t getegid(void);
 
-/*@ requires random48_initialized: __fc_random48_init ≡ 1;
-    ensures result_range: \is_finite(\result) ∧ 0.0 ≤ \result < 1.0;
-    assigns __fc_random48_counter[0 .. 2], \result;
-    assigns __fc_random48_counter[0 .. 2]
-      \from __fc_random48_counter[0 .. 2];
-    assigns \result \from __fc_random48_counter[0 .. 2];
- */
-extern double drand48(void);
+/*@ assigns \result;
+    assigns \result \from \nothing; */
+extern uid_t geteuid(void);
 
-/*@ requires
-      initialization: initialized_xsubi: \initialized(xsubi + (0 .. 2));
-    ensures result_range: \is_finite(\result) ∧ 0.0 ≤ \result < 1.0;
-    assigns __fc_random48_counter[0 .. 2], \result;
-    assigns __fc_random48_counter[0 .. 2]
-      \from __fc_random48_counter[0 .. 2];
-    assigns \result \from __fc_random48_counter[0 .. 2];
- */
-extern double erand48(unsigned short * /*[3]*/ xsubi);
+/*@ assigns \result;
+    assigns \result \from \nothing; */
+extern gid_t getgid(void);
 
-/*@ requires random48_initialized: __fc_random48_init ≡ 1;
-    ensures result_range: 0 ≤ \result < 2147483648;
-    assigns __fc_random48_counter[0 .. 2], \result;
-    assigns __fc_random48_counter[0 .. 2]
-      \from __fc_random48_counter[0 .. 2];
-    assigns \result \from __fc_random48_counter[0 .. 2];
+extern char volatile __fc_hostname[64];
+
+/*@ requires name_has_room: \valid(name + (0 .. len - 1));
+    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns \result, *(name + (0 .. len - 1));
+    assigns \result
+      \from (indirect: __fc_hostname[0 .. len]), (indirect: len);
+    assigns *(name + (0 .. len - 1))
+      \from (indirect: __fc_hostname[0 .. len]), (indirect: len);
  */
-extern long lrand48(void);
+extern int gethostname(char *name, size_t len);
 
-/*@ requires
-      initialization: initialized_xsubi: \initialized(xsubi + (0 .. 2));
-    ensures result_range: 0 ≤ \result < 2147483648;
-    assigns __fc_random48_counter[0 .. 2], \result;
-    assigns __fc_random48_counter[0 .. 2]
-      \from __fc_random48_counter[0 .. 2];
-    assigns \result \from __fc_random48_counter[0 .. 2];
- */
-extern long nrand48(unsigned short * /*[3]*/ xsubi);
-
-/*@ requires random48_initialized: __fc_random48_init ≡ 1;
-    ensures result_range: -2147483648 ≤ \result < 2147483648;
-    assigns __fc_random48_counter[0 .. 2], \result;
-    assigns __fc_random48_counter[0 .. 2]
-      \from __fc_random48_counter[0 .. 2];
-    assigns \result \from __fc_random48_counter[0 .. 2];
- */
-extern long mrand48(void);
-
-/*@ requires
-      initialization: initialized_xsubi: \initialized(xsubi + (0 .. 2));
-    ensures result_range: -2147483648 ≤ \result < 2147483648;
-    assigns __fc_random48_counter[0 .. 2], \result;
-    assigns __fc_random48_counter[0 .. 2]
-      \from __fc_random48_counter[0 .. 2];
-    assigns \result \from __fc_random48_counter[0 .. 2];
- */
-extern long jrand48(unsigned short * /*[3]*/ xsubi);
-
-void *calloc(size_t nmemb, size_t size);
-
-/*@ assigns __fc_heap_status, \result;
-    assigns __fc_heap_status \from size, __fc_heap_status;
-    assigns \result \from (indirect: size), (indirect: __fc_heap_status);
-    allocates \result;
-    
-    behavior allocation:
-      assumes can_allocate: is_allocable(size);
-      ensures allocation: \fresh{Old, Here}(\result,\old(size));
-      assigns __fc_heap_status, \result;
-      assigns __fc_heap_status \from size, __fc_heap_status;
-      assigns \result \from (indirect: size), (indirect: __fc_heap_status);
-    
-    behavior no_allocation:
-      assumes cannot_allocate: ¬is_allocable(size);
-      ensures null_result: \result ≡ \null;
-      assigns \result;
-      assigns \result \from \nothing;
-      allocates \nothing;
-    
-    complete behaviors no_allocation, allocation;
-    disjoint behaviors no_allocation, allocation;
+/*@ requires name_valid_string: valid_read_nstring(name, len);
+    requires bounded_len: len ≤ 64;
+    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns __fc_hostname[0 .. len], \result;
+    assigns __fc_hostname[0 .. len]
+      \from *(name + (0 .. len - 1)), (indirect: len);
+    assigns \result \from (indirect: __fc_hostname[0 .. len]);
  */
-extern void *malloc(size_t size);
+extern int sethostname(char const *name, size_t len);
 
-/*@ requires freeable: p ≡ \null ∨ \freeable(p);
-    assigns __fc_heap_status;
-    assigns __fc_heap_status \from __fc_heap_status;
-    frees p;
-    
-    behavior deallocation:
-      assumes nonnull_p: p ≢ \null;
-      ensures freed: \allocable(\old(p));
-      assigns __fc_heap_status;
-      assigns __fc_heap_status \from __fc_heap_status;
-    
-    behavior no_deallocation:
-      assumes null_p: p ≡ \null;
-      assigns \nothing;
-      allocates \nothing;
-    
-    complete behaviors no_deallocation, deallocation;
-    disjoint behaviors no_deallocation, deallocation;
- */
-extern void free(void *p);
+/*@ assigns \result;
+    assigns \result \from (indirect: pid); */
+extern pid_t getpgid(pid_t pid);
 
-/*@ requires freeable: ptr ≡ \null ∨ \freeable(ptr);
-    assigns __fc_heap_status, \result;
-    assigns __fc_heap_status \from __fc_heap_status;
-    assigns \result \from size, ptr, __fc_heap_status;
-    frees ptr;
-    allocates \result;
-    
-    behavior allocation:
-      assumes can_allocate: is_allocable(size);
-      ensures allocation: \fresh{Old, Here}(\result,\old(size));
-      assigns \result;
-      assigns \result \from size, __fc_heap_status;
-      allocates \result;
-    
-    behavior deallocation:
-      assumes nonnull_ptr: ptr ≢ \null;
-      assumes can_allocate: is_allocable(size);
-      ensures freed: \allocable(\old(ptr));
-      ensures freeable: \result ≡ \null ∨ \freeable(\result);
-      frees ptr;
-    
-    behavior fail:
-      assumes cannot_allocate: ¬is_allocable(size);
-      ensures null_result: \result ≡ \null;
-      assigns \result;
-      assigns \result \from size, __fc_heap_status;
-      allocates \nothing;
-    
-    complete behaviors fail, deallocation, allocation;
-    disjoint behaviors allocation, fail;
-    disjoint behaviors deallocation, fail;
- */
-extern void *realloc(void *ptr, size_t size);
+/*@ assigns \result;
+    assigns \result \from \nothing; */
+extern pid_t getpgrp(void);
 
-/*@ ensures never_terminates: \false;
-    assigns \nothing; */
-extern  __attribute__((__noreturn__)) void abort(void);
+/*@ assigns \result;
+    assigns \result \from \nothing; */
+extern pid_t getpid(void);
 
 /*@ assigns \result;
     assigns \result \from \nothing; */
-extern int atexit(void (*func)(void));
+extern pid_t getppid(void);
 
 /*@ assigns \result;
     assigns \result \from \nothing; */
-extern int at_quick_exit(void (*func)(void));
+extern pid_t getsid(pid_t);
 
-/*@ ensures never_terminates: \false;
-    assigns \nothing; */
-extern  __attribute__((__noreturn__)) void exit(int status);
+/*@ assigns \result;
+    assigns \result \from \nothing; */
+extern uid_t getuid(void);
 
-/*@ ensures never_terminates: \false;
-    assigns \nothing; */
-extern  __attribute__((__noreturn__)) void _Exit(int status);
+/*@ ensures result_true_or_false: \result ≡ 0 ∨ \result ≡ 1;
+    assigns \result;
+    assigns \result \from (indirect: fd), (indirect: __fc_fds[fd]);
+ */
+extern int isatty(int fd);
 
-char *__fc_env[4096] __attribute__((__FRAMA_C_MODEL__));
-char *getenv(char const *name);
+/*@ requires valid_fd: 0 ≤ fd < 1024;
+    requires valid_whence: whence ≡ 0 ∨ whence ≡ 1 ∨ whence ≡ 2;
+    ensures result_error_or_offset: \result ≡ -1 ∨ 0 ≤ \result;
+    assigns \result, __fc_fds[fd];
+    assigns \result
+      \from (indirect: fd), (indirect: __fc_fds[fd]), (indirect: offset),
+            (indirect: whence);
+    assigns __fc_fds[fd]
+      \from (indirect: fd), __fc_fds[fd], (indirect: offset),
+            (indirect: whence);
+ */
+extern off_t lseek(int fd, off_t offset, int whence);
 
-int putenv(char *string);
+/*@ requires valid_path: valid_read_string(path);
+    assigns \result;
+    assigns \result \from (indirect: *(path + (0 ..))), (indirect: name);
+ */
+extern long pathconf(char const *path, int name);
 
-int setenv(char const *name, char const *value, int overwrite);
+/*@ ensures initialization: pipefd: \initialized(\old(pipefd) + (0 .. 1));
+    ensures valid_fd0: 0 ≤ *(\old(pipefd) + 0) < 1024;
+    ensures valid_fd1: 0 ≤ *(\old(pipefd) + 1) < 1024;
+    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns *(pipefd + (0 .. 1)), \result;
+    assigns *(pipefd + (0 .. 1)) \from (indirect: __fc_fds[0 ..]);
+    assigns \result \from (indirect: __fc_fds[0 ..]);
+ */
+extern int pipe(int * /*[2]*/ pipefd);
 
-int unsetenv(char const *name);
+/*@ requires valid_fd: 0 ≤ fd < 1024;
+    requires buf_has_room: \valid((char *)buf + (0 .. count - 1));
+    ensures
+      result_error_or_read_length:
+        (0 ≤ \result ≤ \old(count)) ∨ \result ≡ -1;
+    ensures
+      initialization: buf:
+        \initialized((char *)\old(buf) + (0 .. \result - 1));
+    assigns __fc_fds[fd], \result, *((char *)buf + (0 .. count - 1));
+    assigns __fc_fds[fd] \from __fc_fds[fd];
+    assigns \result \from (indirect: __fc_fds[fd]), (indirect: count);
+    assigns *((char *)buf + (0 .. count - 1))
+      \from (indirect: __fc_fds[fd]), (indirect: count);
+ */
+extern ssize_t read(int fd, void *buf, size_t count);
 
-/*@ ensures never_terminates: \false;
-    assigns \nothing; */
-extern  __attribute__((__noreturn__)) void quick_exit(int status);
+/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns \result;
+    assigns \result \from (indirect: gid);
+ */
+extern int setegid(gid_t gid);
 
-/*@ requires
-      null_or_valid_string_command:
-        command ≡ \null ∨ valid_read_string(command);
+/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
     assigns \result;
-    assigns \result
-      \from (indirect: command), (indirect: *(command + (0 ..)));
+    assigns \result \from (indirect: uid);
  */
-extern int system(char const *command);
+extern int seteuid(uid_t uid);
 
-/*@ requires valid_function_compar: \valid_function(compar);
-    ensures
-      null_or_correct_result:
-        \result ≡ \null ∨
-        \subset(\result,
-               (void *)((char *)\old(base) +
-                        (0 .. \old(size) * (\old(nmemb) - 1))));
+/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
     assigns \result;
-    assigns \result
-      \from (indirect: key), *((char *)key + (0 .. size - 1)), base,
-            *((char *)base + (0 .. size * (nmemb - 1))), (indirect: nmemb),
-            (indirect: size), (indirect: *compar);
+    assigns \result \from (indirect: gid);
  */
-extern void *bsearch(void const *key, void const *base, size_t nmemb,
-                     size_t size, int (*compar)(void const *, void const *));
+extern int setgid(gid_t gid);
 
-/*@ requires valid_function_compar: \valid_function(compar);
-    assigns *((char *)base + (0 ..));
-    assigns *((char *)base + (0 ..))
-      \from (indirect: base), *((char *)base + (0 ..)), (indirect: nmemb),
-            (indirect: size), (indirect: compar), (indirect: *compar);
+/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns \result;
+    assigns \result \from (indirect: pid), (indirect: pgid);
  */
-extern void qsort(void *base, size_t nmemb, size_t size,
-                  int (*compar)(void const *, void const *));
+extern int setpgid(pid_t pid, pid_t pgid);
 
-int abs(int i);
+/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns \result;
+    assigns \result \from (indirect: rgid), (indirect: egid);
+ */
+extern int setregid(gid_t rgid, gid_t egid);
 
-/*@ requires abs_representable: j > -2147483647L - 1L;
+/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
     assigns \result;
-    assigns \result \from j;
-    
-    behavior negative:
-      assumes negative: j < 0;
-      ensures opposite_result: \result ≡ -\old(j);
-    
-    behavior nonnegative:
-      assumes nonnegative: j ≥ 0;
-      ensures same_result: \result ≡ \old(j);
-    
-    complete behaviors nonnegative, negative;
-    disjoint behaviors nonnegative, negative;
+    assigns \result \from (indirect: ruid), (indirect: euid);
  */
-extern long labs(long j);
+extern int setreuid(uid_t ruid, uid_t euid);
 
-/*@ requires abs_representable: j > -9223372036854775807LL - 1LL;
+/*@ ensures result_pgid_or_error: \result ≡ -1 ∨ \result ≥ 0;
     assigns \result;
-    assigns \result \from j;
-    
-    behavior negative:
-      assumes negative: j < 0;
-      ensures opposite_result: \result ≡ -\old(j);
-    
-    behavior nonnegative:
-      assumes nonnegative: j ≥ 0;
-      ensures same_result: \result ≡ \old(j);
-    
-    complete behaviors nonnegative, negative;
-    disjoint behaviors nonnegative, negative;
+    assigns \result \from \nothing;
  */
-extern long long llabs(long long j);
+extern pid_t setsid(void);
 
-/*@ assigns \result;
-    assigns \result \from numer, denom; */
-extern div_t div(int numer, int denom);
+/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns \result;
+    assigns \result \from (indirect: uid);
+ */
+extern int setuid(uid_t uid);
 
-/*@ assigns \result;
-    assigns \result \from numer, denom; */
-extern ldiv_t ldiv(long numer, long denom);
+/*@ assigns \nothing; */
+extern void sync(void);
 
 /*@ assigns \result;
-    assigns \result \from numer, denom; */
-extern lldiv_t lldiv(long long numer, long long denom);
+    assigns \result \from (indirect: name); */
+extern long sysconf(int name);
 
-/*@ ghost extern int __fc_mblen_state; */
+extern char volatile __fc_ttyname[32];
 
-/*@ assigns \result, __fc_mblen_state;
-    assigns \result
-      \from (indirect: s), (indirect: *(s + (0 ..))), (indirect: n),
-            __fc_mblen_state;
-    assigns __fc_mblen_state
-      \from (indirect: s), (indirect: *(s + (0 ..))), (indirect: n),
-            __fc_mblen_state;
+char volatile *__fc_p_ttyname = __fc_ttyname;
+/*@ ensures
+      result_name_or_null: \result ≡ __fc_p_ttyname ∨ \result ≡ \null;
+    assigns \result;
+    assigns \result \from __fc_p_ttyname, (indirect: fildes);
  */
-extern int mblen(char const *s, size_t n);
+extern char *ttyname(int fildes);
 
-/*@ ghost extern int __fc_mbtowc_state; */
+/*@ requires valid_string_path: valid_read_string(path);
+    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns \result;
+    assigns \result \from *(path + (0 ..));
+ */
+extern int unlink(char const *path);
 
-/*@ requires separation: \separated(pwc, s);
-    ensures consumed_range: \result ≤ \old(n);
-    assigns \result, *(pwc + (0 .. \result - 1)), __fc_mbtowc_state;
+/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns \result, Frama_C_entropy_source;
     assigns \result
-      \from (indirect: s), (indirect: *(s + (0 .. n - 1))), (indirect: n),
-            __fc_mbtowc_state;
-    assigns *(pwc + (0 .. \result - 1))
-      \from (indirect: s), *(s + (0 .. n - 1)), (indirect: n),
-            __fc_mbtowc_state;
-    assigns __fc_mbtowc_state
-      \from (indirect: s), *(s + (0 .. n - 1)), (indirect: n),
-            __fc_mbtowc_state;
+      \from (indirect: usec), (indirect: Frama_C_entropy_source);
+    assigns Frama_C_entropy_source \from Frama_C_entropy_source;
  */
-extern int mbtowc(wchar_t * __restrict pwc, char const * __restrict s,
-                  size_t n);
-
-/*@ ghost extern int __fc_wctomb_state; */
+extern int usleep(useconds_t usec);
 
-/*@ assigns \result, *(s + (0 ..)), __fc_wctomb_state;
-    assigns \result \from (indirect: wc), __fc_wctomb_state;
-    assigns *(s + (0 ..)) \from wc, __fc_wctomb_state;
-    assigns __fc_wctomb_state \from wc, __fc_wctomb_state;
+/*@ requires valid_fd: 0 ≤ fd < 1024;
+    requires buf_has_room: \valid_read((char *)buf + (0 .. count - 1));
+    ensures
+      result_error_or_written_bytes:
+        \result ≡ -1 ∨ (0 ≤ \result ≤ \old(count));
+    assigns __fc_fds[fd], \result;
+    assigns __fc_fds[fd]
+      \from (indirect: fd), (indirect: count), __fc_fds[fd];
+    assigns \result
+      \from (indirect: fd), (indirect: count), (indirect: __fc_fds[fd]);
  */
-extern int wctomb(char *s, wchar_t wc);
+extern ssize_t write(int fd, void const *buf, size_t count);
 
-/*@ requires separation: \separated(pwcs, s);
-    assigns \result, *(pwcs + (0 .. n - 1));
+/*@ requires valid_ruid: \valid(ruid);
+    requires valid_euid: \valid(suid);
+    requires valid_suid: \valid(euid);
+    ensures
+      initialization: result_ok_or_error:
+        (\result ≡ 0 ∧ \initialized(\old(ruid)) ∧
+         \initialized(\old(euid)) ∧ \initialized(\old(suid))) ∨
+        \result ≡ -1;
+    assigns *ruid, *euid, *suid, \result;
+    assigns *ruid \from \nothing;
+    assigns *euid \from \nothing;
+    assigns *suid \from \nothing;
     assigns \result
-      \from (indirect: s), (indirect: *(s + (0 .. n - 1))), (indirect: n);
-    assigns *(pwcs + (0 .. n - 1))
-      \from (indirect: s), *(s + (0 .. n - 1)), (indirect: n);
+      \from (indirect: ruid), (indirect: euid), (indirect: suid);
  */
-extern size_t mbstowcs(wchar_t * __restrict pwcs, char const * __restrict s,
-                       size_t n);
+int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid);
 
-/*@ requires separation: \separated(s, pwcs);
-    assigns \result, *(s + (0 .. n - 1));
+/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns \result;
     assigns \result
-      \from (indirect: pwcs), (indirect: *(pwcs + (0 .. n - 1))),
-            (indirect: n);
-    assigns *(s + (0 .. n - 1))
-      \from (indirect: pwcs), *(pwcs + (0 .. n - 1)), (indirect: n);
+      \from (indirect: ruid), (indirect: euid), (indirect: suid);
  */
-extern size_t wcstombs(char * __restrict s, wchar_t const * __restrict pwcs,
-                       size_t n);
-
-int posix_memalign(void **memptr, size_t alignment, size_t size);
+int setresuid(uid_t ruid, uid_t euid, uid_t suid);
 
-/*@ requires valid_template: valid_string(templat);
+/*@ requires valid_rgid: \valid(rgid);
+    requires valid_egid: \valid(sgid);
+    requires valid_sgid: \valid(egid);
     ensures
-      result_error_or_valid_fd: \result ≡ -1 ∨ (0 ≤ \result < 16);
-    assigns *(templat + (0 ..)), \result;
-    assigns *(templat + (0 ..)) \from \nothing;
-    assigns \result \from \nothing;
+      initialization: result_ok_or_error:
+        (\result ≡ 0 ∧ \initialized(\old(rgid)) ∧
+         \initialized(\old(egid)) ∧ \initialized(\old(sgid))) ∨
+        \result ≡ -1;
+    assigns *rgid, *egid, *sgid, \result;
+    assigns *rgid \from \nothing;
+    assigns *egid \from \nothing;
+    assigns *sgid \from \nothing;
+    assigns \result
+      \from (indirect: rgid), (indirect: egid), (indirect: sgid);
  */
-extern int mkstemp(char *templat);
+int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid);
 
-int glob(char const *pattern, int flags,
-         int (*errfunc)(char const *epath, int eerrno), glob_t *pglob)
-{
-  int __retres;
-  int tmp;
-  unsigned int tmp_0;
-  char **tmp_1;
-  int tmp_4;
-  tmp = Frama_C_interval(0,10);
-  pglob->gl_pathc = (unsigned int)tmp;
-  if (flags & (1 << 3)) tmp_0 = pglob->gl_offs; else tmp_0 = (unsigned int)0;
-  size_t reserve_offs = tmp_0;
-  size_t prev_len = (unsigned int)0;
-  if (flags & (1 << 5)) 
-    while (*(pglob->gl_pathv + (reserve_offs + prev_len))) prev_len += (size_t)1;
-  if (flags & (1 << 5)) tmp_1 = pglob->gl_pathv; else tmp_1 = (char **)0;
-  char **path = tmp_1;
-  if (pglob->gl_pathc == (unsigned int)0) 
-    if (flags & (1 << 4)) {
-      pglob->gl_pathv = (char **)realloc((void *)path,
-                                         ((reserve_offs + prev_len) + (size_t)2) * sizeof(char *));
-      if (! pglob->gl_pathv) {
-        __retres = 1;
-        goto return_label;
-      }
-      {
-        size_t i = (unsigned int)0;
-        while (i < reserve_offs) {
-          *(pglob->gl_pathv + i) = (char *)0;
-          i += (size_t)1;
-        }
-      }
-      *(pglob->gl_pathv + (reserve_offs + prev_len)) = (char *)pattern;
-      *(pglob->gl_pathv + ((reserve_offs + prev_len) + (size_t)1)) = (char *)0;
-      __retres = 0;
-      goto return_label;
-    }
-    else {
-      __retres = 3;
-      goto return_label;
-    }
-  pglob->gl_pathv = (char **)realloc((void *)path,
-                                     (((reserve_offs + prev_len) + pglob->gl_pathc) + (size_t)1) * sizeof(char *));
-  if (! pglob->gl_pathv) {
-    __retres = 1;
-    goto return_label;
-  }
-  {
-    size_t i_0 = (unsigned int)0;
-    while (i_0 < reserve_offs) {
-      *(pglob->gl_pathv + i_0) = (char *)0;
-      i_0 += (size_t)1;
-    }
-  }
-  {
-    size_t i_1 = (unsigned int)0;
-    while (i_1 < pglob->gl_pathc) {
-      *(pglob->gl_pathv + ((reserve_offs + prev_len) + i_1)) = (char *)"glob result";
-      i_1 += (size_t)1;
-    }
-  }
-  *(pglob->gl_pathv + ((prev_len + reserve_offs) + pglob->gl_pathc)) = (char *)0;
-  tmp_4 = Frama_C_nondet(0,1);
-  if (tmp_4) {
-    __retres = 0;
-    goto return_label;
-  }
-  else {
-    if (errfunc) {
-      int tmp_3;
-      int tmp_2;
-      tmp_2 = Frama_C_interval(0,255);
-      tmp_3 = (*errfunc)("glob.c error path",tmp_2);
-      int res = tmp_3;
-      if (res) {
-        __retres = 2;
-        goto return_label;
-      }
-      else 
-        if (flags & (1 << 0)) {
-          __retres = 2;
-          goto return_label;
-        }
-    }
-    __retres = 0;
-    goto return_label;
-  }
-  return_label: return __retres;
-}
+/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns \result;
+    assigns \result
+      \from (indirect: rgid), (indirect: egid), (indirect: sgid);
+ */
+int setresgid(gid_t rgid, gid_t egid, gid_t sgid);
 
-void globfree(glob_t *pglob)
-{
-  if (pglob->gl_pathc > (unsigned int)0) free((void *)pglob->gl_pathv);
-  return;
-}
+extern char *optarg;
 
-intmax_t imaxabs(intmax_t c);
+int optind;
 
-imaxdiv_t imaxdiv(intmax_t numer, intmax_t denom);
+extern int opterr;
 
-/*@ assigns \result, *(endptr + (..)), __fc_errno;
-    assigns \result \from *(nptr + (..)), base;
-    assigns *(endptr + (..)) \from *(nptr + (..)), base;
-    assigns __fc_errno \from *(nptr + (..)), base;
- */
-extern intmax_t strtoimax(char const * __restrict nptr,
-                          char ** __restrict endptr, int base);
+extern int optopt;
 
-/*@ requires abs_representable: (long long)(-c) ≢ c;
-    assigns \result;
-    assigns \result \from c;
+/*@ assigns \result, *optarg, optind, opterr, optopt;
+    assigns \result
+      \from argc, *(argv + (0 .. argc - 1)), *(optstring + (0 ..));
+    assigns *optarg
+      \from argc, *(argv + (0 .. argc - 1)), *(optstring + (0 ..));
+    assigns optind
+      \from argc, *(argv + (0 .. argc - 1)), *(optstring + (0 ..));
+    assigns opterr
+      \from argc, *(argv + (0 .. argc - 1)), *(optstring + (0 ..));
+    assigns optopt
+      \from argc, *(argv + (0 .. argc - 1)), *(optstring + (0 ..));
  */
-intmax_t imaxabs(intmax_t c)
-{
-  intmax_t __retres;
-  if (c > (intmax_t)0) {
-    __retres = c;
-    goto return_label;
-  }
-  else {
-    __retres = - c;
-    goto return_label;
-  }
-  return_label: return __retres;
-}
+extern int getopt(int argc, char * const *argv, char const *optstring);
 
-/*@ requires no_div_by_zero: denom ≢ 0;
-    requires no_overflow: denom ≢ -1 ∨ (long long)(-numer) ≢ numer;
-    ensures correct_div: \result.quot ≡ \old(numer) / \old(denom);
-    ensures correct_mod: \result.rem ≡ \old(numer) % \old(denom);
-    assigns \result;
-    assigns \result \from numer, denom;
+/*@ assigns \result, *optarg, optind, opterr, optopt,
+            *((longopts + (0 ..))->flag);
+    assigns \result
+      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
+            *(longopts + (0 ..));
+    assigns *optarg
+      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
+            *(longopts + (0 ..));
+    assigns optind
+      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
+            *(longopts + (0 ..));
+    assigns opterr
+      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
+            *(longopts + (0 ..));
+    assigns optopt
+      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
+            *(longopts + (0 ..));
+    assigns *((longopts + (0 ..))->flag)
+      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
+            *(longopts + (0 ..));
  */
-imaxdiv_t imaxdiv(intmax_t numer, intmax_t denom)
-{
-  imaxdiv_t r;
-  r.quot = numer / denom;
-  r.rem = numer % denom;
-  return r;
-}
+extern int getopt_long(int argc, char * const *argv, char const *shortopts,
+                       struct option const *longopts, int *longind);
 
-struct lconv *__frama_c_locale;
+/*@ assigns \result, *optarg, optind, opterr, optopt,
+            *((longopts + (0 ..))->flag);
+    assigns \result
+      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
+            *(longopts + (0 ..));
+    assigns *optarg
+      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
+            *(longopts + (0 ..));
+    assigns optind
+      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
+            *(longopts + (0 ..));
+    assigns opterr
+      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
+            *(longopts + (0 ..));
+    assigns optopt
+      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
+            *(longopts + (0 ..));
+    assigns *((longopts + (0 ..))->flag)
+      \from argc, *(argv + (0 .. argc - 1)), *(shortopts + (0 ..)),
+            *(longopts + (0 ..));
+ */
+extern int getopt_long_only(int argc, char * const *argv,
+                            char const *shortopts,
+                            struct option const *longopts, int *longind);
 
-char *__frama_c_locale_names[512];
+int optind = 1;
+int glob(char const *pattern, int flags,
+         int (*errfunc)(char const *epath, int eerrno), glob_t *pglob);
 
-char *setlocale(int category, char const *locale);
+void globfree(glob_t *pglob);
 
-struct lconv *localeconv(void);
+/*@ ghost extern int __fc_heap_status __attribute__((__FRAMA_C_MODEL__)); */
 
-struct lconv __C_locale =
-  {.decimal_point = (char *)".",
-   .thousands_sep = (char *)"",
-   .grouping = (char *)"",
-   .int_curr_symbol = (char *)"",
-   .currency_symbol = (char *)"",
-   .mon_decimal_point = (char *)"",
-   .mon_thousands_sep = (char *)"",
-   .mon_grouping = (char *)"",
-   .positive_sign = (char *)"",
-   .negative_sign = (char *)"",
-   .int_frac_digits = (char)127,
-   .frac_digits = (char)127,
-   .p_cs_precedes = (char)127,
-   .p_sep_by_space = (char)127,
-   .n_cs_precedes = (char)127,
-   .n_sep_by_space = (char)127,
-   .p_sign_posn = (char)127,
-   .n_sign_posn = (char)127,
-   .int_p_cs_precedes = (char)127,
-   .int_p_sep_by_space = (char)127,
-   .int_n_cs_precedes = (char)127,
-   .int_n_sep_by_space = (char)127,
-   .int_p_sign_posn = (char)127,
-   .int_n_sign_posn = (char)127};
-struct lconv *__frama_c_locale = & __C_locale;
-char *__frama_c_locale_names[512] = {(char *)"C"};
-/*@ requires
-      locale_null_or_valid_string:
-        locale ≡ \null ∨ valid_read_string(locale);
-    ensures
-      result_null_or_locale_name:
-        \result ≡ \null ∨
-        (\valid(\result) ∧
-         (∃ ℤ i; \result ≡ __frama_c_locale_names[i]));
-    assigns __frama_c_locale, \result;
-    assigns __frama_c_locale \from category, *(locale + (..));
-    assigns \result \from __frama_c_locale, category, *(locale + (..));
- */
-char *setlocale(int category, char const *locale)
-{
-  char *__retres;
-  if ((int)*locale == 'C') {
-    __frama_c_locale = & __C_locale;
-    __retres = __frama_c_locale_names[0];
-    goto return_label;
+/*@
+axiomatic dynamic_allocation {
+  predicate is_allocable{L}(ℤ n) 
+    reads __fc_heap_status;
+  
+  axiom never_allocable{L}:
+    ∀ ℤ i; i < 0 ∨ i > 4294967295U ⇒ ¬is_allocable(i);
+  
   }
-  __retres = (char *)0;
-  return_label: return __retres;
-}
 
-/*@ ensures result_current_locale: \result ≡ __frama_c_locale;
-    assigns \nothing;
+*/
+/*@ requires valid_nptr: \valid_read(nptr);
+    assigns \result;
+    assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
  */
-struct lconv *localeconv(void)
-{
-  return __frama_c_locale;
-}
+extern double atof(char const *nptr);
 
-/*@ assigns \result;
-    assigns \result \from x;
+int atoi(char const *p);
+
+/*@ requires valid_nptr: \valid_read(nptr);
+    assigns \result;
+    assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+ */
+extern long atol(char const *nptr);
+
+/*@ requires valid_nptr: \valid_read(nptr);
+    assigns \result;
+    assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+ */
+extern long long atoll(char const *nptr);
+
+/*@ requires valid_nptr: \valid_read(nptr);
+    requires separation: \separated(nptr, endptr);
+    assigns \result, *endptr;
+    assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+    assigns *endptr
+      \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr);
     
-    behavior nan:
-      assumes is_nan: \is_NaN(x);
-      ensures fp_nan: \result ≡ 0;
+    behavior no_storage:
+      assumes null_endptr: endptr ≡ \null;
+      assigns \result;
+      assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
     
-    behavior inf:
-      assumes is_infinite: ¬\is_NaN(x) ∧ ¬\is_finite(x);
-      ensures fp_infinite: \result ≡ 1;
+    behavior store_position:
+      assumes nonnull_endptr: endptr ≢ \null;
+      requires valid_endptr: \valid(endptr);
+      ensures initialization: \initialized(\old(endptr));
+      ensures valid_endptr: \valid_read(\old(endptr));
+      ensures position_subset: \subset(*\old(endptr), \old(nptr) + (0 ..));
+      assigns \result, *endptr;
+      assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+      assigns *endptr
+        \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr);
     
-    behavior zero:
-      assumes is_a_zero: x ≡ 0.0;
-      ensures fp_zero: \result ≡ 2;
+    complete behaviors store_position, no_storage;
+    disjoint behaviors store_position, no_storage;
+ */
+extern double strtod(char const * __restrict nptr, char ** __restrict endptr);
+
+/*@ requires valid_nptr: \valid_read(nptr);
+    requires separation: \separated(nptr, endptr);
+    assigns \result, *endptr;
+    assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+    assigns *endptr
+      \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr);
     
-    behavior subnormal:
-      assumes is_finite: \is_finite(x);
-      assumes
-        is_subnormal:
-          (x > 0.0 ∧ x < 0x1p-126) ∨ (x < 0.0 ∧ x > -0x1p-126);
-      ensures fp_subnormal: \result ≡ 3;
+    behavior no_storage:
+      assumes null_endptr: endptr ≡ \null;
+      assigns \result;
+      assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
     
-    behavior normal:
-      assumes is_finite: \is_finite(x);
-      assumes not_subnormal: x ≤ -0x1p-126 ∨ x ≥ 0x1p-126;
-      ensures fp_normal: \result ≡ 4;
+    behavior store_position:
+      assumes nonnull_endptr: endptr ≢ \null;
+      requires valid_endptr: \valid(endptr);
+      ensures initialization: \initialized(\old(endptr));
+      ensures valid_endptr: \valid_read(\old(endptr));
+      ensures position_subset: \subset(*\old(endptr), \old(nptr) + (0 ..));
+      assigns \result, *endptr;
+      assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+      assigns *endptr
+        \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr);
     
-    complete behaviors normal, subnormal, zero, inf, nan;
-    disjoint behaviors normal, subnormal, zero, inf, nan;
+    complete behaviors store_position, no_storage;
+    disjoint behaviors store_position, no_storage;
  */
-int __fc_fpclassifyf(float x);
+extern float strtof(char const * __restrict nptr, char ** __restrict endptr);
 
-/*@ assigns \result;
-    assigns \result \from x;
-    
-    behavior nan:
-      assumes is_nan: \is_NaN(x);
-      ensures fp_nan: \result ≡ 0;
+/*@ requires valid_nptr: \valid_read(nptr);
+    requires separation: \separated(nptr, endptr);
+    assigns \result, *endptr;
+    assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+    assigns *endptr
+      \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr);
     
-    behavior inf:
-      assumes is_infinite: ¬\is_NaN(x) ∧ ¬\is_finite(x);
-      ensures fp_infinite: \result ≡ 1;
-    
-    behavior zero:
-      assumes is_a_zero: x ≡ 0.0;
-      ensures fp_zero: \result ≡ 2;
-    
-    behavior subnormal:
-      assumes is_finite: \is_finite(x);
-      assumes
-        is_subnormal:
-          (x > 0.0 ∧ x < 0x1p-1022) ∨ (x < 0.0 ∧ x > -0x1p-1022);
-      ensures fp_subnormal: \result ≡ 3;
-    
-    behavior normal:
-      assumes is_finite: \is_finite(x);
-      assumes not_subnormal: x ≤ -0x1p-1022 ∨ x ≥ 0x1p-1022;
-      ensures fp_normal: \result ≡ 4;
-    
-    complete behaviors normal, subnormal, zero, inf, nan;
-    disjoint behaviors normal, subnormal, zero, inf, nan;
- */
-int __fc_fpclassify(double x);
-
-/*@ assigns __fc_errno, \result;
-    assigns __fc_errno \from x;
-    assigns \result \from x;
-    
-    behavior normal:
-      assumes in_domain: \is_finite(x) ∧ \abs(x) ≤ 1;
-      ensures positive_result: \is_finite(\result) ∧ \result ≥ 0;
+    behavior no_storage:
+      assumes null_endptr: endptr ≡ \null;
       assigns \result;
-      assigns \result \from x;
+      assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
     
-    behavior domain_error:
-      assumes
-        out_of_domain: \is_infinite(x) ∨ (\is_finite(x) ∧ \abs(x) > 1);
-      ensures errno_set: __fc_errno ≡ 1;
-      assigns __fc_errno, \result;
-      assigns __fc_errno \from x;
-      assigns \result \from x;
+    behavior store_position:
+      assumes nonnull_endptr: endptr ≢ \null;
+      requires valid_endptr: \valid(endptr);
+      ensures initialization: \initialized(\old(endptr));
+      ensures valid_endptr: \valid_read(\old(endptr));
+      ensures position_subset: \subset(*\old(endptr), \old(nptr) + (0 ..));
+      assigns \result, *endptr;
+      assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+      assigns *endptr
+        \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr);
     
-    disjoint behaviors domain_error, normal;
+    complete behaviors store_position, no_storage;
+    disjoint behaviors store_position, no_storage;
  */
-extern double acos(double x);
+extern long double strtold(char const * __restrict nptr,
+                           char ** __restrict endptr);
 
-/*@ assigns __fc_errno, \result;
-    assigns __fc_errno \from x;
-    assigns \result \from x;
+/*@ requires valid_nptr: \valid_read(nptr);
+    requires separation: \separated(nptr, endptr);
+    requires base_range: base ≡ 0 ∨ (2 ≤ base ≤ 36);
+    assigns \result, *endptr;
+    assigns \result
+      \from (indirect: nptr), (indirect: *(nptr + (0 ..))), (indirect: base);
+    assigns *endptr
+      \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
+            (indirect: base);
     
-    behavior normal:
-      assumes in_domain: \is_finite(x) ∧ \abs(x) ≤ 1;
-      ensures positive_result: \is_finite(\result) ∧ \result ≥ 0;
+    behavior no_storage:
+      assumes null_endptr: endptr ≡ \null;
       assigns \result;
-      assigns \result \from x;
+      assigns \result
+        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
+              (indirect: base);
     
-    behavior domain_error:
-      assumes
-        out_of_domain: \is_infinite(x) ∨ (\is_finite(x) ∧ \abs(x) > 1);
-      ensures errno_set: __fc_errno ≡ 1;
-      assigns __fc_errno, \result;
-      assigns __fc_errno \from x;
-      assigns \result \from x;
+    behavior store_position:
+      assumes nonnull_endptr: endptr ≢ \null;
+      requires valid_endptr: \valid(endptr);
+      ensures initialization: \initialized(\old(endptr));
+      ensures valid_endptr: \valid_read(\old(endptr));
+      ensures position_subset: \subset(*\old(endptr), \old(nptr) + (0 ..));
+      assigns \result, *endptr;
+      assigns \result
+        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
+              (indirect: base);
+      assigns *endptr
+        \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
+              (indirect: base);
     
-    disjoint behaviors domain_error, normal;
+    complete behaviors store_position, no_storage;
+    disjoint behaviors store_position, no_storage;
  */
-extern float acosf(float x);
+extern long strtol(char const * __restrict nptr, char ** __restrict endptr,
+                   int base);
 
-/*@ assigns __fc_errno, \result;
-    assigns __fc_errno \from x;
-    assigns \result \from x;
+/*@ requires valid_nptr: \valid_read(nptr);
+    requires separation: \separated(nptr, endptr);
+    requires base_range: base ≡ 0 ∨ (2 ≤ base ≤ 36);
+    assigns \result, *endptr;
+    assigns \result
+      \from (indirect: nptr), (indirect: *(nptr + (0 ..))), (indirect: base);
+    assigns *endptr
+      \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
+            (indirect: base);
     
-    behavior normal:
-      assumes in_domain: \is_finite(x) ∧ \abs(x) ≤ 1;
-      ensures positive_result: \is_finite(\result) ∧ \result ≥ 0;
+    behavior no_storage:
+      assumes null_endptr: endptr ≡ \null;
       assigns \result;
-      assigns \result \from x;
+      assigns \result
+        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
+              (indirect: base);
     
-    behavior domain_error:
-      assumes
-        out_of_domain: \is_infinite(x) ∨ (\is_finite(x) ∧ \abs(x) > 1);
-      ensures errno_set: __fc_errno ≡ 1;
-      assigns __fc_errno, \result;
-      assigns __fc_errno \from x;
-      assigns \result \from x;
+    behavior store_position:
+      assumes nonnull_endptr: endptr ≢ \null;
+      requires valid_endptr: \valid(endptr);
+      ensures initialization: \initialized(\old(endptr));
+      ensures valid_endptr: \valid_read(\old(endptr));
+      ensures position_subset: \subset(*\old(endptr), \old(nptr) + (0 ..));
+      assigns \result, *endptr;
+      assigns \result
+        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
+              (indirect: base);
+      assigns *endptr
+        \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
+              (indirect: base);
     
-    disjoint behaviors domain_error, normal;
+    complete behaviors store_position, no_storage;
+    disjoint behaviors store_position, no_storage;
  */
-extern long double acosl(long double x);
+extern long long strtoll(char const * __restrict nptr,
+                         char ** __restrict endptr, int base);
 
-/*@ assigns __fc_errno, \result;
-    assigns __fc_errno \from x;
-    assigns \result \from x;
+/*@ requires valid_nptr: \valid_read(nptr);
+    requires separation: \separated(nptr, endptr);
+    requires base_range: base ≡ 0 ∨ (2 ≤ base ≤ 36);
+    assigns \result, *endptr;
+    assigns \result
+      \from (indirect: nptr), (indirect: *(nptr + (0 ..))), (indirect: base);
+    assigns *endptr
+      \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
+            (indirect: base);
     
-    behavior normal:
-      assumes in_domain: \is_finite(x) ∧ \abs(x) ≤ 1;
-      ensures finite_result: \is_finite(\result);
+    behavior no_storage:
+      assumes null_endptr: endptr ≡ \null;
       assigns \result;
-      assigns \result \from x;
+      assigns \result
+        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
+              (indirect: base);
     
-    behavior domain_error:
-      assumes
-        out_of_domain: \is_infinite(x) ∨ (\is_finite(x) ∧ \abs(x) > 1);
-      ensures errno_set: __fc_errno ≡ 1;
-      assigns __fc_errno, \result;
-      assigns __fc_errno \from x;
-      assigns \result \from x;
+    behavior store_position:
+      assumes nonnull_endptr: endptr ≢ \null;
+      requires valid_endptr: \valid(endptr);
+      ensures initialization: \initialized(\old(endptr));
+      ensures valid_endptr: \valid_read(\old(endptr));
+      ensures position_subset: \subset(*\old(endptr), \old(nptr) + (0 ..));
+      assigns \result, *endptr;
+      assigns \result
+        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
+              (indirect: base);
+      assigns *endptr
+        \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
+              (indirect: base);
     
-    disjoint behaviors domain_error, normal;
+    complete behaviors store_position, no_storage;
+    disjoint behaviors store_position, no_storage;
  */
-extern double asin(double x);
+extern unsigned long strtoul(char const * __restrict nptr,
+                             char ** __restrict endptr, int base);
 
-/*@ assigns __fc_errno, \result;
-    assigns __fc_errno \from x;
-    assigns \result \from x;
+/*@ requires valid_nptr: \valid_read(nptr);
+    requires separation: \separated(nptr, endptr);
+    requires base_range: base ≡ 0 ∨ (2 ≤ base ≤ 36);
+    assigns \result, *endptr;
+    assigns \result
+      \from (indirect: nptr), (indirect: *(nptr + (0 ..))), (indirect: base);
+    assigns *endptr
+      \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
+            (indirect: base);
     
-    behavior normal:
-      assumes in_domain: \is_finite(x) ∧ \abs(x) ≤ 1;
-      ensures finite_result: \is_finite(\result);
+    behavior no_storage:
+      assumes null_endptr: endptr ≡ \null;
       assigns \result;
-      assigns \result \from x;
+      assigns \result
+        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
+              (indirect: base);
     
-    behavior domain_error:
-      assumes
-        out_of_domain: \is_infinite(x) ∨ (\is_finite(x) ∧ \abs(x) > 1);
-      ensures errno_set: __fc_errno ≡ 1;
-      assigns __fc_errno, \result;
-      assigns __fc_errno \from x;
-      assigns \result \from x;
+    behavior store_position:
+      assumes nonnull_endptr: endptr ≢ \null;
+      requires valid_endptr: \valid(endptr);
+      ensures initialization: \initialized(\old(endptr));
+      ensures valid_endptr: \valid_read(\old(endptr));
+      ensures position_subset: \subset(*\old(endptr), \old(nptr) + (0 ..));
+      assigns \result, *endptr;
+      assigns \result
+        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
+              (indirect: base);
+      assigns *endptr
+        \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
+              (indirect: base);
     
-    disjoint behaviors domain_error, normal;
+    complete behaviors store_position, no_storage;
+    disjoint behaviors store_position, no_storage;
  */
-extern float asinf(float x);
+extern unsigned long long strtoull(char const * __restrict nptr,
+                                   char ** __restrict endptr, int base);
 
-/*@ assigns __fc_errno, \result;
-    assigns __fc_errno \from x;
-    assigns \result \from x;
-    
-    behavior normal:
-      assumes in_domain: \is_finite(x) ∧ \abs(x) ≤ 1;
-      ensures finite_result: \is_finite(\result);
-      assigns \result;
-      assigns \result \from x;
-    
-    behavior domain_error:
-      assumes
-        out_of_domain: \is_infinite(x) ∨ (\is_finite(x) ∧ \abs(x) > 1);
-      ensures errno_set: __fc_errno ≡ 1;
-      assigns __fc_errno, \result;
-      assigns __fc_errno \from x;
-      assigns \result \from x;
-    
-    disjoint behaviors domain_error, normal;
- */
-extern long double asinl(long double x);
+/*@ ghost
+extern int __fc_random_counter __attribute__((__unused__, __FRAMA_C_MODEL__));
+*/
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures finite_result: \is_finite(\result);
-    ensures result_domain: -1.571 ≤ \result ≤ 1.571;
-    assigns \result;
-    assigns \result \from x;
+unsigned long const __fc_rand_max = (unsigned long)32767;
+/*@ ensures result_range: 0 ≤ \result ≤ __fc_rand_max;
+    assigns \result, __fc_random_counter;
+    assigns \result \from __fc_random_counter;
+    assigns __fc_random_counter \from __fc_random_counter;
  */
-extern float atanf(float x);
+extern int rand(void);
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures finite_result: \is_finite(\result);
-    ensures result_domain: -1.571 ≤ \result ≤ 1.571;
+/*@ assigns __fc_random_counter;
+    assigns __fc_random_counter \from seed; */
+extern void srand(unsigned int seed);
+
+/*@ ensures result_range: 0 ≤ \result ≤ __fc_rand_max;
     assigns \result;
-    assigns \result \from x;
+    assigns \result \from __fc_random_counter;
  */
-extern double atan(double x);
+extern long random(void);
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures finite_result: \is_finite(\result);
-    ensures result_domain: -1.571 ≤ \result ≤ 1.571;
-    assigns \result;
-    assigns \result \from x;
+/*@ assigns __fc_random_counter;
+    assigns __fc_random_counter \from seed; */
+extern void srandom(unsigned int seed);
+
+int __fc_random48_init __attribute__((__FRAMA_C_MODEL__));
+unsigned short __fc_random48_counter[3] __attribute__((__FRAMA_C_MODEL__));
+unsigned short *__fc_p_random48_counter = __fc_random48_counter;
+/*@ ensures random48_initialized: __fc_random48_init ≡ 1;
+    assigns __fc_random48_counter[0 .. 2], __fc_random48_init;
+    assigns __fc_random48_counter[0 .. 2] \from seed;
+    assigns __fc_random48_init \from \nothing;
  */
-extern long double atanl(long double x);
+extern void srand48(long seed);
 
-/*@ requires finite_args: \is_finite(x) ∧ \is_finite(y);
-    requires finite_result: \is_finite(atan2(x, y));
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x, y;
+/*@ requires
+      initialization: initialized_seed16v: \initialized(seed16v + (0 .. 2));
+    ensures random48_initialized: __fc_random48_init ≡ 1;
+    ensures result_counter: \result ≡ __fc_p_random48_counter;
+    assigns __fc_random48_counter[0 .. 2], __fc_random48_init, \result;
+    assigns __fc_random48_counter[0 .. 2]
+      \from (indirect: *(seed16v + (0 .. 2)));
+    assigns __fc_random48_init \from \nothing;
+    assigns \result \from __fc_p_random48_counter;
  */
-extern double atan2(double y, double x);
+extern unsigned short *seed48(unsigned short * /*[3]*/ seed16v);
 
-/*@ requires finite_args: \is_finite(x) ∧ \is_finite(y);
-    requires finite_logic_result: \is_finite(atan2f(x, y));
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x, y;
+/*@ ensures random48_initialized: __fc_random48_init ≡ 1;
+    assigns __fc_random48_counter[0 .. 2], __fc_random48_init;
+    assigns __fc_random48_counter[0 .. 2] \from *(param + (0 .. 5));
+    assigns __fc_random48_init \from \nothing;
  */
-extern float atan2f(float y, float x);
+extern void lcong48(unsigned short * /*[7]*/ param);
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures finite_result: \is_finite(\result);
-    ensures result_domain: -1. ≤ \result ≤ 1.;
-    assigns \result;
-    assigns \result \from x;
+/*@ requires random48_initialized: __fc_random48_init ≡ 1;
+    ensures result_range: \is_finite(\result) ∧ 0.0 ≤ \result < 1.0;
+    assigns __fc_random48_counter[0 .. 2], \result;
+    assigns __fc_random48_counter[0 .. 2]
+      \from __fc_random48_counter[0 .. 2];
+    assigns \result \from __fc_random48_counter[0 .. 2];
  */
-extern double cos(double x);
+extern double drand48(void);
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures finite_result: \is_finite(\result);
-    ensures result_domain: -1. ≤ \result ≤ 1.;
-    assigns \result;
-    assigns \result \from x;
+/*@ requires
+      initialization: initialized_xsubi: \initialized(xsubi + (0 .. 2));
+    ensures result_range: \is_finite(\result) ∧ 0.0 ≤ \result < 1.0;
+    assigns __fc_random48_counter[0 .. 2], \result;
+    assigns __fc_random48_counter[0 .. 2]
+      \from __fc_random48_counter[0 .. 2];
+    assigns \result \from __fc_random48_counter[0 .. 2];
  */
-extern float cosf(float x);
+extern double erand48(unsigned short * /*[3]*/ xsubi);
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures finite_result: \is_finite(\result);
-    ensures result_domain: -1. ≤ \result ≤ 1.;
-    assigns \result;
-    assigns \result \from x;
+/*@ requires random48_initialized: __fc_random48_init ≡ 1;
+    ensures result_range: 0 ≤ \result < 2147483648;
+    assigns __fc_random48_counter[0 .. 2], \result;
+    assigns __fc_random48_counter[0 .. 2]
+      \from __fc_random48_counter[0 .. 2];
+    assigns \result \from __fc_random48_counter[0 .. 2];
  */
-extern long double cosl(long double x);
+extern long lrand48(void);
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures finite_result: \is_finite(\result);
-    ensures result_domain: -1. ≤ \result ≤ 1.;
-    assigns \result;
-    assigns \result \from x;
+/*@ requires
+      initialization: initialized_xsubi: \initialized(xsubi + (0 .. 2));
+    ensures result_range: 0 ≤ \result < 2147483648;
+    assigns __fc_random48_counter[0 .. 2], \result;
+    assigns __fc_random48_counter[0 .. 2]
+      \from __fc_random48_counter[0 .. 2];
+    assigns \result \from __fc_random48_counter[0 .. 2];
  */
-extern double sin(double x);
+extern long nrand48(unsigned short * /*[3]*/ xsubi);
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures finite_result: \is_finite(\result);
-    ensures result_domain: -1. ≤ \result ≤ 1.;
-    assigns \result;
-    assigns \result \from x;
+/*@ requires random48_initialized: __fc_random48_init ≡ 1;
+    ensures result_range: -2147483648 ≤ \result < 2147483648;
+    assigns __fc_random48_counter[0 .. 2], \result;
+    assigns __fc_random48_counter[0 .. 2]
+      \from __fc_random48_counter[0 .. 2];
+    assigns \result \from __fc_random48_counter[0 .. 2];
  */
-extern float sinf(float x);
+extern long mrand48(void);
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures finite_result: \is_finite(\result);
-    ensures result_domain: -1. ≤ \result ≤ 1.;
-    assigns \result;
-    assigns \result \from x;
+/*@ requires
+      initialization: initialized_xsubi: \initialized(xsubi + (0 .. 2));
+    ensures result_range: -2147483648 ≤ \result < 2147483648;
+    assigns __fc_random48_counter[0 .. 2], \result;
+    assigns __fc_random48_counter[0 .. 2]
+      \from __fc_random48_counter[0 .. 2];
+    assigns \result \from __fc_random48_counter[0 .. 2];
  */
-extern long double sinl(long double x);
+extern long jrand48(unsigned short * /*[3]*/ xsubi);
 
-/*@ assigns __fc_errno, \result;
-    assigns __fc_errno \from x;
-    assigns \result \from x;
+void *calloc(size_t nmemb, size_t size);
+
+/*@ assigns __fc_heap_status, \result;
+    assigns __fc_heap_status \from size, __fc_heap_status;
+    assigns \result \from (indirect: size), (indirect: __fc_heap_status);
+    allocates \result;
     
-    behavior normal:
-      assumes in_domain: \is_finite(x) ∧ x ≥ 1;
-      ensures positive_result: \is_finite(\result) ∧ \result ≥ 0;
-      assigns \result;
-      assigns \result \from x;
+    behavior allocation:
+      assumes can_allocate: is_allocable(size);
+      ensures allocation: \fresh{Old, Here}(\result,\old(size));
+      assigns __fc_heap_status, \result;
+      assigns __fc_heap_status \from size, __fc_heap_status;
+      assigns \result \from (indirect: size), (indirect: __fc_heap_status);
     
-    behavior infinite:
-      assumes is_plus_infinity: \is_plus_infinity(x);
-      ensures result_plus_infinity: \is_plus_infinity(\result);
+    behavior no_allocation:
+      assumes cannot_allocate: ¬is_allocable(size);
+      ensures null_result: \result ≡ \null;
       assigns \result;
-      assigns \result \from x;
-    
-    behavior domain_error:
-      assumes
-        out_of_domain: \is_minus_infinity(x) ∨ (\is_finite(x) ∧ x < 1);
-      ensures errno_set: __fc_errno ≡ 1;
-      assigns __fc_errno, \result;
-      assigns __fc_errno \from x;
-      assigns \result \from x;
+      assigns \result \from \nothing;
+      allocates \nothing;
     
-    disjoint behaviors domain_error, infinite, normal;
+    complete behaviors no_allocation, allocation;
+    disjoint behaviors no_allocation, allocation;
  */
-extern double acosh(double x);
+extern void *malloc(size_t size);
 
-/*@ assigns __fc_errno, \result;
-    assigns __fc_errno \from x;
-    assigns \result \from x;
-    
-    behavior normal:
-      assumes in_domain: \is_finite(x) ∧ x ≥ 1;
-      ensures positive_result: \is_finite(\result) ∧ \result ≥ 0;
-      assigns \result;
-      assigns \result \from x;
+/*@ requires freeable: p ≡ \null ∨ \freeable(p);
+    assigns __fc_heap_status;
+    assigns __fc_heap_status \from __fc_heap_status;
+    frees p;
     
-    behavior infinite:
-      assumes is_plus_infinity: \is_plus_infinity(x);
-      ensures result_plus_infinity: \is_plus_infinity(\result);
-      assigns \result;
-      assigns \result \from x;
+    behavior deallocation:
+      assumes nonnull_p: p ≢ \null;
+      ensures freed: \allocable(\old(p));
+      assigns __fc_heap_status;
+      assigns __fc_heap_status \from __fc_heap_status;
     
-    behavior domain_error:
-      assumes
-        out_of_domain: \is_minus_infinity(x) ∨ (\is_finite(x) ∧ x < 1);
-      ensures errno_set: __fc_errno ≡ 1;
-      assigns __fc_errno, \result;
-      assigns __fc_errno \from x;
-      assigns \result \from x;
+    behavior no_deallocation:
+      assumes null_p: p ≡ \null;
+      assigns \nothing;
+      allocates \nothing;
     
-    disjoint behaviors domain_error, infinite, normal;
+    complete behaviors no_deallocation, deallocation;
+    disjoint behaviors no_deallocation, deallocation;
  */
-extern float acoshf(float x);
+extern void free(void *p);
 
-/*@ assigns __fc_errno, \result;
-    assigns __fc_errno \from x;
-    assigns \result \from x;
+/*@ requires freeable: ptr ≡ \null ∨ \freeable(ptr);
+    assigns __fc_heap_status, \result;
+    assigns __fc_heap_status \from __fc_heap_status;
+    assigns \result \from size, ptr, __fc_heap_status;
+    frees ptr;
+    allocates \result;
     
-    behavior normal:
-      assumes in_domain: \is_finite(x) ∧ x ≥ 1;
-      ensures positive_result: \is_finite(\result) ∧ \result ≥ 0;
+    behavior allocation:
+      assumes can_allocate: is_allocable(size);
+      ensures allocation: \fresh{Old, Here}(\result,\old(size));
       assigns \result;
-      assigns \result \from x;
+      assigns \result \from size, __fc_heap_status;
+      allocates \result;
     
-    behavior infinite:
-      assumes is_plus_infinity: \is_plus_infinity(x);
-      ensures result_plus_infinity: \is_plus_infinity(\result);
-      assigns \result;
-      assigns \result \from x;
+    behavior deallocation:
+      assumes nonnull_ptr: ptr ≢ \null;
+      assumes can_allocate: is_allocable(size);
+      ensures freed: \allocable(\old(ptr));
+      ensures freeable: \result ≡ \null ∨ \freeable(\result);
+      frees ptr;
     
-    behavior domain_error:
-      assumes
-        out_of_domain: \is_minus_infinity(x) ∨ (\is_finite(x) ∧ x < 1);
-      ensures errno_set: __fc_errno ≡ 1;
-      assigns __fc_errno, \result;
-      assigns __fc_errno \from x;
-      assigns \result \from x;
+    behavior fail:
+      assumes cannot_allocate: ¬is_allocable(size);
+      ensures null_result: \result ≡ \null;
+      assigns \result;
+      assigns \result \from size, __fc_heap_status;
+      allocates \nothing;
     
-    disjoint behaviors domain_error, infinite, normal;
+    complete behaviors fail, deallocation, allocation;
+    disjoint behaviors allocation, fail;
+    disjoint behaviors deallocation, fail;
  */
-extern long double acoshl(long double x);
+extern void *realloc(void *ptr, size_t size);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires finite_domain: x ≤ 0x1.62e42fefa39efp+9;
-    ensures res_finite: \is_finite(\result);
-    ensures positive_result: \result > 0.;
-    assigns \result;
-    assigns \result \from x;
- */
-extern double exp(double x);
+/*@ ensures never_terminates: \false;
+    assigns \nothing; */
+extern  __attribute__((__noreturn__)) void abort(void);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires res_finite: x ≤ 0x1.62e42ep+6;
-    ensures res_finite: \is_finite(\result);
-    ensures positive_result: \result > 0.;
-    assigns \result;
-    assigns \result \from x;
- */
-extern float expf(float x);
+/*@ assigns \result;
+    assigns \result \from \nothing; */
+extern int atexit(void (*func)(void));
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_positive: x > 0;
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x;
- */
-extern double log(double x);
+/*@ assigns \result;
+    assigns \result \from \nothing; */
+extern int at_quick_exit(void (*func)(void));
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_positive: x > 0;
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x;
- */
-extern float logf(float x);
+/*@ ensures never_terminates: \false;
+    assigns \nothing; */
+extern  __attribute__((__noreturn__)) void exit(int status);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_pos: x > 0;
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x;
- */
-extern long double logl(long double x);
+/*@ ensures never_terminates: \false;
+    assigns \nothing; */
+extern  __attribute__((__noreturn__)) void _Exit(int status);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_positive: x > 0;
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x;
- */
-extern double log10(double x);
+char *__fc_env[4096] __attribute__((__FRAMA_C_MODEL__));
+char *getenv(char const *name);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_positive: x > 0;
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x;
- */
-extern float log10f(float x);
+int putenv(char *string);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_postive: x > 0;
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x;
- */
-extern long double log10l(long double x);
+int setenv(char const *name, char const *value, int overwrite);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_positive: x > 0;
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x;
- */
-extern double log2(double x);
+int unsetenv(char const *name);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_positive: x > 0;
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x;
- */
-extern float log2f(float x);
+/*@ ensures never_terminates: \false;
+    assigns \nothing; */
+extern  __attribute__((__noreturn__)) void quick_exit(int status);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_positive: x > 0;
-    ensures finite_result: \is_finite(\result);
+/*@ requires
+      null_or_valid_string_command:
+        command ≡ \null ∨ valid_read_string(command);
     assigns \result;
-    assigns \result \from x;
+    assigns \result
+      \from (indirect: command), (indirect: *(command + (0 ..)));
  */
-extern long double log2l(long double x);
-
-double fabs(double x);
-
-float fabsf(float x);
+extern int system(char const *command);
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures res_finite: \is_finite(\result);
-    ensures positive_result: \result ≥ 0.;
+/*@ requires valid_function_compar: \valid_function(compar);
     ensures
-      equal_magnitude_result: \result ≡ \old(x) ∨ \result ≡ -\old(x);
+      null_or_correct_result:
+        \result ≡ \null ∨
+        \subset(\result,
+               (void *)((char *)\old(base) +
+                        (0 .. \old(size) * (\old(nmemb) - 1))));
     assigns \result;
-    assigns \result \from x;
+    assigns \result
+      \from (indirect: key), *((char *)key + (0 .. size - 1)), base,
+            *((char *)base + (0 .. size * (nmemb - 1))), (indirect: nmemb),
+            (indirect: size), (indirect: *compar);
  */
-extern long double fabsl(long double x);
+extern void *bsearch(void const *key, void const *base, size_t nmemb,
+                     size_t size, int (*compar)(void const *, void const *));
 
-/*@ requires finite_args: \is_finite(x) ∧ \is_finite(y);
-    requires finite_logic_res: \is_finite(pow(x, y));
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x, y;
+/*@ requires valid_function_compar: \valid_function(compar);
+    assigns *((char *)base + (0 ..));
+    assigns *((char *)base + (0 ..))
+      \from (indirect: base), *((char *)base + (0 ..)), (indirect: nmemb),
+            (indirect: size), (indirect: compar), (indirect: *compar);
  */
-extern double pow(double x, double y);
+extern void qsort(void *base, size_t nmemb, size_t size,
+                  int (*compar)(void const *, void const *));
 
-/*@ requires finite_args: \is_finite(x) ∧ \is_finite(y);
-    requires finite_logic_res: \is_finite(powf(x, y));
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x, y;
- */
-extern float powf(float x, float y);
+int abs(int i);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_positive: x ≥ -0.;
-    ensures finite_result: \is_finite(\result);
-    ensures positive_result: \result ≥ -0.;
+/*@ requires abs_representable: j > -2147483647L - 1L;
     assigns \result;
-    assigns \result \from x;
+    assigns \result \from j;
+    
+    behavior negative:
+      assumes negative: j < 0;
+      ensures opposite_result: \result ≡ -\old(j);
+    
+    behavior nonnegative:
+      assumes nonnegative: j ≥ 0;
+      ensures same_result: \result ≡ \old(j);
+    
+    complete behaviors nonnegative, negative;
+    disjoint behaviors nonnegative, negative;
  */
-extern double sqrt(double x);
+extern long labs(long j);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_positive: x ≥ -0.;
-    ensures finite_result: \is_finite(\result);
-    ensures positive_result: \result ≥ -0.;
+/*@ requires abs_representable: j > -9223372036854775807LL - 1LL;
     assigns \result;
-    assigns \result \from x;
+    assigns \result \from j;
+    
+    behavior negative:
+      assumes negative: j < 0;
+      ensures opposite_result: \result ≡ -\old(j);
+    
+    behavior nonnegative:
+      assumes nonnegative: j ≥ 0;
+      ensures same_result: \result ≡ \old(j);
+    
+    complete behaviors nonnegative, negative;
+    disjoint behaviors nonnegative, negative;
  */
-extern float sqrtf(float x);
+extern long long llabs(long long j);
 
-/*@ requires finite_arg: \is_finite(x);
-    requires arg_positive: x ≥ -0.;
-    ensures finite_result: \is_finite(\result);
-    ensures positive_result: \result ≥ -0.;
-    assigns \result;
-    assigns \result \from x;
- */
-extern long double sqrtl(long double x);
+/*@ assigns \result;
+    assigns \result \from numer, denom; */
+extern div_t div(int numer, int denom);
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x;
- */
-extern double ceil(double x);
+/*@ assigns \result;
+    assigns \result \from numer, denom; */
+extern ldiv_t ldiv(long numer, long denom);
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x;
- */
-extern float ceilf(float x);
+/*@ assigns \result;
+    assigns \result \from numer, denom; */
+extern lldiv_t lldiv(long long numer, long long denom);
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x;
- */
-extern long double ceill(long double x);
+/*@ ghost extern int __fc_mblen_state; */
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x;
+/*@ assigns \result, __fc_mblen_state;
+    assigns \result
+      \from (indirect: s), (indirect: *(s + (0 ..))), (indirect: n),
+            __fc_mblen_state;
+    assigns __fc_mblen_state
+      \from (indirect: s), (indirect: *(s + (0 ..))), (indirect: n),
+            __fc_mblen_state;
  */
-extern double floor(double x);
+extern int mblen(char const *s, size_t n);
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x;
- */
-extern float floorf(float x);
+/*@ ghost extern int __fc_mbtowc_state; */
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x;
+/*@ requires separation: \separated(pwc, s);
+    ensures consumed_range: \result ≤ \old(n);
+    assigns \result, *(pwc + (0 .. \result - 1)), __fc_mbtowc_state;
+    assigns \result
+      \from (indirect: s), (indirect: *(s + (0 .. n - 1))), (indirect: n),
+            __fc_mbtowc_state;
+    assigns *(pwc + (0 .. \result - 1))
+      \from (indirect: s), *(s + (0 .. n - 1)), (indirect: n),
+            __fc_mbtowc_state;
+    assigns __fc_mbtowc_state
+      \from (indirect: s), *(s + (0 .. n - 1)), (indirect: n),
+            __fc_mbtowc_state;
  */
-extern long double floorl(long double x);
+extern int mbtowc(wchar_t * __restrict pwc, char const * __restrict s,
+                  size_t n);
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x;
- */
-extern double round(double x);
+/*@ ghost extern int __fc_wctomb_state; */
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x;
+/*@ assigns \result, *(s + (0 ..)), __fc_wctomb_state;
+    assigns \result \from (indirect: wc), __fc_wctomb_state;
+    assigns *(s + (0 ..)) \from wc, __fc_wctomb_state;
+    assigns __fc_wctomb_state \from wc, __fc_wctomb_state;
  */
-extern float roundf(float x);
+extern int wctomb(char *s, wchar_t wc);
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x;
+/*@ requires separation: \separated(pwcs, s);
+    assigns \result, *(pwcs + (0 .. n - 1));
+    assigns \result
+      \from (indirect: s), (indirect: *(s + (0 .. n - 1))), (indirect: n);
+    assigns *(pwcs + (0 .. n - 1))
+      \from (indirect: s), *(s + (0 .. n - 1)), (indirect: n);
  */
-extern long double roundl(long double x);
+extern size_t mbstowcs(wchar_t * __restrict pwcs, char const * __restrict s,
+                       size_t n);
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x;
+/*@ requires separation: \separated(s, pwcs);
+    assigns \result, *(s + (0 .. n - 1));
+    assigns \result
+      \from (indirect: pwcs), (indirect: *(pwcs + (0 .. n - 1))),
+            (indirect: n);
+    assigns *(s + (0 .. n - 1))
+      \from (indirect: pwcs), *(pwcs + (0 .. n - 1)), (indirect: n);
  */
-extern double trunc(double x);
+extern size_t wcstombs(char * __restrict s, wchar_t const * __restrict pwcs,
+                       size_t n);
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x;
- */
-extern float truncf(float x);
+int posix_memalign(void **memptr, size_t alignment, size_t size);
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x;
+/*@ requires valid_template: valid_string(templat);
+    ensures
+      result_error_or_valid_fd: \result ≡ -1 ∨ (0 ≤ \result < 16);
+    assigns *(templat + (0 ..)), \result;
+    assigns *(templat + (0 ..)) \from \nothing;
+    assigns \result \from \nothing;
  */
-extern long double truncl(long double x);
+extern int mkstemp(char *templat);
 
-/*@ requires finite_args: \is_finite(x) ∧ \is_finite(y);
-    requires finite_logic_result: \is_finite(fmod(x, y));
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x, y;
- */
-extern double fmod(double x, double y);
+int glob(char const *pattern, int flags,
+         int (*errfunc)(char const *epath, int eerrno), glob_t *pglob)
+{
+  int __retres;
+  int tmp;
+  unsigned int tmp_0;
+  char **tmp_1;
+  int tmp_4;
+  tmp = Frama_C_interval(0,10);
+  pglob->gl_pathc = (unsigned int)tmp;
+  if (flags & (1 << 3)) tmp_0 = pglob->gl_offs; else tmp_0 = (unsigned int)0;
+  size_t reserve_offs = tmp_0;
+  size_t prev_len = (unsigned int)0;
+  if (flags & (1 << 5)) 
+    while (*(pglob->gl_pathv + (reserve_offs + prev_len))) prev_len += (size_t)1;
+  if (flags & (1 << 5)) tmp_1 = pglob->gl_pathv; else tmp_1 = (char **)0;
+  char **path = tmp_1;
+  if (pglob->gl_pathc == (unsigned int)0) 
+    if (flags & (1 << 4)) {
+      pglob->gl_pathv = (char **)realloc((void *)path,
+                                         ((reserve_offs + prev_len) + (size_t)2) * sizeof(char *));
+      if (! pglob->gl_pathv) {
+        __retres = 1;
+        goto return_label;
+      }
+      {
+        size_t i = (unsigned int)0;
+        while (i < reserve_offs) {
+          *(pglob->gl_pathv + i) = (char *)0;
+          i += (size_t)1;
+        }
+      }
+      *(pglob->gl_pathv + (reserve_offs + prev_len)) = (char *)pattern;
+      *(pglob->gl_pathv + ((reserve_offs + prev_len) + (size_t)1)) = (char *)0;
+      __retres = 0;
+      goto return_label;
+    }
+    else {
+      __retres = 3;
+      goto return_label;
+    }
+  pglob->gl_pathv = (char **)realloc((void *)path,
+                                     (((reserve_offs + prev_len) + pglob->gl_pathc) + (size_t)1) * sizeof(char *));
+  if (! pglob->gl_pathv) {
+    __retres = 1;
+    goto return_label;
+  }
+  {
+    size_t i_0 = (unsigned int)0;
+    while (i_0 < reserve_offs) {
+      *(pglob->gl_pathv + i_0) = (char *)0;
+      i_0 += (size_t)1;
+    }
+  }
+  {
+    size_t i_1 = (unsigned int)0;
+    while (i_1 < pglob->gl_pathc) {
+      *(pglob->gl_pathv + ((reserve_offs + prev_len) + i_1)) = (char *)"glob result";
+      i_1 += (size_t)1;
+    }
+  }
+  *(pglob->gl_pathv + ((prev_len + reserve_offs) + pglob->gl_pathc)) = (char *)0;
+  tmp_4 = Frama_C_nondet(0,1);
+  if (tmp_4) {
+    __retres = 0;
+    goto return_label;
+  }
+  else {
+    if (errfunc) {
+      int tmp_3;
+      int tmp_2;
+      tmp_2 = Frama_C_interval(0,255);
+      tmp_3 = (*errfunc)("glob.c error path",tmp_2);
+      int res = tmp_3;
+      if (res) {
+        __retres = 2;
+        goto return_label;
+      }
+      else 
+        if (flags & (1 << 0)) {
+          __retres = 2;
+          goto return_label;
+        }
+    }
+    __retres = 0;
+    goto return_label;
+  }
+  return_label: return __retres;
+}
 
-/*@ requires finite_args: \is_finite(x) ∧ \is_finite(y);
-    requires finite_logic_result: \is_finite(fmodf(x, y));
-    ensures finite_result: \is_finite(\result);
-    assigns \result;
-    assigns \result \from x, y;
- */
-extern float fmodf(float x, float y);
+void globfree(glob_t *pglob)
+{
+  if (pglob->gl_pathc > (unsigned int)0) free((void *)pglob->gl_pathv);
+  return;
+}
 
-/*@ requires tagp_valid_string: valid_read_string(tagp);
-    ensures result_is_nan: \is_NaN(\result);
-    assigns \result;
-    assigns \result \from (indirect: *(tagp + (0 ..)));
- */
-extern double nan(char const *tagp);
+intmax_t imaxabs(intmax_t c);
 
-/*@ requires tagp_valid_string: valid_read_string(tagp);
-    ensures result_is_nan: \is_NaN(\result);
-    assigns \result;
-    assigns \result \from (indirect: *(tagp + (0 ..)));
- */
-extern float nanf(char const *tagp);
+imaxdiv_t imaxdiv(intmax_t numer, intmax_t denom);
 
-/*@ requires tagp_valid_string: valid_read_string(tagp);
-    ensures result_is_nan: \is_NaN(\result);
-    assigns \result;
-    assigns \result \from (indirect: *(tagp + (0 ..)));
+/*@ assigns \result, *(endptr + (..)), __fc_errno;
+    assigns \result \from *(nptr + (..)), base;
+    assigns *(endptr + (..)) \from *(nptr + (..)), base;
+    assigns __fc_errno \from *(nptr + (..)), base;
  */
-extern long double nanl(char const *tagp);
-
-int __finitef(float f);
-
-int __finite(double d);
+extern intmax_t strtoimax(char const * __restrict nptr,
+                          char ** __restrict endptr, int base);
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures res_finite: \is_finite(\result);
-    ensures positive_result: \result ≥ 0.;
-    ensures
-      equal_magnitude_result: \result ≡ \old(x) ∨ \result ≡ -\old(x);
+/*@ requires abs_representable: (long long)(-c) ≢ c;
     assigns \result;
-    assigns \result \from x;
+    assigns \result \from c;
  */
-double fabs(double x)
+intmax_t imaxabs(intmax_t c)
 {
-  double __retres;
-  if (x == 0.0) {
-    __retres = 0.0;
+  intmax_t __retres;
+  if (c > (intmax_t)0) {
+    __retres = c;
     goto return_label;
   }
-  if (x > 0.0) {
-    __retres = x;
+  else {
+    __retres = - c;
     goto return_label;
   }
-  __retres = - x;
   return_label: return __retres;
 }
 
-/*@ requires finite_arg: \is_finite(x);
-    ensures res_finite: \is_finite(\result);
-    ensures positive_result: \result ≥ 0.;
-    ensures
-      equal_magnitude_result: \result ≡ \old(x) ∨ \result ≡ -\old(x);
+/*@ requires no_div_by_zero: denom ≢ 0;
+    requires no_overflow: denom ≢ -1 ∨ (long long)(-numer) ≢ numer;
+    ensures correct_div: \result.quot ≡ \old(numer) / \old(denom);
+    ensures correct_mod: \result.rem ≡ \old(numer) % \old(denom);
     assigns \result;
-    assigns \result \from x;
+    assigns \result \from numer, denom;
  */
-float fabsf(float x)
+imaxdiv_t imaxdiv(intmax_t numer, intmax_t denom)
 {
-  float __retres;
-  if (x == 0.0f) {
-    __retres = 0.0f;
-    goto return_label;
-  }
-  else 
-    if (x > 0.0f) {
-      __retres = x;
-      goto return_label;
-    }
-    else {
-      __retres = - x;
-      goto return_label;
-    }
-  return_label: return __retres;
+  imaxdiv_t r;
+  r.quot = numer / denom;
+  r.rem = numer % denom;
+  return r;
 }
 
-int __finitef(float f)
-{
-  int __retres;
-  union __fc_u_finitef u;
-  unsigned short usExp;
-  u.f = f;
-  usExp = (unsigned short)((int)u.w[1] & 0x7F80);
-  usExp = (unsigned short)((int)usExp >> 7);
-  __retres = ! ((int)usExp == 0xff);
-  return __retres;
-}
+extern struct lconv *__fc_locale;
 
-int __finite(double d)
-{
-  int __retres;
-  union __fc_u_finite u;
-  unsigned short usExp;
-  u.d = d;
-  usExp = (unsigned short)((int)u.w[3] & 0x7F80);
-  usExp = (unsigned short)((int)usExp >> 7);
-  __retres = ! ((int)usExp == 0xff);
-  return __retres;
-}
+extern char *__fc_locale_names[512];
 
-/*@ assigns \nothing; */
-extern void (*signal(int sig, void (*func)(int )))(int );
+char *setlocale(int category, char const *locale);
 
-/*@ ensures never_terminates: \false;
-    assigns \nothing; */
-extern int raise(int sig);
+struct lconv *localeconv(void);
 
-/*@ requires valid_set: \valid(set);
-    ensures initialization: set: \initialized(\old(set));
-    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns *set, \result;
-    assigns *set \from \nothing;
-    assigns \result \from \nothing;
+struct lconv __C_locale =
+  {.decimal_point = (char *)".",
+   .thousands_sep = (char *)"",
+   .grouping = (char *)"",
+   .int_curr_symbol = (char *)"",
+   .currency_symbol = (char *)"",
+   .mon_decimal_point = (char *)"",
+   .mon_thousands_sep = (char *)"",
+   .mon_grouping = (char *)"",
+   .positive_sign = (char *)"",
+   .negative_sign = (char *)"",
+   .int_frac_digits = (char)127,
+   .frac_digits = (char)127,
+   .p_cs_precedes = (char)127,
+   .p_sep_by_space = (char)127,
+   .n_cs_precedes = (char)127,
+   .n_sep_by_space = (char)127,
+   .p_sign_posn = (char)127,
+   .n_sign_posn = (char)127,
+   .int_p_cs_precedes = (char)127,
+   .int_p_sep_by_space = (char)127,
+   .int_n_cs_precedes = (char)127,
+   .int_n_sep_by_space = (char)127,
+   .int_p_sign_posn = (char)127,
+   .int_n_sign_posn = (char)127};
+struct lconv *__frama_c_locale = & __C_locale;
+char *__frama_c_locale_names[512] = {(char *)"C"};
+/*@ requires
+      locale_null_or_valid_string:
+        locale ≡ \null ∨ valid_read_string(locale);
+    ensures
+      result_null_or_locale_name:
+        \result ≡ \null ∨
+        (\valid(\result) ∧ (∃ ℤ i; \result ≡ __fc_locale_names[i]));
+    assigns __fc_locale, \result;
+    assigns __fc_locale \from category, *(locale + (..));
+    assigns \result \from __fc_locale, category, *(locale + (..));
  */
-extern int sigemptyset(sigset_t *set);
+char *setlocale(int category, char const *locale)
+{
+  char *__retres;
+  if ((int)*locale == 'C') {
+    __frama_c_locale = & __C_locale;
+    __retres = __frama_c_locale_names[0];
+    goto return_label;
+  }
+  __retres = (char *)0;
+  return_label: return __retres;
+}
 
-/*@ requires valid_set: \valid(set);
-    ensures initialization: set: \initialized(\old(set));
-    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns *set, \result;
-    assigns *set \from \nothing;
-    assigns \result \from \nothing;
+/*@ ensures result_current_locale: \result ≡ __fc_locale;
+    assigns \nothing;
  */
-extern int sigfillset(sigset_t *set);
+struct lconv *localeconv(void)
+{
+  return __frama_c_locale;
+}
 
-/*@ requires valid_set: \valid(set);
-    requires initialization: set: \initialized(set);
-    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns *set, \result;
-    assigns *set \from (indirect: signum);
-    assigns \result \from signum;
+/*@ assigns \result;
+    assigns \result \from x;
+    
+    behavior nan:
+      assumes is_nan: \is_NaN(x);
+      ensures fp_nan: \result ≡ 0;
+    
+    behavior inf:
+      assumes is_infinite: ¬\is_NaN(x) ∧ ¬\is_finite(x);
+      ensures fp_infinite: \result ≡ 1;
+    
+    behavior zero:
+      assumes is_a_zero: x ≡ 0.0;
+      ensures fp_zero: \result ≡ 2;
+    
+    behavior subnormal:
+      assumes is_finite: \is_finite(x);
+      assumes
+        is_subnormal:
+          (x > 0.0 ∧ x < 0x1p-126) ∨ (x < 0.0 ∧ x > -0x1p-126);
+      ensures fp_subnormal: \result ≡ 3;
+    
+    behavior normal:
+      assumes is_finite: \is_finite(x);
+      assumes not_subnormal: x ≤ -0x1p-126 ∨ x ≥ 0x1p-126;
+      ensures fp_normal: \result ≡ 4;
+    
+    complete behaviors normal, subnormal, zero, inf, nan;
+    disjoint behaviors normal, subnormal, zero, inf, nan;
  */
-extern int sigaddset(sigset_t *set, int signum);
+int __fc_fpclassifyf(float x);
 
-/*@ requires valid_set: \valid(set);
-    requires initialization: set: \initialized(set);
-    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns *set, \result;
-    assigns *set \from (indirect: signum);
-    assigns \result \from signum;
+/*@ assigns \result;
+    assigns \result \from x;
+    
+    behavior nan:
+      assumes is_nan: \is_NaN(x);
+      ensures fp_nan: \result ≡ 0;
+    
+    behavior inf:
+      assumes is_infinite: ¬\is_NaN(x) ∧ ¬\is_finite(x);
+      ensures fp_infinite: \result ≡ 1;
+    
+    behavior zero:
+      assumes is_a_zero: x ≡ 0.0;
+      ensures fp_zero: \result ≡ 2;
+    
+    behavior subnormal:
+      assumes is_finite: \is_finite(x);
+      assumes
+        is_subnormal:
+          (x > 0.0 ∧ x < 0x1p-1022) ∨ (x < 0.0 ∧ x > -0x1p-1022);
+      ensures fp_subnormal: \result ≡ 3;
+    
+    behavior normal:
+      assumes is_finite: \is_finite(x);
+      assumes not_subnormal: x ≤ -0x1p-1022 ∨ x ≥ 0x1p-1022;
+      ensures fp_normal: \result ≡ 4;
+    
+    complete behaviors normal, subnormal, zero, inf, nan;
+    disjoint behaviors normal, subnormal, zero, inf, nan;
  */
-extern int sigdelset(sigset_t *set, int signum);
+int __fc_fpclassify(double x);
 
-/*@ requires valid_read_set: \valid_read(set);
-    requires initialization: set: \initialized(set);
-    ensures
-      result_found_not_found_or_error:
-        \result ≡ 0 ∨ \result ≡ 1 ∨ \result ≡ -1;
-    assigns \result;
-    assigns \result \from *set, signum;
+/*@ assigns __fc_errno, \result;
+    assigns __fc_errno \from x;
+    assigns \result \from x;
+    
+    behavior normal:
+      assumes in_domain: \is_finite(x) ∧ \abs(x) ≤ 1;
+      ensures positive_result: \is_finite(\result) ∧ \result ≥ 0;
+      assigns \result;
+      assigns \result \from x;
+    
+    behavior domain_error:
+      assumes
+        out_of_domain: \is_infinite(x) ∨ (\is_finite(x) ∧ \abs(x) > 1);
+      ensures errno_set: __fc_errno ≡ 1;
+      assigns __fc_errno, \result;
+      assigns __fc_errno \from x;
+      assigns \result \from x;
+    
+    disjoint behaviors domain_error, normal;
  */
-extern int sigismember(sigset_t const *set, int signum);
+extern double acos(double x);
 
-struct sigaction __fc_sigaction[64 + 1];
-struct sigaction *__fc_p_sigaction = __fc_sigaction;
-/*@ requires valid_signal: 0 ≤ signum ≤ 64;
-    requires valid_oldact_or_null: oldact ≡ \null ∨ \valid(oldact);
-    requires valid_read_act_or_null: act ≡ \null ∨ \valid_read(act);
-    requires separation: separated_acts: \separated(act, oldact);
-    ensures
-      act_changed:
-        \old(act) ≡ \null ∨
-        \subset(*(__fc_p_sigaction + \old(signum)), *\old(act));
-    ensures
-      oldact_assigned:
-        \old(oldact) ≡ \null ∨
-        *\old(oldact) ∈ *(__fc_p_sigaction + \old(signum));
-    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns *oldact, *(__fc_p_sigaction + signum), \result;
-    assigns *oldact \from __fc_p_sigaction;
-    assigns *(__fc_p_sigaction + signum) \from *act;
-    assigns \result
-      \from (indirect: signum), (indirect: act), (indirect: *act),
-            (indirect: oldact), (indirect: *oldact);
+/*@ assigns __fc_errno, \result;
+    assigns __fc_errno \from x;
+    assigns \result \from x;
+    
+    behavior normal:
+      assumes in_domain: \is_finite(x) ∧ \abs(x) ≤ 1;
+      ensures positive_result: \is_finite(\result) ∧ \result ≥ 0;
+      assigns \result;
+      assigns \result \from x;
+    
+    behavior domain_error:
+      assumes
+        out_of_domain: \is_infinite(x) ∨ (\is_finite(x) ∧ \abs(x) > 1);
+      ensures errno_set: __fc_errno ≡ 1;
+      assigns __fc_errno, \result;
+      assigns __fc_errno \from x;
+      assigns \result \from x;
+    
+    disjoint behaviors domain_error, normal;
  */
-extern int sigaction(int signum, struct sigaction const * __restrict act,
-                     struct sigaction * __restrict oldact);
+extern float acosf(float x);
 
-/*@ requires valid_set_or_null: set ≡ \null ∨ \valid_read(set);
-    requires valid_how: set ≢ \null ⇒ how ∈ {0, 2, 1};
-    requires valid_oldset_or_null: oldset ≡ \null ∨ \valid(oldset);
-    requires
-      separation: (set ≡ oldset ≡ \null) ∨ \separated(set, oldset);
-    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    ensures
-      initialization: oldset_initialized:
-        \old(oldset) ≢ \null ∧ \result ≡ 0 ⇒
-        \initialized(\old(oldset));
-    assigns \result, *oldset;
-    assigns \result
-      \from (indirect: how), (indirect: set), (indirect: oldset);
-    assigns *oldset \from (indirect: how), (indirect: oldset);
+/*@ assigns __fc_errno, \result;
+    assigns __fc_errno \from x;
+    assigns \result \from x;
+    
+    behavior normal:
+      assumes in_domain: \is_finite(x) ∧ \abs(x) ≤ 1;
+      ensures positive_result: \is_finite(\result) ∧ \result ≥ 0;
+      assigns \result;
+      assigns \result \from x;
+    
+    behavior domain_error:
+      assumes
+        out_of_domain: \is_infinite(x) ∨ (\is_finite(x) ∧ \abs(x) > 1);
+      ensures errno_set: __fc_errno ≡ 1;
+      assigns __fc_errno, \result;
+      assigns __fc_errno \from x;
+      assigns \result \from x;
+    
+    disjoint behaviors domain_error, normal;
  */
-extern int sigprocmask(int how, sigset_t const * __restrict set,
-                       sigset_t * __restrict oldset);
+extern long double acosl(long double x);
 
-/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result;
-    assigns \result \from (indirect: pid), (indirect: sig);
+/*@ assigns __fc_errno, \result;
+    assigns __fc_errno \from x;
+    assigns \result \from x;
+    
+    behavior normal:
+      assumes in_domain: \is_finite(x) ∧ \abs(x) ≤ 1;
+      ensures finite_result: \is_finite(\result);
+      assigns \result;
+      assigns \result \from x;
+    
+    behavior domain_error:
+      assumes
+        out_of_domain: \is_infinite(x) ∨ (\is_finite(x) ∧ \abs(x) > 1);
+      ensures errno_set: __fc_errno ≡ 1;
+      assigns __fc_errno, \result;
+      assigns __fc_errno \from x;
+      assigns \result \from x;
+    
+    disjoint behaviors domain_error, normal;
  */
-extern int kill(pid_t pid, int sig);
+extern double asin(double x);
 
-/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result;
-    assigns \result \from (indirect: pgrp), (indirect: sig);
+/*@ assigns __fc_errno, \result;
+    assigns __fc_errno \from x;
+    assigns \result \from x;
+    
+    behavior normal:
+      assumes in_domain: \is_finite(x) ∧ \abs(x) ≤ 1;
+      ensures finite_result: \is_finite(\result);
+      assigns \result;
+      assigns \result \from x;
+    
+    behavior domain_error:
+      assumes
+        out_of_domain: \is_infinite(x) ∨ (\is_finite(x) ∧ \abs(x) > 1);
+      ensures errno_set: __fc_errno ≡ 1;
+      assigns __fc_errno, \result;
+      assigns __fc_errno \from x;
+      assigns \result \from x;
+    
+    disjoint behaviors domain_error, normal;
  */
-extern int killpg(pid_t pgrp, int sig);
-
-/*@ ghost struct __fc_sockfds_type __fc_sockfds[1024]; */
-/*@ ghost extern int __fc_socket_counter __attribute__((__FRAMA_C_MODEL__));
-*/
+extern float asinf(float x);
 
-/*@ ghost int volatile __fc_open_sock_fds; */
-/*@ requires valid_sockfd: 0 ≤ sockfd < 1024;
-    ensures
-      result_error_or_valid_new_sockfd:
-        \result ≡ -1 ∨ (0 ≤ \result < 1024);
-    assigns \result, *((char *)addr + (0 .. *addrlen - 1)),
-            __fc_sockfds[sockfd];
-    assigns \result \from *addr, *addrlen, __fc_sockfds[sockfd];
-    assigns *((char *)addr + (0 .. *addrlen - 1))
-      \from *addr, *addrlen, __fc_sockfds[sockfd];
-    assigns __fc_sockfds[sockfd] \from *addr, *addrlen, __fc_sockfds[sockfd];
+/*@ assigns __fc_errno, \result;
+    assigns __fc_errno \from x;
+    assigns \result \from x;
     
-    behavior addr_null:
-      assumes addr_is_null: addr ≡ \null;
-      requires addrlen_should_be_null: addrlen ≡ \null;
-      assigns \result, __fc_sockfds[sockfd];
-      assigns \result \from __fc_sockfds[sockfd];
-      assigns __fc_sockfds[sockfd] \from __fc_sockfds[sockfd];
+    behavior normal:
+      assumes in_domain: \is_finite(x) ∧ \abs(x) ≤ 1;
+      ensures finite_result: \is_finite(\result);
+      assigns \result;
+      assigns \result \from x;
     
-    behavior addr_not_null:
-      assumes addr_is_not_null: addr ≢ \null;
-      requires valid_addrlen: \valid(addrlen);
-      requires addr_has_room: \valid((char *)addr + (0 .. *addrlen - 1));
-      ensures
-        initialization: addr:
-          \initialized((char *)\old(addr) + (0 .. *\old(addrlen) - 1));
+    behavior domain_error:
+      assumes
+        out_of_domain: \is_infinite(x) ∨ (\is_finite(x) ∧ \abs(x) > 1);
+      ensures errno_set: __fc_errno ≡ 1;
+      assigns __fc_errno, \result;
+      assigns __fc_errno \from x;
+      assigns \result \from x;
     
-    disjoint behaviors addr_not_null, addr_null;
+    disjoint behaviors domain_error, normal;
  */
-extern int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
+extern long double asinl(long double x);
 
-/*@ requires valid_sockfd: sockfd: 0 ≤ sockfd < 1024;
-    requires valid_read_addr: \valid_read((char *)addr + (0 .. addrlen - 1));
-    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns __fc_sockfds[sockfd], \result;
-    assigns __fc_sockfds[sockfd]
-      \from sockfd, *addr, addrlen, __fc_sockfds[sockfd];
-    assigns \result
-      \from (indirect: sockfd), (indirect: *addr), (indirect: addrlen),
-            (indirect: __fc_sockfds[sockfd]);
+/*@ requires finite_arg: \is_finite(x);
+    ensures finite_result: \is_finite(\result);
+    ensures result_domain: -1.571 ≤ \result ≤ 1.571;
+    assigns \result;
+    assigns \result \from x;
  */
-extern int bind(int sockfd, struct sockaddr const *addr, socklen_t addrlen);
+extern float atanf(float x);
 
-/*@ requires valid_sockfd: 0 ≤ sockfd < 1024;
-    requires valid_read_addr: \valid_read((char *)addr + (0 .. addrlen - 1));
-    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns __fc_sockfds[sockfd], \result;
-    assigns __fc_sockfds[sockfd]
-      \from __fc_sockfds[sockfd], (indirect: sockfd), (indirect: addr),
-            (indirect: *addr), (indirect: addrlen);
-    assigns \result
-      \from (indirect: __fc_sockfds[sockfd]), (indirect: sockfd),
-            (indirect: addr), (indirect: *addr), (indirect: addrlen);
+/*@ requires finite_arg: \is_finite(x);
+    ensures finite_result: \is_finite(\result);
+    ensures result_domain: -1.571 ≤ \result ≤ 1.571;
+    assigns \result;
+    assigns \result \from x;
  */
-extern int connect(int sockfd, struct sockaddr const *addr, socklen_t addrlen);
+extern double atan(double x);
 
-/*@ requires valid_sockfd: 0 ≤ sockfd < 1024;
-    requires valid_optlen: \valid(optlen);
-    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns *((char *)optval + (0 ..)), \result, *optlen;
-    assigns *((char *)optval + (0 ..))
-      \from (indirect: sockfd), (indirect: level), (indirect: optname),
-            (indirect: *optlen), (indirect: optval),
-            (indirect: __fc_sockfds[sockfd]);
-    assigns \result
-      \from (indirect: sockfd), (indirect: level), (indirect: optname),
-            (indirect: *optlen), (indirect: optval),
-            (indirect: __fc_sockfds[sockfd]);
-    assigns *optlen
-      \from (indirect: sockfd), (indirect: level), (indirect: optname),
-            *optlen, (indirect: optval), (indirect: __fc_sockfds[sockfd]);
-    
-    behavior so_error:
-      assumes optname_is_error: level ≡ 1 ∧ optname ≡ 4;
-      requires valid_optlen: \valid(optlen);
-      requires optlen_value: *optlen ≡ sizeof(int);
-      requires valid_optval: \valid((int *)optval);
-      assigns *((int *)optval), \result;
-      assigns *((int *)optval)
-        \from (indirect: sockfd), (indirect: optlen),
-              (indirect: __fc_sockfds[sockfd]);
-      assigns \result
-        \from (indirect: sockfd), (indirect: optlen),
-              (indirect: __fc_sockfds[sockfd]);
-    
-    behavior other_options:
-      assumes optname_not_error: ¬(level ≡ 1 ∧ optname ≡ 4);
-      requires
-        optval_null_or_valid:
-          optval ≡ \null ∨ \valid((char *)optval + (0 ..));
-      assigns *((char *)optval + (0 ..)), \result, *optlen;
-      assigns *((char *)optval + (0 ..))
-        \from (indirect: sockfd), (indirect: level), (indirect: optname),
-              (indirect: *optlen), (indirect: optval),
-              (indirect: __fc_sockfds[sockfd]);
-      assigns \result
-        \from (indirect: sockfd), (indirect: level), (indirect: optname),
-              (indirect: *optlen), (indirect: optval),
-              (indirect: __fc_sockfds[sockfd]);
-      assigns *optlen
-        \from (indirect: sockfd), (indirect: level), (indirect: optname),
-              *optlen, (indirect: optval), (indirect: __fc_sockfds[sockfd]);
-    
-    complete behaviors other_options, so_error;
-    disjoint behaviors other_options, so_error;
+/*@ requires finite_arg: \is_finite(x);
+    ensures finite_result: \is_finite(\result);
+    ensures result_domain: -1.571 ≤ \result ≤ 1.571;
+    assigns \result;
+    assigns \result \from x;
  */
-extern int getsockopt(int sockfd, int level, int optname, void *optval,
-                      socklen_t *optlen);
+extern long double atanl(long double x);
 
-/*@ requires valid_sockfd: 0 ≤ sockfd < 1024;
-    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result, __fc_sockfds[sockfd];
-    assigns \result \from sockfd, __fc_sockfds[sockfd];
-    assigns __fc_sockfds[sockfd] \from sockfd, backlog, __fc_sockfds[sockfd];
+/*@ requires finite_args: \is_finite(x) ∧ \is_finite(y);
+    requires finite_result: \is_finite(atan2(x, y));
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x, y;
  */
-extern int listen(int sockfd, int backlog);
-
-/*@ requires valid_sockfd: 0 ≤ sockfd < 1024;
-    requires valid_buffer_length: \valid((char *)buf + (0 .. len - 1));
-    ensures
-      result_error_or_received_length:
-        \result ≡ -1 ∨ (0 ≤ \result ≤ \old(len));
-    ensures
-      initialization: \initialized((char *)\old(buf) + (0 .. \result - 1));
-    assigns *((char *)buf + (0 .. len - 1)), __fc_sockfds[sockfd], \result;
-    assigns *((char *)buf + (0 .. len - 1))
-      \from sockfd, len, flags, __fc_sockfds[sockfd];
-    assigns __fc_sockfds[sockfd]
-      \from sockfd, len, flags, __fc_sockfds[sockfd];
-    assigns \result \from sockfd, len, flags, __fc_sockfds[sockfd];
- */
-extern ssize_t recv(int sockfd, void *buf, size_t len, int flags);
-
-/*@ requires valid_sockfd: 0 ≤ sockfd < 1024;
-    requires
-      msg_control_has_room:
-        \valid((char *)hdr->msg_control + (0 .. hdr->msg_controllen - 1));
-    requires
-      msg_iov_has_room: \valid(hdr->msg_iov + (0 .. hdr->msg_iovlen - 1));
-    requires
-      msg_name_null_or_has_room:
-        hdr->msg_name ≡ \null ∨
-        \valid((char *)hdr->msg_name + (0 .. hdr->msg_namelen - 1));
-    ensures
-      result_error_or_received_length:
-        \result ≡ -1 ∨ (0 ≤ \result ≤ \old(hdr)->msg_iovlen);
-    assigns *((char *)hdr->msg_name + (0 .. hdr->msg_namelen - 1)),
-            hdr->msg_namelen,
-            *((char *)(hdr->msg_iov + (0 .. hdr->msg_iovlen - 1))->iov_base +
-              (0 ..)),
-            *((char *)hdr->msg_control + (0 .. hdr->msg_controllen - 1)),
-            \result, hdr->msg_controllen, hdr->msg_flags,
-            __fc_sockfds[sockfd];
-    assigns *((char *)hdr->msg_name + (0 .. hdr->msg_namelen - 1))
-      \from __fc_sockfds[sockfd];
-    assigns hdr->msg_namelen \from __fc_sockfds[sockfd];
-    assigns
-    *((char *)(hdr->msg_iov + (0 .. hdr->msg_iovlen - 1))->iov_base + (0 ..))
-      \from __fc_sockfds[sockfd];
-    assigns *((char *)hdr->msg_control + (0 .. hdr->msg_controllen - 1))
-      \from __fc_sockfds[sockfd];
-    assigns \result \from __fc_sockfds[sockfd];
-    assigns hdr->msg_controllen \from __fc_sockfds[sockfd];
-    assigns hdr->msg_flags \from __fc_sockfds[sockfd];
-    assigns __fc_sockfds[sockfd] \from __fc_sockfds[sockfd];
- */
-extern ssize_t recvmsg(int sockfd, struct msghdr *hdr, int flags);
+extern double atan2(double y, double x);
 
-/*@ requires available_sockfd: 0 ≤ sockfd < 1024;
-    requires buf_len_ok: \valid_read((char *)buf + (0 .. len - 1));
-    ensures
-      error_or_chars_sent: \result ≡ -1 ∨ (0 ≤ \result ≤ \old(len));
-    assigns __fc_errno, __fc_sockfds[sockfd], \result;
-    assigns __fc_errno
-      \from (indirect: sockfd), (indirect: __fc_sockfds[sockfd]),
-            (indirect: *((char *)buf + (0 .. len))), flags;
-    assigns __fc_sockfds[sockfd]
-      \from __fc_sockfds[sockfd], *((char *)buf + (0 .. len)), flags;
-    assigns \result
-      \from (indirect: sockfd), (indirect: __fc_sockfds[sockfd]),
-            (indirect: *((char *)buf + (0 .. len))), (indirect: flags);
+/*@ requires finite_args: \is_finite(x) ∧ \is_finite(y);
+    requires finite_logic_result: \is_finite(atan2f(x, y));
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x, y;
  */
-extern ssize_t send(int sockfd, void const *buf, size_t len, int flags);
+extern float atan2f(float y, float x);
 
-/*@ requires valid_sockfd: 0 ≤ sockfd < 1024;
-    requires
-      optval_null_or_has_room:
-        optval ≡ \null ∨ \valid_read((char *)optval + (0 .. optlen - 1));
-    ensures result_error_or_ok: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result, __fc_sockfds[sockfd];
-    assigns \result
-      \from __fc_sockfds[sockfd], level, optname,
-            *((char *)optval + (0 .. optlen - 1)), optlen;
-    assigns __fc_sockfds[sockfd]
-      \from __fc_sockfds[sockfd], level, optname,
-            *((char *)optval + (0 .. optlen - 1)), optlen;
+/*@ requires finite_arg: \is_finite(x);
+    ensures finite_result: \is_finite(\result);
+    ensures result_domain: -1. ≤ \result ≤ 1.;
+    assigns \result;
+    assigns \result \from x;
  */
-extern int setsockopt(int sockfd, int level, int optname, void const *optval,
-                      socklen_t optlen);
+extern double cos(double x);
 
-/*@ requires valid_sockfd: 0 ≤ sockfd < 1024;
-    ensures result_error_or_ok: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result, __fc_sockfds[sockfd];
-    assigns \result \from how, __fc_sockfds[sockfd];
-    assigns __fc_sockfds[sockfd] \from how, __fc_sockfds[sockfd];
+/*@ requires finite_arg: \is_finite(x);
+    ensures finite_result: \is_finite(\result);
+    ensures result_domain: -1. ≤ \result ≤ 1.;
+    assigns \result;
+    assigns \result \from x;
  */
-extern int shutdown(int sockfd, int how);
+extern float cosf(float x);
 
-/*@ ensures
-      result_error_or_valid_new_sockfd:
-        (0 ≤ \result < 1024) ∨ \result ≡ -1;
-    assigns \result, __fc_socket_counter;
-    assigns \result
-      \from (indirect: domain), (indirect: type), (indirect: protocol),
-            (indirect: __fc_socket_counter);
-    assigns __fc_socket_counter
-      \from (indirect: domain), (indirect: type), (indirect: protocol),
-            __fc_socket_counter;
+/*@ requires finite_arg: \is_finite(x);
+    ensures finite_result: \is_finite(\result);
+    ensures result_domain: -1. ≤ \result ≤ 1.;
+    assigns \result;
+    assigns \result \from x;
  */
-extern int socket(int domain, int type, int protocol);
+extern long double cosl(long double x);
 
-/*@ requires valid_socket_sector: \valid(sv + (0 .. 1));
-    ensures result_error_or_ok: \result ≡ 0 ∨ \result ≡ -1;
-    ensures initialization: sv: \initialized(\old(sv) + (0 .. 1));
-    ensures valid_new_sockfd: sv0: 0 ≤ *(\old(sv) + 0) < 1024;
-    ensures valid_new_sockfd: sv1: 0 ≤ *(\old(sv) + 1) < 1024;
-    assigns \result, __fc_socket_counter, *(sv + (0 .. 1));
-    assigns \result \from __fc_socket_counter;
-    assigns __fc_socket_counter \from __fc_socket_counter;
-    assigns *(sv + (0 .. 1)) \from __fc_socket_counter;
+/*@ requires finite_arg: \is_finite(x);
+    ensures finite_result: \is_finite(\result);
+    ensures result_domain: -1. ≤ \result ≤ 1.;
+    assigns \result;
+    assigns \result \from x;
  */
-extern int socketpair(int domain, int type, int protocol, int * /*[2]*/ sv);
-
-struct in6_addr const in6addr_any = {.s6_addr = {(unsigned char)0}};
-struct in6_addr const in6addr_loopback =
-  {.s6_addr = {(unsigned char)0xFF,
-               (unsigned char)0xFF,
-               (unsigned char)0xFF,
-               (unsigned char)0xFF,
-               (unsigned char)0xFF,
-               (unsigned char)0xFF,
-               (unsigned char)0xFF,
-               (unsigned char)0xFF,
-               (unsigned char)0xFF,
-               (unsigned char)0xFF,
-               (unsigned char)0xFF,
-               (unsigned char)0xFF,
-               (unsigned char)0xFF,
-               (unsigned char)0xFF,
-               (unsigned char)0xFF,
-               (unsigned char)0xFF}};
-/*@ assigns \result;
-    assigns \result \from arg; */
-extern uint32_t htonl(uint32_t arg);
-
-/*@ assigns \result;
-    assigns \result \from arg; */
-extern uint16_t htons(uint16_t arg);
-
-/*@ assigns \result;
-    assigns \result \from arg; */
-extern uint32_t ntohl(uint32_t arg);
-
-/*@ assigns \result;
-    assigns \result \from arg; */
-extern uint16_t ntohs(uint16_t arg);
+extern double sin(double x);
 
-/*@ requires valid_arg: valid_read_string(arg);
+/*@ requires finite_arg: \is_finite(x);
+    ensures finite_result: \is_finite(\result);
+    ensures result_domain: -1. ≤ \result ≤ 1.;
     assigns \result;
-    assigns \result \from (indirect: *(arg + (0 ..)));
+    assigns \result \from x;
  */
-extern in_addr_t inet_addr(char const *arg);
+extern float sinf(float x);
 
-char volatile __fc_inet_ntoa_array[16];
-char *__fc_inet_ntoa = (char *)(__fc_inet_ntoa_array);
-/*@ ensures result_static_string: \result ≡ __fc_inet_ntoa;
-    ensures result_null_terminated: *(\result + 15) ≡ 0;
-    ensures result_valid_string: valid_read_string(\result);
-    assigns \result, *(__fc_inet_ntoa + (0 ..));
-    assigns \result \from (indirect: arg), __fc_inet_ntoa;
-    assigns *(__fc_inet_ntoa + (0 ..)) \from (indirect: arg);
+/*@ requires finite_arg: \is_finite(x);
+    ensures finite_result: \is_finite(\result);
+    ensures result_domain: -1. ≤ \result ≤ 1.;
+    assigns \result;
+    assigns \result \from x;
  */
-extern char *inet_ntoa(struct in_addr arg);
+extern long double sinl(long double x);
 
-/*@ assigns \result, *(dst + (0 .. size - 1));
-    assigns \result \from dst, af, *((char *)src + (0 ..));
-    assigns *(dst + (0 .. size - 1)) \from af, *((char *)src + (0 ..));
+/*@ assigns __fc_errno, \result;
+    assigns __fc_errno \from x;
+    assigns \result \from x;
+    
+    behavior normal:
+      assumes in_domain: \is_finite(x) ∧ x ≥ 1;
+      ensures positive_result: \is_finite(\result) ∧ \result ≥ 0;
+      assigns \result;
+      assigns \result \from x;
+    
+    behavior infinite:
+      assumes is_plus_infinity: \is_plus_infinity(x);
+      ensures result_plus_infinity: \is_plus_infinity(\result);
+      assigns \result;
+      assigns \result \from x;
+    
+    behavior domain_error:
+      assumes
+        out_of_domain: \is_minus_infinity(x) ∨ (\is_finite(x) ∧ x < 1);
+      ensures errno_set: __fc_errno ≡ 1;
+      assigns __fc_errno, \result;
+      assigns __fc_errno \from x;
+      assigns \result \from x;
+    
+    disjoint behaviors domain_error, infinite, normal;
  */
-extern char const *inet_ntop(int af, void const *src, char *dst,
-                             socklen_t size);
+extern double acosh(double x);
 
-/*@ assigns \result, *((char *)dst + (0 ..));
-    assigns \result \from af, *(src + (..));
-    assigns *((char *)dst + (0 ..)) \from af, *(src + (0 ..));
+/*@ assigns __fc_errno, \result;
+    assigns __fc_errno \from x;
+    assigns \result \from x;
+    
+    behavior normal:
+      assumes in_domain: \is_finite(x) ∧ x ≥ 1;
+      ensures positive_result: \is_finite(\result) ∧ \result ≥ 0;
+      assigns \result;
+      assigns \result \from x;
+    
+    behavior infinite:
+      assumes is_plus_infinity: \is_plus_infinity(x);
+      ensures result_plus_infinity: \is_plus_infinity(\result);
+      assigns \result;
+      assigns \result \from x;
+    
+    behavior domain_error:
+      assumes
+        out_of_domain: \is_minus_infinity(x) ∨ (\is_finite(x) ∧ x < 1);
+      ensures errno_set: __fc_errno ≡ 1;
+      assigns __fc_errno, \result;
+      assigns __fc_errno \from x;
+      assigns \result \from x;
+    
+    disjoint behaviors domain_error, infinite, normal;
  */
-extern int inet_pton(int af, char const *src, void *dst);
+extern float acoshf(float x);
 
-int h_errno;
-/*@ requires addrinfo_valid: \valid(addrinfo);
-    ensures allocation: \allocable(\old(addrinfo));
-    assigns \nothing;
-    frees addrinfo;
+/*@ assigns __fc_errno, \result;
+    assigns __fc_errno \from x;
+    assigns \result \from x;
+    
+    behavior normal:
+      assumes in_domain: \is_finite(x) ∧ x ≥ 1;
+      ensures positive_result: \is_finite(\result) ∧ \result ≥ 0;
+      assigns \result;
+      assigns \result \from x;
+    
+    behavior infinite:
+      assumes is_plus_infinity: \is_plus_infinity(x);
+      ensures result_plus_infinity: \is_plus_infinity(\result);
+      assigns \result;
+      assigns \result \from x;
+    
+    behavior domain_error:
+      assumes
+        out_of_domain: \is_minus_infinity(x) ∨ (\is_finite(x) ∧ x < 1);
+      ensures errno_set: __fc_errno ≡ 1;
+      assigns __fc_errno, \result;
+      assigns __fc_errno \from x;
+      assigns \result \from x;
+    
+    disjoint behaviors domain_error, infinite, normal;
  */
-extern void freeaddrinfo(struct addrinfo *addrinfo);
+extern long double acoshl(long double x);
 
-char *__fc_gai_strerror = (char *)"<error message reported by gai_strerror>";
-/*@ ensures result_string: \result ≡ __fc_gai_strerror;
-    ensures result_valid_string: valid_read_string(\result);
+/*@ requires finite_arg: \is_finite(x);
+    requires finite_domain: x ≤ 0x1.62e42fefa39efp+9;
+    ensures res_finite: \is_finite(\result);
+    ensures positive_result: \result > 0.;
     assigns \result;
-    assigns \result \from (indirect: errcode), __fc_gai_strerror;
+    assigns \result \from x;
  */
-extern char const *gai_strerror(int errcode);
+extern double exp(double x);
 
-int getaddrinfo(char const * __restrict nodename,
-                char const * __restrict servname,
-                struct addrinfo const * __restrict hints,
-                struct addrinfo ** __restrict res);
+/*@ requires finite_arg: \is_finite(x);
+    requires res_finite: x ≤ 0x1.62e42ep+6;
+    ensures res_finite: \is_finite(\result);
+    ensures positive_result: \result > 0.;
+    assigns \result;
+    assigns \result \from x;
+ */
+extern float expf(float x);
 
-struct hostent *gethostbyname(char const *name);
+/*@ requires finite_arg: \is_finite(x);
+    requires arg_positive: x > 0;
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x;
+ */
+extern double log(double x);
 
-/*@
-predicate non_escaping{L}(void *s, size_t n) =
-  ∀ unsigned int i; 0 ≤ i < n ⇒ ¬\dangling((char *)s + i);
+/*@ requires finite_arg: \is_finite(x);
+    requires arg_positive: x > 0;
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x;
  */
-/*@
-predicate empty_block{L}(void *s) =
-  \block_length((char *)s) ≡ 0 ∧ \offset((char *)s) ≡ 0;
+extern float logf(float x);
+
+/*@ requires finite_arg: \is_finite(x);
+    requires arg_pos: x > 0;
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x;
  */
-/*@
-predicate valid_or_empty{L}(void *s, size_t n) =
-  (empty_block(s) ∨ \valid_read((char *)s)) ∧
-  \valid((char *)s + (0 .. n - 1));
+extern long double logl(long double x);
+
+/*@ requires finite_arg: \is_finite(x);
+    requires arg_positive: x > 0;
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x;
  */
-/*@
-predicate valid_read_or_empty{L}(void *s, size_t n) =
-  (empty_block(s) ∨ \valid_read((char *)s)) ∧
-  \valid_read((char *)s + (1 .. n - 1));
+extern double log10(double x);
 
-*/
-int memcmp(void const *s1, void const *s2, size_t n);
+/*@ requires finite_arg: \is_finite(x);
+    requires arg_positive: x > 0;
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x;
+ */
+extern float log10f(float x);
 
-void *memchr(void const *s, int c, size_t n);
+/*@ requires finite_arg: \is_finite(x);
+    requires arg_postive: x > 0;
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x;
+ */
+extern long double log10l(long double x);
 
-void *memcpy(void * __restrict dest, void const * __restrict src, size_t n);
+/*@ requires finite_arg: \is_finite(x);
+    requires arg_positive: x > 0;
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x;
+ */
+extern double log2(double x);
 
-void *memmove(void *dest, void const *src, size_t n);
+/*@ requires finite_arg: \is_finite(x);
+    requires arg_positive: x > 0;
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x;
+ */
+extern float log2f(float x);
 
-void *memset(void *s, int c, size_t n);
+/*@ requires finite_arg: \is_finite(x);
+    requires arg_positive: x > 0;
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x;
+ */
+extern long double log2l(long double x);
 
-size_t strlen(char const *s);
+double fabs(double x);
 
-size_t strnlen(char const *s, size_t maxlen);
+float fabsf(float x);
 
-int strcmp(char const *s1, char const *s2);
+/*@ requires finite_arg: \is_finite(x);
+    ensures res_finite: \is_finite(\result);
+    ensures positive_result: \result ≥ 0.;
+    ensures
+      equal_magnitude_result: \result ≡ \old(x) ∨ \result ≡ -\old(x);
+    assigns \result;
+    assigns \result \from x;
+ */
+extern long double fabsl(long double x);
 
-int strncmp(char const *s1, char const *s2, size_t n);
+/*@ requires finite_args: \is_finite(x) ∧ \is_finite(y);
+    requires finite_logic_res: \is_finite(pow(x, y));
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x, y;
+ */
+extern double pow(double x, double y);
 
-/*@ requires valid_string_s1: valid_read_string(s1);
-    requires valid_string_s2: valid_read_string(s2);
+/*@ requires finite_args: \is_finite(x) ∧ \is_finite(y);
+    requires finite_logic_res: \is_finite(powf(x, y));
+    ensures finite_result: \is_finite(\result);
     assigns \result;
-    assigns \result
-      \from (indirect: *(s1 + (0 ..))), (indirect: *(s2 + (0 ..)));
+    assigns \result \from x, y;
  */
-extern int strcoll(char const *s1, char const *s2);
+extern float powf(float x, float y);
 
-char *strchr(char const *s, int c);
+/*@ requires finite_arg: \is_finite(x);
+    requires arg_positive: x ≥ -0.;
+    ensures finite_result: \is_finite(\result);
+    ensures positive_result: \result ≥ -0.;
+    assigns \result;
+    assigns \result \from x;
+ */
+extern double sqrt(double x);
 
-char *strrchr(char const *s, int c);
+/*@ requires finite_arg: \is_finite(x);
+    requires arg_positive: x ≥ -0.;
+    ensures finite_result: \is_finite(\result);
+    ensures positive_result: \result ≥ -0.;
+    assigns \result;
+    assigns \result \from x;
+ */
+extern float sqrtf(float x);
 
-/*@ requires valid_string_s: valid_read_string(s);
-    requires valid_string_reject: valid_read_string(reject);
-    ensures result_bounded: 0 ≤ \result ≤ strlen(\old(s));
+/*@ requires finite_arg: \is_finite(x);
+    requires arg_positive: x ≥ -0.;
+    ensures finite_result: \is_finite(\result);
+    ensures positive_result: \result ≥ -0.;
     assigns \result;
-    assigns \result
-      \from (indirect: *(s + (0 ..))), (indirect: *(reject + (0 ..)));
+    assigns \result \from x;
  */
-extern size_t strcspn(char const *s, char const *reject);
+extern long double sqrtl(long double x);
 
-/*@ requires valid_string_s: valid_read_string(s);
-    requires valid_string_accept: valid_read_string(accept);
-    ensures result_bounded: 0 ≤ \result ≤ strlen(\old(s));
-    assigns \result, \result;
-    assigns \result \from *(s + (0 ..)), *(accept + (0 ..));
-    assigns \result
-      \from (indirect: *(s + (0 ..))), (indirect: *(accept + (0 ..)));
+/*@ requires finite_arg: \is_finite(x);
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x;
  */
-extern size_t strspn(char const *s, char const *accept);
+extern double ceil(double x);
 
-/*@ requires valid_string_s: valid_read_string(s);
-    requires valid_string_accept: valid_read_string(accept);
-    ensures
-      result_null_or_same_base:
-        \result ≡ \null ∨ \base_addr(\result) ≡ \base_addr(\old(s));
+/*@ requires finite_arg: \is_finite(x);
+    ensures finite_result: \is_finite(\result);
     assigns \result;
-    assigns \result \from s, *(s + (0 ..)), *(accept + (0 ..));
+    assigns \result \from x;
  */
-extern char *strpbrk(char const *s, char const *accept);
+extern float ceilf(float x);
 
-char *strstr(char const *haystack, char const *needle);
+/*@ requires finite_arg: \is_finite(x);
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x;
+ */
+extern long double ceill(long double x);
 
-/*@ requires valid_string_haystack: valid_read_string(haystack);
-    requires valid_string_needle: valid_read_string(needle);
-    ensures
-      result_null_or_in_haystack:
-        \result ≡ \null ∨
-        (\subset(\result, \old(haystack) + (0 ..)) ∧ \valid_read(\result));
+/*@ requires finite_arg: \is_finite(x);
+    ensures finite_result: \is_finite(\result);
     assigns \result;
-    assigns \result
-      \from haystack, (indirect: *(haystack + (0 ..))),
-            (indirect: *(needle + (0 ..)));
+    assigns \result \from x;
  */
-extern char *strcasestr(char const *haystack, char const *needle);
+extern double floor(double x);
 
-char *__fc_strtok_ptr;
-/*@ requires valid_string_delim: valid_read_string(delim);
-    assigns *(s + (0 ..)), *(__fc_strtok_ptr + (0 ..)), \result,
-            __fc_strtok_ptr;
-    assigns *(s + (0 ..))
-      \from *(s + (0 ..)), (indirect: s), (indirect: __fc_strtok_ptr),
-            (indirect: *(delim + (0 ..)));
-    assigns *(__fc_strtok_ptr + (0 ..))
-      \from *(__fc_strtok_ptr + (0 ..)), (indirect: s),
-            (indirect: __fc_strtok_ptr), (indirect: *(delim + (0 ..)));
-    assigns \result
-      \from s, __fc_strtok_ptr, (indirect: *(s + (0 ..))),
-            (indirect: *(__fc_strtok_ptr + (0 ..))),
-            (indirect: *(delim + (0 ..)));
-    assigns __fc_strtok_ptr
-      \from \old(__fc_strtok_ptr), s,
-            (indirect: *(__fc_strtok_ptr + (0 ..))),
-            (indirect: *(delim + (0 ..)));
-    
-    behavior new_str:
-      assumes s_not_null: s ≢ \null;
-      requires
-        valid_string_s_or_delim_not_found:
-          valid_string(s) ∨
-          (valid_read_string(s) ∧
-           (∀ int i;
-              0 ≤ i < strlen(delim) ⇒
-              ¬(strchr(s, *(delim + i)) ≡ \true)));
-      ensures
-        result_subset:
-          \result ≡ \null ∨ \subset(\result, \old(s) + (0 ..));
-      ensures ptr_subset: \subset(__fc_strtok_ptr, \old(s) + (0 ..));
-      assigns __fc_strtok_ptr, *(s + (0 ..)), \result;
-      assigns __fc_strtok_ptr
-        \from s, (indirect: *(s + (0 ..))), (indirect: *(delim + (0 ..)));
-      assigns *(s + (0 ..))
-        \from *(s + (0 ..)), (indirect: s), (indirect: *(delim + (0 ..)));
-      assigns \result
-        \from s, (indirect: *(s + (0 ..))), (indirect: *(delim + (0 ..)));
-    
-    behavior resume_str:
-      assumes s_null: s ≡ \null;
-      requires not_first_call: __fc_strtok_ptr ≢ \null;
-      ensures
-        result_subset:
-          \result ≡ \null ∨
-          \subset(\result, \old(__fc_strtok_ptr) + (0 ..));
-      ensures
-        ptr_subset: \subset(__fc_strtok_ptr, \old(__fc_strtok_ptr) + (0 ..));
-      assigns *(__fc_strtok_ptr + (0 ..)), __fc_strtok_ptr, \result;
-      assigns *(__fc_strtok_ptr + (0 ..))
-        \from *(__fc_strtok_ptr + (0 ..)), (indirect: __fc_strtok_ptr),
-              (indirect: *(delim + (0 ..)));
-      assigns __fc_strtok_ptr
-        \from \old(__fc_strtok_ptr), (indirect: *(__fc_strtok_ptr + (0 ..))),
-              (indirect: *(delim + (0 ..)));
-      assigns \result
-        \from __fc_strtok_ptr, (indirect: *(__fc_strtok_ptr + (0 ..))),
-              (indirect: *(delim + (0 ..)));
-    
-    complete behaviors resume_str, new_str;
-    disjoint behaviors resume_str, new_str;
+/*@ requires finite_arg: \is_finite(x);
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x;
  */
-extern char *strtok(char * __restrict s, char const * __restrict delim);
+extern float floorf(float x);
 
-/*@ requires valid_string_delim: valid_read_string(delim);
-    requires valid_saveptr: \valid(saveptr);
-    assigns *(s + (0 ..)), *(*saveptr + (0 ..)), \result, *saveptr;
-    assigns *(s + (0 ..))
-      \from *(s + (0 ..)), (indirect: s), (indirect: *saveptr),
-            (indirect: *(delim + (0 ..)));
-    assigns *(*saveptr + (0 ..))
-      \from *(*saveptr + (0 ..)), (indirect: s), (indirect: *saveptr),
-            (indirect: *(delim + (0 ..)));
-    assigns \result
-      \from s, *saveptr, (indirect: *(s + (0 ..))),
-            (indirect: *(*saveptr + (0 ..))), (indirect: *(delim + (0 ..)));
-    assigns *saveptr
-      \from \old(*saveptr), s, (indirect: *(*saveptr + (0 ..))),
-            (indirect: *(delim + (0 ..)));
-    
-    behavior new_str:
-      assumes s_not_null: s ≢ \null;
-      requires
-        valid_string_s_or_delim_not_found:
-          valid_string(s) ∨
-          (valid_read_string(s) ∧
-           (∀ int i;
-              0 ≤ i < strlen(delim) ⇒
-              ¬(strchr(s, *(delim + i)) ≡ \true)));
-      ensures
-        result_subset:
-          \result ≡ \null ∨ \subset(\result, \old(s) + (0 ..));
-      ensures initialization: \initialized(\old(saveptr));
-      ensures saveptr_subset: \subset(*\old(saveptr), \old(s) + (0 ..));
-      assigns *saveptr, *(s + (0 ..)), \result;
-      assigns *saveptr
-        \from s, (indirect: *(s + (0 ..))), (indirect: *(delim + (0 ..)));
-      assigns *(s + (0 ..))
-        \from *(s + (0 ..)), (indirect: s), (indirect: *(delim + (0 ..)));
-      assigns \result
-        \from s, (indirect: *(s + (0 ..))), (indirect: *(delim + (0 ..)));
-    
-    behavior resume_str:
-      assumes s_null: s ≡ \null;
-      requires not_first_call: *saveptr ≢ \null;
-      requires initialization: saveptr: \initialized(saveptr);
-      ensures
-        result_subset:
-          \result ≡ \null ∨ \subset(\result, \old(*saveptr) + (0 ..));
-      ensures
-        saveptr_subset: \subset(*\old(saveptr), \old(*saveptr) + (0 ..));
-      assigns *(*saveptr + (0 ..)), *saveptr, \result;
-      assigns *(*saveptr + (0 ..))
-        \from *(*saveptr + (0 ..)), (indirect: *saveptr),
-              (indirect: *(delim + (0 ..)));
-      assigns *saveptr
-        \from \old(*saveptr), (indirect: *(*saveptr + (0 ..))),
-              (indirect: *(delim + (0 ..)));
-      assigns \result
-        \from *saveptr, (indirect: *(*saveptr + (0 ..))),
-              (indirect: *(delim + (0 ..)));
-    
-    complete behaviors resume_str, new_str;
-    disjoint behaviors resume_str, new_str;
+/*@ requires finite_arg: \is_finite(x);
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x;
  */
-extern char *strtok_r(char * __restrict s, char const * __restrict delim,
-                      char ** __restrict saveptr);
+extern long double floorl(long double x);
 
-/*@ requires
-      valid_string_stringp: \valid(stringp) ∧ valid_string(*stringp);
-    requires valid_string_delim: valid_read_string(delim);
-    assigns *stringp, \result;
-    assigns *stringp \from *(delim + (..)), *(*(stringp + (..)));
-    assigns \result \from *(delim + (..)), *(*(stringp + (..)));
+/*@ requires finite_arg: \is_finite(x);
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x;
  */
-extern char *strsep(char **stringp, char const *delim);
+extern double round(double x);
 
-char __fc_strerror[64];
-char * const __fc_p_strerror = __fc_strerror;
-char *strerror(int errnum);
+/*@ requires finite_arg: \is_finite(x);
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x;
+ */
+extern float roundf(float x);
 
-char *strcpy(char *dest, char const *src);
+/*@ requires finite_arg: \is_finite(x);
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x;
+ */
+extern long double roundl(long double x);
 
-char *strncpy(char *dest, char const *src, size_t n);
+/*@ requires finite_arg: \is_finite(x);
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x;
+ */
+extern double trunc(double x);
 
-/*@ requires valid_string_src: valid_read_string(src);
-    requires room_nstring: \valid(dest + (0 .. n - 1));
-    requires
-      separation:
-        \separated(
-          dest + (0 .. n - 1), src + (0 .. \max(n - 1, strlen(src)))
-          );
-    ensures
-      initialization:
-        \initialized(\old(dest) + (0 .. \min(strlen(\old(src)), \old(n) - 1)));
-    ensures bounded_result: \result ≡ strlen(\old(src));
-    assigns *(dest + (0 .. n - 1)), \result;
-    assigns *(dest + (0 .. n - 1)) \from *(src + (0 .. n - 1));
-    assigns \result
-      \from (indirect: src), (indirect: *(src + (0 .. n - 1))), (indirect: n);
+/*@ requires finite_arg: \is_finite(x);
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x;
  */
-size_t strlcpy(char * __restrict dest, char const * __restrict src, size_t n);
+extern float truncf(float x);
 
-/*@ requires valid_string_src: valid_read_string(src);
-    requires room_string: \valid(dest + (0 .. strlen(src)));
-    requires
-      separation:
-        \separated(dest + (0 .. strlen(src)), src + (0 .. strlen(src)));
-    ensures equal_contents: strcmp(\old(dest), \old(src)) ≡ 0;
-    ensures points_to_end: \result ≡ \old(dest) + strlen(\old(dest));
-    assigns *(dest + (0 .. strlen{Old}(src))), \result;
-    assigns *(dest + (0 .. strlen{Old}(src)))
-      \from *(src + (0 .. strlen{Old}(src)));
-    assigns \result \from dest;
+/*@ requires finite_arg: \is_finite(x);
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x;
  */
-extern char *stpcpy(char * __restrict dest, char const * __restrict src);
+extern long double truncl(long double x);
 
-char *strcat(char *dest, char const *src);
+/*@ requires finite_args: \is_finite(x) ∧ \is_finite(y);
+    requires finite_logic_result: \is_finite(fmod(x, y));
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x, y;
+ */
+extern double fmod(double x, double y);
 
-char *strncat(char *dest, char const *src, size_t n);
+/*@ requires finite_args: \is_finite(x) ∧ \is_finite(y);
+    requires finite_logic_result: \is_finite(fmodf(x, y));
+    ensures finite_result: \is_finite(\result);
+    assigns \result;
+    assigns \result \from x, y;
+ */
+extern float fmodf(float x, float y);
 
-/*@ requires valid_string_src: valid_read_string(src);
-    requires valid_string_dest: valid_string(dest);
-    requires room_nstring: \valid(dest + (0 .. n - 1));
-    ensures
-      bounded_result: \result ≡ strlen(\old(dest)) + strlen(\old(src));
-    assigns *(dest + (strlen{Old}(dest) .. n)), \result;
-    assigns *(dest + (strlen{Old}(dest) .. n))
-      \from (indirect: n), *(src + (0 .. strlen{Old}(src)));
-    assigns \result
-      \from (indirect: src), (indirect: *(src + (0 .. n - 1))), (indirect: n);
+/*@ requires tagp_valid_string: valid_read_string(tagp);
+    ensures result_is_nan: \is_NaN(\result);
+    assigns \result;
+    assigns \result \from (indirect: *(tagp + (0 ..)));
  */
-extern size_t strlcat(char * __restrict dest, char const * __restrict src,
-                      size_t n);
+extern double nan(char const *tagp);
 
-/*@ requires valid_dest: \valid(dest + (0 .. n - 1));
-    requires valid_string_src: valid_read_string(src);
-    assigns *(dest + (0 .. n - 1)), \result;
-    assigns *(dest + (0 .. n - 1))
-      \from (indirect: *(src + (0 ..))), (indirect: n);
-    assigns \result \from dest;
+/*@ requires tagp_valid_string: valid_read_string(tagp);
+    ensures result_is_nan: \is_NaN(\result);
+    assigns \result;
+    assigns \result \from (indirect: *(tagp + (0 ..)));
  */
-extern size_t strxfrm(char * __restrict dest, char const * __restrict src,
-                      size_t n);
+extern float nanf(char const *tagp);
 
-char *strdup(char const *s);
+/*@ requires tagp_valid_string: valid_read_string(tagp);
+    ensures result_is_nan: \is_NaN(\result);
+    assigns \result;
+    assigns \result \from (indirect: *(tagp + (0 ..)));
+ */
+extern long double nanl(char const *tagp);
 
-char *strndup(char const *s, size_t n);
+int __finitef(float f);
 
-char __fc_strsignal[64];
-char * const __fc_p_strsignal = __fc_strsignal;
-char *strsignal(int signum);
+int __finite(double d);
 
-/*@ requires valid_memory_area: \valid((char *)s + (0 .. n - 1));
-    ensures
-      s_initialized: initialization:
-        \initialized((char *)\old(s) + (0 .. \old(n) - 1));
+/*@ requires finite_arg: \is_finite(x);
+    ensures res_finite: \is_finite(\result);
+    ensures positive_result: \result ≥ 0.;
     ensures
-      zero_initialized: \subset(*((char *)\old(s) + (0 .. \old(n) - 1)), {0});
-    assigns *((char *)s + (0 .. n - 1));
-    assigns *((char *)s + (0 .. n - 1)) \from \nothing;
- */
-extern void bzero(void *s, size_t n);
-
-int strcasecmp(char const *s1, char const *s2);
-
-/*@ requires valid_string_s1: valid_read_nstring(s1, n);
-    requires valid_string_s2: valid_read_nstring(s2, n);
+      equal_magnitude_result: \result ≡ \old(x) ∨ \result ≡ -\old(x);
     assigns \result;
-    assigns \result
-      \from (indirect: n), (indirect: *(s1 + (0 .. n - 1))),
-            (indirect: *(s2 + (0 .. n - 1)));
- */
-extern int strncasecmp(char const *s1, char const *s2, size_t n);
-
-static unsigned int volatile getaddrinfo_net_state;
-/*@ requires
-      nodename_string: nodename ≡ \null ∨ valid_read_string(nodename);
-    requires
-      servname_string: servname ≡ \null ∨ valid_read_string(servname);
-    requires hints_option: hints ≡ \null ∨ \valid_read(hints);
-    requires valid_res: \valid(res);
-    assigns *res, \result, __fc_errno;
-    assigns *res
-      \from (indirect: nodename), (indirect: servname), (indirect: hints);
-    assigns \result
-      \from (indirect: nodename), (indirect: servname), (indirect: hints);
-    assigns __fc_errno
-      \from (indirect: nodename), (indirect: servname), (indirect: hints);
-    allocates *\old(res);
-    
-    behavior empty_request:
-      assumes empty: nodename ≡ \null ∧ servname ≡ \null;
-      ensures no_name: \result ≡ -2;
-      assigns \result;
-      assigns \result \from (indirect: nodename), (indirect: servname);
-    
-    behavior normal_request:
-      assumes has_name: nodename ≢ \null ∨ servname ≢ \null;
-      ensures
-        initialization: allocation: success_or_error:
-          (\result ≡ 0 ∧
-           \fresh{Old, Here}(*\old(res),sizeof(*\old(res))) ∧
-           \initialized(*\old(res))) ∨
-          \result ≡ -3 ∨ \result ≡ -1 ∨ \result ≡ -4 ∨
-          \result ≡ -6 ∨ \result ≡ -10 ∨ \result ≡ -8 ∨
-          \result ≡ -7 ∨ \result ≡ -11;
-    
-    complete behaviors normal_request, empty_request;
-    disjoint behaviors normal_request, empty_request;
+    assigns \result \from x;
  */
-int getaddrinfo(char const * __restrict nodename,
-                char const * __restrict servname,
-                struct addrinfo const * __restrict hints,
-                struct addrinfo ** __restrict res)
+double fabs(double x)
 {
-  int __retres;
-  if (nodename == (char const *)0) 
-    if (servname == (char const *)0) {
-      __retres = -2;
-      goto return_label;
-    }
-  switch (getaddrinfo_net_state) {
-    case (unsigned int)0: __retres = -1;
-    goto return_label;
-    case (unsigned int)1: __retres = -3;
-    goto return_label;
-    case (unsigned int)2: __retres = -4;
-    goto return_label;
-    case (unsigned int)3: __retres = -6;
+  double __retres;
+  if (x == 0.0) {
+    __retres = 0.0;
     goto return_label;
-    case (unsigned int)5: __retres = -8;
+  }
+  if (x > 0.0) {
+    __retres = x;
     goto return_label;
-    case (unsigned int)6: __retres = -7;
+  }
+  __retres = - x;
+  return_label: return __retres;
+}
+
+/*@ requires finite_arg: \is_finite(x);
+    ensures res_finite: \is_finite(\result);
+    ensures positive_result: \result ≥ 0.;
+    ensures
+      equal_magnitude_result: \result ≡ \old(x) ∨ \result ≡ -\old(x);
+    assigns \result;
+    assigns \result \from x;
+ */
+float fabsf(float x)
+{
+  float __retres;
+  if (x == 0.0f) {
+    __retres = 0.0f;
     goto return_label;
-    case (unsigned int)7:
-    {
-      __fc_errno = 5;
-      __retres = -11;
+  }
+  else 
+    if (x > 0.0f) {
+      __retres = x;
       goto return_label;
     }
-    default:
-    {
-      struct addrinfo *tmp_0;
-      struct sockaddr *tmp_2;
-      int tmp_3;
-      struct addrinfo *ai = malloc(sizeof(*tmp_0));
-      if (! ai) {
-        __retres = -10;
-        goto return_label;
-      }
-      struct sockaddr *sa = malloc(sizeof(*tmp_2));
-      if (! sa) {
-        __retres = -10;
-        goto return_label;
-      }
-      tmp_3 = Frama_C_interval(0,43);
-      sa->sa_family = (unsigned short)tmp_3;
-      /*@ slevel 15; */
-      {
-        int i = 0;
-        while (i < 14) {
-          {
-            int tmp_4;
-            tmp_4 = Frama_C_interval(-128,127);
-            sa->sa_data[i] = (char)tmp_4;
-          }
-          i ++;
-        }
-      }
-      /*@ slevel default; */
-      ai->ai_flags = 0;
-      ai->ai_family = (int)sa->sa_family;
-      ai->ai_socktype = Frama_C_interval(0,5);
-      ai->ai_protocol = Frama_C_interval(0,IPPROTO_MAX);
-      ai->ai_addrlen = sizeof(*sa);
-      ai->ai_addr = sa;
-      ai->ai_canonname = (char *)"dummy";
-      ai->ai_next = (struct addrinfo *)0;
-      *res = ai;
-      __retres = 0;
+    else {
+      __retres = - x;
       goto return_label;
     }
-  }
   return_label: return __retres;
 }
 
-struct __fc_gethostbyname __fc_ghbn;
-int res_search(char const *dname, int class, int type, char *answer,
-               int anslen)
+int __finitef(float f)
 {
-  int tmp;
-  {
-    int i = 0;
-    while (i < anslen - 1) {
-      *(answer + i) = Frama_C_char_interval((char)(-128),(char)127);
-      i ++;
-    }
-  }
-  *(answer + (anslen - 1)) = (char)0;
-  tmp = Frama_C_interval(-1,anslen);
-  return tmp;
+  int __retres;
+  union __fc_u_finitef u;
+  unsigned short usExp;
+  u.f = f;
+  usExp = (unsigned short)((int)u.w[1] & 0x7F80);
+  usExp = (unsigned short)((int)usExp >> 7);
+  __retres = ! ((int)usExp == 0xff);
+  return __retres;
 }
 
-struct hostent *gethostbyname(char const *name)
+int __finite(double d)
 {
-  struct hostent *__retres;
-  char buf[128];
-  char const *cp;
-  int n;
-  int tmp;
-  __fc_ghbn.host.h_addrtype = 2;
-  __fc_ghbn.host.h_length = (int)sizeof(struct in_addr);
-  if ((int)*name >= '0') 
-    if ((int)*name <= '9') {
-      cp = name;
-      while (1) {
-        if (! *cp) {
-          struct in_addr addr;
-          cp --;
-          ;
-          if ((int)*cp == '.') break;
-          addr.s_addr = inet_addr(name);
-          if (addr.s_addr == 0xffffffff) {
-            __retres = (struct hostent *)0;
-            goto return_label;
-          }
-          memcpy((void *)(__fc_ghbn.host_addr),(void const *)(& addr),
-                 (unsigned int)__fc_ghbn.host.h_length);
-          strncpy(__fc_ghbn.hostbuf,name,(unsigned int)(128 - 1));
-          __fc_ghbn.hostbuf[128 - 1] = (char)'\000';
-          __fc_ghbn.host.h_name = __fc_ghbn.hostbuf;
-          __fc_ghbn.host.h_aliases = __fc_ghbn.host_aliases;
-          __fc_ghbn.host_aliases[0] = (char *)0;
-          __fc_ghbn.h_addr_ptrs[0] = (char *)(__fc_ghbn.host_addr);
-          __fc_ghbn.h_addr_ptrs[1] = (char *)0;
-          __fc_ghbn.host.h_addr_list = __fc_ghbn.h_addr_ptrs;
-          __retres = & __fc_ghbn.host;
-          goto return_label;
-        }
-        if ((int)*cp < '0') 
-          if ((int)*cp > '9') 
-            if ((int)*cp != '.') break;
-        cp ++;
-      }
-    }
-  n = res_search(name,1,1,buf,(int)sizeof(buf));
-  if (n < 0) {
-    __retres = (struct hostent *)0;
-    goto return_label;
-  }
-  tmp = Frama_C_nondet(0,1);
-  if (tmp) {
-    __retres = (struct hostent *)0;
-    goto return_label;
-  }
-  else {
-    struct in_addr addr_0;
-    addr_0.s_addr = inet_addr(name);
-    memcpy((void *)(__fc_ghbn.host_addr),(void const *)(& addr_0),
-           (unsigned int)__fc_ghbn.host.h_length);
-    strncpy(__fc_ghbn.hostbuf,name,(unsigned int)(128 - 1));
-    __fc_ghbn.hostbuf[128 - 1] = (char)'\000';
-    __fc_ghbn.host.h_name = __fc_ghbn.hostbuf;
-    __fc_ghbn.host.h_aliases = __fc_ghbn.host_aliases;
-    __fc_ghbn.host_aliases[0] = (char *)0;
-    __fc_ghbn.h_addr_ptrs[0] = (char *)(__fc_ghbn.host_addr);
-    __fc_ghbn.h_addr_ptrs[1] = (char *)0;
-    __fc_ghbn.host.h_addr_list = __fc_ghbn.h_addr_ptrs;
-    __retres = & __fc_ghbn.host;
-    goto return_label;
-  }
-  return_label: return __retres;
+  int __retres;
+  union __fc_u_finite u;
+  unsigned short usExp;
+  u.d = d;
+  usExp = (unsigned short)((int)u.w[3] & 0x7F80);
+  usExp = (unsigned short)((int)usExp >> 7);
+  __retres = ! ((int)usExp == 0xff);
+  return __retres;
 }
 
-FILE *__fc_stderr;
-
-FILE *__fc_stdin;
-
-FILE *__fc_stdout;
-
 /*@ assigns \nothing; */
-extern int remove(char const *filename);
+extern void (*signal(int sig, void (*func)(int )))(int );
 
-/*@ assigns \nothing; */
-extern int rename(char const *old_name, char const *new_name);
+/*@ ensures never_terminates: \false;
+    assigns \nothing; */
+extern int raise(int sig);
 
-FILE __fc_fopen[16];
-FILE * const __fc_p_fopen = __fc_fopen;
-/*@ ensures
-      result_null_or_valid_fd:
-        \result ≡ \null ∨ \subset(\result, &__fc_fopen[0 .. 16 - 1]);
-    assigns \result;
-    assigns \result \from __fc_p_fopen;
+/*@ requires valid_set: \valid(set);
+    ensures initialization: set: \initialized(\old(set));
+    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns *set, \result;
+    assigns *set \from \nothing;
+    assigns \result \from \nothing;
  */
-extern FILE *tmpfile(void);
+extern int sigemptyset(sigset_t *set);
 
-/*@ assigns \result, *(s + (..));
-    assigns \result \from *(s + (..));
-    assigns *(s + (..)) \from \nothing;
+/*@ requires valid_set: \valid(set);
+    ensures initialization: set: \initialized(\old(set));
+    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns *set, \result;
+    assigns *set \from \nothing;
+    assigns \result \from \nothing;
  */
-extern char *tmpnam(char *s);
+extern int sigfillset(sigset_t *set);
 
-/*@ requires valid_stream: \valid(stream);
-    ensures result_zero_or_EOF: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result;
-    assigns \result \from stream, stream->__fc_FILE_id;
+/*@ requires valid_set: \valid(set);
+    requires initialization: set: \initialized(set);
+    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns *set, \result;
+    assigns *set \from (indirect: signum);
+    assigns \result \from signum;
  */
-extern int fclose(FILE *stream);
+extern int sigaddset(sigset_t *set, int signum);
 
-/*@ requires null_or_valid_stream: stream ≡ \null ∨ \valid_read(stream);
-    ensures result_zero_or_EOF: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result;
-    assigns \result \from stream, stream->__fc_FILE_id;
+/*@ requires valid_set: \valid(set);
+    requires initialization: set: \initialized(set);
+    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns *set, \result;
+    assigns *set \from (indirect: signum);
+    assigns \result \from signum;
  */
-extern int fflush(FILE *stream);
+extern int sigdelset(sigset_t *set, int signum);
 
-/*@ requires valid_filename: valid_read_string(filename);
-    requires valid_mode: valid_read_string(mode);
+/*@ requires valid_read_set: \valid_read(set);
+    requires initialization: set: \initialized(set);
     ensures
-      result_null_or_valid_fd:
-        \result ≡ \null ∨ \subset(\result, &__fc_fopen[0 .. 16 - 1]);
+      result_found_not_found_or_error:
+        \result ≡ 0 ∨ \result ≡ 1 ∨ \result ≡ -1;
     assigns \result;
-    assigns \result
-      \from (indirect: *(filename + (..))), (indirect: *(mode + (..))),
-            __fc_p_fopen;
+    assigns \result \from *set, signum;
  */
-extern FILE *fopen(char const * __restrict filename,
-                   char const * __restrict mode);
+extern int sigismember(sigset_t const *set, int signum);
 
-/*@ requires valid_mode: valid_read_string(mode);
+struct sigaction __fc_sigaction[64 + 1];
+struct sigaction *__fc_p_sigaction = __fc_sigaction;
+/*@ requires valid_signal: 0 ≤ signum ≤ 64;
+    requires valid_oldact_or_null: oldact ≡ \null ∨ \valid(oldact);
+    requires valid_read_act_or_null: act ≡ \null ∨ \valid_read(act);
+    requires separation: separated_acts: \separated(act, oldact);
     ensures
-      result_null_or_valid_fd:
-        \result ≡ \null ∨ \subset(\result, &__fc_fopen[0 .. 16 - 1]);
-    assigns \result, __fc_fopen[fd];
+      act_changed:
+        \old(act) ≡ \null ∨
+        \subset(*(__fc_p_sigaction + \old(signum)), *\old(act));
+    ensures
+      oldact_assigned:
+        \old(oldact) ≡ \null ∨
+        *\old(oldact) ∈ *(__fc_p_sigaction + \old(signum));
+    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns *oldact, *(__fc_p_sigaction + signum), \result;
+    assigns *oldact \from __fc_p_sigaction;
+    assigns *(__fc_p_sigaction + signum) \from *act;
     assigns \result
-      \from (indirect: fd), (indirect: *(mode + (0 ..))),
-            (indirect: __fc_fopen[fd]), __fc_p_fopen;
-    assigns __fc_fopen[fd]
-      \from (indirect: fd), (indirect: *(mode + (0 ..))),
-            (indirect: __fc_fopen[fd]), __fc_p_fopen;
+      \from (indirect: signum), (indirect: act), (indirect: *act),
+            (indirect: oldact), (indirect: *oldact);
  */
-extern FILE *fdopen(int fd, char const *mode);
+extern int sigaction(int signum, struct sigaction const * __restrict act,
+                     struct sigaction * __restrict oldact);
 
-/*@ requires valid_filename: valid_read_string(filename);
-    requires valid_mode: valid_read_string(mode);
-    requires valid_stream: \valid(stream);
+/*@ requires valid_set_or_null: set ≡ \null ∨ \valid_read(set);
+    requires valid_how: set ≢ \null ⇒ how ∈ {0, 2, 1};
+    requires valid_oldset_or_null: oldset ≡ \null ∨ \valid(oldset);
+    requires
+      separation: (set ≡ oldset ≡ \null) ∨ \separated(set, oldset);
+    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
     ensures
-      result_null_or_valid_fd:
-        \result ≡ \null ∨ \result ∈ &__fc_fopen[0 .. 16 - 1];
-    ensures stream_opened: *\old(stream) ∈ __fc_fopen[0 .. 16 - 1];
-    assigns \result, *stream;
+      initialization: oldset_initialized:
+        \old(oldset) ≢ \null ∧ \result ≡ 0 ⇒
+        \initialized(\old(oldset));
+    assigns \result, *oldset;
     assigns \result
-      \from (indirect: *(filename + (..))), (indirect: *(mode + (..))),
-            __fc_p_fopen, (indirect: stream);
-    assigns *stream
-      \from (indirect: *(filename + (..))), (indirect: *(mode + (..))),
-            __fc_p_fopen, (indirect: stream);
+      \from (indirect: how), (indirect: set), (indirect: oldset);
+    assigns *oldset \from (indirect: how), (indirect: oldset);
  */
-extern FILE *freopen(char const * __restrict filename,
-                     char const * __restrict mode, FILE * __restrict stream);
-
-/*@ assigns *stream;
-    assigns *stream \from buf; */
-extern void setbuf(FILE * __restrict stream, char * __restrict buf);
-
-/*@ assigns *stream;
-    assigns *stream \from buf, mode, size; */
-extern int setvbuf(FILE * __restrict stream, char * __restrict buf, int mode,
-                   size_t size);
-
-/*@ axiomatic format_length {
-      logic ℤ format_length{L}(char *format) ;
-      
-      }
-
-*/
-/*@ assigns *stream;
-    assigns *stream \from *(format + (..)), arg; */
-extern int vfprintf(FILE * __restrict stream, char const * __restrict format,
-                    va_list arg);
-
-/*@ assigns *stream;
-    assigns *stream \from *(format + (..)), *stream; */
-extern int vfscanf(FILE * __restrict stream, char const * __restrict format,
-                   va_list arg);
-
-/*@ assigns *__fc_stdout;
-    assigns *__fc_stdout \from arg; */
-extern int vprintf(char const * __restrict format, va_list arg);
-
-/*@ assigns *__fc_stdin;
-    assigns *__fc_stdin \from *(format + (..)); */
-extern int vscanf(char const * __restrict format, va_list arg);
+extern int sigprocmask(int how, sigset_t const * __restrict set,
+                       sigset_t * __restrict oldset);
 
-/*@ assigns *(s + (0 .. n - 1));
-    assigns *(s + (0 .. n - 1)) \from *(format + (..)), arg;
+/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns \result;
+    assigns \result \from (indirect: pid), (indirect: sig);
  */
-extern int vsnprintf(char * __restrict s, size_t n,
-                     char const * __restrict format, va_list arg);
+extern int kill(pid_t pid, int sig);
 
-/*@ assigns *(s + (0 ..));
-    assigns *(s + (0 ..)) \from *(format + (..)), arg;
+/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns \result;
+    assigns \result \from (indirect: pgrp), (indirect: sig);
  */
-extern int vsprintf(char * __restrict s, char const * __restrict format,
-                    va_list arg);
+extern int killpg(pid_t pgrp, int sig);
 
-/*@ requires valid_stream: \valid(stream);
-    ensures result_uchar_or_eof: (0 ≤ \result ≤ 255) ∨ \result ≡ -1;
-    assigns *stream, \result;
-    assigns *stream \from *stream;
-    assigns \result \from (indirect: *stream);
+/*@ requires valid_read_iov: \valid_read(iov + (0 .. iovcnt - 1));
+    assigns *((char *)(iov + (0 .. iovcnt - 1))->iov_base + (0 ..));
  */
-extern int fgetc(FILE *stream);
+extern ssize_t readv(int fd, struct iovec const *iov, int iovcnt);
 
-/*@ requires valid_stream: \valid(stream);
-    ensures result_null_or_same: \result ≡ \null ∨ \result ≡ \old(s);
+/*@ ghost struct __fc_sockfds_type __fc_sockfds[1024]; */
+/*@ ghost extern int __fc_socket_counter __attribute__((__FRAMA_C_MODEL__));
+*/
+
+/*@ ghost int volatile __fc_open_sock_fds; */
+/*@ requires valid_sockfd: 0 ≤ sockfd < 1024;
     ensures
-      terminated_string_on_success:
-        \result ≢ \null ⇒ valid_string(\old(s));
-    assigns *(s + (0 .. size)), \result;
-    assigns *(s + (0 .. size)) \from (indirect: size), (indirect: *stream);
-    assigns \result \from s, (indirect: size), (indirect: *stream);
+      result_error_or_valid_new_sockfd:
+        \result ≡ -1 ∨ (0 ≤ \result < 1024);
+    assigns \result, *((char *)addr + (0 .. *addrlen - 1)),
+            __fc_sockfds[sockfd];
+    assigns \result \from *addr, *addrlen, __fc_sockfds[sockfd];
+    assigns *((char *)addr + (0 .. *addrlen - 1))
+      \from *addr, *addrlen, __fc_sockfds[sockfd];
+    assigns __fc_sockfds[sockfd] \from *addr, *addrlen, __fc_sockfds[sockfd];
+    
+    behavior addr_null:
+      assumes addr_is_null: addr ≡ \null;
+      requires addrlen_should_be_null: addrlen ≡ \null;
+      assigns \result, __fc_sockfds[sockfd];
+      assigns \result \from __fc_sockfds[sockfd];
+      assigns __fc_sockfds[sockfd] \from __fc_sockfds[sockfd];
+    
+    behavior addr_not_null:
+      assumes addr_is_not_null: addr ≢ \null;
+      requires valid_addrlen: \valid(addrlen);
+      requires addr_has_room: \valid((char *)addr + (0 .. *addrlen - 1));
+      ensures
+        initialization: addr:
+          \initialized((char *)\old(addr) + (0 .. *\old(addrlen) - 1));
+    
+    disjoint behaviors addr_not_null, addr_null;
  */
-extern char *fgets(char * __restrict s, int size, FILE * __restrict stream);
-
-/*@ assigns *stream; */
-extern int fputc(int c, FILE *stream);
-
-/*@ assigns *stream;
-    assigns *stream \from *(s + (..)); */
-extern int fputs(char const * __restrict s, FILE * __restrict stream);
+extern int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
 
-/*@ assigns \result, *stream;
-    assigns \result \from *stream;
-    assigns *stream \from *stream;
+/*@ requires valid_sockfd: sockfd: 0 ≤ sockfd < 1024;
+    requires valid_read_addr: \valid_read((char *)addr + (0 .. addrlen - 1));
+    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns __fc_sockfds[sockfd], \result;
+    assigns __fc_sockfds[sockfd]
+      \from sockfd, *addr, addrlen, __fc_sockfds[sockfd];
+    assigns \result
+      \from (indirect: sockfd), (indirect: *addr), (indirect: addrlen),
+            (indirect: __fc_sockfds[sockfd]);
  */
-extern int getc(FILE *stream);
+extern int bind(int sockfd, struct sockaddr const *addr, socklen_t addrlen);
 
-/*@ assigns \result;
-    assigns \result \from *__fc_stdin; */
-extern int getchar(void);
-
-/*@ ensures result_null_or_same: \result ≡ \old(s) ∨ \result ≡ \null;
-    assigns *(s + (..)), \result;
-    assigns *(s + (..)) \from *__fc_stdin;
-    assigns \result \from s, __fc_stdin;
+/*@ requires valid_sockfd: 0 ≤ sockfd < 1024;
+    requires valid_read_addr: \valid_read((char *)addr + (0 .. addrlen - 1));
+    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns __fc_sockfds[sockfd], \result;
+    assigns __fc_sockfds[sockfd]
+      \from __fc_sockfds[sockfd], (indirect: sockfd), (indirect: addr),
+            (indirect: *addr), (indirect: addrlen);
+    assigns \result
+      \from (indirect: __fc_sockfds[sockfd]), (indirect: sockfd),
+            (indirect: addr), (indirect: *addr), (indirect: addrlen);
  */
-extern char *gets(char *s);
-
-/*@ assigns *stream;
-    assigns *stream \from c; */
-extern int putc(int c, FILE *stream);
-
-/*@ assigns *__fc_stdout;
-    assigns *__fc_stdout \from c; */
-extern int putchar(int c);
+extern int connect(int sockfd, struct sockaddr const *addr, socklen_t addrlen);
 
-/*@ assigns *__fc_stdout;
-    assigns *__fc_stdout \from *(s + (..)); */
-extern int puts(char const *s);
+/*@ requires valid_sockfd: 0 ≤ sockfd < 1024;
+    requires valid_optlen: \valid(optlen);
+    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns *((char *)optval + (0 ..)), \result, *optlen;
+    assigns *((char *)optval + (0 ..))
+      \from (indirect: sockfd), (indirect: level), (indirect: optname),
+            (indirect: *optlen), (indirect: optval),
+            (indirect: __fc_sockfds[sockfd]);
+    assigns \result
+      \from (indirect: sockfd), (indirect: level), (indirect: optname),
+            (indirect: *optlen), (indirect: optval),
+            (indirect: __fc_sockfds[sockfd]);
+    assigns *optlen
+      \from (indirect: sockfd), (indirect: level), (indirect: optname),
+            *optlen, (indirect: optval), (indirect: __fc_sockfds[sockfd]);
+    
+    behavior so_error:
+      assumes optname_is_error: level ≡ 1 ∧ optname ≡ 4;
+      requires valid_optlen: \valid(optlen);
+      requires optlen_value: *optlen ≡ sizeof(int);
+      requires valid_optval: \valid((int *)optval);
+      assigns *((int *)optval), \result;
+      assigns *((int *)optval)
+        \from (indirect: sockfd), (indirect: optlen),
+              (indirect: __fc_sockfds[sockfd]);
+      assigns \result
+        \from (indirect: sockfd), (indirect: optlen),
+              (indirect: __fc_sockfds[sockfd]);
+    
+    behavior other_options:
+      assumes optname_not_error: ¬(level ≡ 1 ∧ optname ≡ 4);
+      requires
+        optval_null_or_valid:
+          optval ≡ \null ∨ \valid((char *)optval + (0 ..));
+      assigns *((char *)optval + (0 ..)), \result, *optlen;
+      assigns *((char *)optval + (0 ..))
+        \from (indirect: sockfd), (indirect: level), (indirect: optname),
+              (indirect: *optlen), (indirect: optval),
+              (indirect: __fc_sockfds[sockfd]);
+      assigns \result
+        \from (indirect: sockfd), (indirect: level), (indirect: optname),
+              (indirect: *optlen), (indirect: optval),
+              (indirect: __fc_sockfds[sockfd]);
+      assigns *optlen
+        \from (indirect: sockfd), (indirect: level), (indirect: optname),
+              *optlen, (indirect: optval), (indirect: __fc_sockfds[sockfd]);
+    
+    complete behaviors other_options, so_error;
+    disjoint behaviors other_options, so_error;
+ */
+extern int getsockopt(int sockfd, int level, int optname, void *optval,
+                      socklen_t *optlen);
 
-/*@ assigns *stream;
-    assigns *stream \from c; */
-extern int ungetc(int c, FILE *stream);
+/*@ requires valid_sockfd: 0 ≤ sockfd < 1024;
+    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns \result, __fc_sockfds[sockfd];
+    assigns \result \from sockfd, __fc_sockfds[sockfd];
+    assigns __fc_sockfds[sockfd] \from sockfd, backlog, __fc_sockfds[sockfd];
+ */
+extern int listen(int sockfd, int backlog);
 
-/*@ requires valid_ptr_block: \valid((char *)ptr + (0 .. nmemb * size - 1));
-    requires valid_stream: \valid(stream);
-    ensures size_read: \result ≤ \old(nmemb);
+/*@ requires valid_sockfd: 0 ≤ sockfd < 1024;
+    requires valid_buffer_length: \valid((char *)buf + (0 .. len - 1));
     ensures
-      initialization:
-        \initialized((char *)\old(ptr) + (0 .. \result * \old(size) - 1));
-    assigns *((char *)ptr + (0 .. nmemb * size - 1)), \result;
-    assigns *((char *)ptr + (0 .. nmemb * size - 1))
-      \from size, nmemb, *stream;
-    assigns \result \from size, *stream;
+      result_error_or_received_length:
+        \result ≡ -1 ∨ (0 ≤ \result ≤ \old(len));
+    ensures
+      initialization: \initialized((char *)\old(buf) + (0 .. \result - 1));
+    assigns *((char *)buf + (0 .. len - 1)), __fc_sockfds[sockfd], \result;
+    assigns *((char *)buf + (0 .. len - 1))
+      \from sockfd, len, flags, __fc_sockfds[sockfd];
+    assigns __fc_sockfds[sockfd]
+      \from sockfd, len, flags, __fc_sockfds[sockfd];
+    assigns \result \from sockfd, len, flags, __fc_sockfds[sockfd];
  */
-extern size_t fread(void * __restrict ptr, size_t size, size_t nmemb,
-                    FILE * __restrict stream);
+extern ssize_t recv(int sockfd, void *buf, size_t len, int flags);
 
-/*@ requires
-      valid_ptr_block: \valid_read((char *)ptr + (0 .. nmemb * size - 1));
-    requires valid_stream: \valid(stream);
-    ensures size_written: \result ≤ \old(nmemb);
-    assigns *stream, \result;
-    assigns *stream \from *((char *)ptr + (0 .. nmemb * size - 1));
-    assigns \result \from *((char *)ptr + (0 .. nmemb * size - 1));
+/*@ requires valid_sockfd: 0 ≤ sockfd < 1024;
+    requires
+      msg_control_has_room:
+        \valid((char *)hdr->msg_control + (0 .. hdr->msg_controllen - 1));
+    requires
+      msg_iov_has_room: \valid(hdr->msg_iov + (0 .. hdr->msg_iovlen - 1));
+    requires
+      msg_name_null_or_has_room:
+        hdr->msg_name ≡ \null ∨
+        \valid((char *)hdr->msg_name + (0 .. hdr->msg_namelen - 1));
+    ensures
+      result_error_or_received_length:
+        \result ≡ -1 ∨ (0 ≤ \result ≤ \old(hdr)->msg_iovlen);
+    assigns *((char *)hdr->msg_name + (0 .. hdr->msg_namelen - 1)),
+            hdr->msg_namelen,
+            *((char *)(hdr->msg_iov + (0 .. hdr->msg_iovlen - 1))->iov_base +
+              (0 ..)),
+            *((char *)hdr->msg_control + (0 .. hdr->msg_controllen - 1)),
+            \result, hdr->msg_controllen, hdr->msg_flags,
+            __fc_sockfds[sockfd];
+    assigns *((char *)hdr->msg_name + (0 .. hdr->msg_namelen - 1))
+      \from __fc_sockfds[sockfd];
+    assigns hdr->msg_namelen \from __fc_sockfds[sockfd];
+    assigns
+    *((char *)(hdr->msg_iov + (0 .. hdr->msg_iovlen - 1))->iov_base + (0 ..))
+      \from __fc_sockfds[sockfd];
+    assigns *((char *)hdr->msg_control + (0 .. hdr->msg_controllen - 1))
+      \from __fc_sockfds[sockfd];
+    assigns \result \from __fc_sockfds[sockfd];
+    assigns hdr->msg_controllen \from __fc_sockfds[sockfd];
+    assigns hdr->msg_flags \from __fc_sockfds[sockfd];
+    assigns __fc_sockfds[sockfd] \from __fc_sockfds[sockfd];
  */
-extern size_t fwrite(void const * __restrict ptr, size_t size, size_t nmemb,
-                     FILE * __restrict stream);
-
-/*@ assigns *pos;
-    assigns *pos \from *stream; */
-extern int fgetpos(FILE * __restrict stream, fpos_t * __restrict pos);
+extern ssize_t recvmsg(int sockfd, struct msghdr *hdr, int flags);
 
-/*@ requires valid_stream: \valid(stream);
-    requires whence_enum: whence ≡ 0 ∨ whence ≡ 1 ∨ whence ≡ 2;
-    assigns *stream, \result, __fc_errno;
-    assigns *stream \from *stream, (indirect: offset), (indirect: whence);
-    assigns \result
-      \from (indirect: *stream), (indirect: offset), (indirect: whence);
+/*@ requires available_sockfd: 0 ≤ sockfd < 1024;
+    requires buf_len_ok: \valid_read((char *)buf + (0 .. len - 1));
+    ensures
+      error_or_chars_sent: \result ≡ -1 ∨ (0 ≤ \result ≤ \old(len));
+    assigns __fc_errno, __fc_sockfds[sockfd], \result;
     assigns __fc_errno
-      \from (indirect: *stream), (indirect: offset), (indirect: whence);
+      \from (indirect: sockfd), (indirect: __fc_sockfds[sockfd]),
+            (indirect: *((char *)buf + (0 .. len))), flags;
+    assigns __fc_sockfds[sockfd]
+      \from __fc_sockfds[sockfd], *((char *)buf + (0 .. len)), flags;
+    assigns \result
+      \from (indirect: sockfd), (indirect: __fc_sockfds[sockfd]),
+            (indirect: *((char *)buf + (0 .. len))), (indirect: flags);
  */
-extern int fseek(FILE *stream, long offset, int whence);
-
-/*@ assigns *stream;
-    assigns *stream \from *pos; */
-extern int fsetpos(FILE *stream, fpos_t const *pos);
+extern ssize_t send(int sockfd, void const *buf, size_t len, int flags);
 
-/*@ requires valid_stream: \valid(stream);
-    ensures
-      success_or_error:
-        \result ≡ -1 ∨
-        (\result ≥ 0 ∧ __fc_errno ≡ \old(__fc_errno));
-    assigns \result, __fc_errno;
-    assigns \result \from (indirect: *stream);
-    assigns __fc_errno \from (indirect: *stream);
+/*@ requires valid_sockfd: 0 ≤ sockfd < 1024;
+    requires
+      optval_null_or_has_room:
+        optval ≡ \null ∨ \valid_read((char *)optval + (0 .. optlen - 1));
+    ensures result_error_or_ok: \result ≡ 0 ∨ \result ≡ -1;
+    assigns \result, __fc_sockfds[sockfd];
+    assigns \result
+      \from __fc_sockfds[sockfd], level, optname,
+            *((char *)optval + (0 .. optlen - 1)), optlen;
+    assigns __fc_sockfds[sockfd]
+      \from __fc_sockfds[sockfd], level, optname,
+            *((char *)optval + (0 .. optlen - 1)), optlen;
  */
-extern long ftell(FILE *stream);
-
-/*@ assigns *stream;
-    assigns *stream \from \nothing; */
-extern void rewind(FILE *stream);
-
-/*@ assigns *stream;
-    assigns *stream \from \nothing; */
-extern void clearerr(FILE *stream);
-
-/*@ assigns \result;
-    assigns \result \from *stream; */
-extern int feof(FILE *stream);
-
-/*@ assigns \result;
-    assigns \result \from *stream; */
-extern int fileno(FILE *stream);
-
-/*@ assigns *stream;
-    assigns *stream \from \nothing; */
-extern void flockfile(FILE *stream);
+extern int setsockopt(int sockfd, int level, int optname, void const *optval,
+                      socklen_t optlen);
 
-/*@ assigns *stream;
-    assigns *stream \from \nothing; */
-extern void funlockfile(FILE *stream);
+/*@ requires valid_sockfd: 0 ≤ sockfd < 1024;
+    ensures result_error_or_ok: \result ≡ 0 ∨ \result ≡ -1;
+    assigns \result, __fc_sockfds[sockfd];
+    assigns \result \from how, __fc_sockfds[sockfd];
+    assigns __fc_sockfds[sockfd] \from how, __fc_sockfds[sockfd];
+ */
+extern int shutdown(int sockfd, int how);
 
-/*@ assigns \result, *stream;
-    assigns \result \from \nothing;
-    assigns *stream \from \nothing;
+/*@ ensures
+      result_error_or_valid_new_sockfd:
+        (0 ≤ \result < 1024) ∨ \result ≡ -1;
+    assigns \result, __fc_socket_counter;
+    assigns \result
+      \from (indirect: domain), (indirect: type), (indirect: protocol),
+            (indirect: __fc_socket_counter);
+    assigns __fc_socket_counter
+      \from (indirect: domain), (indirect: type), (indirect: protocol),
+            __fc_socket_counter;
  */
-extern int ftrylockfile(FILE *stream);
+extern int socket(int domain, int type, int protocol);
 
-/*@ assigns \result;
-    assigns \result \from *stream; */
-extern int ferror(FILE *stream);
-
-/*@ assigns __fc_stdout;
-    assigns __fc_stdout \from __fc_errno, *(s + (..));
- */
-extern void perror(char const *s);
-
-/*@ assigns \result, *stream;
-    assigns \result \from *stream;
-    assigns *stream \from *stream;
+/*@ requires valid_socket_sector: \valid(sv + (0 .. 1));
+    ensures result_error_or_ok: \result ≡ 0 ∨ \result ≡ -1;
+    ensures initialization: sv: \initialized(\old(sv) + (0 .. 1));
+    ensures valid_new_sockfd: sv0: 0 ≤ *(\old(sv) + 0) < 1024;
+    ensures valid_new_sockfd: sv1: 0 ≤ *(\old(sv) + 1) < 1024;
+    assigns \result, __fc_socket_counter, *(sv + (0 .. 1));
+    assigns \result \from __fc_socket_counter;
+    assigns __fc_socket_counter \from __fc_socket_counter;
+    assigns *(sv + (0 .. 1)) \from __fc_socket_counter;
  */
-extern int getc_unlocked(FILE *stream);
+extern int socketpair(int domain, int type, int protocol, int * /*[2]*/ sv);
 
+struct in6_addr const in6addr_any = {.s6_addr = {(unsigned char)0}};
+struct in6_addr const in6addr_loopback =
+  {.s6_addr = {(unsigned char)0xFF,
+               (unsigned char)0xFF,
+               (unsigned char)0xFF,
+               (unsigned char)0xFF,
+               (unsigned char)0xFF,
+               (unsigned char)0xFF,
+               (unsigned char)0xFF,
+               (unsigned char)0xFF,
+               (unsigned char)0xFF,
+               (unsigned char)0xFF,
+               (unsigned char)0xFF,
+               (unsigned char)0xFF,
+               (unsigned char)0xFF,
+               (unsigned char)0xFF,
+               (unsigned char)0xFF,
+               (unsigned char)0xFF}};
 /*@ assigns \result;
-    assigns \result \from *__fc_stdin; */
-extern int getchar_unlocked(void);
-
-/*@ assigns *stream;
-    assigns *stream \from c; */
-extern int putc_unlocked(int c, FILE *stream);
-
-/*@ assigns *__fc_stdout;
-    assigns *__fc_stdout \from c; */
-extern int putchar_unlocked(int c);
-
-/*@ assigns *stream;
-    assigns *stream \from \nothing; */
-extern void clearerr_unlocked(FILE *stream);
+    assigns \result \from arg; */
+extern uint32_t htonl(uint32_t arg);
 
 /*@ assigns \result;
-    assigns \result \from *stream; */
-extern int feof_unlocked(FILE *stream);
+    assigns \result \from arg; */
+extern uint16_t htons(uint16_t arg);
 
 /*@ assigns \result;
-    assigns \result \from *stream; */
-extern int ferror_unlocked(FILE *stream);
+    assigns \result \from arg; */
+extern uint32_t ntohl(uint32_t arg);
 
 /*@ assigns \result;
-    assigns \result \from *stream; */
-extern int fileno_unlocked(FILE *stream);
+    assigns \result \from arg; */
+extern uint16_t ntohs(uint16_t arg);
 
-/*@ axiomatic pipe_streams {
-      predicate is_open_pipe{L}(FILE *stream) ;
-      
-      }
+/*@ requires valid_arg: valid_read_string(arg);
+    assigns \result;
+    assigns \result \from (indirect: *(arg + (0 ..)));
+ */
+extern in_addr_t inet_addr(char const *arg);
 
-*/
-/*@ requires valid_command: valid_read_string(command);
-    requires valid_type: valid_read_string(type);
-    ensures
-      result_error_or_valid_open_pipe:
-        \result ≡ \null ∨
-        (\subset(\result, &__fc_fopen[0 .. 16 - 1]) ∧ is_open_pipe(\result));
-    assigns \result, __fc_fopen[0 ..];
-    assigns \result
-      \from (indirect: *command), (indirect: *type), __fc_p_fopen;
-    assigns __fc_fopen[0 ..]
-      \from (indirect: *command), (indirect: *type), __fc_fopen[0 ..];
+char volatile __fc_inet_ntoa_array[16];
+char *__fc_inet_ntoa = (char *)(__fc_inet_ntoa_array);
+/*@ ensures result_static_string: \result ≡ __fc_inet_ntoa;
+    ensures result_null_terminated: *(\result + 15) ≡ 0;
+    ensures result_valid_string: valid_read_string(\result);
+    assigns \result, *(__fc_inet_ntoa + (0 ..));
+    assigns \result \from (indirect: arg), __fc_inet_ntoa;
+    assigns *(__fc_inet_ntoa + (0 ..)) \from (indirect: arg);
  */
-extern FILE *popen(char const *command, char const *type);
+extern char *inet_ntoa(struct in_addr arg);
 
-/*@ requires valid_stream: \valid(stream);
-    requires open_pipe: is_open_pipe(stream);
-    ensures closed_stream: ¬is_open_pipe(\old(stream));
-    assigns \result;
-    assigns \result \from (indirect: *stream);
+/*@ assigns \result, *(dst + (0 .. size - 1));
+    assigns \result \from dst, af, *((char *)src + (0 ..));
+    assigns *(dst + (0 .. size - 1)) \from af, *((char *)src + (0 ..));
  */
-extern int pclose(FILE *stream);
+extern char const *inet_ntop(int af, void const *src, char *dst,
+                             socklen_t size);
 
-ssize_t getline(char **lineptr, size_t *n, FILE *stream);
+/*@ assigns \result, *((char *)dst + (0 ..));
+    assigns \result \from af, *(src + (..));
+    assigns *((char *)dst + (0 ..)) \from af, *(src + (0 ..));
+ */
+extern int inet_pton(int af, char const *src, void *dst);
 
-FILE __fc_initial_stdout =
-  {.__fc_FILE_id = (unsigned int)1, .__fc_FILE_data = 0U};
-FILE *__fc_stdout = & __fc_initial_stdout;
-FILE __fc_initial_stderr =
-  {.__fc_FILE_id = (unsigned int)2, .__fc_FILE_data = 0U};
-FILE *__fc_stderr = & __fc_initial_stderr;
-FILE __fc_initial_stdin =
-  {.__fc_FILE_id = (unsigned int)0, .__fc_FILE_data = 0U};
-FILE *__fc_stdin = & __fc_initial_stdin;
-ssize_t getline(char **lineptr, size_t *n, FILE *stream)
-{
-  ssize_t __retres;
-  int tmp;
-  if (! lineptr) goto _LOR;
-  else 
-    if (! n) goto _LOR;
-    else 
-      if (! stream) {
-        _LOR: {
-                __fc_errno = 22;
-                __retres = -1;
-                goto return_label;
-              }
-      }
-  tmp = ferror(stream);
-  if (tmp) goto _LOR_0;
-  else {
-    int tmp_0;
-    tmp_0 = feof(stream);
-    if (tmp_0) {
-      _LOR_0: {
-                __retres = -1;
-                goto return_label;
-              }
-    }
-  }
-  if (! *lineptr) goto _LOR_1;
-  else 
-    if (*n == (size_t)0) {
-      _LOR_1:
-      {
-        *lineptr = (char *)malloc((unsigned int)2);
-        if (! lineptr) {
-          __fc_errno = 12;
-          __retres = -1;
-          goto return_label;
-        }
-        *n = (unsigned int)2;
-      }
-    }
-  size_t cur = (unsigned int)0;
-  while (1) {
-    int tmp_3;
-    tmp_3 = ferror(stream);
-    if (tmp_3) break;
-    else {
-      int tmp_4;
-      tmp_4 = feof(stream);
-      if (tmp_4) break;
-    }
-    {
-      while (cur < *n - (size_t)1) {
-        int tmp_1;
-        tmp_1 = fgetc(stream);
-        char c = (char)tmp_1;
-        if ((int)c == -1) 
-          if (cur == (size_t)0) {
-            __retres = -1;
-            goto return_label;
-          }
-        if ((int)c != -1) {
-          size_t tmp_2;
-          tmp_2 = cur;
-          cur += (size_t)1;
-          *(*lineptr + tmp_2) = c;
-        }
-        if ((int)c == '\n') goto _LOR_2;
-        else 
-          if ((int)c == -1) {
-            _LOR_2:
-            {
-              *(*lineptr + cur) = (char)'\000';
-              __retres = (int)cur;
-              goto return_label;
-            }
-          }
-      }
-      if (*n == (size_t)2147483647) {
-        __fc_errno = 75;
-        __retres = -1;
-        goto return_label;
-      }
-      size_t new_size = *n + (size_t)1;
-      *lineptr = (char *)realloc((void *)*lineptr,new_size);
-      if (! *lineptr) {
-        __fc_errno = 12;
-        __retres = -1;
-        goto return_label;
-      }
-      *n = new_size;
-    }
-  }
-  __retres = -1;
-  return_label: return __retres;
-}
+int h_errno;
+/*@ requires addrinfo_valid: \valid(addrinfo);
+    ensures allocation: \allocable(\old(addrinfo));
+    assigns \nothing;
+    frees addrinfo;
+ */
+extern void freeaddrinfo(struct addrinfo *addrinfo);
 
-/*@ requires abs_representable: i > -2147483647 - 1;
+char *__fc_gai_strerror = (char *)"<error message reported by gai_strerror>";
+/*@ ensures result_string: \result ≡ __fc_gai_strerror;
+    ensures result_valid_string: valid_read_string(\result);
     assigns \result;
-    assigns \result \from i;
-    
-    behavior negative:
-      assumes negative: i < 0;
-      ensures opposite_result: \result ≡ -\old(i);
-    
-    behavior nonnegative:
-      assumes nonnegative: i ≥ 0;
-      ensures same_result: \result ≡ \old(i);
-    
-    complete behaviors nonnegative, negative;
-    disjoint behaviors nonnegative, negative;
+    assigns \result \from (indirect: errcode), __fc_gai_strerror;
  */
-int abs(int i)
-{
-  int __retres;
-  if (i < 0) {
-    __retres = - i;
-    goto return_label;
-  }
-  __retres = i;
-  return_label: return __retres;
-}
+extern char const *gai_strerror(int errcode);
 
-/*@ requires valid_nptr: \valid_read(p);
-    assigns \result;
-    assigns \result \from (indirect: p), (indirect: *(p + (0 ..)));
+int getaddrinfo(char const * __restrict nodename,
+                char const * __restrict servname,
+                struct addrinfo const * __restrict hints,
+                struct addrinfo ** __restrict res);
+
+struct hostent *gethostbyname(char const *name);
+
+/*@
+predicate non_escaping{L}(void *s, size_t n) =
+  ∀ unsigned int i; 0 ≤ i < n ⇒ ¬\dangling((char *)s + i);
  */
-int atoi(char const *p)
-{
-  int __retres;
-  int n;
-  int c;
-  int tmp_1;
-  int tmp_3;
-  int neg = 0;
-  unsigned char *up = (unsigned char *)p;
-  c = (int)*up;
-  tmp_1 = isdigit(c);
-  if (! tmp_1) {
-    int tmp_0;
-    while (1) {
-      int tmp;
-      tmp = isspace(c);
-      if (! tmp) break;
-      up ++;
-      c = (int)*up;
-    }
-    switch (c) {
-      case '-': neg ++;
-      case '+': { /* sequence */
-                  up ++;
-                  c = (int)*up;
-                }
-    }
-    tmp_0 = isdigit(c);
-    if (! tmp_0) {
-      __retres = 0;
-      goto return_label;
-    }
-  }
-  n = '0' - c;
-  while (1) {
-    int tmp_2;
-    up ++;
-    c = (int)*up;
-    tmp_2 = isdigit(c);
-    if (! tmp_2) break;
-    n *= 10;
-    n += '0' - c;
-  }
-  if (neg) tmp_3 = n; else tmp_3 = - n;
-  __retres = tmp_3;
-  return_label: return __retres;
-}
+/*@
+predicate empty_block{L}(void *s) =
+  \block_length((char *)s) ≡ 0 ∧ \offset((char *)s) ≡ 0;
+ */
+/*@
+predicate valid_or_empty{L}(void *s, size_t n) =
+  (empty_block(s) ∨ \valid_read((char *)s)) ∧
+  \valid((char *)s + (0 .. n - 1));
+ */
+/*@
+predicate valid_read_or_empty{L}(void *s, size_t n) =
+  (empty_block(s) ∨ \valid_read((char *)s)) ∧
+  \valid_read((char *)s + (1 .. n - 1));
 
-/*@ assigns __fc_heap_status, \result;
-    assigns __fc_heap_status
-      \from (indirect: nmemb), (indirect: size), __fc_heap_status;
+*/
+int memcmp(void const *s1, void const *s2, size_t n);
+
+void *memchr(void const *s, int c, size_t n);
+
+void *memcpy(void * __restrict dest, void const * __restrict src, size_t n);
+
+void *memmove(void *dest, void const *src, size_t n);
+
+void *memset(void *s, int c, size_t n);
+
+size_t strlen(char const *s);
+
+size_t strnlen(char const *s, size_t maxlen);
+
+int strcmp(char const *s1, char const *s2);
+
+int strncmp(char const *s1, char const *s2, size_t n);
+
+/*@ requires valid_string_s1: valid_read_string(s1);
+    requires valid_string_s2: valid_read_string(s2);
+    assigns \result;
     assigns \result
-      \from (indirect: nmemb), (indirect: size), (indirect: __fc_heap_status);
-    allocates \result;
-    
-    behavior allocation:
-      assumes can_allocate: is_allocable(nmemb * size);
-      ensures
-        allocation: \fresh{Old, Here}(\result,\old(nmemb) * \old(size));
-      ensures
-        initialization:
-          \initialized((char *)\result + (0 .. \old(nmemb) * \old(size) - 1));
-      ensures
-        zero_initialization:
-          \subset(*((char *)\result + (0 .. \old(nmemb) * \old(size) - 1)),
-                 {0});
-    
-    behavior no_allocation:
-      assumes cannot_allocate: ¬is_allocable(nmemb * size);
-      ensures null_result: \result ≡ \null;
-      assigns \result;
-      assigns \result \from \nothing;
-      allocates \nothing;
-    
-    complete behaviors no_allocation, allocation;
-    disjoint behaviors no_allocation, allocation;
+      \from (indirect: *(s1 + (0 ..))), (indirect: *(s2 + (0 ..)));
  */
-void *calloc(size_t nmemb, size_t size)
-{
-  void *__retres;
-  size_t l = nmemb * size;
-  if (size != (size_t)0) 
-    if (l / size != nmemb) {
-      __retres = (void *)0;
-      goto return_label;
-    }
-  char *p = malloc(l);
-  if (p) memset((void *)p,0,l);
-  __retres = (void *)p;
-  return_label: return __retres;
-}
+extern int strcoll(char const *s1, char const *s2);
 
-static char __fc_env_strings[64];
-static char __fc_initenv_init;
-static void __fc_initenv(void)
-{
-  if (! __fc_initenv_init) {
-    Frama_C_make_unknown(__fc_env_strings,(unsigned int)(64 - 1));
-    {
-      int i = 0;
-      while (i < 4096) {
-        {
-          int tmp;
-          tmp = Frama_C_interval(0,64 - 1);
-          __fc_env[i] = & __fc_env_strings[tmp];
-        }
-        i ++;
-      }
-    }
-    __fc_initenv_init = (char)1;
-  }
-  return;
-}
+char *strchr(char const *s, int c);
 
-/*@ requires valid_name: valid_read_string(name);
-    ensures null_or_valid_result: \result ≡ \null ∨ \valid(\result);
+char *strrchr(char const *s, int c);
+
+/*@ requires valid_string_s: valid_read_string(s);
+    requires valid_string_reject: valid_read_string(reject);
+    ensures result_bounded: 0 ≤ \result ≤ strlen(\old(s));
     assigns \result;
-    assigns \result \from __fc_env[0 ..], (indirect: name), *(name + (0 ..));
+    assigns \result
+      \from (indirect: *(s + (0 ..))), (indirect: *(reject + (0 ..)));
  */
-char *getenv(char const *name)
-{
-  char *__retres;
-  int tmp_0;
-  /*@ assert ¬(strchr(name, '=') ≡ \true); */ ;
-  __fc_initenv();
-  tmp_0 = Frama_C_nondet(0,1);
-  if (tmp_0) {
-    int tmp;
-    tmp = Frama_C_interval(0,4096 - 1);
-    ;
-    __retres = __fc_env[tmp];
-    goto return_label;
-  }
-  else {
-    __retres = (char *)0;
-    goto return_label;
-  }
-  return_label: return __retres;
-}
+extern size_t strcspn(char const *s, char const *reject);
 
-/*@ requires valid_string: valid_read_string(string);
-    assigns __fc_env[0 ..], \result;
-    assigns __fc_env[0 ..] \from __fc_env[0 ..], string;
-    assigns \result \from (indirect: __fc_env[0 ..]), (indirect: string);
+/*@ requires valid_string_s: valid_read_string(s);
+    requires valid_string_accept: valid_read_string(accept);
+    ensures result_bounded: 0 ≤ \result ≤ strlen(\old(s));
+    assigns \result, \result;
+    assigns \result \from *(s + (0 ..)), *(accept + (0 ..));
+    assigns \result
+      \from (indirect: *(s + (0 ..))), (indirect: *(accept + (0 ..)));
  */
-int putenv(char *string)
-{
-  int __retres;
-  int tmp_3;
-  char *separator = strchr((char const *)string,'=');
-  /*@ assert string_contains_separator: separator ≢ \null; */ ;
-  /*@ assert name_is_not_empty: separator ≢ string; */ ;
-  __fc_initenv();
-  tmp_3 = Frama_C_nondet(0,1);
-  if (tmp_3) {
-    int tmp_1;
-    int tmp_2;
-    tmp_1 = Frama_C_nondet(0,1);
-    if (tmp_1) {
-      int tmp_0;
-      tmp_0 = Frama_C_interval(-2147483647 - 1,2147483647);
-      __retres = tmp_0;
-      goto return_label;
-    }
-    tmp_2 = Frama_C_interval(0,4096 - 1);
-    __fc_env[tmp_2] = string;
-  }
-  __retres = 0;
-  return_label: return __retres;
-}
+extern size_t strspn(char const *s, char const *accept);
 
-/*@ requires valid_name: valid_read_string(name);
-    requires valid_value: valid_read_string(value);
-    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result, __fc_env[0 ..];
-    assigns \result
-      \from __fc_env[0 ..], (indirect: name), (indirect: *(name + (0 ..))),
-            (indirect: value), (indirect: *(value + (0 ..))),
-            (indirect: overwrite);
-    assigns __fc_env[0 ..]
-      \from __fc_env[0 ..], (indirect: name), (indirect: *(name + (0 ..))),
-            (indirect: value), (indirect: *(value + (0 ..))),
-            (indirect: overwrite);
+/*@ requires valid_string_s: valid_read_string(s);
+    requires valid_string_accept: valid_read_string(accept);
+    ensures
+      result_null_or_same_base:
+        \result ≡ \null ∨ \base_addr(\result) ≡ \base_addr(\old(s));
+    assigns \result;
+    assigns \result \from s, *(s + (0 ..)), *(accept + (0 ..));
  */
-int setenv(char const *name, char const *value, int overwrite)
-{
-  int __retres;
-  char *tmp;
-  int tmp_4;
-  tmp = strchr(name,'=');
-  if (tmp) {
-    __retres = -1;
-    goto return_label;
-  }
-  size_t namelen = strlen(name);
-  if (namelen == (size_t)0) {
-    __retres = -1;
-    goto return_label;
-  }
-  __fc_initenv();
-  tmp_4 = Frama_C_nondet(0,1);
-  if (tmp_4) {
-    __retres = -1;
-    goto return_label;
-  }
-  else {
-    int tmp_1;
-    int tmp_2;
-    int tmp_3;
-    tmp_1 = Frama_C_nondet(0,1);
-    if (tmp_1) Frama_C_make_unknown(__fc_env_strings,(unsigned int)(64 - 1));
-    tmp_2 = Frama_C_interval(0,4096 - 1);
-    tmp_3 = Frama_C_interval(0,64 - 1);
-    __fc_env[tmp_2] = & __fc_env_strings[tmp_3];
-    __retres = 0;
-    goto return_label;
-  }
-  return_label: return __retres;
-}
+extern char *strpbrk(char const *s, char const *accept);
 
-/*@ requires valid_name: valid_read_string(name);
-    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result, __fc_env[0 ..];
+char *strstr(char const *haystack, char const *needle);
+
+/*@ requires valid_string_haystack: valid_read_string(haystack);
+    requires valid_string_needle: valid_read_string(needle);
+    ensures
+      result_null_or_in_haystack:
+        \result ≡ \null ∨
+        (\subset(\result, \old(haystack) + (0 ..)) ∧ \valid_read(\result));
+    assigns \result;
     assigns \result
-      \from __fc_env[0 ..], (indirect: name), (indirect: *(name + (0 ..)));
-    assigns __fc_env[0 ..]
-      \from __fc_env[0 ..], (indirect: name), (indirect: *(name + (0 ..)));
+      \from haystack, (indirect: *(haystack + (0 ..))),
+            (indirect: *(needle + (0 ..)));
  */
-int unsetenv(char const *name)
-{
-  int __retres;
-  char *tmp;
-  int tmp_2;
-  tmp = strchr(name,'=');
-  if (tmp) {
-    __retres = -1;
-    goto return_label;
-  }
-  size_t namelen = strlen(name);
-  if (namelen == (size_t)0) {
-    __retres = -1;
-    goto return_label;
-  }
-  __fc_initenv();
-  tmp_2 = Frama_C_nondet(0,1);
-  if (tmp_2) {
-    int tmp_1;
-    tmp_1 = Frama_C_interval(0,4096 - 1);
-    __fc_env[tmp_1] = (char *)0;
-  }
-  __retres = 0;
-  return_label: return __retres;
-}
+extern char *strcasestr(char const *haystack, char const *needle);
 
-/*@ requires valid_memptr: \valid(memptr);
-    requires
-      alignment_is_a_suitable_power_of_two:
-        alignment ≥ sizeof(void *) ∧
-        ((size_t)alignment & ((size_t)alignment - 1)) ≡ 0;
-    assigns __fc_heap_status, \result;
-    assigns __fc_heap_status
-      \from (indirect: alignment), size, __fc_heap_status;
+char *__fc_strtok_ptr;
+/*@ requires valid_string_delim: valid_read_string(delim);
+    assigns *(s + (0 ..)), *(__fc_strtok_ptr + (0 ..)), \result,
+            __fc_strtok_ptr;
+    assigns *(s + (0 ..))
+      \from *(s + (0 ..)), (indirect: s), (indirect: __fc_strtok_ptr),
+            (indirect: *(delim + (0 ..)));
+    assigns *(__fc_strtok_ptr + (0 ..))
+      \from *(__fc_strtok_ptr + (0 ..)), (indirect: s),
+            (indirect: __fc_strtok_ptr), (indirect: *(delim + (0 ..)));
     assigns \result
-      \from (indirect: alignment), (indirect: size),
-            (indirect: __fc_heap_status);
-    allocates *\old(memptr);
+      \from s, __fc_strtok_ptr, (indirect: *(s + (0 ..))),
+            (indirect: *(__fc_strtok_ptr + (0 ..))),
+            (indirect: *(delim + (0 ..)));
+    assigns __fc_strtok_ptr
+      \from \old(__fc_strtok_ptr), s,
+            (indirect: *(__fc_strtok_ptr + (0 ..))),
+            (indirect: *(delim + (0 ..)));
     
-    behavior allocation:
-      assumes can_allocate: is_allocable(size);
-      ensures allocation: \fresh{Old, Here}(*\old(memptr),\old(size));
-      ensures result_zero: \result ≡ 0;
-      assigns __fc_heap_status, \result;
-      assigns __fc_heap_status
-        \from (indirect: alignment), size, __fc_heap_status;
+    behavior new_str:
+      assumes s_not_null: s ≢ \null;
+      requires
+        valid_string_s_or_delim_not_found:
+          valid_string(s) ∨
+          (valid_read_string(s) ∧
+           (∀ int i;
+              0 ≤ i < strlen(delim) ⇒
+              ¬(strchr(s, *(delim + i)) ≡ \true)));
+      ensures
+        result_subset:
+          \result ≡ \null ∨ \subset(\result, \old(s) + (0 ..));
+      ensures ptr_subset: \subset(__fc_strtok_ptr, \old(s) + (0 ..));
+      assigns __fc_strtok_ptr, *(s + (0 ..)), \result;
+      assigns __fc_strtok_ptr
+        \from s, (indirect: *(s + (0 ..))), (indirect: *(delim + (0 ..)));
+      assigns *(s + (0 ..))
+        \from *(s + (0 ..)), (indirect: s), (indirect: *(delim + (0 ..)));
       assigns \result
-        \from (indirect: alignment), (indirect: size),
-              (indirect: __fc_heap_status);
+        \from s, (indirect: *(s + (0 ..))), (indirect: *(delim + (0 ..)));
     
-    behavior no_allocation:
-      assumes cannot_allocate: ¬is_allocable(size);
-      ensures result_non_zero: \result < 0 ∨ \result > 0;
-      assigns \result;
-      assigns \result \from (indirect: alignment);
-      allocates \nothing;
+    behavior resume_str:
+      assumes s_null: s ≡ \null;
+      requires not_first_call: __fc_strtok_ptr ≢ \null;
+      ensures
+        result_subset:
+          \result ≡ \null ∨
+          \subset(\result, \old(__fc_strtok_ptr) + (0 ..));
+      ensures
+        ptr_subset: \subset(__fc_strtok_ptr, \old(__fc_strtok_ptr) + (0 ..));
+      assigns *(__fc_strtok_ptr + (0 ..)), __fc_strtok_ptr, \result;
+      assigns *(__fc_strtok_ptr + (0 ..))
+        \from *(__fc_strtok_ptr + (0 ..)), (indirect: __fc_strtok_ptr),
+              (indirect: *(delim + (0 ..)));
+      assigns __fc_strtok_ptr
+        \from \old(__fc_strtok_ptr), (indirect: *(__fc_strtok_ptr + (0 ..))),
+              (indirect: *(delim + (0 ..)));
+      assigns \result
+        \from __fc_strtok_ptr, (indirect: *(__fc_strtok_ptr + (0 ..))),
+              (indirect: *(delim + (0 ..)));
     
-    complete behaviors no_allocation, allocation;
-    disjoint behaviors no_allocation, allocation;
- */
-int posix_memalign(void **memptr, size_t alignment, size_t size)
-{
-  int __retres;
-  /*@
-  assert
-  alignment_is_a_suitable_power_of_two:
-    alignment ≥ sizeof(void *) ∧
-    ((size_t)alignment & ((size_t)alignment - 1)) ≡ 0;
-   */
-  ;
-  *memptr = malloc(size);
-  if (! *memptr) {
-    __retres = 12;
-    goto return_label;
-  }
-  __retres = 0;
-  return_label: return __retres;
-}
-
-/*@ requires valid_dest: valid_or_empty(dest, n);
-    requires valid_src: valid_read_or_empty(src, n);
-    requires
-      separation:
-        \separated((char *)dest + (0 .. n - 1), (char *)src + (0 .. n - 1));
-    ensures
-      copied_contents:
-        memcmp{Post, Pre}((char *)\old(dest), (char *)\old(src), \old(n)) ≡
-        0;
-    ensures result_ptr: \result ≡ \old(dest);
-    assigns *((char *)dest + (0 .. n - 1)), \result;
-    assigns *((char *)dest + (0 .. n - 1))
-      \from *((char *)src + (0 .. n - 1));
-    assigns \result \from dest;
+    complete behaviors resume_str, new_str;
+    disjoint behaviors resume_str, new_str;
  */
-void *memcpy(void * __restrict dest, void const * __restrict src, size_t n)
-{
-  {
-    size_t i = (unsigned int)0;
-    /*@ loop invariant no_eva: 0 ≤ i ≤ n;
-        loop invariant
-          no_eva:
-            ∀ ℤ k;
-              0 ≤ k < i ⇒ *((char *)dest + k) ≡ *((char *)src + k);
-        loop assigns i, *((char *)dest + (0 .. n - 1));
-        loop variant n - i;
-    */
-    while (i < n) {
-      *((char *)dest + i) = *((char *)src + i);
-      i += (size_t)1;
-    }
-  }
-  return dest;
-}
+extern char *strtok(char * __restrict s, char const * __restrict delim);
 
-/*@ assigns \result;
-    assigns \result \from (indirect: p), (indirect: q), (indirect: n);
+/*@ requires valid_string_delim: valid_read_string(delim);
+    requires valid_saveptr: \valid(saveptr);
+    assigns *(s + (0 ..)), *(*saveptr + (0 ..)), \result, *saveptr;
+    assigns *(s + (0 ..))
+      \from *(s + (0 ..)), (indirect: s), (indirect: *saveptr),
+            (indirect: *(delim + (0 ..)));
+    assigns *(*saveptr + (0 ..))
+      \from *(*saveptr + (0 ..)), (indirect: s), (indirect: *saveptr),
+            (indirect: *(delim + (0 ..)));
+    assigns \result
+      \from s, *saveptr, (indirect: *(s + (0 ..))),
+            (indirect: *(*saveptr + (0 ..))), (indirect: *(delim + (0 ..)));
+    assigns *saveptr
+      \from \old(*saveptr), s, (indirect: *(*saveptr + (0 ..))),
+            (indirect: *(delim + (0 ..)));
     
-    behavior separated:
-      assumes
-        separation: no_overlap:
-          \separated(p + (0 .. n - 1), q + (0 .. n - 1));
-      ensures result_no_overlap: \result ≡ 0;
+    behavior new_str:
+      assumes s_not_null: s ≢ \null;
+      requires
+        valid_string_s_or_delim_not_found:
+          valid_string(s) ∨
+          (valid_read_string(s) ∧
+           (∀ int i;
+              0 ≤ i < strlen(delim) ⇒
+              ¬(strchr(s, *(delim + i)) ≡ \true)));
+      ensures
+        result_subset:
+          \result ≡ \null ∨ \subset(\result, \old(s) + (0 ..));
+      ensures initialization: \initialized(\old(saveptr));
+      ensures saveptr_subset: \subset(*\old(saveptr), \old(s) + (0 ..));
+      assigns *saveptr, *(s + (0 ..)), \result;
+      assigns *saveptr
+        \from s, (indirect: *(s + (0 ..))), (indirect: *(delim + (0 ..)));
+      assigns *(s + (0 ..))
+        \from *(s + (0 ..)), (indirect: s), (indirect: *(delim + (0 ..)));
+      assigns \result
+        \from s, (indirect: *(s + (0 ..))), (indirect: *(delim + (0 ..)));
     
-    behavior not_separated_lt:
-      assumes
-        separation: overlap: ¬\separated(p + (0 .. n - 1), q + (0 .. n - 1));
-      assumes p_before_q: p ≤ q < p + n;
-      ensures result_p_before_q: \result ≡ -1;
+    behavior resume_str:
+      assumes s_null: s ≡ \null;
+      requires not_first_call: *saveptr ≢ \null;
+      requires initialization: saveptr: \initialized(saveptr);
+      ensures
+        result_subset:
+          \result ≡ \null ∨ \subset(\result, \old(*saveptr) + (0 ..));
+      ensures
+        saveptr_subset: \subset(*\old(saveptr), \old(*saveptr) + (0 ..));
+      assigns *(*saveptr + (0 ..)), *saveptr, \result;
+      assigns *(*saveptr + (0 ..))
+        \from *(*saveptr + (0 ..)), (indirect: *saveptr),
+              (indirect: *(delim + (0 ..)));
+      assigns *saveptr
+        \from \old(*saveptr), (indirect: *(*saveptr + (0 ..))),
+              (indirect: *(delim + (0 ..)));
+      assigns \result
+        \from *saveptr, (indirect: *(*saveptr + (0 ..))),
+              (indirect: *(delim + (0 ..)));
     
-    behavior not_separated_gt:
-      assumes
-        separation: overlap: ¬\separated(p + (0 .. n - 1), q + (0 .. n - 1));
-      assumes p_after_q: q < p ≤ q + n;
-      ensures result_p_after_q: \result ≡ 1;
+    complete behaviors resume_str, new_str;
+    disjoint behaviors resume_str, new_str;
+ */
+extern char *strtok_r(char * __restrict s, char const * __restrict delim,
+                      char ** __restrict saveptr);
+
+/*@ requires
+      valid_string_stringp: \valid(stringp) ∧ valid_string(*stringp);
+    requires valid_string_delim: valid_read_string(delim);
+    assigns *stringp, \result;
+    assigns *stringp \from *(delim + (..)), *(*(stringp + (..)));
+    assigns \result \from *(delim + (..)), *(*(stringp + (..)));
+ */
+extern char *strsep(char **stringp, char const *delim);
+
+char __fc_strerror[64];
+char * const __fc_p_strerror = __fc_strerror;
+char *strerror(int errnum);
+
+char *strcpy(char *dest, char const *src);
+
+char *strncpy(char *dest, char const *src, size_t n);
+
+/*@ requires valid_string_src: valid_read_string(src);
+    requires room_nstring: \valid(dest + (0 .. n - 1));
+    requires
+      separation:
+        \separated(
+          dest + (0 .. n - 1), src + (0 .. \max(n - 1, strlen(src)))
+          );
+    ensures
+      initialization:
+        \initialized(\old(dest) + (0 .. \min(strlen(\old(src)), \old(n) - 1)));
+    ensures bounded_result: \result ≡ strlen(\old(src));
+    assigns *(dest + (0 .. n - 1)), \result;
+    assigns *(dest + (0 .. n - 1)) \from *(src + (0 .. n - 1));
+    assigns \result
+      \from (indirect: src), (indirect: *(src + (0 .. n - 1))), (indirect: n);
+ */
+size_t strlcpy(char * __restrict dest, char const * __restrict src, size_t n);
+
+/*@ requires valid_string_src: valid_read_string(src);
+    requires room_string: \valid(dest + (0 .. strlen(src)));
+    requires
+      separation:
+        \separated(dest + (0 .. strlen(src)), src + (0 .. strlen(src)));
+    ensures equal_contents: strcmp(\old(dest), \old(src)) ≡ 0;
+    ensures points_to_end: \result ≡ \old(dest) + strlen(\old(dest));
+    assigns *(dest + (0 .. strlen{Old}(src))), \result;
+    assigns *(dest + (0 .. strlen{Old}(src)))
+      \from *(src + (0 .. strlen{Old}(src)));
+    assigns \result \from dest;
+ */
+extern char *stpcpy(char * __restrict dest, char const * __restrict src);
+
+char *strcat(char *dest, char const *src);
+
+char *strncat(char *dest, char const *src, size_t n);
+
+/*@ requires valid_string_src: valid_read_string(src);
+    requires valid_string_dest: valid_string(dest);
+    requires room_nstring: \valid(dest + (0 .. n - 1));
+    ensures
+      bounded_result: \result ≡ strlen(\old(dest)) + strlen(\old(src));
+    assigns *(dest + (strlen{Old}(dest) .. n)), \result;
+    assigns *(dest + (strlen{Old}(dest) .. n))
+      \from (indirect: n), *(src + (0 .. strlen{Old}(src)));
+    assigns \result
+      \from (indirect: src), (indirect: *(src + (0 .. n - 1))), (indirect: n);
+ */
+extern size_t strlcat(char * __restrict dest, char const * __restrict src,
+                      size_t n);
+
+/*@ requires valid_dest: \valid(dest + (0 .. n - 1));
+    requires valid_string_src: valid_read_string(src);
+    assigns *(dest + (0 .. n - 1)), \result;
+    assigns *(dest + (0 .. n - 1))
+      \from (indirect: *(src + (0 ..))), (indirect: n);
+    assigns \result \from dest;
+ */
+extern size_t strxfrm(char * __restrict dest, char const * __restrict src,
+                      size_t n);
+
+char *strdup(char const *s);
+
+char *strndup(char const *s, size_t n);
+
+char __fc_strsignal[64];
+char * const __fc_p_strsignal = __fc_strsignal;
+char *strsignal(int signum);
+
+/*@ requires valid_memory_area: \valid((char *)s + (0 .. n - 1));
+    ensures
+      s_initialized: initialization:
+        \initialized((char *)\old(s) + (0 .. \old(n) - 1));
+    ensures
+      zero_initialized: \subset(*((char *)\old(s) + (0 .. \old(n) - 1)), {0});
+    assigns *((char *)s + (0 .. n - 1));
+    assigns *((char *)s + (0 .. n - 1)) \from \nothing;
+ */
+extern void bzero(void *s, size_t n);
+
+int strcasecmp(char const *s1, char const *s2);
+
+/*@ requires valid_string_s1: valid_read_nstring(s1, n);
+    requires valid_string_s2: valid_read_nstring(s2, n);
+    assigns \result;
+    assigns \result
+      \from (indirect: n), (indirect: *(s1 + (0 .. n - 1))),
+            (indirect: *(s2 + (0 .. n - 1)));
+ */
+extern int strncasecmp(char const *s1, char const *s2, size_t n);
+
+static unsigned int volatile getaddrinfo_net_state;
+/*@ requires
+      nodename_string: nodename ≡ \null ∨ valid_read_string(nodename);
+    requires
+      servname_string: servname ≡ \null ∨ valid_read_string(servname);
+    requires hints_option: hints ≡ \null ∨ \valid_read(hints);
+    requires valid_res: \valid(res);
+    assigns *res, \result, __fc_errno;
+    assigns *res
+      \from (indirect: nodename), (indirect: servname), (indirect: hints);
+    assigns \result
+      \from (indirect: nodename), (indirect: servname), (indirect: hints);
+    assigns __fc_errno
+      \from (indirect: nodename), (indirect: servname), (indirect: hints);
+    allocates *\old(res);
     
-    complete behaviors not_separated_gt, not_separated_lt, separated;
-    disjoint behaviors not_separated_gt, not_separated_lt, separated;
+    behavior empty_request:
+      assumes empty: nodename ≡ \null ∧ servname ≡ \null;
+      ensures no_name: \result ≡ -2;
+      assigns \result;
+      assigns \result \from (indirect: nodename), (indirect: servname);
+    
+    behavior normal_request:
+      assumes has_name: nodename ≢ \null ∨ servname ≢ \null;
+      ensures
+        initialization: allocation: success_or_error:
+          (\result ≡ 0 ∧
+           \fresh{Old, Here}(*\old(res),sizeof(*\old(res))) ∧
+           \initialized(*\old(res))) ∨
+          \result ≡ -3 ∨ \result ≡ -1 ∨ \result ≡ -4 ∨
+          \result ≡ -6 ∨ \result ≡ -10 ∨ \result ≡ -8 ∨
+          \result ≡ -7 ∨ \result ≡ -11;
+    
+    complete behaviors normal_request, empty_request;
+    disjoint behaviors normal_request, empty_request;
  */
-static int memoverlap(char const *p, char const *q, size_t n)
+int getaddrinfo(char const * __restrict nodename,
+                char const * __restrict servname,
+                struct addrinfo const * __restrict hints,
+                struct addrinfo ** __restrict res)
 {
   int __retres;
-  uintptr_t p1 = (unsigned int)p;
-  uintptr_t p2 = (unsigned int)(p + n);
-  uintptr_t q1 = (unsigned int)q;
-  uintptr_t q2 = (unsigned int)(q + n);
-  if (p1 <= q1) {
-    if (p2 > q1) {
-      __retres = -1;
+  if (nodename == (char const *)0) 
+    if (servname == (char const *)0) {
+      __retres = -2;
       goto return_label;
     }
-    else goto _LAND;
-  }
-  else {
-    _LAND: ;
-    if (q1 <= p1) 
-      if (q2 > p1) {
-        __retres = 1;
+  switch (getaddrinfo_net_state) {
+    case (unsigned int)0: __retres = -1;
+    goto return_label;
+    case (unsigned int)1: __retres = -3;
+    goto return_label;
+    case (unsigned int)2: __retres = -4;
+    goto return_label;
+    case (unsigned int)3: __retres = -6;
+    goto return_label;
+    case (unsigned int)5: __retres = -8;
+    goto return_label;
+    case (unsigned int)6: __retres = -7;
+    goto return_label;
+    case (unsigned int)7:
+    {
+      __fc_errno = 5;
+      __retres = -11;
+      goto return_label;
+    }
+    default:
+    {
+      struct addrinfo *tmp_0;
+      struct sockaddr *tmp_2;
+      int tmp_3;
+      struct addrinfo *ai = malloc(sizeof(*tmp_0));
+      if (! ai) {
+        __retres = -10;
         goto return_label;
       }
-      else {
-        __retres = 0;
+      struct sockaddr *sa = malloc(sizeof(*tmp_2));
+      if (! sa) {
+        __retres = -10;
         goto return_label;
       }
-    else {
+      tmp_3 = Frama_C_interval(0,43);
+      sa->sa_family = (unsigned short)tmp_3;
+      /*@ slevel 15; */
+      {
+        int i = 0;
+        while (i < 14) {
+          {
+            int tmp_4;
+            tmp_4 = Frama_C_interval(-128,127);
+            sa->sa_data[i] = (char)tmp_4;
+          }
+          i ++;
+        }
+      }
+      /*@ slevel default; */
+      ai->ai_flags = 0;
+      ai->ai_family = (int)sa->sa_family;
+      ai->ai_socktype = Frama_C_interval(0,5);
+      ai->ai_protocol = Frama_C_interval(0,IPPROTO_MAX);
+      ai->ai_addrlen = sizeof(*sa);
+      ai->ai_addr = sa;
+      ai->ai_canonname = (char *)"dummy";
+      ai->ai_next = (struct addrinfo *)0;
+      *res = ai;
       __retres = 0;
       goto return_label;
     }
@@ -4922,2762 +4331,3353 @@ static int memoverlap(char const *p, char const *q, size_t n)
   return_label: return __retres;
 }
 
-/*@ requires valid_dest: valid_or_empty(dest, n);
-    requires valid_src: valid_read_or_empty(src, n);
-    ensures
-      copied_contents:
-        memcmp{Post, Pre}((char *)\old(dest), (char *)\old(src), \old(n)) ≡
-        0;
-    ensures result_ptr: \result ≡ \old(dest);
-    assigns *((char *)dest + (0 .. n - 1)), \result;
-    assigns *((char *)dest + (0 .. n - 1))
-      \from *((char *)src + (0 .. n - 1));
-    assigns \result \from dest;
- */
-void *memmove(void *dest, void const *src, size_t n)
+struct __fc_gethostbyname __fc_ghbn;
+int res_search(char const *dname, int class, int type, char *answer,
+               int anslen)
 {
-  void *__retres;
   int tmp;
-  if (n == (size_t)0) {
-    __retres = dest;
-    goto return_label;
-  }
-  char *s = (char *)src;
-  char *d = (char *)dest;
-  tmp = memoverlap((char const *)dest,(char const *)src,n);
-  if (tmp <= 0) {
-    size_t i = (unsigned int)0;
-    /*@ loop invariant no_eva: 0 ≤ i ≤ n;
-        loop invariant
-          no_eva:
-            ∀ ℤ k;
-              0 ≤ k < i ⇒
-              *((char *)dest + k) ≡ \at(*((char *)src + k),LoopEntry);
-        loop invariant
-          no_eva:
-            ∀ ℤ k;
-              i ≤ k < n ⇒
-              *((char *)src + k) ≡ \at(*((char *)src + k),LoopEntry);
-        loop assigns i, *((char *)dest + (0 .. n - 1));
-        loop variant n - i;
-    */
-    while (i < n) {
-      *(d + i) = *(s + i);
-      i += (size_t)1;
+  {
+    int i = 0;
+    while (i < anslen - 1) {
+      *(answer + i) = Frama_C_char_interval((char)(-128),(char)127);
+      i ++;
     }
   }
-  else {
-    {
-      size_t i_0 = n - (size_t)1;
-      /*@ loop invariant no_eva: 0 ≤ i_0 < n;
-          loop invariant
-            no_eva:
-              ∀ ℤ k;
-                i_0 < k < n ⇒
-                *((char *)dest + k) ≡ \at(*((char *)src + k),LoopEntry);
-          loop invariant
-            no_eva:
-              ∀ ℤ k;
-                0 ≤ k ≤ i_0 ⇒
-                *((char *)src + k) ≡ \at(*((char *)src + k),LoopEntry);
-          loop assigns i_0, *((char *)dest + (0 .. n - 1));
-          loop variant i_0;
-      */
-      while (i_0 > (size_t)0) {
-        *(d + i_0) = *(s + i_0);
-        i_0 -= (size_t)1;
+  *(answer + (anslen - 1)) = (char)0;
+  tmp = Frama_C_interval(-1,anslen);
+  return tmp;
+}
+
+struct hostent *gethostbyname(char const *name)
+{
+  struct hostent *__retres;
+  char buf[128];
+  char const *cp;
+  int n;
+  int tmp;
+  __fc_ghbn.host.h_addrtype = 2;
+  __fc_ghbn.host.h_length = (int)sizeof(struct in_addr);
+  if ((int)*name >= '0') 
+    if ((int)*name <= '9') {
+      cp = name;
+      while (1) {
+        if (! *cp) {
+          struct in_addr addr;
+          cp --;
+          ;
+          if ((int)*cp == '.') break;
+          addr.s_addr = inet_addr(name);
+          if (addr.s_addr == 0xffffffff) {
+            __retres = (struct hostent *)0;
+            goto return_label;
+          }
+          memcpy((void *)(__fc_ghbn.host_addr),(void const *)(& addr),
+                 (unsigned int)__fc_ghbn.host.h_length);
+          strncpy(__fc_ghbn.hostbuf,name,(unsigned int)(128 - 1));
+          __fc_ghbn.hostbuf[128 - 1] = (char)'\000';
+          __fc_ghbn.host.h_name = __fc_ghbn.hostbuf;
+          __fc_ghbn.host.h_aliases = __fc_ghbn.host_aliases;
+          __fc_ghbn.host_aliases[0] = (char *)0;
+          __fc_ghbn.h_addr_ptrs[0] = (char *)(__fc_ghbn.host_addr);
+          __fc_ghbn.h_addr_ptrs[1] = (char *)0;
+          __fc_ghbn.host.h_addr_list = __fc_ghbn.h_addr_ptrs;
+          __retres = & __fc_ghbn.host;
+          goto return_label;
+        }
+        if ((int)*cp < '0') 
+          if ((int)*cp > '9') 
+            if ((int)*cp != '.') break;
+        cp ++;
       }
     }
-    *(d + 0) = *(s + 0);
+  n = res_search(name,1,1,buf,(int)sizeof(buf));
+  if (n < 0) {
+    __retres = (struct hostent *)0;
+    goto return_label;
+  }
+  tmp = Frama_C_nondet(0,1);
+  if (tmp) {
+    __retres = (struct hostent *)0;
+    goto return_label;
+  }
+  else {
+    struct in_addr addr_0;
+    addr_0.s_addr = inet_addr(name);
+    memcpy((void *)(__fc_ghbn.host_addr),(void const *)(& addr_0),
+           (unsigned int)__fc_ghbn.host.h_length);
+    strncpy(__fc_ghbn.hostbuf,name,(unsigned int)(128 - 1));
+    __fc_ghbn.hostbuf[128 - 1] = (char)'\000';
+    __fc_ghbn.host.h_name = __fc_ghbn.hostbuf;
+    __fc_ghbn.host.h_aliases = __fc_ghbn.host_aliases;
+    __fc_ghbn.host_aliases[0] = (char *)0;
+    __fc_ghbn.h_addr_ptrs[0] = (char *)(__fc_ghbn.host_addr);
+    __fc_ghbn.h_addr_ptrs[1] = (char *)0;
+    __fc_ghbn.host.h_addr_list = __fc_ghbn.h_addr_ptrs;
+    __retres = & __fc_ghbn.host;
+    goto return_label;
   }
-  __retres = dest;
   return_label: return __retres;
 }
 
-/*@ requires valid_string_s: valid_read_string(s);
-    ensures acsl_c_equiv: \result ≡ strlen(\old(s));
+FILE *__fc_stderr;
+
+FILE *__fc_stdin;
+
+FILE *__fc_stdout;
+
+/*@ assigns \nothing; */
+extern int remove(char const *filename);
+
+/*@ assigns \nothing; */
+extern int rename(char const *old_name, char const *new_name);
+
+FILE __fc_fopen[16];
+FILE * const __fc_p_fopen = __fc_fopen;
+/*@ ensures
+      result_null_or_valid_fd:
+        \result ≡ \null ∨ \subset(\result, &__fc_fopen[0 .. 16 - 1]);
     assigns \result;
-    assigns \result \from (indirect: *(s + (0 ..)));
+    assigns \result \from __fc_p_fopen;
  */
-size_t strlen(char const *s)
-{
-  size_t i;
-  i = (unsigned int)0;
-  while ((int)*(s + i) != 0) i += (size_t)1;
-  return i;
-}
+extern FILE *tmpfile(void);
 
-/*@ requires valid_string_s: valid_read_nstring(s, maxlen);
-    ensures
-      result_bounded:
-        \result ≡ strlen(\old(s)) ∨ \result ≡ \old(maxlen);
-    assigns \result;
-    assigns \result
-      \from (indirect: *(s + (0 .. maxlen - 1))), (indirect: maxlen);
+/*@ assigns \result, *(s + (..));
+    assigns \result \from *(s + (..));
+    assigns *(s + (..)) \from \nothing;
  */
-size_t strnlen(char const *s, size_t maxlen)
-{
-  size_t i;
-  i = (unsigned int)0;
-  while (1) {
-    if (i < maxlen) {
-      if (! ((int)*(s + i) != 0)) break;
-    }
-    else break;
-    i += (size_t)1;
-  }
-  return i;
-}
+extern char *tmpnam(char *s);
 
-/*@ requires valid_s: valid_or_empty(s, n);
-    ensures
-      acsl_c_equiv: memset((char *)\old(s), \old(c), \old(n)) ≡ \true;
-    ensures result_ptr: \result ≡ \old(s);
-    assigns *((char *)s + (0 .. n - 1)), \result;
-    assigns *((char *)s + (0 .. n - 1)) \from c;
-    assigns \result \from s;
+/*@ requires valid_stream: \valid(stream);
+    ensures result_zero_or_EOF: \result ≡ 0 ∨ \result ≡ -1;
+    assigns \result;
+    assigns \result \from stream, stream->__fc_FILE_id;
  */
-void *memset(void *s, int c, size_t n)
-{
-  unsigned char *p = (unsigned char *)s;
-  {
-    size_t i = (unsigned int)0;
-    while (i < n) {
-      *(p + i) = (unsigned char)c;
-      i += (size_t)1;
-    }
-  }
-  return s;
-}
+extern int fclose(FILE *stream);
 
-/*@ requires valid_string_s1: valid_read_string(s1);
-    requires valid_string_s2: valid_read_string(s2);
-    ensures acsl_c_equiv: \result ≡ strcmp(\old(s1), \old(s2));
+/*@ requires null_or_valid_stream: stream ≡ \null ∨ \valid_read(stream);
+    ensures result_zero_or_EOF: \result ≡ 0 ∨ \result ≡ -1;
     assigns \result;
-    assigns \result
-      \from (indirect: *(s1 + (0 ..))), (indirect: *(s2 + (0 ..)));
+    assigns \result \from stream, stream->__fc_FILE_id;
  */
-int strcmp(char const *s1, char const *s2)
-{
-  int __retres;
-  size_t i;
-  i = (unsigned int)0;
-  while ((int)*(s1 + i) == (int)*(s2 + i)) {
-    if ((int)*(s1 + i) == 0) {
-      __retres = 0;
-      goto return_label;
-    }
-    i += (size_t)1;
-  }
-  __retres = (int)*((unsigned char *)s1 + i) - (int)*((unsigned char *)s2 + i);
-  return_label: return __retres;
-}
+extern int fflush(FILE *stream);
 
-/*@ requires valid_string_s1: valid_read_nstring(s1, n);
-    requires valid_string_s2: valid_read_nstring(s2, n);
-    ensures acsl_c_equiv: \result ≡ strncmp(\old(s1), \old(s2), \old(n));
+/*@ requires valid_filename: valid_read_string(filename);
+    requires valid_mode: valid_read_string(mode);
+    ensures
+      result_null_or_valid_fd:
+        \result ≡ \null ∨ \subset(\result, &__fc_fopen[0 .. 16 - 1]);
     assigns \result;
     assigns \result
-      \from (indirect: *(s1 + (0 .. n - 1))),
-            (indirect: *(s2 + (0 .. n - 1))), (indirect: n);
+      \from (indirect: *(filename + (..))), (indirect: *(mode + (..))),
+            __fc_p_fopen;
  */
-int strncmp(char const *s1, char const *s2, size_t n)
-{
-  int __retres;
-  {
-    size_t i = (unsigned int)0;
-    while (i < n) {
-      if ((int)*(s1 + i) != (int)*(s2 + i)) {
-        __retres = (int)*((unsigned char *)s1 + i) - (int)*((unsigned char *)s2 + i);
-        goto return_label;
-      }
-      if ((int)*(s1 + i) == 0) {
-        __retres = 0;
-        goto return_label;
-      }
-      i += (size_t)1;
-    }
-  }
-  __retres = 0;
-  return_label: return __retres;
-}
+extern FILE *fopen(char const * __restrict filename,
+                   char const * __restrict mode);
 
-/*@ requires valid_s1: valid_read_or_empty(s1, n);
-    requires valid_s2: valid_read_or_empty(s2, n);
-    requires initialization: s1: \initialized((char *)s1 + (0 .. n - 1));
-    requires initialization: s2: \initialized((char *)s2 + (0 .. n - 1));
-    requires danglingness: s1: non_escaping(s1, n);
-    requires danglingness: s2: non_escaping(s2, n);
+/*@ requires valid_mode: valid_read_string(mode);
     ensures
-      logic_spec:
-        \result ≡
-        memcmp{Pre, Pre}((char *)\old(s1), (char *)\old(s2), \old(n));
-    assigns \result;
+      result_null_or_valid_fd:
+        \result ≡ \null ∨ \subset(\result, &__fc_fopen[0 .. 16 - 1]);
+    assigns \result, __fc_fopen[fd];
     assigns \result
-      \from (indirect: *((char *)s1 + (0 .. n - 1))),
-            (indirect: *((char *)s2 + (0 .. n - 1)));
+      \from (indirect: fd), (indirect: *(mode + (0 ..))),
+            (indirect: __fc_fopen[fd]), __fc_p_fopen;
+    assigns __fc_fopen[fd]
+      \from (indirect: fd), (indirect: *(mode + (0 ..))),
+            (indirect: __fc_fopen[fd]), __fc_p_fopen;
  */
-int memcmp(void const *s1, void const *s2, size_t n)
-{
-  int __retres;
-  unsigned char const *p1;
-  unsigned char const *p2;
-  p1 = (unsigned char const *)s1;
-  p2 = (unsigned char const *)s2;
-  {
-    size_t i = (unsigned int)0;
-    while (i < n) {
-      if ((int)*(p1 + i) != (int)*(p2 + i)) {
-        __retres = (int)*(p1 + i) - (int)*(p2 + i);
-        goto return_label;
-      }
-      i += (size_t)1;
-    }
-  }
-  __retres = 0;
-  return_label: return __retres;
-}
-
-static int char_equal_ignore_case(char c1, char c2)
-{
-  int __retres;
-  if ((int)c1 >= 'A') 
-    if ((int)c1 <= 'Z') c1 = (char)((int)c1 - ('A' - 'a'));
-  if ((int)c2 >= 'A') 
-    if ((int)c2 <= 'Z') c2 = (char)((int)c2 - ('A' - 'a'));
-  if ((int)c1 == (int)c2) {
-    __retres = 0;
-    goto return_label;
-  }
-  else {
-    __retres = (int)((unsigned char)c2) - (int)((unsigned char)c1);
-    goto return_label;
-  }
-  return_label: return __retres;
-}
+extern FILE *fdopen(int fd, char const *mode);
 
-/*@ requires valid_string_s1: valid_read_string(s1);
-    requires valid_string_s2: valid_read_string(s2);
-    assigns \result;
+/*@ requires valid_filename: valid_read_string(filename);
+    requires valid_mode: valid_read_string(mode);
+    requires valid_stream: \valid(stream);
+    ensures
+      result_null_or_valid_fd:
+        \result ≡ \null ∨ \result ∈ &__fc_fopen[0 .. 16 - 1];
+    ensures stream_opened: *\old(stream) ∈ __fc_fopen[0 .. 16 - 1];
+    assigns \result, *stream;
     assigns \result
-      \from (indirect: *(s1 + (0 ..))), (indirect: *(s2 + (0 ..)));
+      \from (indirect: *(filename + (..))), (indirect: *(mode + (..))),
+            __fc_p_fopen, (indirect: stream);
+    assigns *stream
+      \from (indirect: *(filename + (..))), (indirect: *(mode + (..))),
+            __fc_p_fopen, (indirect: stream);
  */
-int strcasecmp(char const *s1, char const *s2)
-{
-  int __retres;
-  size_t i;
-  i = (unsigned int)0;
-  while (1) {
-    if ((int)*(s1 + i) != 0) {
-      if (! ((int)*(s2 + i) != 0)) break;
-    }
-    else break;
-    {
-      int res = char_equal_ignore_case(*(s1 + i),*(s2 + i));
-      if (res != 0) {
-        __retres = res;
-        goto return_label;
+extern FILE *freopen(char const * __restrict filename,
+                     char const * __restrict mode, FILE * __restrict stream);
+
+/*@ assigns *stream;
+    assigns *stream \from buf; */
+extern void setbuf(FILE * __restrict stream, char * __restrict buf);
+
+/*@ assigns *stream;
+    assigns *stream \from buf, mode, size; */
+extern int setvbuf(FILE * __restrict stream, char * __restrict buf, int mode,
+                   size_t size);
+
+/*@ axiomatic format_length {
+      logic ℤ format_length{L}(char *format) ;
+      
       }
-    }
-    i += (size_t)1;
-  }
-  if ((int)*(s1 + i) == 0) {
-    if ((int)*(s2 + i) == 0) {
-      __retres = 0;
-      goto return_label;
-    }
-    else goto _LAND;
-  }
-  else {
-    _LAND: ;
-    if ((int)*(s1 + i) == 0) {
-      __retres = -1;
-      goto return_label;
-    }
-    else {
-      __retres = 1;
-      goto return_label;
-    }
-  }
-  return_label: return __retres;
-}
 
-/*@ requires valid_string_src: valid_read_string(src);
-    requires valid_string_dest: valid_string(dest);
-    requires room_string: \valid(dest + (0 .. strlen(dest) + strlen(src)));
-    ensures
-      sum_of_lengths: strlen(\old(dest)) ≡ \old(strlen(dest) + strlen(src));
-    ensures
-      initialization: dest:
-        \initialized(\old(dest) + (0 .. \old(strlen(dest) + strlen(src))));
-    ensures
-      dest_null_terminated:
-        *(\old(dest) + \old(strlen(dest) + strlen(src))) ≡ 0;
-    ensures result_ptr: \result ≡ \old(dest);
-    assigns *(dest +
-              (strlen{Old}(dest) .. strlen{Old}(dest) + strlen{Old}(src))),
-            \result;
-    assigns
-    *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + strlen{Old}(src)))
-      \from *(src + (0 .. strlen{Old}(src)));
-    assigns \result \from dest;
+*/
+/*@ assigns *stream;
+    assigns *stream \from *(format + (..)), arg; */
+extern int vfprintf(FILE * __restrict stream, char const * __restrict format,
+                    va_list arg);
+
+/*@ assigns *stream;
+    assigns *stream \from *(format + (..)), *stream; */
+extern int vfscanf(FILE * __restrict stream, char const * __restrict format,
+                   va_list arg);
+
+/*@ assigns *__fc_stdout;
+    assigns *__fc_stdout \from arg; */
+extern int vprintf(char const * __restrict format, va_list arg);
+
+/*@ assigns *__fc_stdin;
+    assigns *__fc_stdin \from *(format + (..)); */
+extern int vscanf(char const * __restrict format, va_list arg);
+
+/*@ assigns *(s + (0 .. n - 1));
+    assigns *(s + (0 .. n - 1)) \from *(format + (..)), arg;
  */
-char *strcat(char *dest, char const *src)
-{
-  size_t i;
-  size_t n = strlen((char const *)dest);
-  i = (unsigned int)0;
-  while ((int)*(src + i) != 0) {
-    *(dest + (n + i)) = *(src + i);
-    i += (size_t)1;
-  }
-  *(dest + (n + i)) = (char)0;
-  return dest;
-}
+extern int vsnprintf(char * __restrict s, size_t n,
+                     char const * __restrict format, va_list arg);
 
-/*@ requires valid_nstring_src: valid_read_nstring(src, n);
-    requires valid_string_dest: valid_string(dest);
-    ensures result_ptr: \result ≡ \old(dest);
-    assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n)), \result;
-    assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n))
-      \from *(src + (0 .. n));
-    assigns \result \from dest;
-    
-    behavior complete:
-      assumes
-        valid_string_src_fits: valid_read_string(src) ∧ strlen(src) ≤ n;
-      requires
-        room_string: \valid((dest + strlen(dest)) + (0 .. strlen(src)));
-      ensures
-        sum_of_lengths:
-          strlen(\old(dest)) ≡ \old(strlen(dest) + strlen(src));
-      assigns *(dest +
-                (strlen{Old}(dest) .. strlen{Old}(dest) + strlen{Old}(src))),
-              \result;
-      assigns
-      *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + strlen{Old}(src)))
-        \from *(src + (0 .. strlen{Old}(src)));
-      assigns \result \from dest;
-    
-    behavior partial:
-      assumes
-        valid_string_src_too_large:
-          ¬(valid_read_string(src) ∧ strlen(src) ≤ n);
-      requires room_string: \valid((dest + strlen(dest)) + (0 .. n));
-      ensures
-        sum_of_bounded_lengths:
-          strlen(\old(dest)) ≡ \old(strlen(dest)) + \old(n);
-      assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n)),
-              \result;
-      assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n))
-        \from *(src + (0 .. strlen{Old}(src)));
-      assigns \result \from dest;
+/*@ assigns *(s + (0 ..));
+    assigns *(s + (0 ..)) \from *(format + (..)), arg;
  */
-char *strncat(char *dest, char const *src, size_t n)
-{
-  size_t i;
-  size_t dest_len = strlen((char const *)dest);
-  i = (unsigned int)0;
-  while (i < n) {
-    if ((int)*(src + i) == 0) break;
-    *(dest + (dest_len + i)) = *(src + i);
-    i += (size_t)1;
-  }
-  *(dest + (dest_len + i)) = (char)0;
-  return dest;
-}
+extern int vsprintf(char * __restrict s, char const * __restrict format,
+                    va_list arg);
 
-/*@ requires valid_string_src: valid_read_string(src);
-    requires room_string: \valid(dest + (0 .. strlen(src)));
-    requires
-      separation:
-        \separated(dest + (0 .. strlen(src)), src + (0 .. strlen(src)));
-    ensures equal_contents: strcmp(\old(dest), \old(src)) ≡ 0;
-    ensures result_ptr: \result ≡ \old(dest);
-    assigns *(dest + (0 .. strlen{Old}(src))), \result;
-    assigns *(dest + (0 .. strlen{Old}(src)))
-      \from *(src + (0 .. strlen{Old}(src)));
-    assigns \result \from dest;
+/*@ requires valid_stream: \valid(stream);
+    ensures result_uchar_or_eof: (0 ≤ \result ≤ 255) ∨ \result ≡ -1;
+    assigns *stream, \result;
+    assigns *stream \from *stream;
+    assigns \result \from (indirect: *stream);
  */
-char *strcpy(char *dest, char const *src)
-{
-  size_t i;
-  i = (unsigned int)0;
-  while ((int)*(src + i) != 0) {
-    *(dest + i) = *(src + i);
-    i += (size_t)1;
-  }
-  *(dest + i) = (char)0;
-  return dest;
-}
+extern int fgetc(FILE *stream);
 
-/*@ requires valid_string_src: valid_read_string(src);
-    requires room_nstring: \valid(dest + (0 .. n - 1));
-    requires separation: \separated(dest + (0 .. n - 1), src + (0 .. n - 1));
-    ensures result_ptr: \result ≡ \old(dest);
-    ensures initialization: \initialized(\old(dest) + (0 .. \old(n) - 1));
-    assigns *(dest + (0 .. n - 1)), \result;
-    assigns *(dest + (0 .. n - 1)) \from *(src + (0 .. n - 1));
-    assigns \result \from dest;
-    
-    behavior complete:
-      assumes src_fits: strlen(src) < n;
-      ensures equal_after_copy: strcmp(\old(dest), \old(src)) ≡ 0;
-    
-    behavior partial:
-      assumes src_too_long: n ≤ strlen(src);
-      ensures
-        equal_prefix:
-          memcmp{Post, Post}(\old(dest), \old(src), \old(n)) ≡ 0;
+/*@ requires valid_stream: \valid(stream);
+    ensures result_null_or_same: \result ≡ \null ∨ \result ≡ \old(s);
+    ensures
+      terminated_string_on_success:
+        \result ≢ \null ⇒ valid_string(\old(s));
+    assigns *(s + (0 .. size)), \result;
+    assigns *(s + (0 .. size)) \from (indirect: size), (indirect: *stream);
+    assigns \result \from s, (indirect: size), (indirect: *stream);
  */
-char *strncpy(char *dest, char const *src, size_t n)
-{
-  size_t i;
-  i = (unsigned int)0;
-  while (i < n) {
-    *(dest + i) = *(src + i);
-    if ((int)*(src + i) == 0) break;
-    i += (size_t)1;
-  }
-  while (i < n) {
-    *(dest + i) = (char)0;
-    i += (size_t)1;
-  }
-  return dest;
-}
+extern char *fgets(char * __restrict s, int size, FILE * __restrict stream);
 
-/*@ requires valid_string_s: valid_read_string(s);
-    assigns \result;
-    assigns \result \from s, *(s + (0 ..)), c;
-    
-    behavior found:
-      assumes char_found: strchr(s, c) ≡ \true;
-      ensures result_char: *\result ≡ (char)\old(c);
-      ensures result_same_base: \base_addr(\result) ≡ \base_addr(\old(s));
-      ensures
-        result_in_length: \old(s) ≤ \result ≤ \old(s) + strlen(\old(s));
-      ensures result_valid_string: valid_read_string(\result);
-      ensures
-        result_first_occur:
-          ∀ char *p; \old(s) ≤ p < \result ⇒ *p ≢ (char)\old(c);
-    
-    behavior not_found:
-      assumes char_not_found: ¬(strchr(s, c) ≡ \true);
-      ensures result_null: \result ≡ \null;
-    
-    behavior default:
-      ensures
-        result_null_or_same_base:
-          \result ≡ \null ∨ \base_addr(\result) ≡ \base_addr(\old(s));
- */
-char *strchr(char const *s, int c)
-{
-  char *__retres;
-  size_t i;
-  char const ch = (char)c;
-  i = (unsigned int)0;
-  while ((int)*(s + i) != (int)ch) {
-    if ((int)*(s + i) == 0) {
-      __retres = (char *)0;
-      goto return_label;
-    }
-    i += (size_t)1;
-  }
-  __retres = (char *)(s + i);
-  return_label: return __retres;
-}
+/*@ assigns *stream; */
+extern int fputc(int c, FILE *stream);
 
-/*@ requires valid_string_s: valid_read_string(s);
-    assigns \result;
-    assigns \result \from s, *(s + (0 ..)), c;
-    
-    behavior found:
-      assumes char_found: strchr(s, c) ≡ \true;
-      ensures result_char: (int)*\result ≡ \old(c);
-      ensures result_same_base: \base_addr(\result) ≡ \base_addr(\old(s));
-      ensures result_valid_string: valid_read_string(\result);
-    
-    behavior not_found:
-      assumes char_not_found: ¬(strchr(s, c) ≡ \true);
-      ensures result_null: \result ≡ \null;
-    
-    behavior default:
-      ensures
-        result_null_or_same_base:
-          \result ≡ \null ∨ \base_addr(\result) ≡ \base_addr(\old(s));
+/*@ assigns *stream;
+    assigns *stream \from *(s + (..)); */
+extern int fputs(char const * __restrict s, FILE * __restrict stream);
+
+/*@ assigns \result, *stream;
+    assigns \result \from *stream;
+    assigns *stream \from *stream;
  */
-char *strrchr(char const *s, int c)
-{
-  char *__retres;
-  char const ch = (char)c;
-  {
-    size_t tmp;
-    tmp = strlen(s);
-    size_t i = tmp + (size_t)1;
-    while (i > (size_t)0) {
-      if ((int)*(s + (i - (size_t)1)) == (int)ch) {
-        __retres = (char *)(s + (i - (size_t)1));
-        goto return_label;
-      }
-      i -= (size_t)1;
-    }
-  }
-  __retres = (char *)0;
-  return_label: return __retres;
-}
+extern int getc(FILE *stream);
 
-/*@ requires
-      valid:
-        valid_read_or_empty(s, n) ∨
-        \valid_read((unsigned char *)s + (0 .. memchr_off((char *)s, c, n)));
-    requires
-      initialization:
-        \initialized((unsigned char *)s + (0 .. n - 1)) ∨
-        \initialized((unsigned char *)s + (0 .. memchr_off((char *)s, c, n)));
-    requires
-      danglingness:
-        non_escaping(s, n) ∨
-        non_escaping(s, (unsigned int)(memchr_off((char *)s, c, n) + 1));
-    assigns \result;
-    assigns \result \from s, c, *((unsigned char *)s + (0 .. n - 1));
-    
-    behavior found:
-      assumes char_found: memchr((char *)s, c, n) ≡ \true;
-      ensures result_same_base: \base_addr(\result) ≡ \base_addr(\old(s));
-      ensures result_char: (int)*((char *)\result) ≡ \old(c);
-      ensures
-        result_in_str:
-          ∀ ℤ i;
-            0 ≤ i < \old(n) ⇒
-            *((unsigned char *)\old(s) + i) ≡ \old(c) ⇒
-            \result ≤ \old(s) + i;
-    
-    behavior not_found:
-      assumes char_not_found: ¬(memchr((char *)s, c, n) ≡ \true);
-      ensures result_null: \result ≡ \null;
+/*@ assigns \result;
+    assigns \result \from *__fc_stdin; */
+extern int getchar(void);
+
+/*@ ensures result_null_or_same: \result ≡ \old(s) ∨ \result ≡ \null;
+    assigns *(s + (..)), \result;
+    assigns *(s + (..)) \from *__fc_stdin;
+    assigns \result \from s, __fc_stdin;
  */
-void *memchr(void const *s, int c, size_t n)
-{
-  void *__retres;
-  unsigned char const ch = (unsigned char)c;
-  unsigned char const *ss = (unsigned char const *)s;
-  {
-    size_t i = (unsigned int)0;
-    while (i < n) {
-      if ((int)*(ss + i) == (int)ch) {
-        __retres = (void *)(ss + i);
-        goto return_label;
-      }
-      i += (size_t)1;
-    }
-  }
-  __retres = (void *)0;
-  return_label: return __retres;
-}
+extern char *gets(char *s);
 
-void *memrchr(void const *s, int c, size_t n)
-{
-  void *__retres;
-  unsigned char const ch = (unsigned char)c;
-  unsigned char const *ss = (unsigned char const *)s;
-  {
-    size_t i = n;
-    while (i > (size_t)0) {
-      if ((int)*(ss + (i - (size_t)1)) == (int)ch) {
-        __retres = (void *)(ss + (i - (size_t)1));
-        goto return_label;
-      }
-      i -= (size_t)1;
-    }
-  }
-  __retres = (void *)0;
-  return_label: return __retres;
-}
+/*@ assigns *stream;
+    assigns *stream \from c; */
+extern int putc(int c, FILE *stream);
 
-/*@ requires valid_string_haystack: valid_read_string(haystack);
-    requires valid_string_needle: valid_read_string(needle);
+/*@ assigns *__fc_stdout;
+    assigns *__fc_stdout \from c; */
+extern int putchar(int c);
+
+/*@ assigns *__fc_stdout;
+    assigns *__fc_stdout \from *(s + (..)); */
+extern int puts(char const *s);
+
+/*@ assigns *stream;
+    assigns *stream \from c; */
+extern int ungetc(int c, FILE *stream);
+
+/*@ requires valid_ptr_block: \valid((char *)ptr + (0 .. nmemb * size - 1));
+    requires valid_stream: \valid(stream);
+    ensures size_read: \result ≤ \old(nmemb);
     ensures
-      result_null_or_in_haystack:
-        \result ≡ \null ∨
-        (\subset(\result, \old(haystack) + (0 ..)) ∧
-         \valid_read(\result) ∧
-         memcmp{Pre, Pre}(\result, \old(needle), strlen(\old(needle))) ≡ 0);
-    assigns \result;
-    assigns \result
-      \from haystack, (indirect: *(haystack + (0 ..))),
-            (indirect: *(needle + (0 ..)));
+      initialization:
+        \initialized((char *)\old(ptr) + (0 .. \result * \old(size) - 1));
+    assigns *((char *)ptr + (0 .. nmemb * size - 1)), \result;
+    assigns *((char *)ptr + (0 .. nmemb * size - 1))
+      \from size, nmemb, *stream;
+    assigns \result \from size, *stream;
  */
-char *strstr(char const *haystack, char const *needle)
-{
-  char *__retres;
-  if ((int)*(needle + 0) == 0) {
-    __retres = (char *)haystack;
-    goto return_label;
-  }
-  {
-    size_t i = (unsigned int)0;
-    while ((int)*(haystack + i) != 0) {
-      {
-        size_t j;
-        j = (unsigned int)0;
-        while ((int)*(haystack + (i + j)) != 0) {
-          if ((int)*(haystack + (i + j)) != (int)*(needle + j)) break;
-          j += (size_t)1;
-        }
-        if ((int)*(needle + j) == 0) {
-          __retres = (char *)(haystack + i);
-          goto return_label;
-        }
-      }
-      i += (size_t)1;
-    }
-  }
-  __retres = (char *)0;
-  return_label: return __retres;
-}
+extern size_t fread(void * __restrict ptr, size_t size, size_t nmemb,
+                    FILE * __restrict stream);
 
-static int __fc_strerror_init;
-/*@ ensures result_internal_str: \result ≡ __fc_p_strerror;
-    ensures result_nul_terminated: *(\result + 63) ≡ 0;
-    ensures result_valid_string: valid_read_string(\result);
-    assigns \result;
-    assigns \result \from __fc_p_strerror, (indirect: errnum);
+/*@ requires
+      valid_ptr_block: \valid_read((char *)ptr + (0 .. nmemb * size - 1));
+    requires valid_stream: \valid(stream);
+    ensures size_written: \result ≤ \old(nmemb);
+    assigns *stream, \result;
+    assigns *stream \from *((char *)ptr + (0 .. nmemb * size - 1));
+    assigns \result \from *((char *)ptr + (0 .. nmemb * size - 1));
  */
-char *strerror(int errnum)
-{
-  char *__retres;
-  if (! __fc_strerror_init) {
-    Frama_C_make_unknown(__fc_strerror,(unsigned int)63);
-    __fc_strerror[63] = (char)0;
-    __fc_strerror_init = 1;
-  }
-  __retres = __fc_strerror;
-  return __retres;
-}
+extern size_t fwrite(void const * __restrict ptr, size_t size, size_t nmemb,
+                     FILE * __restrict stream);
 
-/*@ requires valid_string_s: valid_read_string(s);
-    assigns \result;
-    assigns \result
-      \from (indirect: *(s + (0 .. strlen{Old}(s)))),
-            (indirect: __fc_heap_status);
-    allocates \result;
-    
-    behavior allocation:
-      assumes can_allocate: is_allocable(strlen(s));
-      ensures allocation: \fresh{Old, Here}(\result,strlen(\old(s)));
-      ensures
-        result_valid_string_and_same_contents:
-          valid_string(\result) ∧ strcmp(\result, \old(s)) ≡ 0;
-      assigns __fc_heap_status, \result;
-      assigns __fc_heap_status \from (indirect: s), __fc_heap_status;
-      assigns \result
-        \from (indirect: *(s + (0 .. strlen{Old}(s)))),
-              (indirect: __fc_heap_status);
-    
-    behavior no_allocation:
-      assumes cannot_allocate: ¬is_allocable(strlen(s));
-      ensures result_null: \result ≡ \null;
-      assigns \result;
-      assigns \result \from \nothing;
-      allocates \nothing;
- */
-char *strdup(char const *s)
-{
-  char *__retres;
-  size_t tmp;
-  tmp = strlen(s);
-  size_t l = tmp + (size_t)1;
-  char *p = malloc(l);
-  if (! p) {
-    __fc_errno = 12;
-    __retres = (char *)0;
-    goto return_label;
-  }
-  memcpy((void *)p,(void const *)s,l);
-  __retres = p;
-  return_label: return __retres;
-}
+/*@ assigns *pos;
+    assigns *pos \from *stream; */
+extern int fgetpos(FILE * __restrict stream, fpos_t * __restrict pos);
 
-/*@ assigns \result;
+/*@ requires valid_stream: \valid(stream);
+    requires whence_enum: whence ≡ 0 ∨ whence ≡ 1 ∨ whence ≡ 2;
+    assigns *stream, \result, __fc_errno;
+    assigns *stream \from *stream, (indirect: offset), (indirect: whence);
     assigns \result
-      \from (indirect: *(s + (0 .. strlen{Old}(s)))), (indirect: n),
-            (indirect: __fc_heap_status);
-    allocates \result;
-    
-    behavior allocation:
-      assumes can_allocate: is_allocable(\min(strlen(s), n + 1));
-      ensures
-        allocation:
-          \fresh{Old, Here}(\result,\min(strlen(\old(s)), \old(n) + 1));
-      ensures
-        result_valid_string_bounded_and_same_prefix:
-          \valid(\result + (0 .. \min(strlen(\old(s)), \old(n)))) ∧
-          valid_string(\result) ∧ strlen(\result) ≤ \old(n) ∧
-          strncmp(\result, \old(s), \old(n)) ≡ 0;
-      assigns __fc_heap_status, \result;
-      assigns __fc_heap_status
-        \from (indirect: s), (indirect: n), __fc_heap_status;
-      assigns \result
-        \from (indirect: *(s + (0 .. strlen{Old}(s)))), (indirect: n),
-              (indirect: __fc_heap_status);
-    
-    behavior no_allocation:
-      assumes cannot_allocate: ¬is_allocable(\min(strlen(s), n + 1));
-      ensures result_null: \result ≡ \null;
-      assigns \result;
-      assigns \result \from \nothing;
-      allocates \nothing;
+      \from (indirect: *stream), (indirect: offset), (indirect: whence);
+    assigns __fc_errno
+      \from (indirect: *stream), (indirect: offset), (indirect: whence);
  */
-char *strndup(char const *s, size_t n)
-{
-  char *__retres;
-  size_t l;
-  l = (unsigned int)0;
-  while (l < n) {
-    if ((int)*(s + l) == 0) break;
-    l += (size_t)1;
-  }
-  char *p = malloc(l + (size_t)1);
-  if (! p) {
-    __fc_errno = 12;
-    __retres = (char *)0;
-    goto return_label;
-  }
-  memcpy((void *)p,(void const *)s,l);
-  *(p + l) = (char)0;
-  __retres = p;
-  return_label: return __retres;
-}
+extern int fseek(FILE *stream, long offset, int whence);
 
-static int __fc_strsignal_init;
-/*@ ensures result_internal_str: \result ≡ __fc_p_strsignal;
-    ensures result_nul_terminated: *(\result + 63) ≡ 0;
-    ensures result_valid_string: valid_read_string(\result);
-    assigns \result;
-    assigns \result \from __fc_p_strsignal, (indirect: signum);
+/*@ assigns *stream;
+    assigns *stream \from *pos; */
+extern int fsetpos(FILE *stream, fpos_t const *pos);
+
+/*@ requires valid_stream: \valid(stream);
+    ensures
+      success_or_error:
+        \result ≡ -1 ∨
+        (\result ≥ 0 ∧ __fc_errno ≡ \old(__fc_errno));
+    assigns \result, __fc_errno;
+    assigns \result \from (indirect: *stream);
+    assigns __fc_errno \from (indirect: *stream);
  */
-char *strsignal(int signum)
-{
-  char *__retres;
-  if (! __fc_strsignal_init) {
-    Frama_C_make_unknown(__fc_strsignal,(unsigned int)63);
-    __fc_strsignal[63] = (char)0;
-    __fc_strsignal_init = 1;
-  }
-  __retres = __fc_strsignal;
-  return __retres;
-}
+extern long ftell(FILE *stream);
+
+/*@ assigns *stream;
+    assigns *stream \from \nothing; */
+extern void rewind(FILE *stream);
+
+/*@ assigns *stream;
+    assigns *stream \from \nothing; */
+extern void clearerr(FILE *stream);
 
-/*@ ghost unsigned int volatile __fc_time __attribute__((__FRAMA_C_MODEL__));
-  */
 /*@ assigns \result;
-    assigns \result \from __fc_time; */
-extern clock_t clock(void);
+    assigns \result \from *stream; */
+extern int feof(FILE *stream);
 
 /*@ assigns \result;
-    assigns \result \from time1, time0; */
-extern double difftime(time_t time1, time_t time0);
+    assigns \result \from *stream; */
+extern int fileno(FILE *stream);
 
-/*@ assigns *timeptr, \result;
-    assigns *timeptr \from *timeptr;
-    assigns \result \from *timeptr;
+/*@ assigns *stream;
+    assigns *stream \from \nothing; */
+extern void flockfile(FILE *stream);
+
+/*@ assigns *stream;
+    assigns *stream \from \nothing; */
+extern void funlockfile(FILE *stream);
+
+/*@ assigns \result, *stream;
+    assigns \result \from \nothing;
+    assigns *stream \from \nothing;
  */
-extern time_t mktime(struct tm *timeptr);
+extern int ftrylockfile(FILE *stream);
 
-/*@ assigns *timer, \result;
-    assigns *timer \from __fc_time;
-    assigns \result \from __fc_time;
-    
-    behavior null:
-      assumes timer_null: timer ≡ \null;
-      assigns \result;
-      assigns \result \from __fc_time;
-    
-    behavior not_null:
-      assumes timer_non_null: timer ≢ \null;
-      requires valid_timer: \valid(timer);
-      ensures initialization: timer: \initialized(\old(timer));
-      assigns *timer, \result;
-      assigns *timer \from __fc_time;
-      assigns \result \from __fc_time;
-    
-    complete behaviors not_null, null;
-    disjoint behaviors not_null, null;
+/*@ assigns \result;
+    assigns \result \from *stream; */
+extern int ferror(FILE *stream);
+
+/*@ assigns __fc_stdout;
+    assigns __fc_stdout \from __fc_errno, *(s + (..));
  */
-extern time_t time(time_t *timer);
+extern void perror(char const *s);
 
-char __fc_ctime[26];
-char * const __fc_p_ctime = __fc_ctime;
-/*@ requires valid_timer: \valid_read(timer);
-    requires initialization: init_timer: \initialized(timer);
-    ensures result_points_to_ctime: \result ≡ __fc_p_ctime;
-    ensures result_valid_string: valid_read_string(__fc_p_ctime);
-    assigns __fc_ctime[0 .. 25], \result;
-    assigns __fc_ctime[0 .. 25]
-      \from (indirect: *timer), (indirect: __fc_time);
-    assigns \result
-      \from (indirect: *timer), (indirect: __fc_time), __fc_p_ctime;
- */
-extern char *ctime(time_t const *timer);
-
-struct tm __fc_time_tm;
-struct tm * const __fc_p_time_tm = & __fc_time_tm;
-/*@ ensures
-      result_null_or_internal_tm:
-        \result ≡ &__fc_time_tm ∨ \result ≡ \null;
-    assigns \result, __fc_time_tm;
-    assigns \result \from __fc_p_time_tm;
-    assigns __fc_time_tm \from *timer;
+/*@ assigns \result, *stream;
+    assigns \result \from *stream;
+    assigns *stream \from *stream;
  */
-extern struct tm *gmtime(time_t const *timer);
+extern int getc_unlocked(FILE *stream);
 
-/*@ ensures
-      result_null_or_internal_tm:
-        \result ≡ &__fc_time_tm ∨ \result ≡ \null;
-    assigns \result, __fc_time_tm;
-    assigns \result \from __fc_p_time_tm;
-    assigns __fc_time_tm \from *timer;
- */
-extern struct tm *localtime(time_t const *timer);
+/*@ assigns \result;
+    assigns \result \from *__fc_stdin; */
+extern int getchar_unlocked(void);
 
-/*@ requires dst_has_room: \valid(s + (0 .. max - 1));
-    requires valid_format: valid_read_string(format);
-    requires valid_tm: \valid_read(tm);
-    ensures result_bounded: \result ≤ \old(max);
-    assigns *(s + (0 .. max - 1)), \result;
-    assigns *(s + (0 .. max - 1))
-      \from (indirect: max), (indirect: *(format + (0 ..))), (indirect: *tm);
-    assigns \result
-      \from (indirect: max), (indirect: *(format + (0 ..))), (indirect: *tm);
- */
-extern size_t strftime(char * __restrict s, size_t max,
-                       char const * __restrict format,
-                       struct tm const * __restrict tm);
+/*@ assigns *stream;
+    assigns *stream \from c; */
+extern int putc_unlocked(int c, FILE *stream);
 
-/*@ requires tp: \valid(tp);
-    assigns \result, *tp, __fc_time;
-    assigns \result \from __fc_time;
-    assigns *tp \from __fc_time;
-    assigns __fc_time \from __fc_time;
-    
-    behavior realtime_clock:
-      assumes realtime: clk_id ≡ 666;
-      ensures success: \result ≡ 0;
-      ensures initialization: \initialized(\old(tp));
-    
-    behavior monotonic_clock:
-      assumes monotonic: clk_id ≡ 1;
-      ensures success: \result ≡ 0;
-      ensures initialization: \initialized(\old(tp));
-    
-    behavior bad_clock_id:
-      assumes bad_id: clk_id ≢ 666 ∧ clk_id ≢ 1;
-      ensures error: \result ≡ 22;
-      assigns \result;
-      assigns \result \from clk_id;
-    
-    complete behaviors bad_clock_id, monotonic_clock, realtime_clock;
-    disjoint behaviors bad_clock_id, monotonic_clock, realtime_clock;
- */
-extern int clock_gettime(clockid_t clk_id, struct timespec *tp);
+/*@ assigns *__fc_stdout;
+    assigns *__fc_stdout \from c; */
+extern int putchar_unlocked(int c);
 
-/*@
-axiomatic nanosleep_predicates {
-  predicate abs_clock_in_range{L}(clockid_t id, struct timespec *tm) 
-    reads __fc_time;
-  
-  predicate valid_clock_id{L}(clockid_t id) 
-    reads __fc_time;
-  
-  }
+/*@ assigns *stream;
+    assigns *stream \from \nothing; */
+extern void clearerr_unlocked(FILE *stream);
 
-*/
-/*@ ghost int volatile __fc_interrupted __attribute__((__FRAMA_C_MODEL__));
-  */
-/*@ requires valid_request: \valid_read(rqtp);
-    requires
-      initialization: initialized_request:
-        \initialized(&rqtp->tv_sec) ∧ \initialized(&rqtp->tv_nsec);
-    requires valid_nanosecs: 0 ≤ rqtp->tv_nsec < 1000000000;
-    requires valid_remaining_or_null: rmtp ≡ \null ∨ \valid(rmtp);
-    assigns \result;
-    assigns \result
-      \from (indirect: __fc_time), (indirect: __fc_interrupted),
-            (indirect: clock_id), (indirect: flags), (indirect: rqtp),
-            (indirect: *rqtp);
-    
-    behavior absolute:
-      assumes absolute_time: (flags & 1) ≢ 0;
-      assumes
-        no_einval:
-          abs_clock_in_range(clock_id, rqtp) ∧ valid_clock_id(clock_id);
-      ensures
-        result_ok_or_error:
-          \result ≡ 0 ∨ \result ≡ 4 ∨ \result ≡ 22 ∨
-          \result ≡ 95;
-      assigns \result;
-      assigns \result
-        \from (indirect: __fc_time), (indirect: __fc_interrupted),
-              (indirect: clock_id), (indirect: rqtp), (indirect: *rqtp);
-    
-    behavior relative_interrupted:
-      assumes relative_time: (flags & 1) ≡ 0;
-      assumes interrupted: __fc_interrupted ≢ 0;
-      assumes no_einval: valid_clock_id(clock_id);
-      ensures result_interrupted: \result ≡ 4;
-      ensures
-        initialization: interrupted_remaining:
-          \old(rmtp) ≢ \null ⇒
-          \initialized(&\old(rmtp)->tv_sec) ∧
-          \initialized(&\old(rmtp)->tv_nsec);
-      ensures
-        interrupted_remaining_decreases:
-          \old(rmtp) ≢ \null ⇒
-          \old(rqtp)->tv_sec * 1000000000 + \old(rqtp)->tv_nsec ≥
-          \old(rmtp)->tv_sec * 1000000000 + \old(rmtp)->tv_nsec;
-      ensures
-        remaining_valid:
-          \old(rmtp) ≢ \null ⇒ 0 ≤ \old(rmtp)->tv_nsec < 1000000000;
-      assigns \result, *rmtp;
-      assigns \result
-        \from (indirect: __fc_time), (indirect: clock_id), (indirect: rqtp),
-              (indirect: *rqtp);
-      assigns *rmtp
-        \from __fc_time, (indirect: clock_id), (indirect: rqtp),
-              (indirect: *rqtp), (indirect: rmtp);
-    
-    behavior relative_no_error:
-      assumes relative_time: (flags & 1) ≡ 0;
-      assumes not_interrupted: __fc_interrupted ≡ 0;
-      assumes no_einval: valid_clock_id(clock_id);
-      ensures result_ok: \result ≡ 0;
-      assigns \result;
-      assigns \result
-        \from (indirect: __fc_time), (indirect: clock_id), (indirect: rqtp),
-              (indirect: *rqtp);
-    
-    behavior relative_invalid_clock_id:
-      assumes relative_time: (flags & 1) ≡ 0;
-      assumes not_interrupted: __fc_interrupted ≡ 0;
-      assumes einval: ¬valid_clock_id(clock_id);
-      ensures result_einval: \result ≡ 22;
-      assigns \result;
-      assigns \result
-        \from (indirect: __fc_time), (indirect: clock_id), (indirect: rqtp),
-              (indirect: *rqtp);
-    
-    complete behaviors relative_invalid_clock_id,
-                       relative_no_error,
-                       relative_interrupted,
-                       absolute;
-    disjoint behaviors relative_invalid_clock_id,
-                       relative_no_error,
-                       relative_interrupted,
-                       absolute;
- */
-extern int clock_nanosleep(clockid_t clock_id, int flags,
-                           struct timespec const *rqtp, struct timespec *rmtp);
+/*@ assigns \result;
+    assigns \result \from *stream; */
+extern int feof_unlocked(FILE *stream);
 
-/*@ requires valid_request: \valid_read(rqtp);
-    requires
-      initialization: initialized_request:
-        \initialized(&rqtp->tv_sec) ∧ \initialized(&rqtp->tv_nsec);
-    requires valid_nanosecs: 0 ≤ rqtp->tv_nsec < 1000000000;
-    requires valid_remaining_or_null: rmtp ≡ \null ∨ \valid(rmtp);
-    ensures result_elapsed_or_interrupted: \result ≡ 0 ∨ \result ≡ -1;
-    ensures
-      initialization: interrupted_remaining:
-        \old(rmtp) ≢ \null ∧ \result ≡ -1 ⇒
-        \initialized(&\old(rmtp)->tv_sec) ∧
-        \initialized(&\old(rmtp)->tv_nsec);
-    ensures
-      interrupted_remaining_decreases:
-        \old(rmtp) ≢ \null ∧ \result ≡ -1 ⇒
-        \old(rqtp)->tv_sec * 1000000000 + \old(rqtp)->tv_nsec ≥
-        \old(rmtp)->tv_sec * 1000000000 + \old(rmtp)->tv_nsec;
-    ensures
-      interrupted_remaining_valid:
-        \old(rmtp) ≢ \null ∧ \result ≡ -1 ⇒
-        0 ≤ \old(rmtp)->tv_nsec < 1000000000;
-    assigns \result, *rmtp;
-    assigns \result
-      \from (indirect: __fc_time), (indirect: rqtp), (indirect: *rqtp);
-    assigns *rmtp
-      \from (indirect: __fc_time), (indirect: rqtp), (indirect: *rqtp),
-            (indirect: rmtp);
- */
-extern int nanosleep(struct timespec const *rqtp, struct timespec *rmtp);
+/*@ assigns \result;
+    assigns \result \from *stream; */
+extern int ferror_unlocked(FILE *stream);
 
-extern void tzset(void);
+/*@ assigns \result;
+    assigns \result \from *stream; */
+extern int fileno_unlocked(FILE *stream);
 
-extern char *tzname[2];
+/*@ axiomatic pipe_streams {
+      predicate is_open_pipe{L}(FILE *stream) ;
+      
+      }
 
-/*@ assigns *(tzname[0 .. 1] + (0 ..));
-    assigns *(tzname[0 .. 1] + (0 ..)) \from \nothing;
+*/
+/*@ requires valid_command: valid_read_string(command);
+    requires valid_type: valid_read_string(type);
+    ensures
+      result_error_or_valid_open_pipe:
+        \result ≡ \null ∨
+        (\subset(\result, &__fc_fopen[0 .. 16 - 1]) ∧ is_open_pipe(\result));
+    assigns \result, __fc_fopen[0 ..];
+    assigns \result
+      \from (indirect: *command), (indirect: *type), __fc_p_fopen;
+    assigns __fc_fopen[0 ..]
+      \from (indirect: *command), (indirect: *type), __fc_fopen[0 ..];
  */
-extern void tzset(void);
+extern FILE *popen(char const *command, char const *type);
 
-/*@ ensures
-      result_null_or_inside_s:
-        \result ≡ \null ∨ \subset(\result, \old(s) + (0 .. \old(n) - 1));
+/*@ requires valid_stream: \valid(stream);
+    requires open_pipe: is_open_pipe(stream);
+    ensures closed_stream: ¬is_open_pipe(\old(stream));
     assigns \result;
-    assigns \result
-      \from s, (indirect: *(s + (0 .. n - 1))), (indirect: c), (indirect: n);
+    assigns \result \from (indirect: *stream);
  */
-extern wchar_t *wmemchr(wchar_t const *s, wchar_t c, size_t n);
+extern int pclose(FILE *stream);
 
-/*@ assigns \result;
-    assigns \result
-      \from (indirect: *(s1 + (0 .. n - 1))),
-            (indirect: *(s2 + (0 .. n - 1))), (indirect: n);
- */
-extern int wmemcmp(wchar_t const *s1, wchar_t const *s2, size_t n);
-
-wchar_t *wmemcpy(wchar_t *dest, wchar_t const *src, size_t n);
-
-/*@ ensures result_ptr: \result ≡ \old(dest);
-    assigns *(dest + (0 .. n - 1)), \result;
-    assigns *(dest + (0 .. n - 1))
-      \from *(src + (0 .. n - 1)), (indirect: src), (indirect: n);
-    assigns \result \from dest;
- */
-extern wchar_t *wmemmove(wchar_t *dest, wchar_t const *src, size_t n);
-
-wchar_t *wmemset(wchar_t *dest, wchar_t val, size_t len);
+ssize_t getline(char **lineptr, size_t *n, FILE *stream);
 
-wchar_t *wcscat(wchar_t *dest, wchar_t const *src);
+FILE __fc_initial_stdout =
+  {.__fc_FILE_id = (unsigned int)1, .__fc_FILE_data = 0U};
+FILE *__fc_stdout = & __fc_initial_stdout;
+FILE __fc_initial_stderr =
+  {.__fc_FILE_id = (unsigned int)2, .__fc_FILE_data = 0U};
+FILE *__fc_stderr = & __fc_initial_stderr;
+FILE __fc_initial_stdin =
+  {.__fc_FILE_id = (unsigned int)0, .__fc_FILE_data = 0U};
+FILE *__fc_stdin = & __fc_initial_stdin;
+ssize_t getline(char **lineptr, size_t *n, FILE *stream)
+{
+  ssize_t __retres;
+  int tmp;
+  if (! lineptr) goto _LOR;
+  else 
+    if (! n) goto _LOR;
+    else 
+      if (! stream) {
+        _LOR: {
+                __fc_errno = 22;
+                __retres = -1;
+                goto return_label;
+              }
+      }
+  tmp = ferror(stream);
+  if (tmp) goto _LOR_0;
+  else {
+    int tmp_0;
+    tmp_0 = feof(stream);
+    if (tmp_0) {
+      _LOR_0: {
+                __retres = -1;
+                goto return_label;
+              }
+    }
+  }
+  if (! *lineptr) goto _LOR_1;
+  else 
+    if (*n == (size_t)0) {
+      _LOR_1:
+      {
+        *lineptr = (char *)malloc((unsigned int)2);
+        if (! lineptr) {
+          __fc_errno = 12;
+          __retres = -1;
+          goto return_label;
+        }
+        *n = (unsigned int)2;
+      }
+    }
+  size_t cur = (unsigned int)0;
+  while (1) {
+    int tmp_3;
+    tmp_3 = ferror(stream);
+    if (tmp_3) break;
+    else {
+      int tmp_4;
+      tmp_4 = feof(stream);
+      if (tmp_4) break;
+    }
+    {
+      while (cur < *n - (size_t)1) {
+        int tmp_1;
+        tmp_1 = fgetc(stream);
+        char c = (char)tmp_1;
+        if ((int)c == -1) 
+          if (cur == (size_t)0) {
+            __retres = -1;
+            goto return_label;
+          }
+        if ((int)c != -1) {
+          size_t tmp_2;
+          tmp_2 = cur;
+          cur += (size_t)1;
+          *(*lineptr + tmp_2) = c;
+        }
+        if ((int)c == '\n') goto _LOR_2;
+        else 
+          if ((int)c == -1) {
+            _LOR_2:
+            {
+              *(*lineptr + cur) = (char)'\000';
+              __retres = (int)cur;
+              goto return_label;
+            }
+          }
+      }
+      if (*n == (size_t)2147483647) {
+        __fc_errno = 75;
+        __retres = -1;
+        goto return_label;
+      }
+      size_t new_size = *n + (size_t)1;
+      *lineptr = (char *)realloc((void *)*lineptr,new_size);
+      if (! *lineptr) {
+        __fc_errno = 12;
+        __retres = -1;
+        goto return_label;
+      }
+      *n = new_size;
+    }
+  }
+  __retres = -1;
+  return_label: return __retres;
+}
 
-/*@ requires valid_wstring_src: valid_read_wstring(wcs);
-    ensures
-      result_null_or_inside_wcs:
-        \result ≡ \null ∨ \subset(\result, \old(wcs) + (0 ..));
+/*@ requires abs_representable: i > -2147483647 - 1;
     assigns \result;
-    assigns \result \from wcs, (indirect: *(wcs + (0 ..))), (indirect: wc);
+    assigns \result \from i;
+    
+    behavior negative:
+      assumes negative: i < 0;
+      ensures opposite_result: \result ≡ -\old(i);
+    
+    behavior nonnegative:
+      assumes nonnegative: i ≥ 0;
+      ensures same_result: \result ≡ \old(i);
+    
+    complete behaviors nonnegative, negative;
+    disjoint behaviors nonnegative, negative;
  */
-extern wchar_t *wcschr(wchar_t const *wcs, wchar_t wc);
+int abs(int i)
+{
+  int __retres;
+  if (i < 0) {
+    __retres = - i;
+    goto return_label;
+  }
+  __retres = i;
+  return_label: return __retres;
+}
 
-/*@ assigns \result;
-    assigns \result
-      \from (indirect: *(s1 + (0 ..))), (indirect: *(s2 + (0 ..)));
+/*@ requires valid_nptr: \valid_read(p);
+    assigns \result;
+    assigns \result \from (indirect: p), (indirect: *(p + (0 ..)));
  */
-extern int wcscmp(wchar_t const *s1, wchar_t const *s2);
-
-wchar_t *wcscpy(wchar_t *dest, wchar_t const *src);
+int atoi(char const *p)
+{
+  int __retres;
+  int n;
+  int c;
+  int tmp_1;
+  int tmp_3;
+  int neg = 0;
+  unsigned char *up = (unsigned char *)p;
+  c = (int)*up;
+  tmp_1 = isdigit(c);
+  if (! tmp_1) {
+    int tmp_0;
+    while (1) {
+      int tmp;
+      tmp = isspace(c);
+      if (! tmp) break;
+      up ++;
+      c = (int)*up;
+    }
+    switch (c) {
+      case '-': neg ++;
+      case '+': { /* sequence */
+                  up ++;
+                  c = (int)*up;
+                }
+    }
+    tmp_0 = isdigit(c);
+    if (! tmp_0) {
+      __retres = 0;
+      goto return_label;
+    }
+  }
+  n = '0' - c;
+  while (1) {
+    int tmp_2;
+    up ++;
+    c = (int)*up;
+    tmp_2 = isdigit(c);
+    if (! tmp_2) break;
+    n *= 10;
+    n += '0' - c;
+  }
+  if (neg) tmp_3 = n; else tmp_3 = - n;
+  __retres = tmp_3;
+  return_label: return __retres;
+}
 
-/*@ assigns \result;
+/*@ assigns __fc_heap_status, \result;
+    assigns __fc_heap_status
+      \from (indirect: nmemb), (indirect: size), __fc_heap_status;
     assigns \result
-      \from (indirect: *(wcs + (0 ..))), (indirect: *(accept + (0 ..)));
+      \from (indirect: nmemb), (indirect: size), (indirect: __fc_heap_status);
+    allocates \result;
+    
+    behavior allocation:
+      assumes can_allocate: is_allocable(nmemb * size);
+      ensures
+        allocation: \fresh{Old, Here}(\result,\old(nmemb) * \old(size));
+      ensures
+        initialization:
+          \initialized((char *)\result + (0 .. \old(nmemb) * \old(size) - 1));
+      ensures
+        zero_initialization:
+          \subset(*((char *)\result + (0 .. \old(nmemb) * \old(size) - 1)),
+                 {0});
+    
+    behavior no_allocation:
+      assumes cannot_allocate: ¬is_allocable(nmemb * size);
+      ensures null_result: \result ≡ \null;
+      assigns \result;
+      assigns \result \from \nothing;
+      allocates \nothing;
+    
+    complete behaviors no_allocation, allocation;
+    disjoint behaviors no_allocation, allocation;
  */
-extern size_t wcscspn(wchar_t const *wcs, wchar_t const *accept);
+void *calloc(size_t nmemb, size_t size)
+{
+  void *__retres;
+  size_t l = nmemb * size;
+  if (size != (size_t)0) 
+    if (l / size != nmemb) {
+      __retres = (void *)0;
+      goto return_label;
+    }
+  char *p = malloc(l);
+  if (p) memset((void *)p,0,l);
+  __retres = (void *)p;
+  return_label: return __retres;
+}
 
-/*@ assigns *(dest + (0 ..)), \result;
-    assigns *(dest + (0 ..))
-      \from *(dest + (0 ..)), (indirect: dest), *(src + (0 .. n - 1)),
-            (indirect: src), (indirect: n);
-    assigns \result
-      \from (indirect: *(dest + (0 ..))), (indirect: *(src + (0 .. n - 1))),
-            (indirect: n);
- */
-extern size_t wcslcat(wchar_t * __restrict dest,
-                      wchar_t const * __restrict src, size_t n);
-
-/*@ requires
-      separation: dest: src:
-        \separated(dest + (0 .. n - 1), src + (0 .. n - 1));
-    assigns *(dest + (0 .. n - 1)), \result;
-    assigns *(dest + (0 .. n - 1))
-      \from *(src + (0 .. n - 1)), (indirect: src), (indirect: n);
-    assigns \result
-      \from (indirect: *(dest + (0 .. n - 1))), (indirect: dest),
-            (indirect: *(src + (0 .. n - 1))), (indirect: src), (indirect: n);
- */
-extern size_t wcslcpy(wchar_t *dest, wchar_t const *src, size_t n);
-
-size_t wcslen(wchar_t const *str);
-
-wchar_t *wcsncat(wchar_t *dest, wchar_t const *src, size_t n);
-
-/*@ assigns \result;
-    assigns \result
-      \from (indirect: *(s1 + (0 .. n - 1))),
-            (indirect: *(s2 + (0 .. n - 1))), (indirect: n);
- */
-extern int wcsncmp(wchar_t const *s1, wchar_t const *s2, size_t n);
-
-wchar_t *wcsncpy(wchar_t *dest, wchar_t const *src, size_t n);
-
-/*@ ensures
-      result_null_or_inside_wcs:
-        \result ≡ \null ∨ \subset(\result, \old(wcs) + (0 ..));
-    assigns \result;
-    assigns \result
-      \from wcs, (indirect: *(wcs + (0 ..))), (indirect: *(accept + (0 ..)));
- */
-extern wchar_t *wcspbrk(wchar_t const *wcs, wchar_t const *accept);
-
-/*@ ensures
-      result_null_or_inside_wcs:
-        \result ≡ \null ∨ \subset(\result, \old(wcs) + (0 ..));
-    assigns \result;
-    assigns \result \from wcs, (indirect: *(wcs + (0 ..))), (indirect: wc);
- */
-extern wchar_t *wcsrchr(wchar_t const *wcs, wchar_t wc);
-
-/*@ assigns \result;
-    assigns \result
-      \from (indirect: *(wcs + (0 ..))), (indirect: *(accept + (0 ..)));
- */
-extern size_t wcsspn(wchar_t const *wcs, wchar_t const *accept);
-
-/*@ ensures
-      result_null_or_inside_haystack:
-        \result ≡ \null ∨ \subset(\result, \old(haystack) + (0 ..));
-    assigns \result;
-    assigns \result
-      \from haystack, (indirect: *(haystack + (0 ..))),
-            (indirect: *(needle + (0 ..)));
- */
-extern wchar_t *wcsstr(wchar_t const *haystack, wchar_t const *needle);
-
-/*@ requires valid_stream: \valid(stream);
-    ensures result_null_or_same: \result ≡ \null ∨ \result ≡ \old(ws);
-    ensures
-      terminated_string_on_success:
-        \result ≢ \null ⇒ valid_wstring(\old(ws));
-    assigns *(ws + (0 .. n)), \result;
-    assigns *(ws + (0 .. n)) \from (indirect: n), (indirect: *stream);
-    assigns \result \from ws, (indirect: n), (indirect: *stream);
- */
-extern wchar_t *fgetws(wchar_t * __restrict ws, int n,
-                       FILE * __restrict stream);
-
-/*@ axiomatic wformat_length {
-      logic ℤ wformat_length{L}(wchar_t *format) ;
-      
+static char __fc_env_strings[64];
+static char __fc_initenv_init;
+static void __fc_initenv(void)
+{
+  if (! __fc_initenv_init) {
+    Frama_C_make_unknown(__fc_env_strings,(unsigned int)(64 - 1));
+    {
+      int i = 0;
+      while (i < 4096) {
+        {
+          int tmp;
+          tmp = Frama_C_interval(0,64 - 1);
+          __fc_env[i] = & __fc_env_strings[tmp];
+        }
+        i ++;
       }
+    }
+    __fc_initenv_init = (char)1;
+  }
+  return;
+}
 
-*/
-/*@ requires
-      separation: dest: src:
-        \separated(dest + (0 .. n - 1), src + (0 .. n - 1));
-    ensures result_ptr: \result ≡ \old(dest);
-    assigns *(dest + (0 .. n - 1)), \result;
-    assigns *(dest + (0 .. n - 1))
-      \from *(src + (0 .. n - 1)), (indirect: src), (indirect: n);
-    assigns \result \from dest;
+/*@ requires valid_name: valid_read_string(name);
+    ensures null_or_valid_result: \result ≡ \null ∨ \valid(\result);
+    assigns \result;
+    assigns \result \from __fc_env[0 ..], (indirect: name), *(name + (0 ..));
  */
-wchar_t *wmemcpy(wchar_t *dest, wchar_t const *src, size_t n)
+char *getenv(char const *name)
 {
-  {
-    size_t i = (unsigned int)0;
-    while (i < n) {
-      *(dest + i) = *(src + i);
-      i += (size_t)1;
-    }
+  char *__retres;
+  int tmp_0;
+  /*@ assert ¬(strchr(name, '=') ≡ \true); */ ;
+  __fc_initenv();
+  tmp_0 = Frama_C_nondet(0,1);
+  if (tmp_0) {
+    int tmp;
+    tmp = Frama_C_interval(0,4096 - 1);
+    ;
+    __retres = __fc_env[tmp];
+    goto return_label;
   }
-  return dest;
+  else {
+    __retres = (char *)0;
+    goto return_label;
+  }
+  return_label: return __retres;
 }
 
-/*@ ensures result_ptr: \result ≡ \old(dest);
-    ensures
-      initialization: wcs: \initialized(\old(dest) + (0 .. \old(len) - 1));
-    ensures
-      contents_equal_wc:
-        \subset(*(\old(dest) + (0 .. \old(len) - 1)), \old(val));
-    assigns *(dest + (0 .. len - 1)), \result;
-    assigns *(dest + (0 .. len - 1)) \from val, (indirect: len);
-    assigns \result \from dest;
+/*@ requires valid_string: valid_read_string(string);
+    assigns __fc_env[0 ..], \result;
+    assigns __fc_env[0 ..] \from __fc_env[0 ..], string;
+    assigns \result \from (indirect: __fc_env[0 ..]), (indirect: string);
  */
-wchar_t *wmemset(wchar_t *dest, wchar_t val, size_t len)
+int putenv(char *string)
 {
-  {
-    size_t i = (unsigned int)0;
-    while (i < len) {
-      *(dest + i) = val;
-      i += (size_t)1;
+  int __retres;
+  int tmp_3;
+  char *separator = strchr((char const *)string,'=');
+  /*@ assert string_contains_separator: separator ≢ \null; */ ;
+  /*@ assert name_is_not_empty: separator ≢ string; */ ;
+  __fc_initenv();
+  tmp_3 = Frama_C_nondet(0,1);
+  if (tmp_3) {
+    int tmp_1;
+    int tmp_2;
+    tmp_1 = Frama_C_nondet(0,1);
+    if (tmp_1) {
+      int tmp_0;
+      tmp_0 = Frama_C_interval(-2147483647 - 1,2147483647);
+      __retres = tmp_0;
+      goto return_label;
     }
+    tmp_2 = Frama_C_interval(0,4096 - 1);
+    __fc_env[tmp_2] = string;
   }
-  return dest;
+  __retres = 0;
+  return_label: return __retres;
 }
 
-/*@ ensures result_ptr: \result ≡ \old(dest);
-    assigns *(dest + (0 ..)), \result;
-    assigns *(dest + (0 ..))
-      \from *(src + (0 ..)), (indirect: src), *(dest + (0 ..)),
-            (indirect: dest);
-    assigns \result \from dest;
+/*@ requires valid_name: valid_read_string(name);
+    requires valid_value: valid_read_string(value);
+    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns \result, __fc_env[0 ..];
+    assigns \result
+      \from __fc_env[0 ..], (indirect: name), (indirect: *(name + (0 ..))),
+            (indirect: value), (indirect: *(value + (0 ..))),
+            (indirect: overwrite);
+    assigns __fc_env[0 ..]
+      \from __fc_env[0 ..], (indirect: name), (indirect: *(name + (0 ..))),
+            (indirect: value), (indirect: *(value + (0 ..))),
+            (indirect: overwrite);
  */
-wchar_t *wcscpy(wchar_t *dest, wchar_t const *src)
+int setenv(char const *name, char const *value, int overwrite)
 {
-  size_t i;
-  i = (unsigned int)0;
-  while (*(src + i) != 0) {
-    *(dest + i) = *(src + i);
-    i += (size_t)1;
+  int __retres;
+  char *tmp;
+  int tmp_4;
+  tmp = strchr(name,'=');
+  if (tmp) {
+    __retres = -1;
+    goto return_label;
   }
-  *(dest + i) = 0;
-  return dest;
+  size_t namelen = strlen(name);
+  if (namelen == (size_t)0) {
+    __retres = -1;
+    goto return_label;
+  }
+  __fc_initenv();
+  tmp_4 = Frama_C_nondet(0,1);
+  if (tmp_4) {
+    __retres = -1;
+    goto return_label;
+  }
+  else {
+    int tmp_1;
+    int tmp_2;
+    int tmp_3;
+    tmp_1 = Frama_C_nondet(0,1);
+    if (tmp_1) Frama_C_make_unknown(__fc_env_strings,(unsigned int)(64 - 1));
+    tmp_2 = Frama_C_interval(0,4096 - 1);
+    tmp_3 = Frama_C_interval(0,64 - 1);
+    __fc_env[tmp_2] = & __fc_env_strings[tmp_3];
+    __retres = 0;
+    goto return_label;
+  }
+  return_label: return __retres;
 }
 
-/*@ requires valid_string_s: valid_read_wstring(str);
-    assigns \result;
-    assigns \result \from (indirect: *(str + (0 ..)));
+/*@ requires valid_name: valid_read_string(name);
+    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns \result, __fc_env[0 ..];
+    assigns \result
+      \from __fc_env[0 ..], (indirect: name), (indirect: *(name + (0 ..)));
+    assigns __fc_env[0 ..]
+      \from __fc_env[0 ..], (indirect: name), (indirect: *(name + (0 ..)));
  */
-size_t wcslen(wchar_t const *str)
+int unsetenv(char const *name)
 {
-  size_t i;
-  i = (unsigned int)0;
-  while (*(str + i) != 0) i += (size_t)1;
-  return i;
-}
-
-/*@ requires
-      separation: dest: src:
-        \separated(dest + (0 .. n - 1), src + (0 .. n - 1));
-    ensures result_ptr: \result ≡ \old(dest);
-    assigns *(dest + (0 .. n - 1)), \result;
-    assigns *(dest + (0 .. n - 1))
-      \from *(src + (0 .. n - 1)), (indirect: src), (indirect: n);
-    assigns \result \from dest;
- */
-wchar_t *wcsncpy(wchar_t *dest, wchar_t const *src, size_t n)
-{
-  size_t i;
-  i = (unsigned int)0;
-  while (i < n) {
-    *(dest + i) = *(src + i);
-    if (*(src + i) == 0) break;
-    i += (size_t)1;
+  int __retres;
+  char *tmp;
+  int tmp_2;
+  tmp = strchr(name,'=');
+  if (tmp) {
+    __retres = -1;
+    goto return_label;
   }
-  while (i < n) {
-    *(dest + i) = 0;
-    i += (size_t)1;
+  size_t namelen = strlen(name);
+  if (namelen == (size_t)0) {
+    __retres = -1;
+    goto return_label;
   }
-  return dest;
+  __fc_initenv();
+  tmp_2 = Frama_C_nondet(0,1);
+  if (tmp_2) {
+    int tmp_1;
+    tmp_1 = Frama_C_interval(0,4096 - 1);
+    __fc_env[tmp_1] = (char *)0;
+  }
+  __retres = 0;
+  return_label: return __retres;
 }
 
-/*@ ensures result_ptr: \result ≡ \old(dest);
-    assigns *(dest + (0 ..)), \result;
-    assigns *(dest + (0 ..))
-      \from *(dest + (0 ..)), (indirect: dest), *(src + (0 ..)),
-            (indirect: src);
-    assigns \result \from dest;
+/*@ requires valid_memptr: \valid(memptr);
+    requires
+      alignment_is_a_suitable_power_of_two:
+        alignment ≥ sizeof(void *) ∧
+        ((size_t)alignment & ((size_t)alignment - 1)) ≡ 0;
+    assigns __fc_heap_status, \result;
+    assigns __fc_heap_status
+      \from (indirect: alignment), size, __fc_heap_status;
+    assigns \result
+      \from (indirect: alignment), (indirect: size),
+            (indirect: __fc_heap_status);
+    allocates *\old(memptr);
+    
+    behavior allocation:
+      assumes can_allocate: is_allocable(size);
+      ensures allocation: \fresh{Old, Here}(*\old(memptr),\old(size));
+      ensures result_zero: \result ≡ 0;
+      assigns __fc_heap_status, \result;
+      assigns __fc_heap_status
+        \from (indirect: alignment), size, __fc_heap_status;
+      assigns \result
+        \from (indirect: alignment), (indirect: size),
+              (indirect: __fc_heap_status);
+    
+    behavior no_allocation:
+      assumes cannot_allocate: ¬is_allocable(size);
+      ensures result_non_zero: \result < 0 ∨ \result > 0;
+      assigns \result;
+      assigns \result \from (indirect: alignment);
+      allocates \nothing;
+    
+    complete behaviors no_allocation, allocation;
+    disjoint behaviors no_allocation, allocation;
  */
-wchar_t *wcscat(wchar_t *dest, wchar_t const *src)
+int posix_memalign(void **memptr, size_t alignment, size_t size)
 {
-  size_t i;
-  size_t n = wcslen((wchar_t const *)dest);
-  i = (unsigned int)0;
-  while (*(src + i) != 0) {
-    *(dest + (n + i)) = *(src + i);
-    i += (size_t)1;
+  int __retres;
+  /*@
+  assert
+  alignment_is_a_suitable_power_of_two:
+    alignment ≥ sizeof(void *) ∧
+    ((size_t)alignment & ((size_t)alignment - 1)) ≡ 0;
+   */
+  ;
+  *memptr = malloc(size);
+  if (! *memptr) {
+    __retres = 12;
+    goto return_label;
   }
-  *(dest + (n + i)) = 0;
-  return dest;
+  __retres = 0;
+  return_label: return __retres;
 }
 
-/*@ ensures result_ptr: \result ≡ \old(dest);
-    assigns *(dest + (0 ..)), \result;
-    assigns *(dest + (0 ..))
-      \from *(dest + (0 ..)), (indirect: dest), *(src + (0 .. n - 1)),
-            (indirect: src), (indirect: n);
+/*@ requires valid_dest: valid_or_empty(dest, n);
+    requires valid_src: valid_read_or_empty(src, n);
+    requires
+      separation:
+        \separated((char *)dest + (0 .. n - 1), (char *)src + (0 .. n - 1));
+    ensures
+      copied_contents:
+        memcmp{Post, Pre}((char *)\old(dest), (char *)\old(src), \old(n)) ≡
+        0;
+    ensures result_ptr: \result ≡ \old(dest);
+    assigns *((char *)dest + (0 .. n - 1)), \result;
+    assigns *((char *)dest + (0 .. n - 1))
+      \from *((char *)src + (0 .. n - 1));
     assigns \result \from dest;
  */
-wchar_t *wcsncat(wchar_t *dest, wchar_t const *src, size_t n)
+void *memcpy(void * __restrict dest, void const * __restrict src, size_t n)
 {
-  size_t i;
-  size_t dest_len = wcslen((wchar_t const *)dest);
-  i = (unsigned int)0;
-  while (1) {
-    if (i < n) {
-      if (! (*(src + i) != 0)) break;
+  {
+    size_t i = (unsigned int)0;
+    /*@ loop invariant no_eva: 0 ≤ i ≤ n;
+        loop invariant
+          no_eva:
+            ∀ ℤ k;
+              0 ≤ k < i ⇒ *((char *)dest + k) ≡ *((char *)src + k);
+        loop assigns i, *((char *)dest + (0 .. n - 1));
+        loop variant n - i;
+    */
+    while (i < n) {
+      *((char *)dest + i) = *((char *)src + i);
+      i += (size_t)1;
     }
-    else break;
-    *(dest + (dest_len + i)) = *(src + i);
-    i += (size_t)1;
   }
-  *(dest + (dest_len + i)) = 0;
   return dest;
 }
 
-/*@ ghost extern int __fc_stack_status __attribute__((__FRAMA_C_MODEL__)); */
-
-/*@ ensures allocation: \fresh{Old, Here}(\result,\old(size));
-    assigns __fc_stack_status, \result;
-    assigns __fc_stack_status \from size, __fc_stack_status;
-    assigns \result \from (indirect: size), (indirect: __fc_stack_status);
-    allocates \result;
- */
-extern void *alloca(size_t size);
-
-DIR __fc_opendir[16];
-DIR * const __fc_p_opendir = __fc_opendir;
-/*@ requires
-      dirp_valid_dir_stream: \subset(dirp, &__fc_opendir[0 .. 16 - 1]);
-    ensures
-      err_or_closed_on_success:
-        (\result ≡ 0 ∧ \old(dirp)->__fc_dir_inode ≡ \null) ∨
-        \result ≡ -1;
-    assigns \result, __fc_errno, *dirp;
-    assigns \result \from dirp, *dirp, __fc_p_opendir;
-    assigns __fc_errno \from dirp, *dirp, __fc_p_opendir;
-    assigns *dirp \from dirp, *dirp, __fc_p_opendir;
+/*@ assigns \result;
+    assigns \result \from (indirect: p), (indirect: q), (indirect: n);
+    
+    behavior separated:
+      assumes
+        separation: no_overlap:
+          \separated(p + (0 .. n - 1), q + (0 .. n - 1));
+      ensures result_no_overlap: \result ≡ 0;
+    
+    behavior not_separated_lt:
+      assumes
+        separation: overlap: ¬\separated(p + (0 .. n - 1), q + (0 .. n - 1));
+      assumes p_before_q: p ≤ q < p + n;
+      ensures result_p_before_q: \result ≡ -1;
+    
+    behavior not_separated_gt:
+      assumes
+        separation: overlap: ¬\separated(p + (0 .. n - 1), q + (0 .. n - 1));
+      assumes p_after_q: q < p ≤ q + n;
+      ensures result_p_after_q: \result ≡ 1;
+    
+    complete behaviors not_separated_gt, not_separated_lt, separated;
+    disjoint behaviors not_separated_gt, not_separated_lt, separated;
  */
-extern int closedir(DIR *dirp);
+static int memoverlap(char const *p, char const *q, size_t n)
+{
+  int __retres;
+  uintptr_t p1 = (unsigned int)p;
+  uintptr_t p2 = (unsigned int)(p + n);
+  uintptr_t q1 = (unsigned int)q;
+  uintptr_t q2 = (unsigned int)(q + n);
+  if (p1 <= q1) {
+    if (p2 > q1) {
+      __retres = -1;
+      goto return_label;
+    }
+    else goto _LAND;
+  }
+  else {
+    _LAND: ;
+    if (q1 <= p1) 
+      if (q2 > p1) {
+        __retres = 1;
+        goto return_label;
+      }
+      else {
+        __retres = 0;
+        goto return_label;
+      }
+    else {
+      __retres = 0;
+      goto return_label;
+    }
+  }
+  return_label: return __retres;
+}
 
-/*@ ensures result_null_or_valid: \result ≡ \null ∨ \valid(\result);
-    ensures
-      valid_dir_stream_on_success:
-        \result ≢ \null ⇒ \result ≡ &__fc_opendir[\result->__fc_dir_id];
+/*@ requires valid_dest: valid_or_empty(dest, n);
+    requires valid_src: valid_read_or_empty(src, n);
     ensures
-      stream_positioned_on_success:
-        \result ≢ \null ⇒ \result->__fc_dir_inode ≢ \null;
-    assigns \result, __fc_errno;
-    assigns \result \from *(path + (0 ..)), __fc_p_opendir;
-    assigns __fc_errno \from *(path + (0 ..)), __fc_p_opendir;
- */
-extern DIR *opendir(char const *path);
-
-/*@ requires
-      dirp_valid_dir_stream: \subset(dirp, &__fc_opendir[0 .. 16 - 1]);
-    ensures result_null_or_valid: \result ≡ \null ∨ \valid(\result);
-    assigns \result, dirp->__fc_dir_position, __fc_errno;
-    assigns \result \from *dirp, __fc_p_opendir;
-    assigns dirp->__fc_dir_position \from dirp->__fc_dir_position;
-    assigns __fc_errno \from dirp, *dirp, __fc_p_opendir;
+      copied_contents:
+        memcmp{Post, Pre}((char *)\old(dest), (char *)\old(src), \old(n)) ≡
+        0;
+    ensures result_ptr: \result ≡ \old(dest);
+    assigns *((char *)dest + (0 .. n - 1)), \result;
+    assigns *((char *)dest + (0 .. n - 1))
+      \from *((char *)src + (0 .. n - 1));
+    assigns \result \from dest;
  */
-extern struct dirent *readdir(DIR *dirp);
-
-/*@ requires valid_fdset: \valid(fdset);
-    requires initialization: \initialized(fdset);
-    assigns *fdset;
-    assigns *fdset \from *fdset, (indirect: fd);
- */
-extern void FD_CLR(int fd, fd_set *fdset);
+void *memmove(void *dest, void const *src, size_t n)
+{
+  void *__retres;
+  int tmp;
+  if (n == (size_t)0) {
+    __retres = dest;
+    goto return_label;
+  }
+  char *s = (char *)src;
+  char *d = (char *)dest;
+  tmp = memoverlap((char const *)dest,(char const *)src,n);
+  if (tmp <= 0) {
+    size_t i = (unsigned int)0;
+    /*@ loop invariant no_eva: 0 ≤ i ≤ n;
+        loop invariant
+          no_eva:
+            ∀ ℤ k;
+              0 ≤ k < i ⇒
+              *((char *)dest + k) ≡ \at(*((char *)src + k),LoopEntry);
+        loop invariant
+          no_eva:
+            ∀ ℤ k;
+              i ≤ k < n ⇒
+              *((char *)src + k) ≡ \at(*((char *)src + k),LoopEntry);
+        loop assigns i, *((char *)dest + (0 .. n - 1));
+        loop variant n - i;
+    */
+    while (i < n) {
+      *(d + i) = *(s + i);
+      i += (size_t)1;
+    }
+  }
+  else {
+    {
+      size_t i_0 = n - (size_t)1;
+      /*@ loop invariant no_eva: 0 ≤ i_0 < n;
+          loop invariant
+            no_eva:
+              ∀ ℤ k;
+                i_0 < k < n ⇒
+                *((char *)dest + k) ≡ \at(*((char *)src + k),LoopEntry);
+          loop invariant
+            no_eva:
+              ∀ ℤ k;
+                0 ≤ k ≤ i_0 ⇒
+                *((char *)src + k) ≡ \at(*((char *)src + k),LoopEntry);
+          loop assigns i_0, *((char *)dest + (0 .. n - 1));
+          loop variant i_0;
+      */
+      while (i_0 > (size_t)0) {
+        *(d + i_0) = *(s + i_0);
+        i_0 -= (size_t)1;
+      }
+    }
+    *(d + 0) = *(s + 0);
+  }
+  __retres = dest;
+  return_label: return __retres;
+}
 
-/*@ requires valid_fdset: \valid_read(fdset);
-    requires initialization: \initialized(fdset);
+/*@ requires valid_string_s: valid_read_string(s);
+    ensures acsl_c_equiv: \result ≡ strlen(\old(s));
     assigns \result;
-    assigns \result \from (indirect: *fdset), (indirect: fd);
- */
-extern int FD_ISSET(int fd, fd_set const *fdset);
-
-/*@ requires valid_fdset: \valid(fdset);
-    requires initialization: \initialized(fdset);
-    assigns *fdset;
-    assigns *fdset \from *fdset, (indirect: fd);
- */
-extern void FD_SET(int fd, fd_set *fdset);
-
-/*@ requires valid_fdset: \valid(fdset);
-    ensures initialization: \initialized(\old(fdset));
-    assigns *fdset;
-    assigns *fdset \from \nothing;
+    assigns \result \from (indirect: *(s + (0 ..)));
  */
-extern void FD_ZERO(fd_set *fdset);
+size_t strlen(char const *s)
+{
+  size_t i;
+  i = (unsigned int)0;
+  while ((int)*(s + i) != 0) i += (size_t)1;
+  return i;
+}
 
-/*@ requires valid_res: \valid(res);
-    ensures initialization: res: \initialized(\old(res));
-    ensures res_wrapped: *\old(res) ≡ (int)(\old(a) + \old(b));
+/*@ requires valid_string_s: valid_read_nstring(s, maxlen);
     ensures
-      result_overflow:
-        \old(a) + \old(b) ≡ (int)(\old(a) + \old(b))?
-          \result ≡ 0:
-          \result ≡ 1;
-    assigns \result, *res;
-    assigns \result \from a, b;
-    assigns *res \from a, b;
+      result_bounded:
+        \result ≡ strlen(\old(s)) ∨ \result ≡ \old(maxlen);
+    assigns \result;
+    assigns \result
+      \from (indirect: *(s + (0 .. maxlen - 1))), (indirect: maxlen);
  */
-_Bool __builtin_sadd_overflow(int a, int b, int *res);
+size_t strnlen(char const *s, size_t maxlen)
+{
+  size_t i;
+  i = (unsigned int)0;
+  while (1) {
+    if (i < maxlen) {
+      if (! ((int)*(s + i) != 0)) break;
+    }
+    else break;
+    i += (size_t)1;
+  }
+  return i;
+}
 
-/*@ requires valid_res: \valid(res);
-    ensures initialization: res: \initialized(\old(res));
-    ensures res_wrapped: *\old(res) ≡ (long)(\old(a) + \old(b));
+/*@ requires valid_s: valid_or_empty(s, n);
     ensures
-      result_overflow:
-        \old(a) + \old(b) ≡ (long)(\old(a) + \old(b))?
-          \result ≡ 0:
-          \result ≡ 1;
-    assigns \result, *res;
-    assigns \result \from a, b;
-    assigns *res \from a, b;
+      acsl_c_equiv: memset((char *)\old(s), \old(c), \old(n)) ≡ \true;
+    ensures result_ptr: \result ≡ \old(s);
+    assigns *((char *)s + (0 .. n - 1)), \result;
+    assigns *((char *)s + (0 .. n - 1)) \from c;
+    assigns \result \from s;
  */
-_Bool __builtin_saddl_overflow(long a, long b, long *res);
+void *memset(void *s, int c, size_t n)
+{
+  unsigned char *p = (unsigned char *)s;
+  {
+    size_t i = (unsigned int)0;
+    while (i < n) {
+      *(p + i) = (unsigned char)c;
+      i += (size_t)1;
+    }
+  }
+  return s;
+}
 
-/*@ requires valid_res: \valid(res);
-    ensures initialization: res: \initialized(\old(res));
-    ensures res_wrapped: *\old(res) ≡ (long long)(\old(a) + \old(b));
-    ensures
-      result_overflow:
-        \old(a) + \old(b) ≡ (long long)(\old(a) + \old(b))?
-          \result ≡ 0:
-          \result ≡ 1;
-    assigns \result, *res;
-    assigns \result \from a, b;
-    assigns *res \from a, b;
+/*@ requires valid_string_s1: valid_read_string(s1);
+    requires valid_string_s2: valid_read_string(s2);
+    ensures acsl_c_equiv: \result ≡ strcmp(\old(s1), \old(s2));
+    assigns \result;
+    assigns \result
+      \from (indirect: *(s1 + (0 ..))), (indirect: *(s2 + (0 ..)));
  */
-_Bool __builtin_saddll_overflow(long long a, long long b, long long *res);
+int strcmp(char const *s1, char const *s2)
+{
+  int __retres;
+  size_t i;
+  i = (unsigned int)0;
+  while ((int)*(s1 + i) == (int)*(s2 + i)) {
+    if ((int)*(s1 + i) == 0) {
+      __retres = 0;
+      goto return_label;
+    }
+    i += (size_t)1;
+  }
+  __retres = (int)*((unsigned char *)s1 + i) - (int)*((unsigned char *)s2 + i);
+  return_label: return __retres;
+}
 
-/*@ requires valid_res: \valid(res);
-    ensures initialization: res: \initialized(\old(res));
-    ensures res_wrapped: *\old(res) ≡ (unsigned int)(\old(a) + \old(b));
-    ensures
-      result_overflow:
-        \old(a) + \old(b) ≡ (unsigned int)(\old(a) + \old(b))?
-          \result ≡ 0:
-          \result ≡ 1;
-    assigns \result, *res;
-    assigns \result \from a, b;
-    assigns *res \from a, b;
+/*@ requires valid_string_s1: valid_read_nstring(s1, n);
+    requires valid_string_s2: valid_read_nstring(s2, n);
+    ensures acsl_c_equiv: \result ≡ strncmp(\old(s1), \old(s2), \old(n));
+    assigns \result;
+    assigns \result
+      \from (indirect: *(s1 + (0 .. n - 1))),
+            (indirect: *(s2 + (0 .. n - 1))), (indirect: n);
  */
-_Bool __builtin_uadd_overflow(unsigned int a, unsigned int b,
-                              unsigned int *res);
+int strncmp(char const *s1, char const *s2, size_t n)
+{
+  int __retres;
+  {
+    size_t i = (unsigned int)0;
+    while (i < n) {
+      if ((int)*(s1 + i) != (int)*(s2 + i)) {
+        __retres = (int)*((unsigned char *)s1 + i) - (int)*((unsigned char *)s2 + i);
+        goto return_label;
+      }
+      if ((int)*(s1 + i) == 0) {
+        __retres = 0;
+        goto return_label;
+      }
+      i += (size_t)1;
+    }
+  }
+  __retres = 0;
+  return_label: return __retres;
+}
 
-/*@ requires valid_res: \valid(res);
-    ensures initialization: res: \initialized(\old(res));
-    ensures res_wrapped: *\old(res) ≡ (unsigned long)(\old(a) + \old(b));
+/*@ requires valid_s1: valid_read_or_empty(s1, n);
+    requires valid_s2: valid_read_or_empty(s2, n);
+    requires initialization: s1: \initialized((char *)s1 + (0 .. n - 1));
+    requires initialization: s2: \initialized((char *)s2 + (0 .. n - 1));
+    requires danglingness: s1: non_escaping(s1, n);
+    requires danglingness: s2: non_escaping(s2, n);
     ensures
-      result_overflow:
-        \old(a) + \old(b) ≡ (unsigned long)(\old(a) + \old(b))?
-          \result ≡ 0:
-          \result ≡ 1;
-    assigns \result, *res;
-    assigns \result \from a, b;
-    assigns *res \from a, b;
+      logic_spec:
+        \result ≡
+        memcmp{Pre, Pre}((char *)\old(s1), (char *)\old(s2), \old(n));
+    assigns \result;
+    assigns \result
+      \from (indirect: *((char *)s1 + (0 .. n - 1))),
+            (indirect: *((char *)s2 + (0 .. n - 1)));
  */
-_Bool __builtin_uaddl_overflow(unsigned long a, unsigned long b,
-                               unsigned long *res);
-
-/*@ requires valid_res: \valid(res);
-    ensures initialization: res: \initialized(\old(res));
-    ensures
-      res_wrapped: *\old(res) ≡ (unsigned long long)(\old(a) + \old(b));
-    ensures
-      result_overflow:
-        \old(a) + \old(b) ≡ (unsigned long long)(\old(a) + \old(b))?
-          \result ≡ 0:
-          \result ≡ 1;
-    assigns \result, *res;
-    assigns \result \from a, b;
-    assigns *res \from a, b;
- */
-_Bool __builtin_uaddll_overflow(unsigned long long a, unsigned long long b,
-                                unsigned long long *res);
+int memcmp(void const *s1, void const *s2, size_t n)
+{
+  int __retres;
+  unsigned char const *p1;
+  unsigned char const *p2;
+  p1 = (unsigned char const *)s1;
+  p2 = (unsigned char const *)s2;
+  {
+    size_t i = (unsigned int)0;
+    while (i < n) {
+      if ((int)*(p1 + i) != (int)*(p2 + i)) {
+        __retres = (int)*(p1 + i) - (int)*(p2 + i);
+        goto return_label;
+      }
+      i += (size_t)1;
+    }
+  }
+  __retres = 0;
+  return_label: return __retres;
+}
 
-/*@ requires valid_res: \valid(res);
-    ensures initialization: res: \initialized(\old(res));
-    ensures res_wrapped: *\old(res) ≡ (int)(\old(a) - \old(b));
-    ensures
-      result_overflow:
-        \old(a) - \old(b) ≡ (int)(\old(a) - \old(b))?
-          \result ≡ 0:
-          \result ≡ 1;
-    assigns \result, *res;
-    assigns \result \from a, b;
-    assigns *res \from a, b;
- */
-_Bool __builtin_ssub_overflow(int a, int b, int *res);
+static int char_equal_ignore_case(char c1, char c2)
+{
+  int __retres;
+  if ((int)c1 >= 'A') 
+    if ((int)c1 <= 'Z') c1 = (char)((int)c1 - ('A' - 'a'));
+  if ((int)c2 >= 'A') 
+    if ((int)c2 <= 'Z') c2 = (char)((int)c2 - ('A' - 'a'));
+  if ((int)c1 == (int)c2) {
+    __retres = 0;
+    goto return_label;
+  }
+  else {
+    __retres = (int)((unsigned char)c2) - (int)((unsigned char)c1);
+    goto return_label;
+  }
+  return_label: return __retres;
+}
 
-/*@ requires valid_res: \valid(res);
-    ensures initialization: res: \initialized(\old(res));
-    ensures res_wrapped: *\old(res) ≡ (long)(\old(a) - \old(b));
-    ensures
-      result_overflow:
-        \old(a) - \old(b) ≡ (long)(\old(a) - \old(b))?
-          \result ≡ 0:
-          \result ≡ 1;
-    assigns \result, *res;
-    assigns \result \from a, b;
-    assigns *res \from a, b;
+/*@ requires valid_string_s1: valid_read_string(s1);
+    requires valid_string_s2: valid_read_string(s2);
+    assigns \result;
+    assigns \result
+      \from (indirect: *(s1 + (0 ..))), (indirect: *(s2 + (0 ..)));
  */
-_Bool __builtin_ssubl_overflow(long a, long b, long *res);
+int strcasecmp(char const *s1, char const *s2)
+{
+  int __retres;
+  size_t i;
+  i = (unsigned int)0;
+  while (1) {
+    if ((int)*(s1 + i) != 0) {
+      if (! ((int)*(s2 + i) != 0)) break;
+    }
+    else break;
+    {
+      int res = char_equal_ignore_case(*(s1 + i),*(s2 + i));
+      if (res != 0) {
+        __retres = res;
+        goto return_label;
+      }
+    }
+    i += (size_t)1;
+  }
+  if ((int)*(s1 + i) == 0) {
+    if ((int)*(s2 + i) == 0) {
+      __retres = 0;
+      goto return_label;
+    }
+    else goto _LAND;
+  }
+  else {
+    _LAND: ;
+    if ((int)*(s1 + i) == 0) {
+      __retres = -1;
+      goto return_label;
+    }
+    else {
+      __retres = 1;
+      goto return_label;
+    }
+  }
+  return_label: return __retres;
+}
 
-/*@ requires valid_res: \valid(res);
-    ensures initialization: res: \initialized(\old(res));
-    ensures res_wrapped: *\old(res) ≡ (long long)(\old(a) - \old(b));
+/*@ requires valid_string_src: valid_read_string(src);
+    requires valid_string_dest: valid_string(dest);
+    requires room_string: \valid(dest + (0 .. strlen(dest) + strlen(src)));
     ensures
-      result_overflow:
-        \old(a) - \old(b) ≡ (long long)(\old(a) - \old(b))?
-          \result ≡ 0:
-          \result ≡ 1;
-    assigns \result, *res;
-    assigns \result \from a, b;
-    assigns *res \from a, b;
- */
-_Bool __builtin_ssubll_overflow(long long a, long long b, long long *res);
-
-/*@ requires valid_res: \valid(res);
-    ensures initialization: res: \initialized(\old(res));
-    ensures res_wrapped: *\old(res) ≡ (unsigned int)(\old(a) - \old(b));
+      sum_of_lengths: strlen(\old(dest)) ≡ \old(strlen(dest) + strlen(src));
     ensures
-      result_overflow:
-        \old(a) - \old(b) ≡ (unsigned int)(\old(a) - \old(b))?
-          \result ≡ 0:
-          \result ≡ 1;
-    assigns \result, *res;
-    assigns \result \from a, b;
-    assigns *res \from a, b;
- */
-_Bool __builtin_usub_overflow(unsigned int a, unsigned int b,
-                              unsigned int *res);
-
-/*@ requires valid_res: \valid(res);
-    ensures initialization: res: \initialized(\old(res));
-    ensures res_wrapped: *\old(res) ≡ (unsigned long)(\old(a) - \old(b));
+      initialization: dest:
+        \initialized(\old(dest) + (0 .. \old(strlen(dest) + strlen(src))));
     ensures
-      result_overflow:
-        \old(a) - \old(b) ≡ (unsigned long)(\old(a) - \old(b))?
-          \result ≡ 0:
-          \result ≡ 1;
-    assigns \result, *res;
-    assigns \result \from a, b;
-    assigns *res \from a, b;
+      dest_null_terminated:
+        *(\old(dest) + \old(strlen(dest) + strlen(src))) ≡ 0;
+    ensures result_ptr: \result ≡ \old(dest);
+    assigns *(dest +
+              (strlen{Old}(dest) .. strlen{Old}(dest) + strlen{Old}(src))),
+            \result;
+    assigns
+    *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + strlen{Old}(src)))
+      \from *(src + (0 .. strlen{Old}(src)));
+    assigns \result \from dest;
  */
-_Bool __builtin_usubl_overflow(unsigned long a, unsigned long b,
-                               unsigned long *res);
+char *strcat(char *dest, char const *src)
+{
+  size_t i;
+  size_t n = strlen((char const *)dest);
+  i = (unsigned int)0;
+  while ((int)*(src + i) != 0) {
+    *(dest + (n + i)) = *(src + i);
+    i += (size_t)1;
+  }
+  *(dest + (n + i)) = (char)0;
+  return dest;
+}
 
-/*@ requires valid_res: \valid(res);
-    ensures initialization: res: \initialized(\old(res));
-    ensures
-      res_wrapped: *\old(res) ≡ (unsigned long long)(\old(a) - \old(b));
-    ensures
-      result_overflow:
-        \old(a) - \old(b) ≡ (unsigned long long)(\old(a) - \old(b))?
-          \result ≡ 0:
-          \result ≡ 1;
-    assigns \result, *res;
-    assigns \result \from a, b;
-    assigns *res \from a, b;
+/*@ requires valid_nstring_src: valid_read_nstring(src, n);
+    requires valid_string_dest: valid_string(dest);
+    ensures result_ptr: \result ≡ \old(dest);
+    assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n)), \result;
+    assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n))
+      \from *(src + (0 .. n));
+    assigns \result \from dest;
+    
+    behavior complete:
+      assumes
+        valid_string_src_fits: valid_read_string(src) ∧ strlen(src) ≤ n;
+      requires
+        room_string: \valid((dest + strlen(dest)) + (0 .. strlen(src)));
+      ensures
+        sum_of_lengths:
+          strlen(\old(dest)) ≡ \old(strlen(dest) + strlen(src));
+      assigns *(dest +
+                (strlen{Old}(dest) .. strlen{Old}(dest) + strlen{Old}(src))),
+              \result;
+      assigns
+      *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + strlen{Old}(src)))
+        \from *(src + (0 .. strlen{Old}(src)));
+      assigns \result \from dest;
+    
+    behavior partial:
+      assumes
+        valid_string_src_too_large:
+          ¬(valid_read_string(src) ∧ strlen(src) ≤ n);
+      requires room_string: \valid((dest + strlen(dest)) + (0 .. n));
+      ensures
+        sum_of_bounded_lengths:
+          strlen(\old(dest)) ≡ \old(strlen(dest)) + \old(n);
+      assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n)),
+              \result;
+      assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n))
+        \from *(src + (0 .. strlen{Old}(src)));
+      assigns \result \from dest;
  */
-_Bool __builtin_usubll_overflow(unsigned long long a, unsigned long long b,
-                                unsigned long long *res);
+char *strncat(char *dest, char const *src, size_t n)
+{
+  size_t i;
+  size_t dest_len = strlen((char const *)dest);
+  i = (unsigned int)0;
+  while (i < n) {
+    if ((int)*(src + i) == 0) break;
+    *(dest + (dest_len + i)) = *(src + i);
+    i += (size_t)1;
+  }
+  *(dest + (dest_len + i)) = (char)0;
+  return dest;
+}
 
-/*@ requires valid_res: \valid(res);
-    ensures initialization: res: \initialized(\old(res));
-    ensures res_wrapped: *\old(res) ≡ (int)(\old(a) * \old(b));
-    ensures
-      result_overflow:
-        \old(a) * \old(b) ≡ (int)(\old(a) * \old(b))?
-          \result ≡ 0:
-          \result ≡ 1;
-    assigns \result, *res;
-    assigns \result \from a, b;
-    assigns *res \from a, b;
- */
-_Bool __builtin_smul_overflow(int a, int b, int *res);
-
-/*@ requires valid_res: \valid(res);
-    ensures initialization: res: \initialized(\old(res));
-    ensures res_wrapped: *\old(res) ≡ (long)(\old(a) * \old(b));
-    ensures
-      result_overflow:
-        \old(a) * \old(b) ≡ (long)(\old(a) * \old(b))?
-          \result ≡ 0:
-          \result ≡ 1;
-    assigns \result, *res;
-    assigns \result \from a, b;
-    assigns *res \from a, b;
- */
-_Bool __builtin_smull_overflow(long a, long b, long *res);
-
-/*@ requires valid_res: \valid(res);
-    ensures initialization: res: \initialized(\old(res));
-    ensures res_wrapped: *\old(res) ≡ (long long)(\old(a) * \old(b));
-    ensures
-      result_overflow:
-        \old(a) * \old(b) ≡ (long long)(\old(a) * \old(b))?
-          \result ≡ 0:
-          \result ≡ 1;
-    assigns \result, *res;
-    assigns \result \from a, b;
-    assigns *res \from a, b;
- */
-_Bool __builtin_smulll_overflow(long long a, long long b, long long *res);
-
-/*@ requires valid_res: \valid(res);
-    ensures initialization: res: \initialized(\old(res));
-    ensures res_wrapped: *\old(res) ≡ (unsigned int)(\old(a) * \old(b));
-    ensures
-      result_overflow:
-        \old(a) * \old(b) ≡ (unsigned int)(\old(a) * \old(b))?
-          \result ≡ 0:
-          \result ≡ 1;
-    assigns \result, *res;
-    assigns \result \from a, b;
-    assigns *res \from a, b;
- */
-_Bool __builtin_umul_overflow(unsigned int a, unsigned int b,
-                              unsigned int *res);
-
-/*@ requires valid_res: \valid(res);
-    ensures initialization: res: \initialized(\old(res));
-    ensures res_wrapped: *\old(res) ≡ (unsigned long)(\old(a) * \old(b));
-    ensures
-      result_overflow:
-        \old(a) * \old(b) ≡ (unsigned long)(\old(a) * \old(b))?
-          \result ≡ 0:
-          \result ≡ 1;
-    assigns \result, *res;
-    assigns \result \from a, b;
-    assigns *res \from a, b;
- */
-_Bool __builtin_umull_overflow(unsigned long a, unsigned long b,
-                               unsigned long *res);
-
-/*@ requires valid_res: \valid(res);
-    ensures initialization: res: \initialized(\old(res));
-    ensures
-      res_wrapped: *\old(res) ≡ (unsigned long long)(\old(a) * \old(b));
-    ensures
-      result_overflow:
-        \old(a) * \old(b) ≡ (unsigned long long)(\old(a) * \old(b))?
-          \result ≡ 0:
-          \result ≡ 1;
-    assigns \result, *res;
-    assigns \result \from a, b;
-    assigns *res \from a, b;
- */
-_Bool __builtin_umulll_overflow(unsigned long long a, unsigned long long b,
-                                unsigned long long *res);
-
-/*@ requires valid_filename: valid_read_string(filename);
-    assigns \result;
-    assigns \result \from (indirect: *(filename + (0 ..))), (indirect: mode);
+/*@ requires valid_string_src: valid_read_string(src);
+    requires room_string: \valid(dest + (0 .. strlen(src)));
+    requires
+      separation:
+        \separated(dest + (0 .. strlen(src)), src + (0 .. strlen(src)));
+    ensures equal_contents: strcmp(\old(dest), \old(src)) ≡ 0;
+    ensures result_ptr: \result ≡ \old(dest);
+    assigns *(dest + (0 .. strlen{Old}(src))), \result;
+    assigns *(dest + (0 .. strlen{Old}(src)))
+      \from *(src + (0 .. strlen{Old}(src)));
+    assigns \result \from dest;
  */
-extern int creat(char const *filename, mode_t mode);
-
-/*@ assigns \result;
-    assigns \result \from fd, cmd; */
-extern int fcntl(int fd, int cmd, void * const *__va_params);
+char *strcpy(char *dest, char const *src)
+{
+  size_t i;
+  i = (unsigned int)0;
+  while ((int)*(src + i) != 0) {
+    *(dest + i) = *(src + i);
+    i += (size_t)1;
+  }
+  *(dest + i) = (char)0;
+  return dest;
+}
 
-/*@ requires valid_filename: valid_read_string(filename);
-    assigns \result;
-    assigns \result
-      \from (indirect: *(filename + (0 ..))), (indirect: flags);
+/*@ requires valid_string_src: valid_read_string(src);
+    requires room_nstring: \valid(dest + (0 .. n - 1));
+    requires separation: \separated(dest + (0 .. n - 1), src + (0 .. n - 1));
+    ensures result_ptr: \result ≡ \old(dest);
+    ensures initialization: \initialized(\old(dest) + (0 .. \old(n) - 1));
+    assigns *(dest + (0 .. n - 1)), \result;
+    assigns *(dest + (0 .. n - 1)) \from *(src + (0 .. n - 1));
+    assigns \result \from dest;
+    
+    behavior complete:
+      assumes src_fits: strlen(src) < n;
+      ensures equal_after_copy: strcmp(\old(dest), \old(src)) ≡ 0;
+    
+    behavior partial:
+      assumes src_too_long: n ≤ strlen(src);
+      ensures
+        equal_prefix:
+          memcmp{Post, Post}(\old(dest), \old(src), \old(n)) ≡ 0;
  */
-extern int open(char const *filename, int flags, void * const *__va_params);
+char *strncpy(char *dest, char const *src, size_t n)
+{
+  size_t i;
+  i = (unsigned int)0;
+  while (i < n) {
+    *(dest + i) = *(src + i);
+    if ((int)*(src + i) == 0) break;
+    i += (size_t)1;
+  }
+  while (i < n) {
+    *(dest + i) = (char)0;
+    i += (size_t)1;
+  }
+  return dest;
+}
 
-/*@ requires valid_filename: valid_read_string(filename);
+/*@ requires valid_string_s: valid_read_string(s);
     assigns \result;
-    assigns \result
-      \from (indirect: dirfd), (indirect: *(filename + (0 ..))),
-            (indirect: flags);
+    assigns \result \from s, *(s + (0 ..)), c;
+    
+    behavior found:
+      assumes char_found: strchr(s, c) ≡ \true;
+      ensures result_char: *\result ≡ (char)\old(c);
+      ensures result_same_base: \base_addr(\result) ≡ \base_addr(\old(s));
+      ensures
+        result_in_length: \old(s) ≤ \result ≤ \old(s) + strlen(\old(s));
+      ensures result_valid_string: valid_read_string(\result);
+      ensures
+        result_first_occur:
+          ∀ char *p; \old(s) ≤ p < \result ⇒ *p ≢ (char)\old(c);
+    
+    behavior not_found:
+      assumes char_not_found: ¬(strchr(s, c) ≡ \true);
+      ensures result_null: \result ≡ \null;
+    
+    behavior default:
+      ensures
+        result_null_or_same_base:
+          \result ≡ \null ∨ \base_addr(\result) ≡ \base_addr(\old(s));
  */
-extern int openat(int dirfd, char const *filename, int flags,
-                  void * const *__va_params);
+char *strchr(char const *s, int c)
+{
+  char *__retres;
+  size_t i;
+  char const ch = (char)c;
+  i = (unsigned int)0;
+  while ((int)*(s + i) != (int)ch) {
+    if ((int)*(s + i) == 0) {
+      __retres = (char *)0;
+      goto return_label;
+    }
+    i += (size_t)1;
+  }
+  __retres = (char *)(s + i);
+  return_label: return __retres;
+}
 
-/*@ requires cmd_has_void_arg: cmd ≡ 1 ∨ cmd ≡ 3 ∨ cmd ≡ 9;
+/*@ requires valid_string_s: valid_read_string(s);
     assigns \result;
-    assigns \result \from fd, cmd;
+    assigns \result \from s, *(s + (0 ..)), c;
+    
+    behavior found:
+      assumes char_found: strchr(s, c) ≡ \true;
+      ensures result_char: (int)*\result ≡ \old(c);
+      ensures result_same_base: \base_addr(\result) ≡ \base_addr(\old(s));
+      ensures result_valid_string: valid_read_string(\result);
+    
+    behavior not_found:
+      assumes char_not_found: ¬(strchr(s, c) ≡ \true);
+      ensures result_null: \result ≡ \null;
+    
+    behavior default:
+      ensures
+        result_null_or_same_base:
+          \result ≡ \null ∨ \base_addr(\result) ≡ \base_addr(\old(s));
  */
-extern int __va_fcntl_void(int fd, int cmd);
+char *strrchr(char const *s, int c)
+{
+  char *__retres;
+  char const ch = (char)c;
+  {
+    size_t tmp;
+    tmp = strlen(s);
+    size_t i = tmp + (size_t)1;
+    while (i > (size_t)0) {
+      if ((int)*(s + (i - (size_t)1)) == (int)ch) {
+        __retres = (char *)(s + (i - (size_t)1));
+        goto return_label;
+      }
+      i -= (size_t)1;
+    }
+  }
+  __retres = (char *)0;
+  return_label: return __retres;
+}
 
 /*@ requires
-      cmd_has_int_arg:
-        cmd ≡ 0 ∨ cmd ≡ 0x406 ∨ cmd ≡ 4 ∨ cmd ≡ 8 ∨ cmd ≡ 2;
-    assigns \result;
-    assigns \result \from fd, cmd, arg;
- */
-extern int __va_fcntl_int(int fd, int cmd, int arg);
-
-/*@ requires cmd_as_flock_arg: cmd ≡ 5 ∨ cmd ≡ 6 ∨ cmd ≡ 7;
-    requires valid_arg: \valid(arg);
-    assigns \result, *arg;
-    assigns \result \from fd, cmd, *arg;
-    assigns *arg \from fd, cmd, *arg;
- */
-extern int __va_fcntl_flock(int fd, int cmd, struct flock *arg);
-
-/*@ requires valid_filename: valid_read_string(filename);
-    requires flag_not_CREAT: (flags & 0x40) ≡ 0;
+      valid:
+        valid_read_or_empty(s, n) ∨
+        \valid_read((unsigned char *)s + (0 .. memchr_off((char *)s, c, n)));
+    requires
+      initialization:
+        \initialized((unsigned char *)s + (0 .. n - 1)) ∨
+        \initialized((unsigned char *)s + (0 .. memchr_off((char *)s, c, n)));
+    requires
+      danglingness:
+        non_escaping(s, n) ∨
+        non_escaping(s, (unsigned int)(memchr_off((char *)s, c, n) + 1));
     assigns \result;
-    assigns \result
-      \from (indirect: *(filename + (0 ..))), (indirect: flags);
+    assigns \result \from s, c, *((unsigned char *)s + (0 .. n - 1));
+    
+    behavior found:
+      assumes char_found: memchr((char *)s, c, n) ≡ \true;
+      ensures result_same_base: \base_addr(\result) ≡ \base_addr(\old(s));
+      ensures result_char: (int)*((char *)\result) ≡ \old(c);
+      ensures
+        result_in_str:
+          ∀ ℤ i;
+            0 ≤ i < \old(n) ⇒
+            *((unsigned char *)\old(s) + i) ≡ \old(c) ⇒
+            \result ≤ \old(s) + i;
+    
+    behavior not_found:
+      assumes char_not_found: ¬(memchr((char *)s, c, n) ≡ \true);
+      ensures result_null: \result ≡ \null;
  */
-extern int __va_open_void(char const *filename, int flags);
+void *memchr(void const *s, int c, size_t n)
+{
+  void *__retres;
+  unsigned char const ch = (unsigned char)c;
+  unsigned char const *ss = (unsigned char const *)s;
+  {
+    size_t i = (unsigned int)0;
+    while (i < n) {
+      if ((int)*(ss + i) == (int)ch) {
+        __retres = (void *)(ss + i);
+        goto return_label;
+      }
+      i += (size_t)1;
+    }
+  }
+  __retres = (void *)0;
+  return_label: return __retres;
+}
 
-/*@ requires valid_filename: valid_read_string(filename);
+void *memrchr(void const *s, int c, size_t n)
+{
+  void *__retres;
+  unsigned char const ch = (unsigned char)c;
+  unsigned char const *ss = (unsigned char const *)s;
+  {
+    size_t i = n;
+    while (i > (size_t)0) {
+      if ((int)*(ss + (i - (size_t)1)) == (int)ch) {
+        __retres = (void *)(ss + (i - (size_t)1));
+        goto return_label;
+      }
+      i -= (size_t)1;
+    }
+  }
+  __retres = (void *)0;
+  return_label: return __retres;
+}
+
+/*@ requires valid_string_haystack: valid_read_string(haystack);
+    requires valid_string_needle: valid_read_string(needle);
+    ensures
+      result_null_or_in_haystack:
+        \result ≡ \null ∨
+        (\subset(\result, \old(haystack) + (0 ..)) ∧
+         \valid_read(\result) ∧
+         memcmp{Pre, Pre}(\result, \old(needle), strlen(\old(needle))) ≡ 0);
     assigns \result;
     assigns \result
-      \from (indirect: *(filename + (0 ..))), (indirect: flags),
-            (indirect: mode);
+      \from haystack, (indirect: *(haystack + (0 ..))),
+            (indirect: *(needle + (0 ..)));
  */
-extern int __va_open_mode_t(char const *filename, int flags, mode_t mode);
+char *strstr(char const *haystack, char const *needle)
+{
+  char *__retres;
+  if ((int)*(needle + 0) == 0) {
+    __retres = (char *)haystack;
+    goto return_label;
+  }
+  {
+    size_t i = (unsigned int)0;
+    while ((int)*(haystack + i) != 0) {
+      {
+        size_t j;
+        j = (unsigned int)0;
+        while ((int)*(haystack + (i + j)) != 0) {
+          if ((int)*(haystack + (i + j)) != (int)*(needle + j)) break;
+          j += (size_t)1;
+        }
+        if ((int)*(needle + j) == 0) {
+          __retres = (char *)(haystack + i);
+          goto return_label;
+        }
+      }
+      i += (size_t)1;
+    }
+  }
+  __retres = (char *)0;
+  return_label: return __retres;
+}
 
-/*@ requires valid_filename: valid_read_string(filename);
-    requires flag_not_CREAT: (flags & 0x40) ≡ 0;
+static int __fc_strerror_init;
+/*@ ensures result_internal_str: \result ≡ __fc_p_strerror;
+    ensures result_nul_terminated: *(\result + 63) ≡ 0;
+    ensures result_valid_string: valid_read_string(\result);
     assigns \result;
-    assigns \result
-      \from (indirect: dirfd), (indirect: *(filename + (0 ..))),
-            (indirect: flags);
+    assigns \result \from __fc_p_strerror, (indirect: errnum);
  */
-extern int __va_openat_void(int dirfd, char const *filename, int flags);
+char *strerror(int errnum)
+{
+  char *__retres;
+  if (! __fc_strerror_init) {
+    Frama_C_make_unknown(__fc_strerror,(unsigned int)63);
+    __fc_strerror[63] = (char)0;
+    __fc_strerror_init = 1;
+  }
+  __retres = __fc_strerror;
+  return __retres;
+}
 
-/*@ requires valid_filename: valid_read_string(filename);
+/*@ requires valid_string_s: valid_read_string(s);
     assigns \result;
     assigns \result
-      \from (indirect: dirfd), (indirect: *(filename + (0 ..))),
-            (indirect: flags), (indirect: mode);
+      \from (indirect: *(s + (0 .. strlen{Old}(s)))),
+            (indirect: __fc_heap_status);
+    allocates \result;
+    
+    behavior allocation:
+      assumes can_allocate: is_allocable(strlen(s));
+      ensures allocation: \fresh{Old, Here}(\result,strlen(\old(s)));
+      ensures
+        result_valid_string_and_same_contents:
+          valid_string(\result) ∧ strcmp(\result, \old(s)) ≡ 0;
+      assigns __fc_heap_status, \result;
+      assigns __fc_heap_status \from (indirect: s), __fc_heap_status;
+      assigns \result
+        \from (indirect: *(s + (0 .. strlen{Old}(s)))),
+              (indirect: __fc_heap_status);
+    
+    behavior no_allocation:
+      assumes cannot_allocate: ¬is_allocable(strlen(s));
+      ensures result_null: \result ≡ \null;
+      assigns \result;
+      assigns \result \from \nothing;
+      allocates \nothing;
  */
-extern int __va_openat_mode_t(int dirfd, char const *filename, int flags,
-                              mode_t mode);
-
-/*@ ghost extern int __fc_tz __attribute__((__FRAMA_C_MODEL__)); */
+char *strdup(char const *s)
+{
+  char *__retres;
+  size_t tmp;
+  tmp = strlen(s);
+  size_t l = tmp + (size_t)1;
+  char *p = malloc(l);
+  if (! p) {
+    __fc_errno = 12;
+    __retres = (char *)0;
+    goto return_label;
+  }
+  memcpy((void *)p,(void const *)s,l);
+  __retres = p;
+  return_label: return __retres;
+}
 
 /*@ assigns \result;
-    assigns \result \from *(path + (0 ..)), *(times + (0 .. 1));
- */
-extern int utimes(char const *path, struct timeval const * /*[2]*/ times);
-
-/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns tv->tv_sec, tv->tv_usec, *((struct timezone *)tz), \result;
-    assigns tv->tv_sec \from __fc_time;
-    assigns tv->tv_usec \from __fc_time;
-    assigns *((struct timezone *)tz) \from __fc_tz;
     assigns \result
-      \from (indirect: tv), (indirect: tz), *tv, *((struct timezone *)tz),
-            __fc_tz;
-    
-    behavior tv_and_tz_null:
-      assumes null_tv_tz: tv ≡ \null ∧ tz ≡ \null;
-      assigns \result;
-      assigns \result \from (indirect: __fc_tz);
+      \from (indirect: *(s + (0 .. strlen{Old}(s)))), (indirect: n),
+            (indirect: __fc_heap_status);
+    allocates \result;
     
-    behavior tv_not_null:
-      assumes non_null_tv_null_tz: tv ≢ \null ∧ tz ≡ \null;
+    behavior allocation:
+      assumes can_allocate: is_allocable(\min(strlen(s), n + 1));
       ensures
-        initialization: tv_sec: tv_usec:
-          \initialized(&\old(tv)->tv_sec) ∧
-          \initialized(&\old(tv)->tv_usec);
-      ensures tv_usec_bounded: 0 ≤ \old(tv)->tv_usec ≤ 999999;
-      assigns tv->tv_sec, tv->tv_usec, \result;
-      assigns tv->tv_sec \from (indirect: __fc_time);
-      assigns tv->tv_usec \from (indirect: __fc_time);
-      assigns \result \from (indirect: *tv), (indirect: __fc_tz);
-    
-    behavior tz_not_null:
-      assumes null_tv_non_null_tz: tv ≡ \null ∧ tz ≢ \null;
-      ensures initialization: tz: \initialized((struct timezone *)\old(tz));
-      assigns *((struct timezone *)tz), \result;
-      assigns *((struct timezone *)tz) \from __fc_tz;
-      assigns \result
-        \from (indirect: *((struct timezone *)tz)), (indirect: __fc_tz);
-    
-    behavior tv_and_tz_not_null:
-      assumes non_null_tv_tz: tv ≢ \null ∧ tz ≢ \null;
+        allocation:
+          \fresh{Old, Here}(\result,\min(strlen(\old(s)), \old(n) + 1));
       ensures
-        initialization: tv_sec: tv_usec:
-          \initialized(&\old(tv)->tv_sec) ∧
-          \initialized(&\old(tv)->tv_usec);
-      ensures initialization: tz: \initialized((struct timezone *)\old(tz));
-      assigns tv->tv_sec, tv->tv_usec, *((struct timezone *)tz), \result;
-      assigns tv->tv_sec \from (indirect: __fc_time);
-      assigns tv->tv_usec \from (indirect: __fc_time);
-      assigns *((struct timezone *)tz) \from __fc_tz;
+        result_valid_string_bounded_and_same_prefix:
+          \valid(\result + (0 .. \min(strlen(\old(s)), \old(n)))) ∧
+          valid_string(\result) ∧ strlen(\result) ≤ \old(n) ∧
+          strncmp(\result, \old(s), \old(n)) ≡ 0;
+      assigns __fc_heap_status, \result;
+      assigns __fc_heap_status
+        \from (indirect: s), (indirect: n), __fc_heap_status;
       assigns \result
-        \from (indirect: *tv), (indirect: *((struct timezone *)tz)),
-              (indirect: __fc_tz);
+        \from (indirect: *(s + (0 .. strlen{Old}(s)))), (indirect: n),
+              (indirect: __fc_heap_status);
     
-    complete behaviors tv_and_tz_not_null,
-                       tz_not_null,
-                       tv_not_null,
-                       tv_and_tz_null;
-    disjoint behaviors tv_and_tz_not_null,
-                       tz_not_null,
-                       tv_not_null,
-                       tv_and_tz_null;
- */
-extern int gettimeofday(struct timeval * __restrict tv, void * __restrict tz);
-
-/*@ assigns \result, __fc_time, __fc_tz;
-    assigns \result
-      \from tv->tv_sec, tv->tv_usec, tz->tz_dsttime, tz->tz_minuteswest;
-    assigns __fc_time
-      \from tv->tv_sec, tv->tv_usec, tz->tz_dsttime, tz->tz_minuteswest;
-    assigns __fc_tz
-      \from tv->tv_sec, tv->tv_usec, tz->tz_dsttime, tz->tz_minuteswest;
+    behavior no_allocation:
+      assumes cannot_allocate: ¬is_allocable(\min(strlen(s), n + 1));
+      ensures result_null: \result ≡ \null;
+      assigns \result;
+      assigns \result \from \nothing;
+      allocates \nothing;
  */
-extern int settimeofday(struct timeval const *tv, struct timezone const *tz);
-
-/*@ ghost
-  struct itimerval volatile __fc_itimer_real __attribute__((__FRAMA_C_MODEL__));
-  */
-/*@ ghost
-  struct itimerval volatile __fc_itimer_virtual __attribute__((__FRAMA_C_MODEL__));
-  */
-/*@ ghost
-  struct itimerval volatile __fc_itimer_prof __attribute__((__FRAMA_C_MODEL__));
+char *strndup(char const *s, size_t n)
+{
+  char *__retres;
+  size_t l;
+  l = (unsigned int)0;
+  while (l < n) {
+    if ((int)*(s + l) == 0) break;
+    l += (size_t)1;
+  }
+  char *p = malloc(l + (size_t)1);
+  if (! p) {
+    __fc_errno = 12;
+    __retres = (char *)0;
+    goto return_label;
+  }
+  memcpy((void *)p,(void const *)s,l);
+  *(p + l) = (char)0;
+  __retres = p;
+  return_label: return __retres;
+}
+
+static int __fc_strsignal_init;
+/*@ ensures result_internal_str: \result ≡ __fc_p_strsignal;
+    ensures result_nul_terminated: *(\result + 63) ≡ 0;
+    ensures result_valid_string: valid_read_string(\result);
+    assigns \result;
+    assigns \result \from __fc_p_strsignal, (indirect: signum);
+ */
+char *strsignal(int signum)
+{
+  char *__retres;
+  if (! __fc_strsignal_init) {
+    Frama_C_make_unknown(__fc_strsignal,(unsigned int)63);
+    __fc_strsignal[63] = (char)0;
+    __fc_strsignal_init = 1;
+  }
+  __retres = __fc_strsignal;
+  return __retres;
+}
+
+/*@ ghost unsigned int volatile __fc_time __attribute__((__FRAMA_C_MODEL__));
   */
-/*@ requires valid_curr_value: \valid(curr_value);
-    ensures initialization: curr_value: \initialized(\old(curr_value));
-    assigns \result, *curr_value;
-    assigns \result \from (indirect: which);
-    assigns *curr_value
-      \from __fc_itimer_real, __fc_itimer_virtual, __fc_itimer_prof;
-    
-    behavior real:
-      assumes itimer_real: which ≡ 0;
-      ensures result_ok: \result ≡ 0;
-      assigns \result, *curr_value;
-      assigns \result \from \nothing;
-      assigns *curr_value \from __fc_itimer_real;
-    
-    behavior virtual:
-      assumes itimer_virtual: which ≡ 1;
-      ensures result_ok: \result ≡ 0;
-      assigns \result, *curr_value;
-      assigns \result \from \nothing;
-      assigns *curr_value \from __fc_itimer_virtual;
-    
-    behavior prof:
-      assumes itimer_prof: which ≡ 2;
-      ensures result_ok: \result ≡ 0;
-      assigns \result, *curr_value;
-      assigns \result \from \nothing;
-      assigns *curr_value \from __fc_itimer_prof;
+/*@ assigns \result;
+    assigns \result \from __fc_time; */
+extern clock_t clock(void);
+
+/*@ assigns \result;
+    assigns \result \from time1, time0; */
+extern double difftime(time_t time1, time_t time0);
+
+/*@ assigns *timeptr, \result;
+    assigns *timeptr \from *timeptr;
+    assigns \result \from *timeptr;
+ */
+extern time_t mktime(struct tm *timeptr);
+
+/*@ assigns *timer, \result;
+    assigns *timer \from __fc_time;
+    assigns \result \from __fc_time;
     
-    behavior invalid:
-      assumes invalid_which: which ≢ 0 ∧ which ≢ 1 ∧ which ≢ 2;
-      ensures result_error: \result ≡ -1;
+    behavior null:
+      assumes timer_null: timer ≡ \null;
       assigns \result;
-      assigns \result \from \nothing;
+      assigns \result \from __fc_time;
     
-    complete behaviors invalid, prof, virtual, real;
-    disjoint behaviors invalid, prof, virtual, real;
+    behavior not_null:
+      assumes timer_non_null: timer ≢ \null;
+      requires valid_timer: \valid(timer);
+      ensures initialization: timer: \initialized(\old(timer));
+      assigns *timer, \result;
+      assigns *timer \from __fc_time;
+      assigns \result \from __fc_time;
+    
+    complete behaviors not_null, null;
+    disjoint behaviors not_null, null;
  */
-extern int getitimer(int which, struct itimerval *curr_value);
+extern time_t time(time_t *timer);
 
-/*@ requires valid_new_value: \valid_read(new_value);
-    requires
-      old_value_null_or_valid: old_value ≡ \null ∨ \valid(old_value);
-    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns *old_value, \result;
-    assigns *old_value
-      \from (indirect: which), (indirect: old_value), (indirect: new_value),
-            __fc_itimer_real, __fc_itimer_virtual, __fc_itimer_prof;
+char __fc_ctime[26];
+char * const __fc_p_ctime = __fc_ctime;
+/*@ requires valid_timer: \valid_read(timer);
+    requires initialization: init_timer: \initialized(timer);
+    ensures result_points_to_ctime: \result ≡ __fc_p_ctime;
+    ensures result_valid_string: valid_read_string(__fc_p_ctime);
+    assigns __fc_ctime[0 .. 25], \result;
+    assigns __fc_ctime[0 .. 25]
+      \from (indirect: *timer), (indirect: __fc_time);
     assigns \result
-      \from (indirect: which), (indirect: new_value), (indirect: *new_value);
-    
-    behavior real:
-      assumes
-        itimer_real_and_valid:
-          which ≡ 0 ≤ new_value->it_value.tv_usec ≤ 999999 ∧
-          0 ≤ new_value->it_interval.tv_usec ≤ 999999;
-      ensures result_ok: \result ≡ 0;
-      ensures initialization: old_value: \initialized(\old(old_value));
-      assigns \result, *old_value, __fc_itimer_real;
-      assigns \result \from \nothing;
-      assigns *old_value \from __fc_itimer_real;
-      assigns __fc_itimer_real \from *new_value;
+      \from (indirect: *timer), (indirect: __fc_time), __fc_p_ctime;
+ */
+extern char *ctime(time_t const *timer);
+
+struct tm __fc_time_tm;
+struct tm * const __fc_p_time_tm = & __fc_time_tm;
+/*@ ensures
+      result_null_or_internal_tm:
+        \result ≡ &__fc_time_tm ∨ \result ≡ \null;
+    assigns \result, __fc_time_tm;
+    assigns \result \from __fc_p_time_tm;
+    assigns __fc_time_tm \from *timer;
+ */
+extern struct tm *gmtime(time_t const *timer);
+
+/*@ ensures
+      result_null_or_internal_tm:
+        \result ≡ &__fc_time_tm ∨ \result ≡ \null;
+    assigns \result, __fc_time_tm;
+    assigns \result \from __fc_p_time_tm;
+    assigns __fc_time_tm \from *timer;
+ */
+extern struct tm *localtime(time_t const *timer);
+
+/*@ requires dst_has_room: \valid(s + (0 .. max - 1));
+    requires valid_format: valid_read_string(format);
+    requires valid_tm: \valid_read(tm);
+    ensures result_bounded: \result ≤ \old(max);
+    assigns *(s + (0 .. max - 1)), \result;
+    assigns *(s + (0 .. max - 1))
+      \from (indirect: max), (indirect: *(format + (0 ..))), (indirect: *tm);
+    assigns \result
+      \from (indirect: max), (indirect: *(format + (0 ..))), (indirect: *tm);
+ */
+extern size_t strftime(char * __restrict s, size_t max,
+                       char const * __restrict format,
+                       struct tm const * __restrict tm);
+
+/*@ requires tp: \valid(tp);
+    assigns \result, *tp, __fc_time;
+    assigns \result \from __fc_time;
+    assigns *tp \from __fc_time;
+    assigns __fc_time \from __fc_time;
     
-    behavior virtual:
-      assumes
-        itimer_virtual_and_valid:
-          which ≡ 1 ∧ 0 ≤ new_value->it_value.tv_usec ≤ 999999 ∧
-          0 ≤ new_value->it_interval.tv_usec ≤ 999999;
-      ensures result_ok: \result ≡ 0;
-      ensures initialization: old_value: \initialized(\old(old_value));
-      assigns \result, *old_value;
-      assigns \result \from \nothing;
-      assigns *old_value \from __fc_itimer_virtual;
+    behavior realtime_clock:
+      assumes realtime: clk_id ≡ 666;
+      ensures success: \result ≡ 0;
+      ensures initialization: \initialized(\old(tp));
     
-    behavior prof:
-      assumes
-        itimer_prof_and_valid:
-          which ≡ 2 ∧ 0 ≤ new_value->it_value.tv_usec ≤ 999999 ∧
-          0 ≤ new_value->it_interval.tv_usec ≤ 999999;
-      ensures result_ok: \result ≡ 0;
-      ensures initialization: old_value: \initialized(\old(old_value));
-      assigns \result, *old_value;
-      assigns \result \from \nothing;
-      assigns *old_value \from __fc_itimer_prof;
+    behavior monotonic_clock:
+      assumes monotonic: clk_id ≡ 1;
+      ensures success: \result ≡ 0;
+      ensures initialization: \initialized(\old(tp));
     
-    behavior invalid:
-      assumes
-        invalid_itimer_or_new_value:
-          (which ≢ 0 ∧ which ≢ 1 ∧ which ≢ 2) ∨
-          ¬(0 ≤ new_value->it_value.tv_usec ≤ 999999 ∧
-             0 ≤ new_value->it_interval.tv_usec ≤ 999999);
-      ensures result_error: \result ≡ -1;
+    behavior bad_clock_id:
+      assumes bad_id: clk_id ≢ 666 ∧ clk_id ≢ 1;
+      ensures error: \result ≡ 22;
       assigns \result;
-      assigns \result \from \nothing;
+      assigns \result \from clk_id;
     
-    disjoint behaviors invalid, prof, virtual, real;
+    complete behaviors bad_clock_id, monotonic_clock, realtime_clock;
+    disjoint behaviors bad_clock_id, monotonic_clock, realtime_clock;
  */
-extern int setitimer(int which,
-                     struct itimerval const * __restrict new_value,
-                     struct itimerval * __restrict old_value);
+extern int clock_gettime(clockid_t clk_id, struct timespec *tp);
 
-/*@ ghost int volatile __fc_fds_state; */
-/*@ requires nfds: nfds ≥ 0;
-    requires readfs: readfds ≡ \null ∨ \valid(readfds);
-    requires writefds: writefds ≡ \null ∨ \valid(writefds);
-    requires errorfds: errorfds ≡ \null ∨ \valid(errorfds);
-    requires timeout: timeout ≡ \null ∨ \valid(timeout);
-    assigns __fc_fds_state, *readfds, *writefds, *errorfds, *timeout,
-            \result;
-    assigns __fc_fds_state \from __fc_fds_state;
-    assigns *readfds
-      \from (indirect: nfds), (indirect: readfds), (indirect: *readfds),
-            (indirect: writefds), (indirect: *writefds),
-            (indirect: errorfds), (indirect: *errorfds), (indirect: timeout),
-            (indirect: *timeout), __fc_fds_state;
-    assigns *writefds
-      \from (indirect: nfds), (indirect: readfds), (indirect: *readfds),
-            (indirect: writefds), (indirect: *writefds),
-            (indirect: errorfds), (indirect: *errorfds), (indirect: timeout),
-            (indirect: *timeout), __fc_fds_state;
-    assigns *errorfds
-      \from (indirect: nfds), (indirect: readfds), (indirect: *readfds),
-            (indirect: writefds), (indirect: *writefds),
-            (indirect: errorfds), (indirect: *errorfds), (indirect: timeout),
-            (indirect: *timeout), __fc_fds_state;
-    assigns *timeout
-      \from (indirect: nfds), (indirect: readfds), (indirect: *readfds),
-            (indirect: writefds), (indirect: *writefds),
-            (indirect: errorfds), (indirect: *errorfds), (indirect: timeout),
-            (indirect: *timeout), __fc_fds_state;
+/*@
+axiomatic nanosleep_predicates {
+  predicate abs_clock_in_range{L}(clockid_t id, struct timespec *tm) 
+    reads __fc_time;
+  
+  predicate valid_clock_id{L}(clockid_t id) 
+    reads __fc_time;
+  
+  }
+
+*/
+/*@ ghost int volatile __fc_interrupted __attribute__((__FRAMA_C_MODEL__));
+  */
+/*@ requires valid_request: \valid_read(rqtp);
+    requires
+      initialization: initialized_request:
+        \initialized(&rqtp->tv_sec) ∧ \initialized(&rqtp->tv_nsec);
+    requires valid_nanosecs: 0 ≤ rqtp->tv_nsec < 1000000000;
+    requires valid_remaining_or_null: rmtp ≡ \null ∨ \valid(rmtp);
+    assigns \result;
     assigns \result
-      \from (indirect: nfds), (indirect: readfds), (indirect: *readfds),
-            (indirect: writefds), (indirect: *writefds),
-            (indirect: errorfds), (indirect: *errorfds), (indirect: timeout),
-            (indirect: *timeout), __fc_fds_state;
+      \from (indirect: __fc_time), (indirect: __fc_interrupted),
+            (indirect: clock_id), (indirect: flags), (indirect: rqtp),
+            (indirect: *rqtp);
     
-    behavior read_notnull:
-      assumes readfds_is_not_null: readfds ≢ \null;
-      ensures initialization: readfds: \initialized(\old(readfds));
+    behavior absolute:
+      assumes absolute_time: (flags & 1) ≢ 0;
+      assumes
+        no_einval:
+          abs_clock_in_range(clock_id, rqtp) ∧ valid_clock_id(clock_id);
+      ensures
+        result_ok_or_error:
+          \result ≡ 0 ∨ \result ≡ 4 ∨ \result ≡ 22 ∨
+          \result ≡ 95;
+      assigns \result;
+      assigns \result
+        \from (indirect: __fc_time), (indirect: __fc_interrupted),
+              (indirect: clock_id), (indirect: rqtp), (indirect: *rqtp);
     
-    behavior write_notnull:
-      assumes writefds_is_not_null: writefds ≢ \null;
-      ensures initialization: writefds: \initialized(\old(writefds));
+    behavior relative_interrupted:
+      assumes relative_time: (flags & 1) ≡ 0;
+      assumes interrupted: __fc_interrupted ≢ 0;
+      assumes no_einval: valid_clock_id(clock_id);
+      ensures result_interrupted: \result ≡ 4;
+      ensures
+        initialization: interrupted_remaining:
+          \old(rmtp) ≢ \null ⇒
+          \initialized(&\old(rmtp)->tv_sec) ∧
+          \initialized(&\old(rmtp)->tv_nsec);
+      ensures
+        interrupted_remaining_decreases:
+          \old(rmtp) ≢ \null ⇒
+          \old(rqtp)->tv_sec * 1000000000 + \old(rqtp)->tv_nsec ≥
+          \old(rmtp)->tv_sec * 1000000000 + \old(rmtp)->tv_nsec;
+      ensures
+        remaining_valid:
+          \old(rmtp) ≢ \null ⇒ 0 ≤ \old(rmtp)->tv_nsec < 1000000000;
+      assigns \result, *rmtp;
+      assigns \result
+        \from (indirect: __fc_time), (indirect: clock_id), (indirect: rqtp),
+              (indirect: *rqtp);
+      assigns *rmtp
+        \from __fc_time, (indirect: clock_id), (indirect: rqtp),
+              (indirect: *rqtp), (indirect: rmtp);
     
-    behavior error_notnull:
-      assumes errorfds_is_not_null: errorfds ≢ \null;
-      ensures initialization: errorfds: \initialized(\old(errorfds));
+    behavior relative_no_error:
+      assumes relative_time: (flags & 1) ≡ 0;
+      assumes not_interrupted: __fc_interrupted ≡ 0;
+      assumes no_einval: valid_clock_id(clock_id);
+      ensures result_ok: \result ≡ 0;
+      assigns \result;
+      assigns \result
+        \from (indirect: __fc_time), (indirect: clock_id), (indirect: rqtp),
+              (indirect: *rqtp);
     
-    behavior timeout_notnull:
-      assumes timeout_is_not_null: timeout ≢ \null;
-      ensures initialization: timeout: \initialized(\old(timeout));
+    behavior relative_invalid_clock_id:
+      assumes relative_time: (flags & 1) ≡ 0;
+      assumes not_interrupted: __fc_interrupted ≡ 0;
+      assumes einval: ¬valid_clock_id(clock_id);
+      ensures result_einval: \result ≡ 22;
+      assigns \result;
+      assigns \result
+        \from (indirect: __fc_time), (indirect: clock_id), (indirect: rqtp),
+              (indirect: *rqtp);
+    
+    complete behaviors relative_invalid_clock_id,
+                       relative_no_error,
+                       relative_interrupted,
+                       absolute;
+    disjoint behaviors relative_invalid_clock_id,
+                       relative_no_error,
+                       relative_interrupted,
+                       absolute;
+ */
+extern int clock_nanosleep(clockid_t clock_id, int flags,
+                           struct timespec const *rqtp, struct timespec *rmtp);
+
+/*@ requires valid_request: \valid_read(rqtp);
+    requires
+      initialization: initialized_request:
+        \initialized(&rqtp->tv_sec) ∧ \initialized(&rqtp->tv_nsec);
+    requires valid_nanosecs: 0 ≤ rqtp->tv_nsec < 1000000000;
+    requires valid_remaining_or_null: rmtp ≡ \null ∨ \valid(rmtp);
+    ensures result_elapsed_or_interrupted: \result ≡ 0 ∨ \result ≡ -1;
+    ensures
+      initialization: interrupted_remaining:
+        \old(rmtp) ≢ \null ∧ \result ≡ -1 ⇒
+        \initialized(&\old(rmtp)->tv_sec) ∧
+        \initialized(&\old(rmtp)->tv_nsec);
+    ensures
+      interrupted_remaining_decreases:
+        \old(rmtp) ≢ \null ∧ \result ≡ -1 ⇒
+        \old(rqtp)->tv_sec * 1000000000 + \old(rqtp)->tv_nsec ≥
+        \old(rmtp)->tv_sec * 1000000000 + \old(rmtp)->tv_nsec;
+    ensures
+      interrupted_remaining_valid:
+        \old(rmtp) ≢ \null ∧ \result ≡ -1 ⇒
+        0 ≤ \old(rmtp)->tv_nsec < 1000000000;
+    assigns \result, *rmtp;
+    assigns \result
+      \from (indirect: __fc_time), (indirect: rqtp), (indirect: *rqtp);
+    assigns *rmtp
+      \from (indirect: __fc_time), (indirect: rqtp), (indirect: *rqtp),
+            (indirect: rmtp);
+ */
+extern int nanosleep(struct timespec const *rqtp, struct timespec *rmtp);
+
+extern void tzset(void);
+
+extern char *tzname[2];
+
+/*@ assigns *(tzname[0 .. 1] + (0 ..));
+    assigns *(tzname[0 .. 1] + (0 ..)) \from \nothing;
+ */
+extern void tzset(void);
+
+/*@ ensures
+      result_null_or_inside_s:
+        \result ≡ \null ∨ \subset(\result, \old(s) + (0 .. \old(n) - 1));
+    assigns \result;
+    assigns \result
+      \from s, (indirect: *(s + (0 .. n - 1))), (indirect: c), (indirect: n);
+ */
+extern wchar_t *wmemchr(wchar_t const *s, wchar_t c, size_t n);
+
+/*@ assigns \result;
+    assigns \result
+      \from (indirect: *(s1 + (0 .. n - 1))),
+            (indirect: *(s2 + (0 .. n - 1))), (indirect: n);
+ */
+extern int wmemcmp(wchar_t const *s1, wchar_t const *s2, size_t n);
+
+wchar_t *wmemcpy(wchar_t *dest, wchar_t const *src, size_t n);
+
+/*@ ensures result_ptr: \result ≡ \old(dest);
+    assigns *(dest + (0 .. n - 1)), \result;
+    assigns *(dest + (0 .. n - 1))
+      \from *(src + (0 .. n - 1)), (indirect: src), (indirect: n);
+    assigns \result \from dest;
+ */
+extern wchar_t *wmemmove(wchar_t *dest, wchar_t const *src, size_t n);
+
+wchar_t *wmemset(wchar_t *dest, wchar_t val, size_t len);
+
+wchar_t *wcscat(wchar_t *dest, wchar_t const *src);
+
+/*@ requires valid_wstring_src: valid_read_wstring(wcs);
+    ensures
+      result_null_or_inside_wcs:
+        \result ≡ \null ∨ \subset(\result, \old(wcs) + (0 ..));
+    assigns \result;
+    assigns \result \from wcs, (indirect: *(wcs + (0 ..))), (indirect: wc);
+ */
+extern wchar_t *wcschr(wchar_t const *wcs, wchar_t wc);
+
+/*@ assigns \result;
+    assigns \result
+      \from (indirect: *(s1 + (0 ..))), (indirect: *(s2 + (0 ..)));
+ */
+extern int wcscmp(wchar_t const *s1, wchar_t const *s2);
+
+wchar_t *wcscpy(wchar_t *dest, wchar_t const *src);
+
+/*@ assigns \result;
+    assigns \result
+      \from (indirect: *(wcs + (0 ..))), (indirect: *(accept + (0 ..)));
+ */
+extern size_t wcscspn(wchar_t const *wcs, wchar_t const *accept);
+
+/*@ assigns *(dest + (0 ..)), \result;
+    assigns *(dest + (0 ..))
+      \from *(dest + (0 ..)), (indirect: dest), *(src + (0 .. n - 1)),
+            (indirect: src), (indirect: n);
+    assigns \result
+      \from (indirect: *(dest + (0 ..))), (indirect: *(src + (0 .. n - 1))),
+            (indirect: n);
+ */
+extern size_t wcslcat(wchar_t * __restrict dest,
+                      wchar_t const * __restrict src, size_t n);
+
+/*@ requires
+      separation: dest: src:
+        \separated(dest + (0 .. n - 1), src + (0 .. n - 1));
+    assigns *(dest + (0 .. n - 1)), \result;
+    assigns *(dest + (0 .. n - 1))
+      \from *(src + (0 .. n - 1)), (indirect: src), (indirect: n);
+    assigns \result
+      \from (indirect: *(dest + (0 .. n - 1))), (indirect: dest),
+            (indirect: *(src + (0 .. n - 1))), (indirect: src), (indirect: n);
+ */
+extern size_t wcslcpy(wchar_t *dest, wchar_t const *src, size_t n);
+
+size_t wcslen(wchar_t const *str);
+
+wchar_t *wcsncat(wchar_t *dest, wchar_t const *src, size_t n);
+
+/*@ assigns \result;
+    assigns \result
+      \from (indirect: *(s1 + (0 .. n - 1))),
+            (indirect: *(s2 + (0 .. n - 1))), (indirect: n);
+ */
+extern int wcsncmp(wchar_t const *s1, wchar_t const *s2, size_t n);
+
+wchar_t *wcsncpy(wchar_t *dest, wchar_t const *src, size_t n);
+
+/*@ ensures
+      result_null_or_inside_wcs:
+        \result ≡ \null ∨ \subset(\result, \old(wcs) + (0 ..));
+    assigns \result;
+    assigns \result
+      \from wcs, (indirect: *(wcs + (0 ..))), (indirect: *(accept + (0 ..)));
+ */
+extern wchar_t *wcspbrk(wchar_t const *wcs, wchar_t const *accept);
+
+/*@ ensures
+      result_null_or_inside_wcs:
+        \result ≡ \null ∨ \subset(\result, \old(wcs) + (0 ..));
+    assigns \result;
+    assigns \result \from wcs, (indirect: *(wcs + (0 ..))), (indirect: wc);
+ */
+extern wchar_t *wcsrchr(wchar_t const *wcs, wchar_t wc);
+
+/*@ assigns \result;
+    assigns \result
+      \from (indirect: *(wcs + (0 ..))), (indirect: *(accept + (0 ..)));
+ */
+extern size_t wcsspn(wchar_t const *wcs, wchar_t const *accept);
+
+/*@ ensures
+      result_null_or_inside_haystack:
+        \result ≡ \null ∨ \subset(\result, \old(haystack) + (0 ..));
+    assigns \result;
+    assigns \result
+      \from haystack, (indirect: *(haystack + (0 ..))),
+            (indirect: *(needle + (0 ..)));
+ */
+extern wchar_t *wcsstr(wchar_t const *haystack, wchar_t const *needle);
+
+/*@ requires valid_stream: \valid(stream);
+    ensures result_null_or_same: \result ≡ \null ∨ \result ≡ \old(ws);
+    ensures
+      terminated_string_on_success:
+        \result ≢ \null ⇒ valid_wstring(\old(ws));
+    assigns *(ws + (0 .. n)), \result;
+    assigns *(ws + (0 .. n)) \from (indirect: n), (indirect: *stream);
+    assigns \result \from ws, (indirect: n), (indirect: *stream);
+ */
+extern wchar_t *fgetws(wchar_t * __restrict ws, int n,
+                       FILE * __restrict stream);
+
+/*@ axiomatic wformat_length {
+      logic ℤ wformat_length{L}(wchar_t *format) ;
+      
+      }
+
+*/
+/*@ requires
+      separation: dest: src:
+        \separated(dest + (0 .. n - 1), src + (0 .. n - 1));
+    ensures result_ptr: \result ≡ \old(dest);
+    assigns *(dest + (0 .. n - 1)), \result;
+    assigns *(dest + (0 .. n - 1))
+      \from *(src + (0 .. n - 1)), (indirect: src), (indirect: n);
+    assigns \result \from dest;
+ */
+wchar_t *wmemcpy(wchar_t *dest, wchar_t const *src, size_t n)
+{
+  {
+    size_t i = (unsigned int)0;
+    while (i < n) {
+      *(dest + i) = *(src + i);
+      i += (size_t)1;
+    }
+  }
+  return dest;
+}
+
+/*@ ensures result_ptr: \result ≡ \old(dest);
+    ensures
+      initialization: wcs: \initialized(\old(dest) + (0 .. \old(len) - 1));
+    ensures
+      contents_equal_wc:
+        \subset(*(\old(dest) + (0 .. \old(len) - 1)), \old(val));
+    assigns *(dest + (0 .. len - 1)), \result;
+    assigns *(dest + (0 .. len - 1)) \from val, (indirect: len);
+    assigns \result \from dest;
+ */
+wchar_t *wmemset(wchar_t *dest, wchar_t val, size_t len)
+{
+  {
+    size_t i = (unsigned int)0;
+    while (i < len) {
+      *(dest + i) = val;
+      i += (size_t)1;
+    }
+  }
+  return dest;
+}
+
+/*@ ensures result_ptr: \result ≡ \old(dest);
+    assigns *(dest + (0 ..)), \result;
+    assigns *(dest + (0 ..))
+      \from *(src + (0 ..)), (indirect: src), *(dest + (0 ..)),
+            (indirect: dest);
+    assigns \result \from dest;
+ */
+wchar_t *wcscpy(wchar_t *dest, wchar_t const *src)
+{
+  size_t i;
+  i = (unsigned int)0;
+  while (*(src + i) != 0) {
+    *(dest + i) = *(src + i);
+    i += (size_t)1;
+  }
+  *(dest + i) = 0;
+  return dest;
+}
+
+/*@ requires valid_string_s: valid_read_wstring(str);
+    assigns \result;
+    assigns \result \from (indirect: *(str + (0 ..)));
+ */
+size_t wcslen(wchar_t const *str)
+{
+  size_t i;
+  i = (unsigned int)0;
+  while (*(str + i) != 0) i += (size_t)1;
+  return i;
+}
+
+/*@ requires
+      separation: dest: src:
+        \separated(dest + (0 .. n - 1), src + (0 .. n - 1));
+    ensures result_ptr: \result ≡ \old(dest);
+    assigns *(dest + (0 .. n - 1)), \result;
+    assigns *(dest + (0 .. n - 1))
+      \from *(src + (0 .. n - 1)), (indirect: src), (indirect: n);
+    assigns \result \from dest;
+ */
+wchar_t *wcsncpy(wchar_t *dest, wchar_t const *src, size_t n)
+{
+  size_t i;
+  i = (unsigned int)0;
+  while (i < n) {
+    *(dest + i) = *(src + i);
+    if (*(src + i) == 0) break;
+    i += (size_t)1;
+  }
+  while (i < n) {
+    *(dest + i) = 0;
+    i += (size_t)1;
+  }
+  return dest;
+}
+
+/*@ ensures result_ptr: \result ≡ \old(dest);
+    assigns *(dest + (0 ..)), \result;
+    assigns *(dest + (0 ..))
+      \from *(dest + (0 ..)), (indirect: dest), *(src + (0 ..)),
+            (indirect: src);
+    assigns \result \from dest;
+ */
+wchar_t *wcscat(wchar_t *dest, wchar_t const *src)
+{
+  size_t i;
+  size_t n = wcslen((wchar_t const *)dest);
+  i = (unsigned int)0;
+  while (*(src + i) != 0) {
+    *(dest + (n + i)) = *(src + i);
+    i += (size_t)1;
+  }
+  *(dest + (n + i)) = 0;
+  return dest;
+}
+
+/*@ ensures result_ptr: \result ≡ \old(dest);
+    assigns *(dest + (0 ..)), \result;
+    assigns *(dest + (0 ..))
+      \from *(dest + (0 ..)), (indirect: dest), *(src + (0 .. n - 1)),
+            (indirect: src), (indirect: n);
+    assigns \result \from dest;
+ */
+wchar_t *wcsncat(wchar_t *dest, wchar_t const *src, size_t n)
+{
+  size_t i;
+  size_t dest_len = wcslen((wchar_t const *)dest);
+  i = (unsigned int)0;
+  while (1) {
+    if (i < n) {
+      if (! (*(src + i) != 0)) break;
+    }
+    else break;
+    *(dest + (dest_len + i)) = *(src + i);
+    i += (size_t)1;
+  }
+  *(dest + (dest_len + i)) = 0;
+  return dest;
+}
+
+/*@ ghost extern int __fc_stack_status __attribute__((__FRAMA_C_MODEL__)); */
+
+/*@ ensures allocation: \fresh{Old, Here}(\result,\old(size));
+    assigns __fc_stack_status, \result;
+    assigns __fc_stack_status \from size, __fc_stack_status;
+    assigns \result \from (indirect: size), (indirect: __fc_stack_status);
+    allocates \result;
  */
-extern int select(int nfds, fd_set *readfds, fd_set *writefds,
-                  fd_set *errorfds, struct timeval *timeout);
+extern void *alloca(size_t size);
 
-/*@ requires valid_string_path: valid_read_string(path);
-    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result;
-    assigns \result
-      \from (indirect: path), (indirect: *(path + (0 ..))), (indirect: mode);
+DIR __fc_opendir[16];
+DIR * const __fc_p_opendir = __fc_opendir;
+/*@ requires
+      dirp_valid_dir_stream: \subset(dirp, &__fc_opendir[0 .. 16 - 1]);
+    ensures
+      err_or_closed_on_success:
+        (\result ≡ 0 ∧ \old(dirp)->__fc_dir_inode ≡ \null) ∨
+        \result ≡ -1;
+    assigns \result, __fc_errno, *dirp;
+    assigns \result \from dirp, *dirp, __fc_p_opendir;
+    assigns __fc_errno \from dirp, *dirp, __fc_p_opendir;
+    assigns *dirp \from dirp, *dirp, __fc_p_opendir;
  */
-extern int mkdir(char const *path, mode_t mode);
+extern int closedir(DIR *dirp);
 
-/*@ requires valid_pathname: valid_read_string(pathname);
-    requires valid_buf: \valid(buf);
-    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+/*@ ensures result_null_or_valid: \result ≡ \null ∨ \valid(\result);
     ensures
-      init_on_success: initialization: buf:
-        \result ≡ 0 ⇒ \initialized(\old(buf));
-    assigns \result, *buf;
-    assigns \result \from *(pathname + (0 ..));
-    assigns *buf \from *(pathname + (0 ..));
+      valid_dir_stream_on_success:
+        \result ≢ \null ⇒ \result ≡ &__fc_opendir[\result->__fc_dir_id];
+    ensures
+      stream_positioned_on_success:
+        \result ≢ \null ⇒ \result->__fc_dir_inode ≢ \null;
+    assigns \result, __fc_errno;
+    assigns \result \from *(path + (0 ..)), __fc_p_opendir;
+    assigns __fc_errno \from *(path + (0 ..)), __fc_p_opendir;
  */
-extern int stat(char const *pathname, struct stat *buf);
+extern DIR *opendir(char const *path);
 
-/*@ assigns \result;
-    assigns \result \from (indirect: cmask); */
-extern mode_t umask(mode_t cmask);
+/*@ requires
+      dirp_valid_dir_stream: \subset(dirp, &__fc_opendir[0 .. 16 - 1]);
+    ensures result_null_or_valid: \result ≡ \null ∨ \valid(\result);
+    assigns \result, dirp->__fc_dir_position, __fc_errno;
+    assigns \result \from *dirp, __fc_p_opendir;
+    assigns dirp->__fc_dir_position \from dirp->__fc_dir_position;
+    assigns __fc_errno \from dirp, *dirp, __fc_p_opendir;
+ */
+extern struct dirent *readdir(DIR *dirp);
 
-/*@ assigns *(*(outbuf + (0 .. *outbytesleft - 1))), __fc_errno;
-    assigns *(*(outbuf + (0 .. *outbytesleft - 1)))
-      \from *(*(inbuf + (0 .. *inbytesleft - 1)));
+/*@ requires valid_fdset: \valid(fdset);
+    requires initialization: \initialized(fdset);
+    assigns *fdset;
+    assigns *fdset \from *fdset, (indirect: fd);
  */
-extern size_t iconv(iconv_t cd, char ** __restrict inbuf,
-                    size_t * __restrict inbytesleft,
-                    char ** __restrict outbuf,
-                    size_t * __restrict outbytesleft);
+extern void FD_CLR(int fd, fd_set *fdset);
 
-/*@ ensures result_zero_or_neg: \result ≡ 0 ∨ \result ≡ -1;
-    assigns __fc_errno;
+/*@ requires valid_fdset: \valid_read(fdset);
+    requires initialization: \initialized(fdset);
+    assigns \result;
+    assigns \result \from (indirect: *fdset), (indirect: fd);
  */
-extern int iconv_close(iconv_t);
+extern int FD_ISSET(int fd, fd_set const *fdset);
 
-/*@ assigns \result, __fc_errno;
-    assigns \result \from *(tocode + (..)), *(fromcode + (..));
+/*@ requires valid_fdset: \valid(fdset);
+    requires initialization: \initialized(fdset);
+    assigns *fdset;
+    assigns *fdset \from *fdset, (indirect: fd);
  */
-extern iconv_t iconv_open(char const *tocode, char const *fromcode);
+extern void FD_SET(int fd, fd_set *fdset);
 
-extern char __fc_basename[256];
+/*@ requires valid_fdset: \valid(fdset);
+    ensures initialization: \initialized(\old(fdset));
+    assigns *fdset;
+    assigns *fdset \from \nothing;
+ */
+extern void FD_ZERO(fd_set *fdset);
 
-char *__fc_p_basename = __fc_basename;
-/*@ requires
-      null_or_valid_string_path: path ≡ \null ∨ valid_read_string(path);
+/*@ requires valid_res: \valid(res);
+    ensures initialization: res: \initialized(\old(res));
+    ensures res_wrapped: *\old(res) ≡ (int)(\old(a) + \old(b));
     ensures
-      result_points_to_internal_storage_or_path:
-        \subset(\result, {__fc_p_basename, \old(path)});
-    assigns *(path + (0 ..)), __fc_basename[0 ..], \result;
-    assigns *(path + (0 ..)) \from *(path + (0 ..)), __fc_basename[0 ..];
-    assigns __fc_basename[0 ..] \from *(path + (0 ..)), __fc_basename[0 ..];
-    assigns \result \from __fc_p_basename, path;
+      result_overflow:
+        \old(a) + \old(b) ≡ (int)(\old(a) + \old(b))?
+          \result ≡ 0:
+          \result ≡ 1;
+    assigns \result, *res;
+    assigns \result \from a, b;
+    assigns *res \from a, b;
  */
-extern char *basename(char *path);
+_Bool __builtin_sadd_overflow(int a, int b, int *res);
 
-extern char __fc_dirname[256];
+/*@ requires valid_res: \valid(res);
+    ensures initialization: res: \initialized(\old(res));
+    ensures res_wrapped: *\old(res) ≡ (long)(\old(a) + \old(b));
+    ensures
+      result_overflow:
+        \old(a) + \old(b) ≡ (long)(\old(a) + \old(b))?
+          \result ≡ 0:
+          \result ≡ 1;
+    assigns \result, *res;
+    assigns \result \from a, b;
+    assigns *res \from a, b;
+ */
+_Bool __builtin_saddl_overflow(long a, long b, long *res);
 
-char *__fc_p_dirname = __fc_dirname;
-/*@ requires
-      null_or_valid_string_path: path ≡ \null ∨ valid_read_string(path);
+/*@ requires valid_res: \valid(res);
+    ensures initialization: res: \initialized(\old(res));
+    ensures res_wrapped: *\old(res) ≡ (long long)(\old(a) + \old(b));
     ensures
-      result_points_to_internal_storage_or_path:
-        \subset(\result, {__fc_p_dirname, \old(path)});
-    assigns *(path + (0 ..)), __fc_dirname[0 ..], \result;
-    assigns *(path + (0 ..)) \from *(path + (0 ..)), __fc_dirname[0 ..];
-    assigns __fc_dirname[0 ..] \from *(path + (0 ..)), __fc_dirname[0 ..];
-    assigns \result \from __fc_p_dirname, path;
+      result_overflow:
+        \old(a) + \old(b) ≡ (long long)(\old(a) + \old(b))?
+          \result ≡ 0:
+          \result ≡ 1;
+    assigns \result, *res;
+    assigns \result \from a, b;
+    assigns *res \from a, b;
  */
-extern char *dirname(char *path);
+_Bool __builtin_saddll_overflow(long long a, long long b, long long *res);
 
-/*@ requires valid_file_descriptors: \valid(fds + (0 .. nfds - 1));
+/*@ requires valid_res: \valid(res);
+    ensures initialization: res: \initialized(\old(res));
+    ensures res_wrapped: *\old(res) ≡ (unsigned int)(\old(a) + \old(b));
     ensures
-      error_timeout_or_bounded:
-        \result ≡ -1 ∨ \result ≡ 0 ∨ (1 ≤ \result ≤ \old(nfds));
+      result_overflow:
+        \old(a) + \old(b) ≡ (unsigned int)(\old(a) + \old(b))?
+          \result ≡ 0:
+          \result ≡ 1;
+    assigns \result, *res;
+    assigns \result \from a, b;
+    assigns *res \from a, b;
+ */
+_Bool __builtin_uadd_overflow(unsigned int a, unsigned int b,
+                              unsigned int *res);
+
+/*@ requires valid_res: \valid(res);
+    ensures initialization: res: \initialized(\old(res));
+    ensures res_wrapped: *\old(res) ≡ (unsigned long)(\old(a) + \old(b));
     ensures
-      initialization: revents:
-        \initialized(&(\old(fds) + (0 .. \old(nfds) - 1))->revents);
-    assigns (fds + (0 .. nfds - 1))->revents, \result;
-    assigns (fds + (0 .. nfds - 1))->revents
-      \from (indirect: (fds + (0 .. nfds - 1))->fd),
-            (fds + (0 .. nfds - 1))->events, (indirect: nfds),
-            (indirect: timeout), (indirect: Frama_C_entropy_source);
-    assigns \result
-      \from (indirect: (fds + (0 .. nfds - 1))->fd),
-            (indirect: (fds + (0 .. nfds - 1))->events), (indirect: nfds),
-            (indirect: timeout), (indirect: Frama_C_entropy_source);
+      result_overflow:
+        \old(a) + \old(b) ≡ (unsigned long)(\old(a) + \old(b))?
+          \result ≡ 0:
+          \result ≡ 1;
+    assigns \result, *res;
+    assigns \result \from a, b;
+    assigns *res \from a, b;
  */
-extern int poll(struct pollfd *fds, nfds_t nfds, int timeout);
+_Bool __builtin_uaddl_overflow(unsigned long a, unsigned long b,
+                               unsigned long *res);
 
-/*@ requires valid_cond: \valid(cond);
-    ensures sucess: \result ≡ 0;
-    assigns \result;
-    assigns \result \from \nothing;
+/*@ requires valid_res: \valid(res);
+    ensures initialization: res: \initialized(\old(res));
+    ensures
+      res_wrapped: *\old(res) ≡ (unsigned long long)(\old(a) + \old(b));
+    ensures
+      result_overflow:
+        \old(a) + \old(b) ≡ (unsigned long long)(\old(a) + \old(b))?
+          \result ≡ 0:
+          \result ≡ 1;
+    assigns \result, *res;
+    assigns \result \from a, b;
+    assigns *res \from a, b;
+ */
+_Bool __builtin_uaddll_overflow(unsigned long long a, unsigned long long b,
+                                unsigned long long *res);
+
+/*@ requires valid_res: \valid(res);
+    ensures initialization: res: \initialized(\old(res));
+    ensures res_wrapped: *\old(res) ≡ (int)(\old(a) - \old(b));
+    ensures
+      result_overflow:
+        \old(a) - \old(b) ≡ (int)(\old(a) - \old(b))?
+          \result ≡ 0:
+          \result ≡ 1;
+    assigns \result, *res;
+    assigns \result \from a, b;
+    assigns *res \from a, b;
+ */
+_Bool __builtin_ssub_overflow(int a, int b, int *res);
+
+/*@ requires valid_res: \valid(res);
+    ensures initialization: res: \initialized(\old(res));
+    ensures res_wrapped: *\old(res) ≡ (long)(\old(a) - \old(b));
+    ensures
+      result_overflow:
+        \old(a) - \old(b) ≡ (long)(\old(a) - \old(b))?
+          \result ≡ 0:
+          \result ≡ 1;
+    assigns \result, *res;
+    assigns \result \from a, b;
+    assigns *res \from a, b;
+ */
+_Bool __builtin_ssubl_overflow(long a, long b, long *res);
+
+/*@ requires valid_res: \valid(res);
+    ensures initialization: res: \initialized(\old(res));
+    ensures res_wrapped: *\old(res) ≡ (long long)(\old(a) - \old(b));
+    ensures
+      result_overflow:
+        \old(a) - \old(b) ≡ (long long)(\old(a) - \old(b))?
+          \result ≡ 0:
+          \result ≡ 1;
+    assigns \result, *res;
+    assigns \result \from a, b;
+    assigns *res \from a, b;
+ */
+_Bool __builtin_ssubll_overflow(long long a, long long b, long long *res);
+
+/*@ requires valid_res: \valid(res);
+    ensures initialization: res: \initialized(\old(res));
+    ensures res_wrapped: *\old(res) ≡ (unsigned int)(\old(a) - \old(b));
+    ensures
+      result_overflow:
+        \old(a) - \old(b) ≡ (unsigned int)(\old(a) - \old(b))?
+          \result ≡ 0:
+          \result ≡ 1;
+    assigns \result, *res;
+    assigns \result \from a, b;
+    assigns *res \from a, b;
  */
-extern int pthread_cond_broadcast(pthread_cond_t *cond);
+_Bool __builtin_usub_overflow(unsigned int a, unsigned int b,
+                              unsigned int *res);
 
-/*@ requires valid_cond: \valid(cond);
-    ensures success_or_error: \result ≡ 0 ∨ \result ≡ 16;
-    assigns \result;
-    assigns \result \from (indirect: *cond);
+/*@ requires valid_res: \valid(res);
+    ensures initialization: res: \initialized(\old(res));
+    ensures res_wrapped: *\old(res) ≡ (unsigned long)(\old(a) - \old(b));
+    ensures
+      result_overflow:
+        \old(a) - \old(b) ≡ (unsigned long)(\old(a) - \old(b))?
+          \result ≡ 0:
+          \result ≡ 1;
+    assigns \result, *res;
+    assigns \result \from a, b;
+    assigns *res \from a, b;
  */
-extern int pthread_cond_destroy(pthread_cond_t *cond);
+_Bool __builtin_usubl_overflow(unsigned long a, unsigned long b,
+                               unsigned long *res);
 
-/*@ requires valid_cond: \valid(cond);
-    requires valid_null_attr: attr ≡ \null ∨ \valid_read(attr);
-    ensures initialization: cond: \initialized(\old(cond));
-    ensures success: \result ≡ 0;
-    assigns *cond, \result;
-    assigns *cond \from *attr;
-    assigns \result \from \nothing;
+/*@ requires valid_res: \valid(res);
+    ensures initialization: res: \initialized(\old(res));
+    ensures
+      res_wrapped: *\old(res) ≡ (unsigned long long)(\old(a) - \old(b));
+    ensures
+      result_overflow:
+        \old(a) - \old(b) ≡ (unsigned long long)(\old(a) - \old(b))?
+          \result ≡ 0:
+          \result ≡ 1;
+    assigns \result, *res;
+    assigns \result \from a, b;
+    assigns *res \from a, b;
  */
-extern int pthread_cond_init(pthread_cond_t * __restrict cond,
-                             pthread_condattr_t const * __restrict attr);
+_Bool __builtin_usubll_overflow(unsigned long long a, unsigned long long b,
+                                unsigned long long *res);
 
-/*@ requires valid_cond: \valid(cond);
-    requires valid_mutex: \valid(mutex);
-    ensures success: \result ≡ 0;
-    assigns \result;
-    assigns \result \from \nothing;
+/*@ requires valid_res: \valid(res);
+    ensures initialization: res: \initialized(\old(res));
+    ensures res_wrapped: *\old(res) ≡ (int)(\old(a) * \old(b));
+    ensures
+      result_overflow:
+        \old(a) * \old(b) ≡ (int)(\old(a) * \old(b))?
+          \result ≡ 0:
+          \result ≡ 1;
+    assigns \result, *res;
+    assigns \result \from a, b;
+    assigns *res \from a, b;
  */
-extern int pthread_cond_wait(pthread_cond_t * __restrict cond,
-                             pthread_mutex_t * __restrict mutex);
+_Bool __builtin_smul_overflow(int a, int b, int *res);
 
-/*@ requires valid_thread: \valid(thread);
-    requires valid_null_attr: attr ≡ \null ∨ \valid_read(attr);
-    requires valid_routine: \valid_function(start_routine);
-    requires valid_null_arg: arg ≡ \null ∨ \valid((char *)arg);
+/*@ requires valid_res: \valid(res);
+    ensures initialization: res: \initialized(\old(res));
+    ensures res_wrapped: *\old(res) ≡ (long)(\old(a) * \old(b));
     ensures
-      success_or_error:
-        \result ≡ 0 ∨ \result ≡ 11 ∨ \result ≡ 22 ∨ \result ≡ 1;
-    assigns *thread, \result;
-    assigns *thread \from *attr;
-    assigns \result \from (indirect: *attr);
+      result_overflow:
+        \old(a) * \old(b) ≡ (long)(\old(a) * \old(b))?
+          \result ≡ 0:
+          \result ≡ 1;
+    assigns \result, *res;
+    assigns \result \from a, b;
+    assigns *res \from a, b;
  */
-extern int pthread_create(pthread_t * __restrict thread,
-                          pthread_attr_t const * __restrict attr,
-                          void *(*start_routine)(void *),
-                          void * __restrict arg);
+_Bool __builtin_smull_overflow(long a, long b, long *res);
 
-/*@ requires valid_or_null_retval: retval ≡ \null ∨ \valid(retval);
+/*@ requires valid_res: \valid(res);
+    ensures initialization: res: \initialized(\old(res));
+    ensures res_wrapped: *\old(res) ≡ (long long)(\old(a) * \old(b));
     ensures
-      success_or_error:
-        \result ≡ 0 ∨ \result ≡ 35 ∨ \result ≡ 22 ∨ \result ≡ 3;
-    assigns *retval, \result;
-    assigns *retval \from thread;
-    assigns \result \from (indirect: thread);
-    
-    behavior ignore_retval:
-      assumes null_retval: retval ≡ \null;
-      assigns \result;
-      assigns \result \from (indirect: thread);
-    
-    behavior use_retval:
-      assumes valid_retval: \valid(retval);
-      assigns *retval, \result;
-      assigns *retval \from thread;
-      assigns \result \from (indirect: thread);
+      result_overflow:
+        \old(a) * \old(b) ≡ (long long)(\old(a) * \old(b))?
+          \result ≡ 0:
+          \result ≡ 1;
+    assigns \result, *res;
+    assigns \result \from a, b;
+    assigns *res \from a, b;
  */
-extern int pthread_join(pthread_t thread, void **retval);
+_Bool __builtin_smulll_overflow(long long a, long long b, long long *res);
 
-/*@ requires mutex_valid: \valid(mutex);
-    ensures init_or_busy: \result ≡ 0 ∨ \result ≡ 16;
-    assigns *mutex, \result;
-    assigns *mutex \from *mutex;
-    assigns \result \from (indirect: *mutex);
+/*@ requires valid_res: \valid(res);
+    ensures initialization: res: \initialized(\old(res));
+    ensures res_wrapped: *\old(res) ≡ (unsigned int)(\old(a) * \old(b));
+    ensures
+      result_overflow:
+        \old(a) * \old(b) ≡ (unsigned int)(\old(a) * \old(b))?
+          \result ≡ 0:
+          \result ≡ 1;
+    assigns \result, *res;
+    assigns \result \from a, b;
+    assigns *res \from a, b;
  */
-extern int pthread_mutex_destroy(pthread_mutex_t *mutex);
+_Bool __builtin_umul_overflow(unsigned int a, unsigned int b,
+                              unsigned int *res);
 
-/*@ requires mutex_valid: \valid(mutex);
-    requires attrs_valid_or_null: attrs ≡ \null ∨ \valid_read(attrs);
+/*@ requires valid_res: \valid(res);
+    ensures initialization: res: \initialized(\old(res));
+    ensures res_wrapped: *\old(res) ≡ (unsigned long)(\old(a) * \old(b));
     ensures
-      initialization: success_or_error:
-        (\result ≡ 0 ∧ \initialized(\old(mutex))) ∨ \result ≡ 11 ∨
-        \result ≡ 12 ∨ \result ≡ 1 ∨ \result ≡ 22;
-    assigns *mutex, \result;
-    assigns *mutex \from *mutex, *attrs;
-    assigns \result \from (indirect: *mutex), (indirect: *attrs);
+      result_overflow:
+        \old(a) * \old(b) ≡ (unsigned long)(\old(a) * \old(b))?
+          \result ≡ 0:
+          \result ≡ 1;
+    assigns \result, *res;
+    assigns \result \from a, b;
+    assigns *res \from a, b;
  */
-extern int pthread_mutex_init(pthread_mutex_t * __restrict mutex,
-                              pthread_mutexattr_t const * __restrict attrs);
+_Bool __builtin_umull_overflow(unsigned long a, unsigned long b,
+                               unsigned long *res);
 
-/*@ requires mutex_valid: \valid(mutex);
+/*@ requires valid_res: \valid(res);
+    ensures initialization: res: \initialized(\old(res));
     ensures
-      success_or_error:
-        \result ≡ 0 ∨ \result ≡ 11 ∨ \result ≡ 22 ∨
-        \result ≡ 35;
-    assigns *mutex, \result;
-    assigns *mutex \from *mutex;
-    assigns \result \from (indirect: *mutex);
+      res_wrapped: *\old(res) ≡ (unsigned long long)(\old(a) * \old(b));
+    ensures
+      result_overflow:
+        \old(a) * \old(b) ≡ (unsigned long long)(\old(a) * \old(b))?
+          \result ≡ 0:
+          \result ≡ 1;
+    assigns \result, *res;
+    assigns \result \from a, b;
+    assigns *res \from a, b;
  */
-extern int pthread_mutex_lock(pthread_mutex_t *mutex);
+_Bool __builtin_umulll_overflow(unsigned long long a, unsigned long long b,
+                                unsigned long long *res);
 
-/*@ requires mutex_valid: \valid(mutex);
-    ensures success_or_error: \result ≡ 0 ∨ \result ≡ 1;
-    assigns *mutex, \result;
-    assigns *mutex \from *mutex;
-    assigns \result \from (indirect: *mutex);
+/*@ requires valid_filename: valid_read_string(filename);
+    assigns \result;
+    assigns \result \from (indirect: *(filename + (0 ..))), (indirect: mode);
  */
-extern int pthread_mutex_unlock(pthread_mutex_t *mutex);
-
-extern char __fc_getpwuid_pw_name[64];
-
-extern char __fc_getpwuid_pw_passwd[64];
-
-extern char __fc_getpwuid_pw_dir[64];
+extern int creat(char const *filename, mode_t mode);
 
-extern char __fc_getpwuid_pw_shell[64];
+/*@ assigns \result;
+    assigns \result \from fd, cmd; */
+extern int fcntl(int fd, int cmd, void * const *__va_params);
 
-struct passwd __fc_pwd =
-  {.pw_name = __fc_getpwuid_pw_name,
-   .pw_passwd = __fc_getpwuid_pw_passwd,
-   .pw_uid = 0U,
-   .pw_gid = 0U,
-   .pw_gecos = (char *)0,
-   .pw_dir = __fc_getpwuid_pw_dir,
-   .pw_shell = __fc_getpwuid_pw_shell};
-struct passwd *__fc_p_pwd = & __fc_pwd;
-/*@ requires valid_name: valid_read_string(name);
-    ensures
-      result_null_or_internal_struct:
-        \result ≡ \null ∨ \result ≡ __fc_p_pwd;
-    assigns \result, __fc_pwd;
-    assigns \result \from __fc_p_pwd, (indirect: *(name + (0 ..)));
-    assigns __fc_pwd \from (indirect: *(name + (0 ..)));
+/*@ requires valid_filename: valid_read_string(filename);
+    assigns \result;
+    assigns \result
+      \from (indirect: *(filename + (0 ..))), (indirect: flags);
  */
-extern struct passwd *getpwnam(char const *name);
+extern int open(char const *filename, int flags, void * const *__va_params);
 
-/*@ ensures
-      result_null_or_internal_struct:
-        \result ≡ \null ∨ \result ≡ __fc_p_pwd;
-    assigns \result, __fc_pwd;
-    assigns \result \from __fc_p_pwd, (indirect: uid);
-    assigns __fc_pwd \from (indirect: uid);
+/*@ requires valid_filename: valid_read_string(filename);
+    assigns \result;
+    assigns \result
+      \from (indirect: dirfd), (indirect: *(filename + (0 ..))),
+            (indirect: flags);
  */
-extern struct passwd *getpwuid(uid_t uid);
-
-/*@ assigns *(env + (0 .. 4)); */
-extern int setjmp(int * /*[5]*/ env);
+extern int openat(int dirfd, char const *filename, int flags,
+                  void * const *__va_params);
 
-/*@ ensures never_terminates: \false;
-    assigns \nothing; */
-extern void longjmp(int * /*[5]*/ env, int val);
+/*@ requires cmd_has_void_arg: cmd ≡ 1 ∨ cmd ≡ 3 ∨ cmd ≡ 9;
+    assigns \result;
+    assigns \result \from fd, cmd;
+ */
+extern int __va_fcntl_void(int fd, int cmd);
 
-/*@ ensures never_terminates: \false;
-    assigns \nothing; */
-extern void siglongjmp(sigjmp_buf env, int val);
+/*@ requires
+      cmd_has_int_arg:
+        cmd ≡ 0 ∨ cmd ≡ 0x406 ∨ cmd ≡ 4 ∨ cmd ≡ 8 ∨ cmd ≡ 2;
+    assigns \result;
+    assigns \result \from fd, cmd, arg;
+ */
+extern int __va_fcntl_int(int fd, int cmd, int arg);
 
-/*@ assigns \result;
-    assigns \result \from (indirect: fd), (indirect: request);
+/*@ requires cmd_as_flock_arg: cmd ≡ 5 ∨ cmd ≡ 6 ∨ cmd ≡ 7;
+    requires valid_arg: \valid(arg);
+    assigns \result, *arg;
+    assigns \result \from fd, cmd, *arg;
+    assigns *arg \from fd, cmd, *arg;
  */
-extern int __va_ioctl_void(int fd, int request);
+extern int __va_fcntl_flock(int fd, int cmd, struct flock *arg);
 
-/*@ assigns \result;
+/*@ requires valid_filename: valid_read_string(filename);
+    requires flag_not_CREAT: (flags & 0x40) ≡ 0;
+    assigns \result;
     assigns \result
-      \from (indirect: fd), (indirect: request), (indirect: arg);
+      \from (indirect: *(filename + (0 ..))), (indirect: flags);
  */
-extern int __va_ioctl_int(int fd, int request, int arg);
+extern int __va_open_void(char const *filename, int flags);
 
-/*@ assigns \result, *((char *)argp + (0 ..));
+/*@ requires valid_filename: valid_read_string(filename);
+    assigns \result;
     assigns \result
-      \from (indirect: fd), (indirect: request),
-            (indirect: *((char *)argp + (0 ..)));
-    assigns *((char *)argp + (0 ..))
-      \from (indirect: fd), (indirect: request), *((char *)argp + (0 ..));
+      \from (indirect: *(filename + (0 ..))), (indirect: flags),
+            (indirect: mode);
  */
-extern int __va_ioctl_ptr(int fd, int request, void *argp);
+extern int __va_open_mode_t(char const *filename, int flags, mode_t mode);
 
-/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+/*@ requires valid_filename: valid_read_string(filename);
+    requires flag_not_CREAT: (flags & 0x40) ≡ 0;
     assigns \result;
-    assigns \result \from (indirect: fd), (indirect: operation);
+    assigns \result
+      \from (indirect: dirfd), (indirect: *(filename + (0 ..))),
+            (indirect: flags);
  */
-extern int flock(int fd, int operation);
-
-CODE facilitynames[23] =
-  {{.c_name = "auth", .c_val = 4 << 3},
-   {.c_name = "authpriv", .c_val = 10 << 3},
-   {.c_name = "cron", .c_val = 9 << 3},
-   {.c_name = "daemon", .c_val = 3 << 3},
-   {.c_name = "ftp", .c_val = 11 << 3},
-   {.c_name = "kern", .c_val = 0 << 3},
-   {.c_name = "lpr", .c_val = 6 << 3},
-   {.c_name = "mail", .c_val = 2 << 3},
-   {.c_name = "mark", .c_val = 24 | 0},
-   {.c_name = "news", .c_val = 7 << 3},
-   {.c_name = "security", .c_val = 4 << 3},
-   {.c_name = "syslog", .c_val = 5 << 3},
-   {.c_name = "user", .c_val = 1 << 3},
-   {.c_name = "uucp", .c_val = 8 << 3},
-   {.c_name = "local0", .c_val = 16 << 3},
-   {.c_name = "local1", .c_val = 17 << 3},
-   {.c_name = "local2", .c_val = 18 << 3},
-   {.c_name = "local3", .c_val = 19 << 3},
-   {.c_name = "local4", .c_val = 20 << 3},
-   {.c_name = "local5", .c_val = 21 << 3},
-   {.c_name = "local6", .c_val = 22 << 3},
-   {.c_name = "local7", .c_val = 23 << 3},
-   {.c_name = (char const *)0, .c_val = -1}};
-CODE prioritynames[13] =
-  {{.c_name = "alert", .c_val = 1},
-   {.c_name = "crit", .c_val = 2},
-   {.c_name = "debug", .c_val = 7},
-   {.c_name = "emerg", .c_val = 0},
-   {.c_name = "err", .c_val = 3},
-   {.c_name = "error", .c_val = 3},
-   {.c_name = "info", .c_val = 6},
-   {.c_name = "none", .c_val = 0x10},
-   {.c_name = "notice", .c_val = 5},
-   {.c_name = "panic", .c_val = 0},
-   {.c_name = "warn", .c_val = 4},
-   {.c_name = "warning", .c_val = 4},
-   {.c_name = (char const *)0, .c_val = -1}};
-/*@ assigns \nothing; */
-extern void closelog(void);
-
-/*@ assigns \nothing; */
-extern void openlog(char const *, int, int);
-
-/*@ assigns \nothing; */
-extern int setlogmask(int);
-
-/*@ assigns \nothing; */
-extern void syslog(int, char const *, void * const *__va_params);
-
-/*@ assigns \nothing; */
-extern void vsyslog(int, char const *, va_list);
-
-/*@ assigns \result;
-    assigns \result \from which, who; */
-extern int getpriority(int which, id_t who);
-
-/*@ assigns \result;
-    assigns \result \from which, who, prio; */
-extern int setpriority(int which, id_t who, int prio);
+extern int __va_openat_void(int dirfd, char const *filename, int flags);
 
-/*@ assigns \result, rl->rlim_cur, rl->rlim_max;
-    assigns \result \from r;
-    assigns rl->rlim_cur \from r;
-    assigns rl->rlim_max \from r;
+/*@ requires valid_filename: valid_read_string(filename);
+    assigns \result;
+    assigns \result
+      \from (indirect: dirfd), (indirect: *(filename + (0 ..))),
+            (indirect: flags), (indirect: mode);
  */
-extern int getrlimit(int r, struct rlimit *rl);
+extern int __va_openat_mode_t(int dirfd, char const *filename, int flags,
+                              mode_t mode);
 
-/*@ assigns \result, ru->ru_utime, ru->ru_stime;
-    assigns \result \from r;
-    assigns ru->ru_utime \from r;
-    assigns ru->ru_stime \from r;
- */
-extern int getrusage(int r, struct rusage *ru);
+/*@ ghost extern int __fc_tz __attribute__((__FRAMA_C_MODEL__)); */
 
 /*@ assigns \result;
-    assigns \result \from r, rl->rlim_cur, rl->rlim_max; */
-extern int setrlimit(int r, struct rlimit const *rl);
+    assigns \result \from *(path + (0 ..)), *(times + (0 .. 1));
+ */
+extern int utimes(char const *path, struct timeval const * /*[2]*/ times);
 
-/*@ requires valid_buffer: \valid(buffer);
-    assigns \result, *buffer;
-    assigns \result \from __fc_time;
-    assigns *buffer \from __fc_time;
+/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns tv->tv_sec, tv->tv_usec, *((struct timezone *)tz), \result;
+    assigns tv->tv_sec \from __fc_time;
+    assigns tv->tv_usec \from __fc_time;
+    assigns *((struct timezone *)tz) \from __fc_tz;
+    assigns \result
+      \from (indirect: tv), (indirect: tz), *tv, *((struct timezone *)tz),
+            __fc_tz;
+    
+    behavior tv_and_tz_null:
+      assumes null_tv_tz: tv ≡ \null ∧ tz ≡ \null;
+      assigns \result;
+      assigns \result \from (indirect: __fc_tz);
+    
+    behavior tv_not_null:
+      assumes non_null_tv_null_tz: tv ≢ \null ∧ tz ≡ \null;
+      ensures
+        initialization: tv_sec: tv_usec:
+          \initialized(&\old(tv)->tv_sec) ∧
+          \initialized(&\old(tv)->tv_usec);
+      ensures tv_usec_bounded: 0 ≤ \old(tv)->tv_usec ≤ 999999;
+      assigns tv->tv_sec, tv->tv_usec, \result;
+      assigns tv->tv_sec \from (indirect: __fc_time);
+      assigns tv->tv_usec \from (indirect: __fc_time);
+      assigns \result \from (indirect: *tv), (indirect: __fc_tz);
+    
+    behavior tz_not_null:
+      assumes null_tv_non_null_tz: tv ≡ \null ∧ tz ≢ \null;
+      ensures initialization: tz: \initialized((struct timezone *)\old(tz));
+      assigns *((struct timezone *)tz), \result;
+      assigns *((struct timezone *)tz) \from __fc_tz;
+      assigns \result
+        \from (indirect: *((struct timezone *)tz)), (indirect: __fc_tz);
+    
+    behavior tv_and_tz_not_null:
+      assumes non_null_tv_tz: tv ≢ \null ∧ tz ≢ \null;
+      ensures
+        initialization: tv_sec: tv_usec:
+          \initialized(&\old(tv)->tv_sec) ∧
+          \initialized(&\old(tv)->tv_usec);
+      ensures initialization: tz: \initialized((struct timezone *)\old(tz));
+      assigns tv->tv_sec, tv->tv_usec, *((struct timezone *)tz), \result;
+      assigns tv->tv_sec \from (indirect: __fc_time);
+      assigns tv->tv_usec \from (indirect: __fc_time);
+      assigns *((struct timezone *)tz) \from __fc_tz;
+      assigns \result
+        \from (indirect: *tv), (indirect: *((struct timezone *)tz)),
+              (indirect: __fc_tz);
+    
+    complete behaviors tv_and_tz_not_null,
+                       tz_not_null,
+                       tv_not_null,
+                       tv_and_tz_null;
+    disjoint behaviors tv_and_tz_not_null,
+                       tz_not_null,
+                       tv_not_null,
+                       tv_and_tz_null;
  */
-extern clock_t times(struct tms *buffer);
+extern int gettimeofday(struct timeval * __restrict tv, void * __restrict tz);
 
-/*@ requires valid_read_iov: \valid_read(iov + (0 .. iovcnt - 1));
-    assigns *((char *)(iov + (0 .. iovcnt - 1))->iov_base + (0 ..));
+/*@ assigns \result, __fc_time, __fc_tz;
+    assigns \result
+      \from tv->tv_sec, tv->tv_usec, tz->tz_dsttime, tz->tz_minuteswest;
+    assigns __fc_time
+      \from tv->tv_sec, tv->tv_usec, tz->tz_dsttime, tz->tz_minuteswest;
+    assigns __fc_tz
+      \from tv->tv_sec, tv->tv_usec, tz->tz_dsttime, tz->tz_minuteswest;
  */
-extern ssize_t readv(int fd, struct iovec const *iov, int iovcnt);
+extern int settimeofday(struct timeval const *tv, struct timezone const *tz);
 
-/*@ ensures result_ok_or_error: \result ≡ -1 ∨ \result ≥ 0;
-    ensures
-      initialization: stat_loc_init_on_success:
-        \result ≥ 0 ∧ \old(stat_loc) ≢ \null ⇒
-        \initialized(\old(stat_loc));
-    assigns \result, *stat_loc;
-    assigns \result \from \nothing;
-    assigns *stat_loc \from \nothing;
+/*@ ghost
+  struct itimerval volatile __fc_itimer_real __attribute__((__FRAMA_C_MODEL__));
+  */
+/*@ ghost
+  struct itimerval volatile __fc_itimer_virtual __attribute__((__FRAMA_C_MODEL__));
+  */
+/*@ ghost
+  struct itimerval volatile __fc_itimer_prof __attribute__((__FRAMA_C_MODEL__));
+  */
+/*@ requires valid_curr_value: \valid(curr_value);
+    ensures initialization: curr_value: \initialized(\old(curr_value));
+    assigns \result, *curr_value;
+    assigns \result \from (indirect: which);
+    assigns *curr_value
+      \from __fc_itimer_real, __fc_itimer_virtual, __fc_itimer_prof;
     
-    behavior stat_loc_null:
-      assumes stat_loc_null: stat_loc ≡ \null;
-      assigns \result;
+    behavior real:
+      assumes itimer_real: which ≡ 0;
+      ensures result_ok: \result ≡ 0;
+      assigns \result, *curr_value;
       assigns \result \from \nothing;
+      assigns *curr_value \from __fc_itimer_real;
     
-    behavior stat_loc_non_null:
-      assumes stat_loc_non_null: stat_loc ≢ \null;
-      requires valid_stat_loc: \valid(stat_loc);
- */
-extern pid_t wait(int *stat_loc);
-
-/*@ ensures result_ok_or_error: \result ≡ -1 ∨ \result ≥ 0;
-    ensures
-      initialization: stat_loc_init_on_success:
-        \result ≥ 0 ∧ \old(stat_loc) ≢ \null ⇒
-        \initialized(\old(stat_loc));
-    assigns \result, *stat_loc;
-    assigns \result \from (indirect: options);
-    assigns *stat_loc \from (indirect: options);
+    behavior virtual:
+      assumes itimer_virtual: which ≡ 1;
+      ensures result_ok: \result ≡ 0;
+      assigns \result, *curr_value;
+      assigns \result \from \nothing;
+      assigns *curr_value \from __fc_itimer_virtual;
+    
+    behavior prof:
+      assumes itimer_prof: which ≡ 2;
+      ensures result_ok: \result ≡ 0;
+      assigns \result, *curr_value;
+      assigns \result \from \nothing;
+      assigns *curr_value \from __fc_itimer_prof;
     
-    behavior stat_loc_null:
-      assumes stat_loc_null: stat_loc ≡ \null;
+    behavior invalid:
+      assumes invalid_which: which ≢ 0 ∧ which ≢ 1 ∧ which ≢ 2;
+      ensures result_error: \result ≡ -1;
       assigns \result;
       assigns \result \from \nothing;
     
-    behavior stat_loc_non_null:
-      assumes stat_loc_non_null: stat_loc ≢ \null;
-      requires valid_stat_loc: \valid(stat_loc);
+    complete behaviors invalid, prof, virtual, real;
+    disjoint behaviors invalid, prof, virtual, real;
  */
-extern pid_t waitpid(pid_t pid, int *stat_loc, int options);
+extern int getitimer(int which, struct itimerval *curr_value);
 
-/*@ requires valid_termios_p: \valid(termios_p);
-    assigns \result, *termios_p, Frama_C_entropy_source;
-    assigns \result \from (indirect: fd), (indirect: Frama_C_entropy_source);
-    assigns *termios_p
-      \from (indirect: fd), (indirect: Frama_C_entropy_source);
-    assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+/*@ requires valid_new_value: \valid_read(new_value);
+    requires
+      old_value_null_or_valid: old_value ≡ \null ∨ \valid(old_value);
+    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns *old_value, \result;
+    assigns *old_value
+      \from (indirect: which), (indirect: old_value), (indirect: new_value),
+            __fc_itimer_real, __fc_itimer_virtual, __fc_itimer_prof;
+    assigns \result
+      \from (indirect: which), (indirect: new_value), (indirect: *new_value);
     
-    behavior ok:
-      assumes nondet: Frama_C_entropy_source ≡ 0;
-      ensures initialization: termios_p: \initialized(\old(termios_p));
+    behavior real:
+      assumes
+        itimer_real_and_valid:
+          which ≡ 0 ≤ new_value->it_value.tv_usec ≤ 999999 ∧
+          0 ≤ new_value->it_interval.tv_usec ≤ 999999;
       ensures result_ok: \result ≡ 0;
+      ensures initialization: old_value: \initialized(\old(old_value));
+      assigns \result, *old_value, __fc_itimer_real;
+      assigns \result \from \nothing;
+      assigns *old_value \from __fc_itimer_real;
+      assigns __fc_itimer_real \from *new_value;
     
-    behavior error:
-      assumes nondet: Frama_C_entropy_source ≢ 0;
+    behavior virtual:
+      assumes
+        itimer_virtual_and_valid:
+          which ≡ 1 ∧ 0 ≤ new_value->it_value.tv_usec ≤ 999999 ∧
+          0 ≤ new_value->it_interval.tv_usec ≤ 999999;
+      ensures result_ok: \result ≡ 0;
+      ensures initialization: old_value: \initialized(\old(old_value));
+      assigns \result, *old_value;
+      assigns \result \from \nothing;
+      assigns *old_value \from __fc_itimer_virtual;
+    
+    behavior prof:
+      assumes
+        itimer_prof_and_valid:
+          which ≡ 2 ∧ 0 ≤ new_value->it_value.tv_usec ≤ 999999 ∧
+          0 ≤ new_value->it_interval.tv_usec ≤ 999999;
+      ensures result_ok: \result ≡ 0;
+      ensures initialization: old_value: \initialized(\old(old_value));
+      assigns \result, *old_value;
+      assigns \result \from \nothing;
+      assigns *old_value \from __fc_itimer_prof;
+    
+    behavior invalid:
+      assumes
+        invalid_itimer_or_new_value:
+          (which ≢ 0 ∧ which ≢ 1 ∧ which ≢ 2) ∨
+          ¬(0 ≤ new_value->it_value.tv_usec ≤ 999999 ∧
+             0 ≤ new_value->it_interval.tv_usec ≤ 999999);
       ensures result_error: \result ≡ -1;
+      assigns \result;
+      assigns \result \from \nothing;
     
-    complete behaviors error, ok;
-    disjoint behaviors error, ok;
+    disjoint behaviors invalid, prof, virtual, real;
  */
-extern int tcgetattr(int fd, struct termios *termios_p);
+extern int setitimer(int which,
+                     struct itimerval const * __restrict new_value,
+                     struct itimerval * __restrict old_value);
 
-/*@ requires valid_termios_p: \valid(termios_p);
-    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns *termios_p, Frama_C_entropy_source, \result;
-    assigns *termios_p
-      \from (indirect: fd), (indirect: optional_actions),
-            (indirect: Frama_C_entropy_source), *termios_p;
-    assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+/*@ ghost int volatile __fc_fds_state; */
+/*@ requires nfds: nfds ≥ 0;
+    requires readfs: readfds ≡ \null ∨ \valid(readfds);
+    requires writefds: writefds ≡ \null ∨ \valid(writefds);
+    requires errorfds: errorfds ≡ \null ∨ \valid(errorfds);
+    requires timeout: timeout ≡ \null ∨ \valid(timeout);
+    assigns __fc_fds_state, *readfds, *writefds, *errorfds, *timeout,
+            \result;
+    assigns __fc_fds_state \from __fc_fds_state;
+    assigns *readfds
+      \from (indirect: nfds), (indirect: readfds), (indirect: *readfds),
+            (indirect: writefds), (indirect: *writefds),
+            (indirect: errorfds), (indirect: *errorfds), (indirect: timeout),
+            (indirect: *timeout), __fc_fds_state;
+    assigns *writefds
+      \from (indirect: nfds), (indirect: readfds), (indirect: *readfds),
+            (indirect: writefds), (indirect: *writefds),
+            (indirect: errorfds), (indirect: *errorfds), (indirect: timeout),
+            (indirect: *timeout), __fc_fds_state;
+    assigns *errorfds
+      \from (indirect: nfds), (indirect: readfds), (indirect: *readfds),
+            (indirect: writefds), (indirect: *writefds),
+            (indirect: errorfds), (indirect: *errorfds), (indirect: timeout),
+            (indirect: *timeout), __fc_fds_state;
+    assigns *timeout
+      \from (indirect: nfds), (indirect: readfds), (indirect: *readfds),
+            (indirect: writefds), (indirect: *writefds),
+            (indirect: errorfds), (indirect: *errorfds), (indirect: timeout),
+            (indirect: *timeout), __fc_fds_state;
     assigns \result
-      \from (indirect: fd), (indirect: optional_actions),
-            (indirect: Frama_C_entropy_source), (indirect: *termios_p);
+      \from (indirect: nfds), (indirect: readfds), (indirect: *readfds),
+            (indirect: writefds), (indirect: *writefds),
+            (indirect: errorfds), (indirect: *errorfds), (indirect: timeout),
+            (indirect: *timeout), __fc_fds_state;
+    
+    behavior read_notnull:
+      assumes readfds_is_not_null: readfds ≢ \null;
+      ensures initialization: readfds: \initialized(\old(readfds));
+    
+    behavior write_notnull:
+      assumes writefds_is_not_null: writefds ≢ \null;
+      ensures initialization: writefds: \initialized(\old(writefds));
+    
+    behavior error_notnull:
+      assumes errorfds_is_not_null: errorfds ≢ \null;
+      ensures initialization: errorfds: \initialized(\old(errorfds));
+    
+    behavior timeout_notnull:
+      assumes timeout_is_not_null: timeout ≢ \null;
+      ensures initialization: timeout: \initialized(\old(timeout));
  */
-extern int tcsetattr(int fd, int optional_actions, struct termios *termios_p);
+extern int select(int nfds, fd_set *readfds, fd_set *writefds,
+                  fd_set *errorfds, struct timeval *timeout);
 
-/*@ ghost int __fc_fds[1024]; */
 /*@ requires valid_string_path: valid_read_string(path);
-    requires valid_amode: (amode & ~((4 | 2) | 1)) ≡ 0 ∨ amode ≡ 0;
     ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
     assigns \result;
     assigns \result
-      \from (indirect: path), (indirect: *(path + (0 ..))), (indirect: amode);
+      \from (indirect: path), (indirect: *(path + (0 ..))), (indirect: mode);
  */
-extern int access(char const *path, int amode);
+extern int mkdir(char const *path, mode_t mode);
 
-/*@ requires valid_string_path: valid_read_string(path);
+/*@ requires valid_pathname: valid_read_string(pathname);
+    requires valid_buf: \valid(buf);
     ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result;
-    assigns \result \from (indirect: path), (indirect: *(path + (0 ..)));
+    ensures
+      init_on_success: initialization: buf:
+        \result ≡ 0 ⇒ \initialized(\old(buf));
+    assigns \result, *buf;
+    assigns \result \from *(pathname + (0 ..));
+    assigns *buf \from *(pathname + (0 ..));
  */
-extern int chdir(char const *path);
+extern int stat(char const *pathname, struct stat *buf);
 
-/*@ requires valid_string_path: valid_read_string(path);
-    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result;
-    assigns \result \from (indirect: path), (indirect: *(path + (0 ..)));
- */
-extern int chroot(char const *path);
+/*@ assigns \result;
+    assigns \result \from (indirect: cmask); */
+extern mode_t umask(mode_t cmask);
 
-/*@ requires valid_string_path: valid_read_string(path);
-    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result;
-    assigns \result
-      \from (indirect: path), (indirect: *(path + (0 ..))),
-            (indirect: owner), (indirect: group);
+/*@ assigns *(*(outbuf + (0 .. *outbytesleft - 1))), __fc_errno;
+    assigns *(*(outbuf + (0 .. *outbytesleft - 1)))
+      \from *(*(inbuf + (0 .. *inbytesleft - 1)));
  */
-extern int chown(char const *path, uid_t owner, gid_t group);
+extern size_t iconv(iconv_t cd, char ** __restrict inbuf,
+                    size_t * __restrict inbytesleft,
+                    char ** __restrict outbuf,
+                    size_t * __restrict outbytesleft);
 
-/*@ requires valid_fd: 0 ≤ fd < 1024;
-    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns __fc_fds[fd], \result;
-    assigns __fc_fds[fd] \from fd, __fc_fds[fd];
-    assigns \result \from (indirect: fd), (indirect: __fc_fds[fd]);
+/*@ ensures result_zero_or_neg: \result ≡ 0 ∨ \result ≡ -1;
+    assigns __fc_errno;
  */
-extern int close(int fd);
+extern int iconv_close(iconv_t);
 
-/*@ requires valid_fildes: 0 ≤ fildes < 1024;
-    ensures
-      result_valid_fildes_or_error:
-        \result ≡ -1 ∨ (\old(fildes) ≤ \result < 1024);
-    assigns __fc_fds[fildes ..], \result;
-    assigns __fc_fds[fildes ..] \from fildes;
-    assigns \result \from fildes;
+/*@ assigns \result, __fc_errno;
+    assigns \result \from *(tocode + (..)), *(fromcode + (..));
  */
-extern int dup(int fildes);
+extern iconv_t iconv_open(char const *tocode, char const *fromcode);
 
-/*@ requires valid_fildes: 0 ≤ fildes < 1024;
-    requires valid_fildes2: 0 ≤ fildes2 < 1024;
+extern char __fc_basename[256];
+
+char *__fc_p_basename = __fc_basename;
+/*@ requires
+      null_or_valid_string_path: path ≡ \null ∨ valid_read_string(path);
     ensures
-      result_fildes2_or_error: \result ≡ \old(fildes2) ∨ \result ≡ -1;
-    assigns __fc_fds[fildes2], \result;
-    assigns __fc_fds[fildes2] \from fildes, fildes2, __fc_fds[fildes2];
-    assigns \result
-      \from fildes, fildes2, __fc_fds[fildes], __fc_fds[fildes2];
+      result_points_to_internal_storage_or_path:
+        \subset(\result, {__fc_p_basename, \old(path)});
+    assigns *(path + (0 ..)), __fc_basename[0 ..], \result;
+    assigns *(path + (0 ..)) \from *(path + (0 ..)), __fc_basename[0 ..];
+    assigns __fc_basename[0 ..] \from *(path + (0 ..)), __fc_basename[0 ..];
+    assigns \result \from __fc_p_basename, path;
  */
-extern int dup2(int fildes, int fildes2);
+extern char *basename(char *path);
 
-/*@ requires valid_string_path: valid_read_string(path);
-    requires valid_string_arg: valid_read_string(arg);
-    assigns \result;
-    assigns \result \from *(path + (0 ..)), *(arg + (0 ..));
- */
-extern int execl(char const *path, char const *arg, void * const *__va_params);
+extern char __fc_dirname[256];
 
-/*@ requires valid_string_path: valid_read_string(path);
-    requires valid_string_arg: valid_read_string(arg);
-    assigns \result;
-    assigns \result \from *(path + (0 ..)), *(arg + (0 ..));
+char *__fc_p_dirname = __fc_dirname;
+/*@ requires
+      null_or_valid_string_path: path ≡ \null ∨ valid_read_string(path);
+    ensures
+      result_points_to_internal_storage_or_path:
+        \subset(\result, {__fc_p_dirname, \old(path)});
+    assigns *(path + (0 ..)), __fc_dirname[0 ..], \result;
+    assigns *(path + (0 ..)) \from *(path + (0 ..)), __fc_dirname[0 ..];
+    assigns __fc_dirname[0 ..] \from *(path + (0 ..)), __fc_dirname[0 ..];
+    assigns \result \from __fc_p_dirname, path;
  */
-extern int execle(char const *path, char const *arg,
-                  void * const *__va_params);
+extern char *dirname(char *path);
 
-/*@ requires valid_string_path: valid_read_string(path);
-    requires valid_string_arg: valid_read_string(arg);
-    assigns \result;
-    assigns \result \from *(path + (0 ..)), *(arg + (0 ..));
+/*@ requires valid_file_descriptors: \valid(fds + (0 .. nfds - 1));
+    ensures
+      error_timeout_or_bounded:
+        \result ≡ -1 ∨ \result ≡ 0 ∨ (1 ≤ \result ≤ \old(nfds));
+    ensures
+      initialization: revents:
+        \initialized(&(\old(fds) + (0 .. \old(nfds) - 1))->revents);
+    assigns (fds + (0 .. nfds - 1))->revents, \result;
+    assigns (fds + (0 .. nfds - 1))->revents
+      \from (indirect: (fds + (0 .. nfds - 1))->fd),
+            (fds + (0 .. nfds - 1))->events, (indirect: nfds),
+            (indirect: timeout), (indirect: Frama_C_entropy_source);
+    assigns \result
+      \from (indirect: (fds + (0 .. nfds - 1))->fd),
+            (indirect: (fds + (0 .. nfds - 1))->events), (indirect: nfds),
+            (indirect: timeout), (indirect: Frama_C_entropy_source);
  */
-extern int execlp(char const *path, char const *arg,
-                  void * const *__va_params);
+extern int poll(struct pollfd *fds, nfds_t nfds, int timeout);
 
-/*@ requires valid_string_path: valid_read_string(path);
-    requires valid_string_argv0: valid_read_string(*(argv + 0));
+/*@ requires valid_cond: \valid(cond);
+    ensures sucess: \result ≡ 0;
     assigns \result;
-    assigns \result \from *(path + (0 ..)), *(argv + (0 ..));
+    assigns \result \from \nothing;
  */
-extern int execv(char const *path, char * const *argv);
+extern int pthread_cond_broadcast(pthread_cond_t *cond);
 
-/*@ requires valid_path: valid_read_string(path);
-    requires valid_argv0: valid_read_string(*(argv + 0));
+/*@ requires valid_cond: \valid(cond);
+    ensures success_or_error: \result ≡ 0 ∨ \result ≡ 16;
     assigns \result;
-    assigns \result \from *(path + (0 ..)), *(argv + (0 ..));
+    assigns \result \from (indirect: *cond);
  */
-extern int execve(char const *path, char * const *argv, char * const *env);
+extern int pthread_cond_destroy(pthread_cond_t *cond);
 
-/*@ requires valid_string_path: valid_read_string(path);
-    requires valid_string_argv0: valid_read_string(*(argv + 0));
-    assigns \result;
-    assigns \result \from *(path + (0 ..)), *(argv + (0 ..));
+/*@ requires valid_cond: \valid(cond);
+    requires valid_null_attr: attr ≡ \null ∨ \valid_read(attr);
+    ensures initialization: cond: \initialized(\old(cond));
+    ensures success: \result ≡ 0;
+    assigns *cond, \result;
+    assigns *cond \from *attr;
+    assigns \result \from \nothing;
  */
-extern int execvp(char const *path, char * const *argv);
-
-/*@ ensures never_terminates: \false;
-    assigns \nothing; */
-extern  __attribute__((__noreturn__)) void _exit(int);
+extern int pthread_cond_init(pthread_cond_t * __restrict cond,
+                             pthread_condattr_t const * __restrict attr);
 
-/*@ ensures
-      result_ok_child_or_error:
-        \result ≡ 0 ∨ \result > 0 ∨ \result ≡ -1;
+/*@ requires valid_cond: \valid(cond);
+    requires valid_mutex: \valid(mutex);
+    ensures success: \result ≡ 0;
     assigns \result;
     assigns \result \from \nothing;
  */
-extern pid_t fork(void);
+extern int pthread_cond_wait(pthread_cond_t * __restrict cond,
+                             pthread_mutex_t * __restrict mutex);
 
-/*@ requires valid_buf: \valid(buf + (0 .. size - 1));
-    ensures result_ok_or_error: \result ≡ \null ∨ \result ≡ \old(buf);
-    assigns *(buf + (0 .. size - 1)), \result;
-    assigns *(buf + (0 .. size - 1)) \from (indirect: buf), (indirect: size);
-    assigns \result \from buf, (indirect: size);
+/*@ requires valid_thread: \valid(thread);
+    requires valid_null_attr: attr ≡ \null ∨ \valid_read(attr);
+    requires valid_routine: \valid_function(start_routine);
+    requires valid_null_arg: arg ≡ \null ∨ \valid((char *)arg);
+    ensures
+      success_or_error:
+        \result ≡ 0 ∨ \result ≡ 11 ∨ \result ≡ 22 ∨ \result ≡ 1;
+    assigns *thread, \result;
+    assigns *thread \from *attr;
+    assigns \result \from (indirect: *attr);
  */
-extern char *getcwd(char *buf, size_t size);
-
-/*@ assigns \result;
-    assigns \result \from \nothing; */
-extern gid_t getegid(void);
-
-/*@ assigns \result;
-    assigns \result \from \nothing; */
-extern uid_t geteuid(void);
-
-/*@ assigns \result;
-    assigns \result \from \nothing; */
-extern gid_t getgid(void);
+extern int pthread_create(pthread_t * __restrict thread,
+                          pthread_attr_t const * __restrict attr,
+                          void *(*start_routine)(void *),
+                          void * __restrict arg);
 
-extern char volatile __fc_hostname[64];
+/*@ requires valid_or_null_retval: retval ≡ \null ∨ \valid(retval);
+    ensures
+      success_or_error:
+        \result ≡ 0 ∨ \result ≡ 35 ∨ \result ≡ 22 ∨ \result ≡ 3;
+    assigns *retval, \result;
+    assigns *retval \from thread;
+    assigns \result \from (indirect: thread);
+    
+    behavior ignore_retval:
+      assumes null_retval: retval ≡ \null;
+      assigns \result;
+      assigns \result \from (indirect: thread);
+    
+    behavior use_retval:
+      assumes valid_retval: \valid(retval);
+      assigns *retval, \result;
+      assigns *retval \from thread;
+      assigns \result \from (indirect: thread);
+ */
+extern int pthread_join(pthread_t thread, void **retval);
 
-/*@ requires name_has_room: \valid(name + (0 .. len - 1));
-    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result, *(name + (0 .. len - 1));
-    assigns \result
-      \from (indirect: __fc_hostname[0 .. len]), (indirect: len);
-    assigns *(name + (0 .. len - 1))
-      \from (indirect: __fc_hostname[0 .. len]), (indirect: len);
+/*@ requires mutex_valid: \valid(mutex);
+    ensures init_or_busy: \result ≡ 0 ∨ \result ≡ 16;
+    assigns *mutex, \result;
+    assigns *mutex \from *mutex;
+    assigns \result \from (indirect: *mutex);
  */
-extern int gethostname(char *name, size_t len);
+extern int pthread_mutex_destroy(pthread_mutex_t *mutex);
 
-/*@ requires name_valid_string: valid_read_nstring(name, len);
-    requires bounded_len: len ≤ 64;
-    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns __fc_hostname[0 .. len], \result;
-    assigns __fc_hostname[0 .. len]
-      \from *(name + (0 .. len - 1)), (indirect: len);
-    assigns \result \from (indirect: __fc_hostname[0 .. len]);
+/*@ requires mutex_valid: \valid(mutex);
+    requires attrs_valid_or_null: attrs ≡ \null ∨ \valid_read(attrs);
+    ensures
+      initialization: success_or_error:
+        (\result ≡ 0 ∧ \initialized(\old(mutex))) ∨ \result ≡ 11 ∨
+        \result ≡ 12 ∨ \result ≡ 1 ∨ \result ≡ 22;
+    assigns *mutex, \result;
+    assigns *mutex \from *mutex, *attrs;
+    assigns \result \from (indirect: *mutex), (indirect: *attrs);
  */
-extern int sethostname(char const *name, size_t len);
+extern int pthread_mutex_init(pthread_mutex_t * __restrict mutex,
+                              pthread_mutexattr_t const * __restrict attrs);
 
-/*@ assigns \result;
-    assigns \result \from (indirect: pid); */
-extern pid_t getpgid(pid_t pid);
+/*@ requires mutex_valid: \valid(mutex);
+    ensures
+      success_or_error:
+        \result ≡ 0 ∨ \result ≡ 11 ∨ \result ≡ 22 ∨
+        \result ≡ 35;
+    assigns *mutex, \result;
+    assigns *mutex \from *mutex;
+    assigns \result \from (indirect: *mutex);
+ */
+extern int pthread_mutex_lock(pthread_mutex_t *mutex);
 
-/*@ assigns \result;
-    assigns \result \from \nothing; */
-extern pid_t getpgrp(void);
+/*@ requires mutex_valid: \valid(mutex);
+    ensures success_or_error: \result ≡ 0 ∨ \result ≡ 1;
+    assigns *mutex, \result;
+    assigns *mutex \from *mutex;
+    assigns \result \from (indirect: *mutex);
+ */
+extern int pthread_mutex_unlock(pthread_mutex_t *mutex);
 
-/*@ assigns \result;
-    assigns \result \from \nothing; */
-extern pid_t getpid(void);
+extern char __fc_getpwuid_pw_name[64];
 
-/*@ assigns \result;
-    assigns \result \from \nothing; */
-extern pid_t getppid(void);
+extern char __fc_getpwuid_pw_passwd[64];
 
-/*@ assigns \result;
-    assigns \result \from \nothing; */
-extern pid_t getsid(pid_t);
+extern char __fc_getpwuid_pw_dir[64];
 
-/*@ assigns \result;
-    assigns \result \from \nothing; */
-extern uid_t getuid(void);
+extern char __fc_getpwuid_pw_shell[64];
 
-/*@ ensures result_true_or_false: \result ≡ 0 ∨ \result ≡ 1;
-    assigns \result;
-    assigns \result \from (indirect: fd), (indirect: __fc_fds[fd]);
+struct passwd __fc_pwd =
+  {.pw_name = __fc_getpwuid_pw_name,
+   .pw_passwd = __fc_getpwuid_pw_passwd,
+   .pw_uid = 0U,
+   .pw_gid = 0U,
+   .pw_gecos = (char *)0,
+   .pw_dir = __fc_getpwuid_pw_dir,
+   .pw_shell = __fc_getpwuid_pw_shell};
+struct passwd *__fc_p_pwd = & __fc_pwd;
+/*@ requires valid_name: valid_read_string(name);
+    ensures
+      result_null_or_internal_struct:
+        \result ≡ \null ∨ \result ≡ __fc_p_pwd;
+    assigns \result, __fc_pwd;
+    assigns \result \from __fc_p_pwd, (indirect: *(name + (0 ..)));
+    assigns __fc_pwd \from (indirect: *(name + (0 ..)));
  */
-extern int isatty(int fd);
+extern struct passwd *getpwnam(char const *name);
 
-/*@ requires valid_fd: 0 ≤ fd < 1024;
-    requires valid_whence: whence ≡ 0 ∨ whence ≡ 1 ∨ whence ≡ 2;
-    ensures result_error_or_offset: \result ≡ -1 ∨ 0 ≤ \result;
-    assigns \result, __fc_fds[fd];
-    assigns \result
-      \from (indirect: fd), (indirect: __fc_fds[fd]), (indirect: offset),
-            (indirect: whence);
-    assigns __fc_fds[fd]
-      \from (indirect: fd), __fc_fds[fd], (indirect: offset),
-            (indirect: whence);
+/*@ ensures
+      result_null_or_internal_struct:
+        \result ≡ \null ∨ \result ≡ __fc_p_pwd;
+    assigns \result, __fc_pwd;
+    assigns \result \from __fc_p_pwd, (indirect: uid);
+    assigns __fc_pwd \from (indirect: uid);
  */
-extern off_t lseek(int fd, off_t offset, int whence);
+extern struct passwd *getpwuid(uid_t uid);
 
-/*@ requires valid_path: valid_read_string(path);
-    assigns \result;
-    assigns \result \from (indirect: *(path + (0 ..))), (indirect: name);
- */
-extern long pathconf(char const *path, int name);
+/*@ assigns *(env + (0 .. 4)); */
+extern int setjmp(int * /*[5]*/ env);
 
-/*@ ensures initialization: pipefd: \initialized(\old(pipefd) + (0 .. 1));
-    ensures valid_fd0: 0 ≤ *(\old(pipefd) + 0) < 1024;
-    ensures valid_fd1: 0 ≤ *(\old(pipefd) + 1) < 1024;
-    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns *(pipefd + (0 .. 1)), \result;
-    assigns *(pipefd + (0 .. 1)) \from (indirect: __fc_fds[0 ..]);
-    assigns \result \from (indirect: __fc_fds[0 ..]);
- */
-extern int pipe(int * /*[2]*/ pipefd);
+/*@ ensures never_terminates: \false;
+    assigns \nothing; */
+extern void longjmp(int * /*[5]*/ env, int val);
 
-/*@ requires valid_fd: 0 ≤ fd < 1024;
-    requires buf_has_room: \valid((char *)buf + (0 .. count - 1));
-    ensures
-      result_error_or_read_length:
-        (0 ≤ \result ≤ \old(count)) ∨ \result ≡ -1;
-    ensures
-      initialization: buf:
-        \initialized((char *)\old(buf) + (0 .. \result - 1));
-    assigns __fc_fds[fd], \result, *((char *)buf + (0 .. count - 1));
-    assigns __fc_fds[fd] \from __fc_fds[fd];
-    assigns \result \from (indirect: __fc_fds[fd]), (indirect: count);
-    assigns *((char *)buf + (0 .. count - 1))
-      \from (indirect: __fc_fds[fd]), (indirect: count);
- */
-extern ssize_t read(int fd, void *buf, size_t count);
+/*@ ensures never_terminates: \false;
+    assigns \nothing; */
+extern void siglongjmp(sigjmp_buf env, int val);
 
-/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result;
-    assigns \result \from (indirect: gid);
+/*@ assigns \result;
+    assigns \result \from (indirect: fd), (indirect: request);
  */
-extern int setegid(gid_t gid);
+extern int __va_ioctl_void(int fd, int request);
 
-/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result;
-    assigns \result \from (indirect: uid);
+/*@ assigns \result;
+    assigns \result
+      \from (indirect: fd), (indirect: request), (indirect: arg);
  */
-extern int seteuid(uid_t uid);
+extern int __va_ioctl_int(int fd, int request, int arg);
 
-/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result;
-    assigns \result \from (indirect: gid);
+/*@ assigns \result, *((char *)argp + (0 ..));
+    assigns \result
+      \from (indirect: fd), (indirect: request),
+            (indirect: *((char *)argp + (0 ..)));
+    assigns *((char *)argp + (0 ..))
+      \from (indirect: fd), (indirect: request), *((char *)argp + (0 ..));
  */
-extern int setgid(gid_t gid);
+extern int __va_ioctl_ptr(int fd, int request, void *argp);
 
 /*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
     assigns \result;
-    assigns \result \from (indirect: pid), (indirect: pgid);
+    assigns \result \from (indirect: fd), (indirect: operation);
  */
-extern int setpgid(pid_t pid, pid_t pgid);
+extern int flock(int fd, int operation);
 
-/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result;
-    assigns \result \from (indirect: rgid), (indirect: egid);
- */
-extern int setregid(gid_t rgid, gid_t egid);
+CODE facilitynames[23] =
+  {{.c_name = "auth", .c_val = 4 << 3},
+   {.c_name = "authpriv", .c_val = 10 << 3},
+   {.c_name = "cron", .c_val = 9 << 3},
+   {.c_name = "daemon", .c_val = 3 << 3},
+   {.c_name = "ftp", .c_val = 11 << 3},
+   {.c_name = "kern", .c_val = 0 << 3},
+   {.c_name = "lpr", .c_val = 6 << 3},
+   {.c_name = "mail", .c_val = 2 << 3},
+   {.c_name = "mark", .c_val = 24 | 0},
+   {.c_name = "news", .c_val = 7 << 3},
+   {.c_name = "security", .c_val = 4 << 3},
+   {.c_name = "syslog", .c_val = 5 << 3},
+   {.c_name = "user", .c_val = 1 << 3},
+   {.c_name = "uucp", .c_val = 8 << 3},
+   {.c_name = "local0", .c_val = 16 << 3},
+   {.c_name = "local1", .c_val = 17 << 3},
+   {.c_name = "local2", .c_val = 18 << 3},
+   {.c_name = "local3", .c_val = 19 << 3},
+   {.c_name = "local4", .c_val = 20 << 3},
+   {.c_name = "local5", .c_val = 21 << 3},
+   {.c_name = "local6", .c_val = 22 << 3},
+   {.c_name = "local7", .c_val = 23 << 3},
+   {.c_name = (char const *)0, .c_val = -1}};
+CODE prioritynames[13] =
+  {{.c_name = "alert", .c_val = 1},
+   {.c_name = "crit", .c_val = 2},
+   {.c_name = "debug", .c_val = 7},
+   {.c_name = "emerg", .c_val = 0},
+   {.c_name = "err", .c_val = 3},
+   {.c_name = "error", .c_val = 3},
+   {.c_name = "info", .c_val = 6},
+   {.c_name = "none", .c_val = 0x10},
+   {.c_name = "notice", .c_val = 5},
+   {.c_name = "panic", .c_val = 0},
+   {.c_name = "warn", .c_val = 4},
+   {.c_name = "warning", .c_val = 4},
+   {.c_name = (char const *)0, .c_val = -1}};
+/*@ assigns \nothing; */
+extern void closelog(void);
 
-/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result;
-    assigns \result \from (indirect: ruid), (indirect: euid);
- */
-extern int setreuid(uid_t ruid, uid_t euid);
+/*@ assigns \nothing; */
+extern void openlog(char const *, int, int);
 
-/*@ ensures result_pgid_or_error: \result ≡ -1 ∨ \result ≥ 0;
-    assigns \result;
-    assigns \result \from \nothing;
- */
-extern pid_t setsid(void);
+/*@ assigns \nothing; */
+extern int setlogmask(int);
 
-/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result;
-    assigns \result \from (indirect: uid);
- */
-extern int setuid(uid_t uid);
+/*@ assigns \nothing; */
+extern void syslog(int, char const *, void * const *__va_params);
 
 /*@ assigns \nothing; */
-extern void sync(void);
+extern void vsyslog(int, char const *, va_list);
 
 /*@ assigns \result;
-    assigns \result \from (indirect: name); */
-extern long sysconf(int name);
+    assigns \result \from which, who; */
+extern int getpriority(int which, id_t who);
 
-extern char volatile __fc_ttyname[32];
+/*@ assigns \result;
+    assigns \result \from which, who, prio; */
+extern int setpriority(int which, id_t who, int prio);
 
-char *__fc_p_ttyname = (char *)(__fc_ttyname);
-/*@ ensures
-      result_name_or_null: \result ≡ __fc_p_ttyname ∨ \result ≡ \null;
-    assigns \result;
-    assigns \result \from __fc_p_ttyname, (indirect: fildes);
+/*@ assigns \result, rl->rlim_cur, rl->rlim_max;
+    assigns \result \from r;
+    assigns rl->rlim_cur \from r;
+    assigns rl->rlim_max \from r;
  */
-extern char *ttyname(int fildes);
+extern int getrlimit(int r, struct rlimit *rl);
 
-/*@ requires valid_string_path: valid_read_string(path);
-    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result;
-    assigns \result \from *(path + (0 ..));
+/*@ assigns \result, ru->ru_utime, ru->ru_stime;
+    assigns \result \from r;
+    assigns ru->ru_utime \from r;
+    assigns ru->ru_stime \from r;
  */
-extern int unlink(char const *path);
+extern int getrusage(int r, struct rusage *ru);
 
-/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result, Frama_C_entropy_source;
-    assigns \result
-      \from (indirect: usec), (indirect: Frama_C_entropy_source);
-    assigns Frama_C_entropy_source \from Frama_C_entropy_source;
- */
-extern int usleep(useconds_t usec);
+/*@ assigns \result;
+    assigns \result \from r, rl->rlim_cur, rl->rlim_max; */
+extern int setrlimit(int r, struct rlimit const *rl);
 
-/*@ requires valid_fd: 0 ≤ fd < 1024;
-    requires buf_has_room: \valid_read((char *)buf + (0 .. count - 1));
-    ensures
-      result_error_or_written_bytes:
-        \result ≡ -1 ∨ (0 ≤ \result ≤ \old(count));
-    assigns __fc_fds[fd], \result;
-    assigns __fc_fds[fd]
-      \from (indirect: fd), (indirect: count), __fc_fds[fd];
-    assigns \result
-      \from (indirect: fd), (indirect: count), (indirect: __fc_fds[fd]);
+/*@ requires valid_buffer: \valid(buffer);
+    assigns \result, *buffer;
+    assigns \result \from __fc_time;
+    assigns *buffer \from __fc_time;
  */
-extern ssize_t write(int fd, void const *buf, size_t count);
+extern clock_t times(struct tms *buffer);
 
-/*@ requires valid_ruid: \valid(ruid);
-    requires valid_euid: \valid(suid);
-    requires valid_suid: \valid(euid);
+/*@ ensures result_ok_or_error: \result ≡ -1 ∨ \result ≥ 0;
     ensures
-      initialization: result_ok_or_error:
-        (\result ≡ 0 ∧ \initialized(\old(ruid)) ∧
-         \initialized(\old(euid)) ∧ \initialized(\old(suid))) ∨
-        \result ≡ -1;
-    assigns *ruid, *euid, *suid, \result;
-    assigns *ruid \from \nothing;
-    assigns *euid \from \nothing;
-    assigns *suid \from \nothing;
-    assigns \result
-      \from (indirect: ruid), (indirect: euid), (indirect: suid);
+      initialization: stat_loc_init_on_success:
+        \result ≥ 0 ∧ \old(stat_loc) ≢ \null ⇒
+        \initialized(\old(stat_loc));
+    assigns \result, *stat_loc;
+    assigns \result \from \nothing;
+    assigns *stat_loc \from \nothing;
+    
+    behavior stat_loc_null:
+      assumes stat_loc_null: stat_loc ≡ \null;
+      assigns \result;
+      assigns \result \from \nothing;
+    
+    behavior stat_loc_non_null:
+      assumes stat_loc_non_null: stat_loc ≢ \null;
+      requires valid_stat_loc: \valid(stat_loc);
  */
-int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid);
+extern pid_t wait(int *stat_loc);
 
-/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result;
-    assigns \result
-      \from (indirect: ruid), (indirect: euid), (indirect: suid);
+/*@ ensures result_ok_or_error: \result ≡ -1 ∨ \result ≥ 0;
+    ensures
+      initialization: stat_loc_init_on_success:
+        \result ≥ 0 ∧ \old(stat_loc) ≢ \null ⇒
+        \initialized(\old(stat_loc));
+    assigns \result, *stat_loc;
+    assigns \result \from (indirect: options);
+    assigns *stat_loc \from (indirect: options);
+    
+    behavior stat_loc_null:
+      assumes stat_loc_null: stat_loc ≡ \null;
+      assigns \result;
+      assigns \result \from \nothing;
+    
+    behavior stat_loc_non_null:
+      assumes stat_loc_non_null: stat_loc ≢ \null;
+      requires valid_stat_loc: \valid(stat_loc);
  */
-int setresuid(uid_t ruid, uid_t euid, uid_t suid);
+extern pid_t waitpid(pid_t pid, int *stat_loc, int options);
 
-/*@ requires valid_rgid: \valid(rgid);
-    requires valid_egid: \valid(sgid);
-    requires valid_sgid: \valid(egid);
-    ensures
-      initialization: result_ok_or_error:
-        (\result ≡ 0 ∧ \initialized(\old(rgid)) ∧
-         \initialized(\old(egid)) ∧ \initialized(\old(sgid))) ∨
-        \result ≡ -1;
-    assigns *rgid, *egid, *sgid, \result;
-    assigns *rgid \from \nothing;
-    assigns *egid \from \nothing;
-    assigns *sgid \from \nothing;
-    assigns \result
-      \from (indirect: rgid), (indirect: egid), (indirect: sgid);
+/*@ requires valid_termios_p: \valid(termios_p);
+    assigns \result, *termios_p, Frama_C_entropy_source;
+    assigns \result \from (indirect: fd), (indirect: Frama_C_entropy_source);
+    assigns *termios_p
+      \from (indirect: fd), (indirect: Frama_C_entropy_source);
+    assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+    
+    behavior ok:
+      assumes nondet: Frama_C_entropy_source ≡ 0;
+      ensures initialization: termios_p: \initialized(\old(termios_p));
+      ensures result_ok: \result ≡ 0;
+    
+    behavior error:
+      assumes nondet: Frama_C_entropy_source ≢ 0;
+      ensures result_error: \result ≡ -1;
+    
+    complete behaviors error, ok;
+    disjoint behaviors error, ok;
  */
-int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid);
+extern int tcgetattr(int fd, struct termios *termios_p);
 
-/*@ ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result;
+/*@ requires valid_termios_p: \valid(termios_p);
+    ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
+    assigns *termios_p, Frama_C_entropy_source, \result;
+    assigns *termios_p
+      \from (indirect: fd), (indirect: optional_actions),
+            (indirect: Frama_C_entropy_source), *termios_p;
+    assigns Frama_C_entropy_source \from Frama_C_entropy_source;
     assigns \result
-      \from (indirect: rgid), (indirect: egid), (indirect: sgid);
+      \from (indirect: fd), (indirect: optional_actions),
+            (indirect: Frama_C_entropy_source), (indirect: *termios_p);
  */
-int setresgid(gid_t rgid, gid_t egid, gid_t sgid);
+extern int tcsetattr(int fd, int optional_actions, struct termios *termios_p);
 
 void main(void)
 {
diff --git a/tests/libc/oracle/fc_libc.3.res.oracle b/tests/libc/oracle/fc_libc.3.res.oracle
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5d4b6982df1e929a36eb1f4f623ad3ca169e8c76 100644
--- a/tests/libc/oracle/fc_libc.3.res.oracle
+++ b/tests/libc/oracle/fc_libc.3.res.oracle
@@ -0,0 +1,5 @@
+[kernel] Parsing tests/libc/fc_libc.c (with preprocessing)
+[kernel] parsing c11_functions.json
+[kernel] parsing glibc_functions.json
+[kernel] parsing posix_identifiers.json
+[kernel] parsing nonstandard_identifiers.json
diff --git a/tests/libc/oracle/fc_libc.4.res.oracle b/tests/libc/oracle/fc_libc.4.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/tests/metrics/oracle/libc.1.res.oracle b/tests/metrics/oracle/libc.1.res.oracle
index 890b92c6ed6f4576aded31faf97765ab72a9cf68..8c8f0e6b9987c0efcc1d96fb117a3d40096d755c 100644
--- a/tests/metrics/oracle/libc.1.res.oracle
+++ b/tests/metrics/oracle/libc.1.res.oracle
@@ -4,31 +4,46 @@
    bar (1 call); f (0 call); foo (1 call); g (address taken) (0 call);
    getopt (1 call); main (0 call); 
   
-  Undefined functions (70)
-  ========================
-   clearerr (0 call); clearerr_unlocked (0 call); fclose (0 call);
-   fdopen (0 call); feof (0 call); feof_unlocked (0 call); ferror (0 call);
-   ferror_unlocked (0 call); fflush (0 call); fgetc (0 call); fgetpos (0 call);
-   fgets (0 call); fileno (0 call); fileno_unlocked (0 call);
-   flockfile (0 call); fopen (0 call); fputc (0 call); fputs (0 call);
+  Undefined functions (120)
+  =========================
+   _exit (0 call); access (0 call); chdir (0 call); chown (0 call);
+   chroot (0 call); clearerr (0 call); clearerr_unlocked (0 call);
+   close (0 call); dup (0 call); dup2 (0 call); execl (0 call);
+   execle (0 call); execlp (0 call); execv (0 call); execve (0 call);
+   execvp (0 call); fclose (0 call); fdopen (0 call); feof (0 call);
+   feof_unlocked (0 call); ferror (0 call); ferror_unlocked (0 call);
+   fflush (0 call); fgetc (0 call); fgetpos (0 call); fgets (0 call);
+   fileno (0 call); fileno_unlocked (0 call); flockfile (0 call);
+   fopen (0 call); fork (0 call); fputc (0 call); fputs (0 call);
    fread (0 call); freopen (0 call); fseek (0 call); fsetpos (0 call);
    ftell (0 call); ftrylockfile (0 call); funlockfile (0 call);
    fwrite (0 call); getc (0 call); getc_unlocked (0 call); getchar (1 call);
-   getchar_unlocked (0 call); getopt_long (0 call); getopt_long_only (0 call);
-   gets (0 call); isalnum (0 call); isalpha (1 call); isascii (0 call);
+   getchar_unlocked (0 call); getcwd (0 call); getegid (0 call);
+   geteuid (0 call); getgid (0 call); gethostname (0 call);
+   getopt_long (0 call); getopt_long_only (0 call); getpgid (0 call);
+   getpgrp (0 call); getpid (0 call); getppid (0 call); getresgid (0 call);
+   getresuid (0 call); gets (0 call); getsid (0 call); getuid (0 call);
+   isalnum (0 call); isalpha (1 call); isascii (0 call); isatty (0 call);
    isblank (1 call); iscntrl (0 call); isdigit (0 call); isgraph (0 call);
    islower (0 call); isprint (0 call); ispunct (0 call); isspace (0 call);
-   isupper (0 call); isxdigit (0 call); pclose (0 call); perror (0 call);
-   popen (0 call); putc (0 call); putc_unlocked (0 call); putchar (0 call);
-   putchar_unlocked (0 call); puts (0 call); remove (0 call); rename (0 call);
-   rewind (0 call); setbuf (0 call); setvbuf (0 call); tmpfile (0 call);
-   tmpnam (0 call); tolower (0 call); toupper (0 call); ungetc (0 call);
-   vfprintf (0 call); vfscanf (0 call); vprintf (0 call); vscanf (0 call);
-   vsnprintf (0 call); vsprintf (0 call); 
+   isupper (0 call); isxdigit (0 call); lseek (0 call); pathconf (0 call);
+   pclose (0 call); perror (0 call); pipe (0 call); popen (0 call);
+   putc (0 call); putc_unlocked (0 call); putchar (0 call);
+   putchar_unlocked (0 call); puts (0 call); read (0 call); remove (0 call);
+   rename (0 call); rewind (0 call); setbuf (0 call); setegid (0 call);
+   seteuid (0 call); setgid (0 call); sethostname (0 call); setpgid (0 call);
+   setregid (0 call); setresgid (0 call); setresuid (0 call);
+   setreuid (0 call); setsid (0 call); setuid (0 call); setvbuf (0 call);
+   sync (0 call); sysconf (0 call); tmpfile (0 call); tmpnam (0 call);
+   tolower (0 call); toupper (0 call); ttyname (0 call); ungetc (0 call);
+   unlink (0 call); usleep (0 call); vfprintf (0 call); vfscanf (0 call);
+   vprintf (0 call); vscanf (0 call); vsnprintf (0 call); vsprintf (0 call);
+   write (0 call); 
   
-  'Extern' global variables (7)
-  =============================
-   __fc_errno; __fc_stdin; __fc_stdout; optarg; opterr; optind; optopt
+  'Extern' global variables (10)
+  ==============================
+   Frama_C_entropy_source; __fc_errno; __fc_hostname; __fc_stdin; __fc_stdout;
+   __fc_ttyname; optarg; opterr; optind; optopt
   
   Potential entry points (2)
   ==========================
@@ -38,13 +53,13 @@
   ============== 
   Sloc = 17
   Decision point = 0
-  Global variables = 10
+  Global variables = 15
   If = 0
   Loop = 0
   Goto = 0
   Assignment = 8
   Exit point = 6
-  Function = 76
+  Function = 126
   Function call = 7
   Pointer dereferencing = 1
   Cyclomatic complexity = 6
@@ -72,7 +87,7 @@
   ----------------------------------------------------------------------------
 [metrics] Eva coverage statistics
   =======================
-  Syntactically reachable functions = 7 (out of 76)
+  Syntactically reachable functions = 7 (out of 126)
   Semantically reached functions = 7
   Coverage estimation = 100.0%
 [metrics] References to non-analyzed functions
diff --git a/tests/spec/clash_double_file_bts1598.c b/tests/spec/clash_double_file_bts1598.c
index ca549981a5bf117bea05f296554329ef7ebe4e0d..b30f925efab799c5b1c0a2e6306285564e878cac 100644
--- a/tests/spec/clash_double_file_bts1598.c
+++ b/tests/spec/clash_double_file_bts1598.c
@@ -11,7 +11,7 @@ OPT: @PTEST_FILE@ -cpp-extra-args " -Ishare/libc -nostdinc" -print -then -ocode
 #include "errno.h"
 //#include "fenv.h"
 #include "float.h"
-#include "getopt.h"
+//#include "getopt.h"
 #include "inttypes.h"
 #include "iso646.h"
 #include "limits.h"
diff --git a/tests/spec/oracle/clash_double_file_bts1598.res.oracle b/tests/spec/oracle/clash_double_file_bts1598.res.oracle
index 0d80a00c1cdb044b88426c7bb655da8ae430b220..2728223ed5ea566f5b7b4c38f505e9c1c973a741 100644
--- a/tests/spec/oracle/clash_double_file_bts1598.res.oracle
+++ b/tests/spec/oracle/clash_double_file_bts1598.res.oracle
@@ -4,7 +4,6 @@
 #include "assert.h"
 #include "ctype.h"
 #include "errno.h"
-#include "getopt.h"
 #include "inttypes.h"
 #include "locale.h"
 #include "math.h"
@@ -26,7 +25,6 @@
 #include "assert.h"
 #include "ctype.h"
 #include "errno.h"
-#include "getopt.h"
 #include "inttypes.h"
 #include "locale.h"
 #include "math.h"