From 1ca30cdd84d0882a655ff23fcf8192bfb78e7eb2 Mon Sep 17 00:00:00 2001
From: Virgile Prevosto <virgile.prevosto@m4x.org>
Date: Tue, 21 Mar 2023 16:46:26 +0100
Subject: [PATCH] [machdep] suppress custom machdep as OCaml module; only YAML
 input supported

---
 src/kernel_services/ast_queries/file.ml       |  48 +---
 src/kernel_services/ast_queries/file.mli      |  15 +-
 tests/misc/custom_machdep.c                   |  10 +-
 tests/misc/custom_machdep.ml                  | 105 --------
 .../misc/custom_machdep/__fc_machdep_custom.h | 243 ------------------
 tests/misc/dune                               |   3 -
 tests/misc/oracle/custom_machdep.0.res.oracle |  30 ---
 ...1.res.oracle => custom_machdep.res.oracle} |   0
 tests/syntax/char_is_unsigned.i               |   3 +-
 tests/syntax/machdep_char_unsigned.yaml       | 183 +++++++++++++
 10 files changed, 201 insertions(+), 439 deletions(-)
 delete mode 100644 tests/misc/custom_machdep.ml
 delete mode 100644 tests/misc/custom_machdep/__fc_machdep_custom.h
 delete mode 100644 tests/misc/dune
 delete mode 100644 tests/misc/oracle/custom_machdep.0.res.oracle
 rename tests/misc/oracle/{custom_machdep.1.res.oracle => custom_machdep.res.oracle} (100%)
 create mode 100644 tests/syntax/machdep_char_unsigned.yaml

diff --git a/src/kernel_services/ast_queries/file.ml b/src/kernel_services/ast_queries/file.ml
index ed44394dbb5..a8de4fc074a 100644
--- a/src/kernel_services/ast_queries/file.ml
+++ b/src/kernel_services/ast_queries/file.ml
@@ -270,14 +270,6 @@ let print_machdep fmt (m : Cil_types.mach) =
       (if m.has__builtin_va_list then "has" else "has not") ;
   end
 
-module CustomMachdeps =
-  State_builder.Hashtbl(Datatype.String.Hashtbl)(Cil_datatype.Machdep)
-    (struct
-      let name = " File.CustomMachdeps"
-      let size = 5
-      let dependencies = []
-    end)
-
 let machdep_dir () = Kernel.Share.get_dir ~mode:`Must_exist "machdeps"
 
 let regexp_machdep = Str.regexp "^machdep_\\([^.]*\\).yaml$"
@@ -289,16 +281,7 @@ let default_machdep_file machdep =
 let is_default_machdep machdep =
   Filepath.Normalized.is_file (default_machdep_file machdep)
 
-let mem_machdep s =
-  CustomMachdeps.mem s || is_default_machdep s || Sys.file_exists s
-
-let new_machdep s m =
-  try
-    let cm = CustomMachdeps.find s in
-    if not (cm = m) then
-      Kernel.abort "trying to register incompatible machdeps under name `%s'" s
-  with Not_found ->
-    CustomMachdeps.add s m
+let mem_machdep s = is_default_machdep s || Sys.file_exists s
 
 let default_machdeps () =
   Array.fold_right
@@ -310,7 +293,6 @@ let default_machdeps () =
     []
 
 let pretty_machdeps fmt =
-  CustomMachdeps.iter (fun x _ -> Format.fprintf fmt "@ %s" x);
   List.iter (fun s -> Format.fprintf fmt "@ %s" s) (default_machdeps())
 
 let machdep_help () =
