diff --git a/share/libc/fcntl.h b/share/libc/fcntl.h
index a8ea0805a836b296e62470cef64a96765cbf825e..5a48a56000820e2a52846ef138ae85bbdcd42c35 100644
--- a/share/libc/fcntl.h
+++ b/share/libc/fcntl.h
@@ -93,6 +93,10 @@ __PUSH_FC_STDLIB
 #define POSIX_FADV_SEQUENTIAL 2
 #define POSIX_FADV_WILLNEED 3
 
+// Non-POSIX, but used in some code
+#define O_BINARY 0
+#define O_TEXT 0
+
 __BEGIN_DECLS
 
 struct flock
diff --git a/share/libc/sys/stat.h b/share/libc/sys/stat.h
index 84cb183263707d83fee1afe745ac2e60dfd84fcb..190c944be8249e58ea6a2fd5d15f9e330fc04f0c 100644
--- a/share/libc/sys/stat.h
+++ b/share/libc/sys/stat.h
@@ -30,8 +30,11 @@ __BEGIN_DECLS
 #include "../__fc_string_axiomatic.h"
 
 extern int    chmod(const char *, mode_t);
+extern int    fchmodat(int fd, const char *path, mode_t mode, int flag);
 extern int    fchmod(int, mode_t);
 extern int    fstat(int, struct stat *);
+extern int    fstatat(int fd, const char *restrict path,
+                      struct stat *restrict buf, int flag);
 
 /*@ // missing: may assign to errno: EACCES, ELOOP, ENAMETOOLONG,
     //                               ENOENT, ENOMEM, ENOTDIR, EOVERFLOW,
@@ -96,6 +99,11 @@ extern int    stat(const char *pathname, struct stat *buf);
 */
 extern mode_t umask(mode_t cmask);
 
+#define S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode)
+#define S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode)
+#define S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode)
+#define S_TYPEISTMO(buf) (0)
+
 __END_DECLS
 __POP_FC_STDLIB
 #endif
diff --git a/share/libc/unistd.h b/share/libc/unistd.h
index 301ce7d5e4b7e692c54b054ec569f03bd4fc3735..c0c279864ed3d9f96f2e2da5b868b321a617a4ab 100644
--- a/share/libc/unistd.h
+++ b/share/libc/unistd.h
@@ -848,6 +848,8 @@ extern int          execvp(const char *path, char *const argv[]);
 extern void         _exit(int) __attribute__ ((__noreturn__));
 
 extern int          fchown(int, uid_t, gid_t);
+extern int          fchownat(int fd, const char *path, uid_t owner,
+                             gid_t group, int flag);
 extern int          fchdir(int);
 extern int          fdatasync(int);
 