@@ -415,22 +397,19 @@ type mach = Cil_types.mach = {
 (* Local to this module. Use Cil.theMachine.theMachine outside *)
 let get_machdep () =
   let m = Kernel.Machdep.get () in
-  try
-    CustomMachdeps.find m
-  with Not_found ->
-    let file =
-      if is_default_machdep m then default_machdep_file m
-      else Filepath.Normalized.of_string ~existence:Must_exist m
-    in
-    let res =
-      Result.bind
-        (Yaml_unix.of_file (Fpath.v (file:>string)))
-        mach_of_yaml
-    in
-    match res with
+  let file =
+    if is_default_machdep m then default_machdep_file m
+    else Filepath.Normalized.of_string ~existence:Must_exist m
+  in
+  let res =
+    Result.bind
+      (Yaml_unix.of_file (Fpath.v (file:>string)))
+      mach_of_yaml
+  in
+  match res with
     | Ok machdep -> machdep
     | Error (`Msg s) ->
-      Kernel.fatal "Error during machdep parsing: %s" s
+        Kernel.fatal "Error during machdep parsing: %s" s
 
 let print_machdep_header () =
   if Kernel.PrintMachdepHeader.get () then begin
@@ -440,8 +419,7 @@ let print_machdep_header () =
 
 let () = Cmdline.run_after_exiting_stage print_machdep_header
 
-let list_available_machdeps () =
-  CustomMachdeps.fold (fun m _ acc -> m :: acc) (default_machdeps ())
+let list_available_machdeps = default_machdeps
 
 let pretty_machdep ?fmt ?machdep () =
   let machine = match machdep with None -> get_machdep () | Some m -> m in
diff --git a/src/kernel_services/ast_queries/file.mli b/src/kernel_services/ast_queries/file.mli
index 7ae56456144..b0da114f710 100644
--- a/src/kernel_services/ast_queries/file.mli
+++ b/src/kernel_services/ast_queries/file.mli
@@ -53,20 +53,11 @@ val new_file_type:
     @see <https://frama-c.com/download/frama-c-plugin-development-guide.pdf> Plug-in Development Guide
 *)
 
-val new_machdep: string -> Cil_types.mach -> unit
-(** [new_machdep name module] registers a new machdep name as recognized by
-    Frama-C through The usual uses is
-    [Cmdline.run_after_loading_stage
-      (fun () -> File.new_machdep "my_machdep" my_machdep_implem)]
-    @since Nitrogen-20111001
-    @raise Invalid_argument if the given name already exists
-    @see <https://frama-c.com/download/frama-c-plugin-development-guide.pdf> Plug-in Development Guide *)
-
 val list_available_machdeps: unit -> string list
 (** [list_available_machdeps ()] gives the list of the names of available
-    machdeps, starting with the ones added with new_machdep and ending with
-    the list of default machdeps.
-    @since 22.0-Titanium *)
+    machdeps in Frama-C's share path
+    @since 22.0-Titanium
+*)
 
 type code_transformation_category
 (** type of registered code transformations
diff --git a/tests/misc/custom_machdep.c b/tests/misc/custom_machdep.c
index 9e4443c8886..1152d590191 100644
--- a/tests/misc/custom_machdep.c
+++ b/tests/misc/custom_machdep.c
@@ -1,13 +1,5 @@
 /* run.config*
- EXIT: 1
- MODULE: @PTEST_NAME@.cmxs
- DEPS: @PTEST_NAME@/__fc_machdep_custom.h
-   OPT: -cpp-extra-args="-I./@PTEST_NAME@ -D__FC_MACHDEP_CUSTOM" -machdep custom -print -then -print
-  COMMENT: we need a -then to test double registering of a machdep
- EXIT: 0
- MODULE:
- DEPS: @PTEST_NAME@/__fc_machdep_custom.h
-   OPT: -cpp-extra-args="-I./@PTEST_NAME@ -D__FC_MACHDEP_CUSTOM" -machdep %{dep:@PTEST_DIR@/@PTEST_NAME@.yaml} -print
+ OPT: -machdep %{dep:@PTEST_DIR@/@PTEST_NAME@.yaml} -print
 */
 // most of the following includes are not directly used, but they test if
 // the custom machdep has defined the necessary constants
diff --git a/tests/misc/custom_machdep.ml b/tests/misc/custom_machdep.ml
deleted file mode 100644
index f6431f1f5a5..00000000000
--- a/tests/misc/custom_machdep.ml
+++ /dev/null
@@ -1,105 +0,0 @@
-open Cil_types
-
-let mach =
-  {
-    version          = "foo";
-    compiler         = "bar";
-    cpp_arch_flags   = [];
-    sizeof_short     = 2;
-    sizeof_int       = 3;
-    sizeof_long      = 4;
-    sizeof_longlong  = 8;
-    sizeof_ptr       = 4;
-    sizeof_float     = 4;
-    sizeof_double    = 8;
-    sizeof_longdouble  = 12;
-    sizeof_void      = 1;
-    sizeof_fun       = 1;
-    size_t = "unsigned long";
-    ssize_t = "long";
-    intptr_t = "long";
-    uintptr_t = "unsigned long";
-    int_fast8_t = "signed char";
-    int_fast16_t = "long";
-    int_fast32_t = "long";
-    int_fast64_t = "long long";
-    uint_fast8_t = "unsigned char";
-    uint_fast16_t = "unsigned long";
-    uint_fast32_t = "unsigned long";
-    uint_fast64_t = "unsigned long long";
-    wint_t = "int";
-    wchar_t = "int";
-    ptrdiff_t = "int";
-    sig_atomic_t = "int";
-    time_t = "long";
-    alignof_short = 2;
-    alignof_int = 3;
-    alignof_long = 4;
-    alignof_longlong = 4;
-    alignof_ptr = 4;
-    alignof_float = 4;
-    alignof_double = 4;
-    alignof_longdouble = 4;
-    alignof_str = 1;
-    alignof_fun = 1;
-    alignof_aligned= 16;
-    char_is_unsigned = false;
-    little_endian = true;
-    has__builtin_va_list = true;
-    weof = "(-1)";
-    wordsize = "24";
-    posix_version = "200809L";
-    bufsiz = "255";
-    eof = "(-1)";
-    fopen_max = "128";
-    filename_max = "1023";
-    path_max = "256";
-    tty_name_max = "255";
-    host_name_max = "255";
-    l_tmpnam = "255";
-    tmp_max = "4095";
-    rand_max = "0xFFFFFFFE";
-    mb_cur_max = "16";
-    nsig = "";
-    errno = [
-      "edom", "33";
-      "eilseq", "84";
-      "erange", "34";
-      "eintr", "35";
-      "eagain", "36";
-      "ebadf", "37";
-      "efbig", "38";
-      "einval", "39";
-      "eio", "40";
-      "enospc", "41";
-      "eoverflow", "42";
-      "epipe", "43";
-      "espipe", "44";
-      "enxio", "45";
-      "emfile", "46";
-      "enomem", "47";
-      "enotsup", "48";
-    ];
-    machdep_name = "custom_machdep";
-    custom_defs = "#define CUSTOM_MACHDEP 1\n";
-  }
-
-let mach2 = { mach with compiler = "baz" }
-
-(* First run : register [mach] under name [custom].
-   Second run :
-   - register [mach] under name [custom] again. This must work.
-   - then register [mach2] under name [custom]. This must result in an error.
-*)
-let () =
-  let ran = ref false in
-  Cmdline.run_after_loading_stage
-    (fun () ->
-       Kernel.result "Registering machdep 'mach' as 'custom'";
-       File.new_machdep "custom" mach;
-       if !ran then begin
-         Kernel.result "Trying to register machdep 'mach2' as 'custom'";
-         File.new_machdep "custom" mach2
-       end
-       else ran := true
-    )
diff --git a/tests/misc/custom_machdep/__fc_machdep_custom.h b/tests/misc/custom_machdep/__fc_machdep_custom.h
deleted file mode 100644
index 27db3084033..00000000000
--- a/tests/misc/custom_machdep/__fc_machdep_custom.h
+++ /dev/null
@@ -1,243 +0,0 @@
-/* skeleton of a real custom machdep header.
-   Note: the values provided here are merely for illustrative purposes
-         and are not necessarily consistent between them. */
-#ifndef __FC_MACHDEP
-#define __FC_MACHDEP
-
-#ifdef __FC_MACHDEP_CUSTOM
-
-/* Constants required by the C standard */
-#undef  __CHAR_UNSIGNED__
-#define __WORDSIZE 32
-#define __SIZEOF_SHORT 2
-#define __SIZEOF_INT 3
-#define __SIZEOF_LONG 4
-#define __SIZEOF_LONGLONG 8
-#define __CHAR_BIT 8
-#define __PTRDIFF_T int
-#define __SIZE_T unsigned int
-
-#define __FC_SCHAR_MIN (-128)
-#define __FC_SCHAR_MAX 127
-#define __FC_UCHAR_MAX 255
-#define __FC_SHRT_MIN (-32768)
-#define __FC_SHRT_MAX 32767
-#define __FC_USHRT_MAX 65535
-#define __FC_INT_MIN (-2147483647 - 1)
-#define __FC_INT_MAX 2147483647
-#define __FC_UINT_MAX 4294967295U
-#define __FC_LONG_MIN (-2147483647L -1L)
-#define __FC_LONG_MAX 2147483647L
-#define __FC_ULONG_MAX 4294967295UL
-#define __FC_LLONG_MIN (-9223372036854775807LL -1LL)
-#define __FC_LLONG_MAX 9223372036854775807LL
-#define __FC_ULLONG_MAX 18446744073709551615ULL
-
-#define __INT_MAX_T signed long long
-#define __UINT_MAX_T unsigned long long
-
-#define __FC_PATH_MAX 256
-#define __FC_SIZE_MAX __FC_ULLONG_MAX
-
-/* Optional constants */
-#define __INT8_T signed char
-#define __UINT8_T unsigned char
-#define __INT16_T signed short
-#define __UINT16_T unsigned short
-
-#define __INTPTR_T signed long
-#define __UINTPTR_T unsigned long
-#define __INT32_T signed long
-#define __UINT32_T unsigned long
-#define __INT64_T signed long long
-#define __UINT64_T unsigned long long
-
-/* Required constants */
-#define __INT_LEAST8_T signed char
-#define __UINT_LEAST8_T unsigned char
-#define __INT_LEAST16_T signed short
-#define __UINT_LEAST16_T unsigned short
-#define __INT_LEAST32_T signed long
-#define __UINT_LEAST32_T unsigned long
-#define __INT_LEAST64_T signed long long
-#define __UINT_LEAST64_T unsigned long long
-
-#define __INT_FAST8_T signed char
-#define __UINT_FAST8_T unsigned char
-#define __INT_FAST16_T signed int
-#define __UINT_FAST16_T unsigned int
-#define __INT_FAST32_T signed long
-#define __UINT_FAST32_T unsigned long
-#define __INT_FAST64_T signed long long
-#define __UINT_FAST64_T unsigned long long
-
-
-/* POSIX */
-#define __SSIZE_T int
-/* stdio.h */
-#define __FC_L_tmpnam 1024
-/* stdint.h */
-#define __FC_PTRDIFF_MIN __FC_INT_MIN
-#define __FC_PTRDIFF_MAX __FC_INT_MAX
-#define __FC_INTMAX_MIN (-9223372036854775807LL -1LL)
-#define __FC_INTMAX_MAX 9223372036854775807LL
-#define __FC_UINTMAX_MAX 18446744073709551615ULL
-
-#define __FC_EOF (-1)
-#define __FC_FOPEN_MAX 20
-#define __FC_RAND_MAX 32767
-#define __WCHAR_T unsigned short
-
-/* for stdarg.h */
-#define __FC_VA_LIST_T char*
-
-/* for time.h */
-#define __FC_TIME_T long
-
-/* for wchar.h */
-#define __WINT_T unsigned int
-#define __FC_WEOF (0xFFFFFFFFU)
-#define __FC_WINT_MIN 0
-#define __FC_WINT_MAX __FC_UINT_MAX
-
-/* for errno.h */
-
-#define __FC_EPERM 1
-#define __FC_ENOENT 2
-#define __FC_ESRCH 3
-#define __FC_EINTR 4
-#define __FC_EIO 5
-#define __FC_ENXIO 6
-#define __FC_E2BIG 7
-#define __FC_ENOEXEC 8
-#define __FC_EBADF 9
-#define __FC_ECHILD 10
-#define __FC_EAGAIN 11
-#define __FC_ENOMEM 12
-#define __FC_EACCES 13
-#define __FC_EFAULT 14
-#define __FC_ENOTBLK 15
-#define __FC_EBUSY 16
-#define __FC_EEXIST 17
-#define __FC_EXDEV 18
-#define __FC_ENODEV 19
-#define __FC_ENOTDIR 20
-#define __FC_EISDIR 21
-#define __FC_EINVAL 22
-#define __FC_ENFILE 23
-#define __FC_EMFILE 24
-#define __FC_ENOTTY 25
-#define __FC_ETXTBSY 26
-#define __FC_EFBIG 27
-#define __FC_ENOSPC 28
-#define __FC_ESPIPE 29
-#define __FC_EROFS 30
-#define __FC_EMLINK 31
-#define __FC_EPIPE 32
-#define __FC_EDOM 33
-#define __FC_ERANGE 34
-#define __FC_EDEADLK 35
-#define __FC_ENAMETOOLONG 36
-#define __FC_ENOLCK 37
-#define __FC_ENOSYS 38
-#define __FC_ENOTEMPTY 39
-#define __FC_ELOOP 40
-#define __FC_EWOULDBLOCK EAGAIN
-#define __FC_ENOMSG 42
-#define __FC_EIDRM 43
-#define __FC_ECHRNG 44
-#define __FC_EL2NSYNC 45
-#define __FC_EL3HLT 46
-#define __FC_EL3RST 47
-#define __FC_ELNRNG 48
-#define __FC_EUNATCH 49
-#define __FC_ENOCSI 50
-#define __FC_EL2HLT 51
-#define __FC_EBADE 52
-#define __FC_EBADR 53
-#define __FC_EXFULL 54
-#define __FC_ENOANO 55
-#define __FC_EBADRQC 56
-#define __FC_EBADSLT 57
-#define __FC_EDEADLOCK EDEADLK
-#define __FC_EBFONT 59
-#define __FC_ENOSTR 60
-#define __FC_ENODATA 61
-#define __FC_ETIME 62
-#define __FC_ENOSR 63
-#define __FC_ENONET 64
-#define __FC_ENOPKG 65
-#define __FC_EREMOTE 66
-#define __FC_ENOLINK 67
-#define __FC_EADV 68
-#define __FC_ESRMNT 69
-#define __FC_ECOMM 70
-#define __FC_EPROTO 71
-#define __FC_EMULTIHOP 72
-#define __FC_EDOTDOT 73
-#define __FC_EBADMSG 74
-#define __FC_EOVERFLOW 75
-#define __FC_ENOTUNIQ 76
-#define __FC_EBADFD 77
-#define __FC_EREMCHG 78
-#define __FC_ELIBACC 79
-#define __FC_ELIBBAD 80
-#define __FC_ELIBSCN 81
-#define __FC_ELIBMAX 82
-#define __FC_ELIBEXEC 83
-#define __FC_EILSEQ 84
-#define __FC_ERESTART 85
-#define __FC_ESTRPIPE 86
-#define __FC_EUSERS 87
-#define __FC_ENOTSOCK 88
-#define __FC_EDESTADDRREQ 89
-#define __FC_EMSGSIZE 90
-#define __FC_EPROTOTYPE 91
-#define __FC_ENOPROTOOPT 92
-#define __FC_EPROTONOSUPPORT 93
-#define __FC_ESOCKTNOSUPPORT 94
-#define __FC_ENOTSUP 95
-#define __FC_EOPNOTSUPP 95
-#define __FC_EPFNOSUPPORT 96
-#define __FC_EAFNOSUPPORT 97
-#define __FC_EADDRINUSE 98
-#define __FC_EADDRNOTAVAIL 99
-#define __FC_ENETDOWN 100
-#define __FC_ENETUNREACH 101
-#define __FC_ENETRESET 102
-#define __FC_ECONNABORTED 103
-#define __FC_ECONNRESET 104
-#define __FC_ENOBUFS 105
-#define __FC_EISCONN 106
-#define __FC_ENOTCONN 107
-#define __FC_ESHUTDOWN 108
-#define __FC_ETOOMANYREFS 109
-#define __FC_ETIMEDOUT 110
-#define __FC_ECONNREFUSED 111
-#define __FC_EHOSTDOWN 112
-#define __FC_EHOSTUNREACH 113
-#define __FC_EALREADY 114
-#define __FC_EINPROGRESS 115
-#define __FC_ESTALE 116
-#define __FC_EUCLEAN 117
-#define __FC_ENOTNAM 118
-#define __FC_ENAVAIL 119
-#define __FC_EISNAM 120
-#define __FC_EREMOTEIO 121
-#define __FC_EDQUOT 122
-#define __FC_ENOMEDIUM 123
-#define __FC_EMEDIUMTYPE 124
-#define __FC_ECANCELED 125
-#define __FC_ENOKEY 126
-#define __FC_EKEYEXPIRED 127
-#define __FC_EKEYREVOKED 128
-#define __FC_EKEYREJECTED 129
-#define __FC_EOWNERDEAD 130
-#define __FC_ENOTRECOVERABLE 131
-#define __FC_ERFKILL 132
-#define __FC_EHWPOISON 133
-
-#else
-  error "I'm supposed to be called with __FC_MACHDEP_CUSTOM macro defined"
-#endif
-#endif
diff --git a/tests/misc/dune b/tests/misc/dune
deleted file mode 100644
index 350ae7160b3..00000000000
--- a/tests/misc/dune
+++ /dev/null
@@ -1,3 +0,0 @@
-(subdir
- result/custom_machdep
- (copy_files ../../custom_machdep/*))
diff --git a/tests/misc/oracle/custom_machdep.0.res.oracle b/tests/misc/oracle/custom_machdep.0.res.oracle
deleted file mode 100644
index 5ef336d10b9..00000000000
--- a/tests/misc/oracle/custom_machdep.0.res.oracle
+++ /dev/null
@@ -1,30 +0,0 @@
-[kernel] Registering machdep 'mach' as 'custom'
-[kernel] Parsing custom_machdep.c (with preprocessing)
-/* Generated by Frama-C */
-#include "ctype.h"
-#include "errno.h"
-#include "inttypes.h"
-#include "locale.h"
-#include "math.h"
-#include "signal.h"
-#include "stdarg.h"
-#include "stddef.h"
-#include "stdint.h"
-#include "stdio.h"
-#include "stdlib.h"
-#include "string.h"
-#include "strings.h"
-#include "time.h"
-#include "wchar.h"
-int main(void)
-{
-  int __retres;
-  __retres = 8388607 - 1;
-  return __retres;
-}
-
-
-[kernel] Registering machdep 'mach' as 'custom'
-[kernel] Trying to register machdep 'mach2' as 'custom'
-[kernel] User Error: trying to register incompatible machdeps under name `custom'
-[kernel] Frama-C aborted: invalid user input.
diff --git a/tests/misc/oracle/custom_machdep.1.res.oracle b/tests/misc/oracle/custom_machdep.res.oracle
similarity index 100%
rename from tests/misc/oracle/custom_machdep.1.res.oracle
rename to tests/misc/oracle/custom_machdep.res.oracle
diff --git a/tests/syntax/char_is_unsigned.i b/tests/syntax/char_is_unsigned.i
index 02a2088fef3..e5a954b1ed0 100644
--- a/tests/syntax/char_is_unsigned.i
+++ b/tests/syntax/char_is_unsigned.i
@@ -1,7 +1,6 @@
 /* run.config
 PLUGIN: rtegen
- MODULE: machdep_char_unsigned
-   OPT: -print -machdep unsigned_char -then -constfold -rte
+   OPT: -print -machdep %{dep:@PTEST_DIR@/machdep_char_unsigned.yaml} -then -constfold -rte
 */
 char t[10];
 
diff --git a/tests/syntax/machdep_char_unsigned.yaml b/tests/syntax/machdep_char_unsigned.yaml
new file mode 100644
index 00000000000..cb4fbd6b6c6
--- /dev/null
+++ b/tests/syntax/machdep_char_unsigned.yaml
@@ -0,0 +1,183 @@
+alignof_aligned: 0
+alignof_short: 2
+compiler: gcc
+version: 'N/A'
+cpp_arch_flags:
+- -m32
+sizeof_short: 2
+sizeof_int: 2
+sizeof_long: 4
+sizeof_longlong: 8
+sizeof_ptr: 4
+sizeof_float: 4
+sizeof_double: 8
+sizeof_longdouble: 8
+sizeof_void: -1
+sizeof_fun: 0
+alignof_int: 2
+alignof_long: 2
+alignof_longlong: 2
+alignof_ptr: 2
+alignof_float: 2
+alignof_double: 2
+alignof_longdouble: 2
+alignof_str: 0
+alignof_fun: 0
+char_is_unsigned: true
+little_endian: true
+size_t: 'unsigned int'
+ssize_t: 'int'
+wchar_t: 'int'
+intptr_t: 'int'
+uintptr_t: 'unsigned int'
+int_fast8_t: 'signed char'
+int_fast16_t: 'long'
+int_fast32_t: 'long'
+int_fast64_t: 'long'
+uint_fast8_t: 'unsigned char'
+uint_fast16_t: 'unsigned long'
+uint_fast32_t: 'unsigned long'
+uint_fast64_t: 'unsigned long'
+ptrdiff_t: 'int'
+wint_t: 'long'
+sig_atomic_t: 'int'
+time_t: 'long'
+has__builtin_va_list: true
+weof: '(-1L)'
+wordsize: '16'
+posix_version: ''
+bufsiz: '8192'
+eof: '(-1)'
+fopen_max: '16'
+host_name_max: '255'
+tty_name_max: '255'
+path_max: '255'
+filename_max: '2048'
+l_tmpnam: '2048'
+tmp_max: '0xFFFFFFFF'
+rand_max: '0xFFFFFFFE'
+mb_cur_max: '16'
+nsig: '64'
+errno:
+    e2big: '7'
+    eacces: '13'
+    eaddrinuse: '98'
+    eaddrnotavail: '99'
+    eafnosupport: '97'
+    eagain: '11'
+    ealready: '114'
+    ebade: '52'
+    ebadf: '9'
+    ebadfd: '77'
+    ebadmsg: '74'
+    ebadr: '53'
+    ebadrqc: '56'
+    ebadslt: '57'
+    ebusy: '16'
+    ecanceled: '125'
+    echild: '10'
+    echrng: '44'
+    ecomm: '70'
+    econnaborted: '103'
+    econnrefused: '111'
+    econnreset: '104'
+    edeadlk: '35'
+    edeadlock: '35'
+    edestaddrreq: '89'
+    edom: '33'
+    edquot: '122'
+    eexist: '17'
+    efault: '14'
+    efbig: '27'
+    ehostdown: '112'
+    ehostunreach: '113'
+    eidrm: '43'
+    eilseq: '84'
+    einprogress: '115'
+    eintr: '4'
+    einval: '22'
+    eio: '5'
+    eisconn: '106'
+    eisdir: '21'
+    eisnam: '120'
+    ekeyexpired: '127'
+    ekeyrejected: '129'
+    ekeyrevoked: '128'
+    el2hlt: '51'
+    el2nsync: '45'
+    el3hlt: '46'
+    el3rst: '47'
+    elibacc: '79'
+    elibbad: '80'
+    elibexec: '83'
+    elibmax: '82'
+    elibscn: '81'
+    eloop: '40'
+    emediumtype: '124'
+    emfile: '24'
+    emlink: '31'
+    emsgsize: '90'
+    emultihop: '72'
+    enametoolong: '36'
+    enetdown: '100'
+    enetreset: '102'
+    enetunreach: '101'
+    enfile: '23'
+    enobufs: '105'
+    enodata: '61'
+    enodev: '19'
+    enoent: '2'
+    enoexec: '8'
+    enokey: '126'
+    enolck: '37'
+    enolink: '67'
+    enomedium: '123'
+    enomem: '12'
+    enomsg: '42'
+    enonet: '64'
+    enopkg: '65'
+    enoprotoopt: '92'
+    enospc: '28'
+    enosr: '63'
+    enostr: '60'
+    enosys: '38'
+    enotblk: '15'
+    enotconn: '107'
+    enotdir: '20'
+    enotempty: '39'
+    enotsock: '88'
+    enotsup: '95'
+    enotty: '25'
+    enotuniq: '76'
+    enxio: '6'
+    eopnotsupp: '95'
+    eoverflow: '75'
+    eperm: '1'
+    epfnosupport: '96'
+    epipe: '32'
+    eproto: '71'
+    eprotonosupport: '93'
+    eprototype: '91'
+    erange: '34'
+    eremchg: '78'
+    eremote: '66'
+    eremoteio: '121'
+    erestart: '85'
+    erofs: '30'
+    eshutdown: '108'
+    esocktnosupport: '94'
+    espipe: '29'
+    esrch: '3'
+    estale: '116'
+    estrpipe: '86'
+    etime: '62'
+    etimedout: '110'
+    etxtbsy: '26'
+    euclean: '117'
+    eunatch: '49'
+    eusers: '87'
+    ewouldblock: '11'
+    exdev: '18'
+    exfull: '54'
+machdep_name: 'machdep_char_unsigned'
+custom_defs: ''
-- 
GitLab