diff --git a/src/plugins/e-acsl/tests/format/oracle_ci/fprintf.res.oracle b/src/plugins/e-acsl/tests/format/oracle_ci/fprintf.res.oracle
index 15a3701b3deadcec12c418afc3a1459384d144cd..8055b166f1295a7a1004ae0ba7df2c92705ac7ff 100644
--- a/src/plugins/e-acsl/tests/format/oracle_ci/fprintf.res.oracle
+++ b/src/plugins/e-acsl/tests/format/oracle_ci/fprintf.res.oracle
@@ -14,7 +14,7 @@
 [e-acsl] Warning: annotating undefined function `fork':
   the generated program may miss memory instrumentation
   if there are memory-related annotations.
-[e-acsl] FRAMAC_SHARE/libc/unistd.h:854: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/unistd.h:856: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
 [e-acsl] FRAMAC_SHARE/libc/sys/wait.h:79: Warning: 
@@ -41,9 +41,9 @@
   is not yet supported.
   Ignoring annotation.
 [e-acsl] translation done in project "e-acsl".
-[eva:alarm] FRAMAC_SHARE/libc/unistd.h:857: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/unistd.h:859: Warning: 
   function __e_acsl_assert, behavior blocking: precondition got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/unistd.h:857: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/unistd.h:859: Warning: 
   function __gen_e_acsl_fork: postcondition 'result_ok_child_or_error' got status unknown.
 [kernel:annot:missing-spec] tests/format/fprintf.c:15: Warning: 
   Neither code nor specification for function __e_acsl_builtin_fprintf, generating default assigns from the prototype
diff --git a/src/plugins/e-acsl/tests/format/oracle_ci/gen_fprintf.c b/src/plugins/e-acsl/tests/format/oracle_ci/gen_fprintf.c
index 7f462f80f720352ca0264c318a82cf252f27069d..0433d13f02b1f487abc773edcdf40d118330378c 100644
--- a/src/plugins/e-acsl/tests/format/oracle_ci/gen_fprintf.c
+++ b/src/plugins/e-acsl/tests/format/oracle_ci/gen_fprintf.c
@@ -110,7 +110,7 @@ pid_t __gen_e_acsl_fork(void)
     else __gen_e_acsl_or_2 = __retres == -1;
     __e_acsl_assert(__gen_e_acsl_or_2,1,"Postcondition","fork",
                     "result_ok_child_or_error: \\result == 0 || \\result > 0 || \\result == -1",
-                    "FRAMAC_SHARE/libc/unistd.h",857);
+                    "FRAMAC_SHARE/libc/unistd.h",859);
     return __retres;
   }
 }
diff --git a/src/plugins/e-acsl/tests/format/oracle_ci/gen_printf.c b/src/plugins/e-acsl/tests/format/oracle_ci/gen_printf.c
index 0a22e2db5a4182c7561b607ba8f01f5a337264be..3f1ff2269f2b3e07ce0ee16bfc900d68223d3a80 100644
--- a/src/plugins/e-acsl/tests/format/oracle_ci/gen_printf.c
+++ b/src/plugins/e-acsl/tests/format/oracle_ci/gen_printf.c
@@ -682,7 +682,7 @@ pid_t __gen_e_acsl_fork(void)
     else __gen_e_acsl_or_2 = __retres == -1;
     __e_acsl_assert(__gen_e_acsl_or_2,1,"Postcondition","fork",
                     "result_ok_child_or_error: \\result == 0 || \\result > 0 || \\result == -1",
-                    "FRAMAC_SHARE/libc/unistd.h",857);
+                    "FRAMAC_SHARE/libc/unistd.h",859);
     return __retres;
   }
 }
diff --git a/src/plugins/e-acsl/tests/format/oracle_ci/printf.res.oracle b/src/plugins/e-acsl/tests/format/oracle_ci/printf.res.oracle
index cb01c6b6e06ba3df317b56a4b676a2904122fb39..1faab6ba910f0584577be279eb015cf69a1684fc 100644
--- a/src/plugins/e-acsl/tests/format/oracle_ci/printf.res.oracle
+++ b/src/plugins/e-acsl/tests/format/oracle_ci/printf.res.oracle
@@ -29,7 +29,7 @@
 [e-acsl] FRAMAC_SHARE/libc/sys/wait.h:86: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/unistd.h:854: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/unistd.h:856: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
 [e-acsl] FRAMAC_SHARE/libc/string.h:354: Warning: 
@@ -104,9 +104,9 @@
   is not yet supported.
   Ignoring annotation.
 [e-acsl] translation done in project "e-acsl".
-[eva:alarm] FRAMAC_SHARE/libc/unistd.h:857: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/unistd.h:859: Warning: 
   function __e_acsl_assert, behavior blocking: precondition got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/unistd.h:857: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/unistd.h:859: Warning: 
   function __gen_e_acsl_fork: postcondition 'result_ok_child_or_error' got status unknown.
 [kernel:annot:missing-spec] tests/format/printf.c:180: Warning: 
   Neither code nor specification for function __e_acsl_builtin_printf, generating default assigns from the prototype
diff --git a/src/plugins/variadic/tests/known/oracle/fcntl.res.oracle b/src/plugins/variadic/tests/known/oracle/fcntl.res.oracle
index 9a28a06f1ddcde16ff456ea7bde6cc634261d9c6..5764d84562d51db61d25778976f00a93d48974a8 100644
--- a/src/plugins/variadic/tests/known/oracle/fcntl.res.oracle
+++ b/src/plugins/variadic/tests/known/oracle/fcntl.res.oracle
@@ -1,7 +1,7 @@
-[variadic] FRAMAC_SHARE/libc/fcntl.h:113: 
+[variadic] FRAMAC_SHARE/libc/fcntl.h:117: 
   Declaration of variadic function fcntl.
-[variadic] FRAMAC_SHARE/libc/fcntl.h:116: Declaration of variadic function open.
-[variadic] FRAMAC_SHARE/libc/fcntl.h:122: 
+[variadic] FRAMAC_SHARE/libc/fcntl.h:120: Declaration of variadic function open.
+[variadic] FRAMAC_SHARE/libc/fcntl.h:126: 
   Declaration of variadic function openat.
 [variadic] tests/known/fcntl.c:8: 
   Translating call to the specialized version fcntl(int, int).
diff --git a/src/plugins/variadic/tests/known/oracle/open.res.oracle b/src/plugins/variadic/tests/known/oracle/open.res.oracle
index 840ef4ab762032796a9e8a0e13459ae0745de421..156a72c83289e50f6351f950b8f48d0c151a0323 100644
--- a/src/plugins/variadic/tests/known/oracle/open.res.oracle
+++ b/src/plugins/variadic/tests/known/oracle/open.res.oracle
@@ -1,7 +1,7 @@
-[variadic] FRAMAC_SHARE/libc/fcntl.h:113: 
+[variadic] FRAMAC_SHARE/libc/fcntl.h:117: 
   Declaration of variadic function fcntl.
-[variadic] FRAMAC_SHARE/libc/fcntl.h:116: Declaration of variadic function open.
-[variadic] FRAMAC_SHARE/libc/fcntl.h:122: 
+[variadic] FRAMAC_SHARE/libc/fcntl.h:120: Declaration of variadic function open.
+[variadic] FRAMAC_SHARE/libc/fcntl.h:126: 
   Declaration of variadic function openat.
 [variadic] tests/known/open.c:7: 
   Translating call to the specialized version open(char const *, int, mode_t).
diff --git a/src/plugins/variadic/tests/known/oracle/open_wrong.res.oracle b/src/plugins/variadic/tests/known/oracle/open_wrong.res.oracle
index b7200eb4eb8fbcffa86d9be93399bc29551da793..285d13c560c877f12cc4832de890f6035cc34e09 100644
--- a/src/plugins/variadic/tests/known/oracle/open_wrong.res.oracle
+++ b/src/plugins/variadic/tests/known/oracle/open_wrong.res.oracle
@@ -1,7 +1,7 @@
-[variadic] FRAMAC_SHARE/libc/fcntl.h:113: 
+[variadic] FRAMAC_SHARE/libc/fcntl.h:117: 
   Declaration of variadic function fcntl.
-[variadic] FRAMAC_SHARE/libc/fcntl.h:116: Declaration of variadic function open.
-[variadic] FRAMAC_SHARE/libc/fcntl.h:122: 
+[variadic] FRAMAC_SHARE/libc/fcntl.h:120: Declaration of variadic function open.
+[variadic] FRAMAC_SHARE/libc/fcntl.h:126: 
   Declaration of variadic function openat.
 [variadic] tests/known/open_wrong.c:13: Warning: 
   No matching prototype found for this call to open.
diff --git a/src/plugins/variadic/tests/known/oracle/openat.res.oracle b/src/plugins/variadic/tests/known/oracle/openat.res.oracle
index 2fe15e305f26064ab92db14369c4ae4a171cb856..b9409a8350684b91062ddde902dc4aadf27fd501 100644
--- a/src/plugins/variadic/tests/known/oracle/openat.res.oracle
+++ b/src/plugins/variadic/tests/known/oracle/openat.res.oracle
@@ -1,7 +1,7 @@
-[variadic] FRAMAC_SHARE/libc/fcntl.h:113: 
+[variadic] FRAMAC_SHARE/libc/fcntl.h:117: 
   Declaration of variadic function fcntl.
-[variadic] FRAMAC_SHARE/libc/fcntl.h:116: Declaration of variadic function open.
-[variadic] FRAMAC_SHARE/libc/fcntl.h:122: 
+[variadic] FRAMAC_SHARE/libc/fcntl.h:120: Declaration of variadic function open.
+[variadic] FRAMAC_SHARE/libc/fcntl.h:126: 
   Declaration of variadic function openat.
 [variadic] tests/known/openat.c:8: 
   Translating call to the specialized version openat(int, char const *, int, mode_t).