aboutsummaryrefslogtreecommitdiff
path: root/lib/mlibc/abis/ironclad
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2024-03-07 17:28:00 -0500
committerIan Moffett <ian@osmora.org>2024-03-07 17:28:32 -0500
commitbd5969fc876a10b18613302db7087ef3c40f18e1 (patch)
tree7c2b8619afe902abf99570df2873fbdf40a4d1a1 /lib/mlibc/abis/ironclad
parenta95b38b1b92b172e6cc4e8e56a88a30cc65907b0 (diff)
lib: Add mlibc
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'lib/mlibc/abis/ironclad')
-rw-r--r--lib/mlibc/abis/ironclad/access.h9
-rw-r--r--lib/mlibc/abis/ironclad/auxv.h8
-rw-r--r--lib/mlibc/abis/ironclad/blkcnt_t.h7
-rw-r--r--lib/mlibc/abis/ironclad/blksize_t.h8
-rw-r--r--lib/mlibc/abis/ironclad/clockid_t.h7
-rw-r--r--lib/mlibc/abis/ironclad/dev_t.h6
-rw-r--r--lib/mlibc/abis/ironclad/epoll.h6
-rw-r--r--lib/mlibc/abis/ironclad/errno.h126
-rw-r--r--lib/mlibc/abis/ironclad/fcntl.h79
-rw-r--r--lib/mlibc/abis/ironclad/fsblkcnt_t.h8
-rw-r--r--lib/mlibc/abis/ironclad/fsfilcnt_t.h8
-rw-r--r--lib/mlibc/abis/ironclad/gid_t.h6
-rw-r--r--lib/mlibc/abis/ironclad/in.h168
-rw-r--r--lib/mlibc/abis/ironclad/ino_t.h7
-rw-r--r--lib/mlibc/abis/ironclad/inotify.h7
-rw-r--r--lib/mlibc/abis/ironclad/ioctls.h13
-rw-r--r--lib/mlibc/abis/ironclad/limits.h14
-rw-r--r--lib/mlibc/abis/ironclad/mode_t.h6
-rw-r--r--lib/mlibc/abis/ironclad/mqueue.h20
-rw-r--r--lib/mlibc/abis/ironclad/msg.h39
-rw-r--r--lib/mlibc/abis/ironclad/nlink_t.h6
-rw-r--r--lib/mlibc/abis/ironclad/packet.h6
-rw-r--r--lib/mlibc/abis/ironclad/pid_t.h6
-rw-r--r--lib/mlibc/abis/ironclad/poll.h16
-rw-r--r--lib/mlibc/abis/ironclad/ptrace.h56
-rw-r--r--lib/mlibc/abis/ironclad/reboot.h12
-rw-r--r--lib/mlibc/abis/ironclad/resource.h53
-rw-r--r--lib/mlibc/abis/ironclad/seek-whence.h8
-rw-r--r--lib/mlibc/abis/ironclad/shm.h21
-rw-r--r--lib/mlibc/abis/ironclad/signal.h192
-rw-r--r--lib/mlibc/abis/ironclad/socket.h165
-rw-r--r--lib/mlibc/abis/ironclad/socklen_t.h6
-rw-r--r--lib/mlibc/abis/ironclad/stat.h69
-rw-r--r--lib/mlibc/abis/ironclad/statfs.h28
-rw-r--r--lib/mlibc/abis/ironclad/statvfs.h30
-rw-r--r--lib/mlibc/abis/ironclad/suseconds_t.h8
-rw-r--r--lib/mlibc/abis/ironclad/termios.h116
-rw-r--r--lib/mlibc/abis/ironclad/time.h15
-rw-r--r--lib/mlibc/abis/ironclad/uid_t.h6
-rw-r--r--lib/mlibc/abis/ironclad/utsname.h12
-rw-r--r--lib/mlibc/abis/ironclad/vm-flags.h46
-rw-r--r--lib/mlibc/abis/ironclad/wait.h25
-rw-r--r--lib/mlibc/abis/ironclad/xattr.h21
43 files changed, 1475 insertions, 0 deletions
diff --git a/lib/mlibc/abis/ironclad/access.h b/lib/mlibc/abis/ironclad/access.h
new file mode 100644
index 0000000..bc19728
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/access.h
@@ -0,0 +1,9 @@
+#ifndef _ABIBITS_ACCESS_H
+#define _ABIBITS_ACCESS_H
+
+#define F_OK 1
+#define R_OK 2
+#define W_OK 4
+#define X_OK 8
+
+#endif // _ABIBITS_ACCESS_H
diff --git a/lib/mlibc/abis/ironclad/auxv.h b/lib/mlibc/abis/ironclad/auxv.h
new file mode 100644
index 0000000..4e93ed3
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/auxv.h
@@ -0,0 +1,8 @@
+#ifndef _ABIBITS_AUXV_H
+#define _ABIBITS_AUXV_H
+
+#define AT_SECURE 23
+#define AT_RANDOM 25
+#define AT_EXECFN 31
+
+#endif
diff --git a/lib/mlibc/abis/ironclad/blkcnt_t.h b/lib/mlibc/abis/ironclad/blkcnt_t.h
new file mode 100644
index 0000000..51c1519
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/blkcnt_t.h
@@ -0,0 +1,7 @@
+#ifndef _ABIBITS_BLKCNT_T_H
+#define _ABIBITS_BLKCNT_T_H
+
+// TODO: use int64_t?
+typedef long blkcnt_t;
+
+#endif // _ABIBITS_BLKCNT_T_H
diff --git a/lib/mlibc/abis/ironclad/blksize_t.h b/lib/mlibc/abis/ironclad/blksize_t.h
new file mode 100644
index 0000000..9f87294
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/blksize_t.h
@@ -0,0 +1,8 @@
+#ifndef _ABIBITS_BLKSIZE_T_H
+#define _ABIBITS_BLKSIZE_T_H
+
+// TODO: use int64_t?
+typedef long blksize_t;
+
+#endif // _ABIBITS_BLKSIZE_T_H
+
diff --git a/lib/mlibc/abis/ironclad/clockid_t.h b/lib/mlibc/abis/ironclad/clockid_t.h
new file mode 100644
index 0000000..c3932ef
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/clockid_t.h
@@ -0,0 +1,7 @@
+#ifndef _ABIBITS_CLOCKID_T_H
+#define _ABIBITS_CLOCKID_T_H
+
+typedef long clockid_t;
+
+#endif /* _ABIBITS_CLOCKID_T_H */
+
diff --git a/lib/mlibc/abis/ironclad/dev_t.h b/lib/mlibc/abis/ironclad/dev_t.h
new file mode 100644
index 0000000..0b63fe5
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/dev_t.h
@@ -0,0 +1,6 @@
+#ifndef _ABIBITS_DEV_T_H
+#define _ABIBITS_DEV_T_H
+
+typedef unsigned long dev_t;
+
+#endif // _ABIBITS_DEV_T_H
diff --git a/lib/mlibc/abis/ironclad/epoll.h b/lib/mlibc/abis/ironclad/epoll.h
new file mode 100644
index 0000000..49969d5
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/epoll.h
@@ -0,0 +1,6 @@
+#ifndef _ABIBITS_EPOLL_H
+#define _ABIBITS_EPOLL_H
+
+#define EPOLL_CLOEXEC 1
+
+#endif // _ABIBITS_EPOLL_H
diff --git a/lib/mlibc/abis/ironclad/errno.h b/lib/mlibc/abis/ironclad/errno.h
new file mode 100644
index 0000000..f8c7203
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/errno.h
@@ -0,0 +1,126 @@
+#ifndef _ABIBITS_ERRNO_H
+#define _ABIBITS_ERRNO_H
+
+#define EDOM 1
+#define EILSEQ 2
+#define ERANGE 3
+
+#define E2BIG 1001
+#define EACCES 1002
+#define EADDRINUSE 1003
+#define EADDRNOTAVAIL 1004
+#define EAFNOSUPPORT 1005
+#define EAGAIN 1006
+#define EALREADY 1007
+#define EBADF 1008
+#define EBADMSG 1009
+#define EBUSY 1010
+#define ECANCELED 1011
+#define ECHILD 1012
+#define ECONNABORTED 1013
+#define ECONNREFUSED 1014
+#define ECONNRESET 1015
+#define EDEADLK 1016
+#define EDESTADDRREQ 1017
+#define EDQUOT 1018
+#define EEXIST 1019
+#define EFAULT 1020
+#define EFBIG 1021
+#define EHOSTUNREACH 1022
+#define EIDRM 1023
+#define EINPROGRESS 1024
+#define EINTR 1025
+#define EINVAL 1026
+#define EIO 1027
+#define EISCONN 1028
+#define EISDIR 1029
+#define ELOOP 1030
+#define EMFILE 1031
+#define EMLINK 1032
+#define EMSGSIZE 1034
+#define EMULTIHOP 1035
+#define ENAMETOOLONG 1036
+#define ENETDOWN 1037
+#define ENETRESET 1038
+#define ENETUNREACH 1039
+#define ENFILE 1040
+#define ENOBUFS 1041
+#define ENODEV 1042
+#define ENOENT 1043
+#define ENOEXEC 1044
+#define ENOLCK 1045
+#define ENOLINK 1046
+#define ENOMEM 1047
+#define ENOMSG 1048
+#define ENOPROTOOPT 1049
+#define ENOSPC 1050
+#define ENOSYS 1051
+#define ENOTCONN 1052
+#define ENOTDIR 1053
+#define ENOTEMPTY 1054
+#define ENOTRECOVERABLE 1055
+#define ENOTSOCK 1056
+#define ENOTSUP 1057
+#define ENOTTY 1058
+#define ENXIO 1059
+#define EOPNOTSUPP 1060
+#define EOVERFLOW 1061
+#define EOWNERDEAD 1062
+#define EPERM 1063
+#define EPIPE 1064
+#define EPROTO 1065
+#define EPROTONOSUPPORT 1066
+#define EPROTOTYPE 1067
+#define EROFS 1068
+#define ESPIPE 1069
+#define ESRCH 1070
+#define ESTALE 1071
+#define ETIMEDOUT 1072
+#define ETXTBSY 1073
+#define EWOULDBLOCK EAGAIN
+#define EXDEV 1075
+#define ENODATA 1076
+#define ETIME 1077
+#define ENOKEY 1078
+#define ESHUTDOWN 1079
+#define EHOSTDOWN 1080
+#define EBADFD 1081
+#define ENOMEDIUM 1082
+#define ENOTBLK 1083
+#define ENONET 1084
+#define EPFNOSUPPORT 1085
+#define ESOCKTNOSUPPORT 1086
+#define ESTRPIPE 1087
+#define EREMOTEIO 1088
+#define ERFKILL 1089
+#define EBADR 1090
+#define EUNATCH 1091
+#define EMEDIUMTYPE 1092
+#define EREMOTE 1093
+#define EKEYREJECTED 1094
+#define EUCLEAN 1095
+#define EBADSLT 1096
+#define ENOANO 1097
+#define ENOCSI 1098
+#define ENOSTR 1099
+#define ETOOMANYREFS 1100
+#define ENOPKG 1101
+#define EKEYREVOKED 1102
+#define EXFULL 1103
+#define ELNRNG 1104
+#define ENOTUNIQ 1105
+#define ERESTART 1106
+#define EUSERS 1107
+#define ECHRNG 1108
+#define ELIBBAD 1109
+#define EL2HLT 1110
+#define EL3HLT 1111
+#define EKEYEXPIRED 1112
+#define ECOMM 1113
+#define EBADE 1114
+#define EHWPOISON 1115
+#define EBADRQC 1116
+
+#define EIEIO 1524152434
+
+#endif // _ABIBITS_ERRNO_H
diff --git a/lib/mlibc/abis/ironclad/fcntl.h b/lib/mlibc/abis/ironclad/fcntl.h
new file mode 100644
index 0000000..10188de
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/fcntl.h
@@ -0,0 +1,79 @@
+#ifndef _ABIBITS_FCNTL_H
+#define _ABIBITS_FCNTL_H
+
+// Flags supported by the kernel.
+#define O_ACCMODE 0b000011
+#define O_RDONLY 00000001
+#define O_WRONLY 0b000010
+#define O_RDWR 0b000011
+#define O_APPEND 0b000100
+#define O_CLOEXEC 0b001000
+#define O_NOFOLLOW 0b010000
+#define O_NONBLOCK 0b100000
+
+// Flags emulated by userland, we just have to make sure they dont overlap with
+// kernel flags.
+#define O_CREAT 0b0010000000
+#define O_EXCL 0b0100000000
+#define O_TRUNC 0b1000000000
+
+// Stubbed flags, the value really doesnt matter as long as they dont overlap
+// with usable ones.
+// Implemented here as some software needs them to compile.
+#define O_SEARCH 0b000000000010000000000
+#define O_EXEC 0b000000000100000000000
+#define O_NOCTTY 0b000000001000000000000
+#define O_DSYNC 0b000000010000000000000
+#define O_RSYNC 0b000000100000000000000
+#define O_SYNC 0b000001000000000000000
+#define O_PATH 0b000010000000000000000
+#define O_DIRECTORY 0b000100000000000000000
+#define O_LARGEFILE 0b001000000000000000000
+#define O_NOATIME 0b010000000000000000000
+#define O_TMPFILE 0b100000000000000000000
+
+// Fcntl flags.
+#define FD_CLOEXEC 1
+#define F_DUPFD 1
+#define F_DUPFD_CLOEXEC 2
+#define F_GETFD 3
+#define F_SETFD 4
+#define F_GETFL 5
+#define F_SETFL 6
+#define F_GETPIPE_SZ 7
+#define F_SETPIPE_SZ 8
+#define F_GETLK 9
+#define F_SETLK 10
+#define F_SETLKW 11
+
+#define F_RDLCK 1
+#define F_UNLCK 2
+#define F_WRLCK 3
+
+// Stubbed fcntl flags.
+#define F_GETOWN 10
+#define F_SETOWN 11
+
+#define F_SEAL_SHRINK 0x0002
+#define F_SEAL_GROW 0x0004
+#define F_SEAL_WRITE 0x0008
+#define F_SEAL_SEAL 0x0010
+#define F_ADD_SEALS 1033
+#define F_GET_SEALS 1034
+
+// At flags.
+#define AT_REMOVEDIR 500
+#define AT_EACCESS 512
+#define AT_FDCWD 0x7FFFFFFF
+#define AT_EMPTY_PATH 1
+#define AT_SYMLINK_FOLLOW 0
+#define AT_SYMLINK_NOFOLLOW 2
+
+#define POSIX_FADV_NORMAL 1
+#define POSIX_FADV_SEQUENTIAL 2
+#define POSIX_FADV_NOREUSE 3
+#define POSIX_FADV_DONTNEED 4
+#define POSIX_FADV_WILLNEED 5
+#define POSIX_FADV_RANDOM 6
+
+#endif // _ABIBITS_FCNTL_H
diff --git a/lib/mlibc/abis/ironclad/fsblkcnt_t.h b/lib/mlibc/abis/ironclad/fsblkcnt_t.h
new file mode 100644
index 0000000..0d74456
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/fsblkcnt_t.h
@@ -0,0 +1,8 @@
+#ifndef _ABIBITS_FSBLKCNT_T_H
+#define _ABIBITS_FSBLKCNT_T_H
+
+#include <bits/types.h>
+
+typedef __mlibc_uint64 fsblkcnt_t;
+
+#endif /* _ABIBITS_FSBLKCNT_T_H */
diff --git a/lib/mlibc/abis/ironclad/fsfilcnt_t.h b/lib/mlibc/abis/ironclad/fsfilcnt_t.h
new file mode 100644
index 0000000..1abda9a
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/fsfilcnt_t.h
@@ -0,0 +1,8 @@
+#ifndef _ABIBITS_FSFILCNT_T_H
+#define _ABIBITS_FSFILCNT_T_H
+
+#include <bits/types.h>
+
+typedef __mlibc_uint64 fsfilcnt_t;
+
+#endif /* _ABIBITS_FSFILCNT_T_H */
diff --git a/lib/mlibc/abis/ironclad/gid_t.h b/lib/mlibc/abis/ironclad/gid_t.h
new file mode 100644
index 0000000..252321f
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/gid_t.h
@@ -0,0 +1,6 @@
+#ifndef _ABIBITS_GID_T_H
+#define _ABIBITS_GID_T_H
+
+typedef unsigned int gid_t;
+
+#endif // _ABIBITS_GID_T_H
diff --git a/lib/mlibc/abis/ironclad/in.h b/lib/mlibc/abis/ironclad/in.h
new file mode 100644
index 0000000..3c736e3
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/in.h
@@ -0,0 +1,168 @@
+#ifndef _ABIBITS_IN_H
+#define _ABIBITS_IN_H
+
+#include <bits/posix/in_addr_t.h>
+#include <bits/posix/in_port_t.h>
+#include <abi-bits/socket.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct in_addr {
+ in_addr_t s_addr;
+};
+
+struct sockaddr_in {
+ sa_family_t sin_family;
+ in_port_t sin_port;
+ struct in_addr sin_addr;
+ uint8_t pad[8];
+};
+#define sin_zero pad /* for BSD Unix compatibility */
+
+struct in6_addr {
+ union {
+ uint8_t __s6_addr[16];
+ uint16_t __s6_addr16[8];
+ uint32_t __s6_addr32[4];
+ } __in6_union;
+};
+#define s6_addr __in6_union.__s6_addr
+#define s6_addr16 __in6_union.__s6_addr16
+#define s6_addr32 __in6_union.__s6_addr32
+
+struct in6_pktinfo {
+ struct in6_addr ipi6_addr;
+ uint32_t ipi6_ifindex;
+};
+
+struct sockaddr_in6 {
+ sa_family_t sin6_family;
+ in_port_t sin6_port;
+ uint32_t sin6_flowinfo;
+ struct in6_addr sin6_addr;
+ uint32_t sin6_scope_id;
+};
+
+struct ipv6_mreq {
+ struct in6_addr ipv6mr_multiaddr;
+ unsigned ipv6mr_interface;
+};
+
+struct ip_mreq {
+ struct in_addr imr_multiaddr;
+ struct in_addr imr_interface;
+};
+
+struct ip_mreq_source {
+ struct in_addr imr_multiaddr;
+ struct in_addr imr_interface;
+ struct in_addr imr_sourceaddr;
+};
+
+struct ip_mreqn {
+ struct in_addr imr_multiaddr;
+ struct in_addr imr_address;
+ int imr_ifindex;
+};
+
+struct in_pktinfo {
+ unsigned int ipi_ifindex;
+ struct in_addr ipi_spec_dst;
+ struct in_addr ipi_addr;
+};
+
+struct group_source_req {
+ uint32_t gsr_interface;
+ struct sockaddr_storage gsr_group;
+ struct sockaddr_storage gsr_source;
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } }
+#define IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } }
+
+#define IPPROTO_IP 1
+#define IPPROTO_IPV6 2
+#define IPPROTO_ICMP 3
+#define IPPROTO_RAW 4
+#define IPPROTO_TCP 5
+#define IPPROTO_UDP 6
+#define IPPROTO_IGMP 7
+#define IPPROTO_IPIP 8
+#define IPPROTO_DCCP 33
+#define IPPROTO_ROUTING 43
+#define IPPROTO_GRE 47
+#define IPPROTO_ESP 50
+#define IPPROTO_AH 51
+#define IPPROTO_ICMPV6 58
+#define IPPROTO_DSTOPTS 60
+#define IPPROTO_COMP 108
+#define IPPROTO_SCTP 132
+#define IPPROTO_UDPLITE 136
+#define IPPROTO_MAX 256
+
+#define INADDR_ANY ((in_addr_t)0x00000000)
+#define INADDR_BROADCAST ((in_addr_t)0xffffffff)
+#define INADDR_LOOPBACK ((in_addr_t)0x7f000001)
+#define INADDR_NONE ((in_addr_t)0xffffffff)
+
+#define INET_ADDRSTRLEN 16
+
+#define INET6_ADDRSTRLEN 46
+
+#define IPV6_JOIN_GROUP 1
+#define IPV6_LEAVE_GROUP 2
+#define IPV6_MULTICAST_HOPS 3
+#define IPV6_MULTICAST_IF 4
+#define IPV6_MULTICAST_LOOP 5
+#define IPV6_UNICAST_HOPS 6
+#define IPV6_V6ONLY 7
+#define IPV6_PMTUDISC_DONT 8
+#define IPV6_PMTUDISC_DO 9
+#define IPV6_MTU 10
+#define IPV6_2292PKTOPTIONS 11
+#define IPV6_MTU_DISCOVER 23
+#define IPV6_RECVERR 25
+#define IPV6_RECVPKTINFO 49
+#define IPV6_PKTINFO 50
+#define IPV6_RECVHOPLIMIT 51
+#define IPV6_HOPLIMIT 52
+#define IPV6_TCLASS 67
+
+#define IP_TOS 1
+#define IP_TTL 2
+#define IP_OPTIONS 4
+#define IP_PMTUDISC_OMIT 5
+#define IP_PKTINFO 8
+#define IP_PKTOPTIONS 9
+#define IP_MTU_DISCOVER 10
+#define IP_RECVERR 11
+#define IP_RECVTTL 12
+#define IP_UNICAST_IF 13
+#define IP_MTU 14
+
+#define IP_DEFAULT_MULTICAST_TTL 1
+#define IP_MULTICAST_IF 32
+#define IP_MULTICAST_TTL 33
+#define IP_MULTICAST_LOOP 34
+#define IP_ADD_MEMBERSHIP 35
+#define IP_DROP_MEMBERSHIP 36
+#define IP_UNBLOCK_SOURCE 37
+#define IP_BLOCK_SOURCE 38
+#define IP_ADD_SOURCE_MEMBERSHIP 39
+#define IP_DROP_SOURCE_MEMBERSHIP 40
+#define MCAST_JOIN_SOURCE_GROUP 46
+#define MCAST_LEAVE_SOURCE_GROUP 47
+
+#define IP_PMTUDISC_DONT 0
+#define IP_PMTUDISC_DO 2
+
+#define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP
+#define IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP
+
+#endif // _ABIBITS_IN_H
diff --git a/lib/mlibc/abis/ironclad/ino_t.h b/lib/mlibc/abis/ironclad/ino_t.h
new file mode 100644
index 0000000..264d888
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/ino_t.h
@@ -0,0 +1,7 @@
+#ifndef _ABIBITS_INO_T_H
+#define _ABIBITS_INO_T_H
+
+// TODO: use (u)int64_t?
+typedef long ino_t;
+
+#endif // _ABIBITS_INO_T_H
diff --git a/lib/mlibc/abis/ironclad/inotify.h b/lib/mlibc/abis/ironclad/inotify.h
new file mode 100644
index 0000000..38c9c77
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/inotify.h
@@ -0,0 +1,7 @@
+#ifndef _ABIBITS_INOTIFY_H
+#define _ABIBITS_INOTIFY_H
+
+#define IN_CLOEXEC 1
+#define IN_NONBLOCK 2
+
+#endif // _ABIBITS_INOTIFY_H
diff --git a/lib/mlibc/abis/ironclad/ioctls.h b/lib/mlibc/abis/ironclad/ioctls.h
new file mode 100644
index 0000000..c39abb5
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/ioctls.h
@@ -0,0 +1,13 @@
+#ifndef _ABIBITS_IOCTLS_H
+#define _ABIBITS_IOCTLS_H
+
+#define SIOCPROTOPRIVATE 0x89E0
+#define SIOCGIFNAME 0x8910
+#define SIOCGIFCONF 0x8912
+#define SIOCGIFFLAGS 0x8913
+#define SIOCSIFFLAGS 0x8914
+#define SIOCGIFINDEX 0x8933
+#define SIOCATMARK 0x8905
+#define SIOCGIFHWADDR 0x8927
+
+#endif /* _ABIBITS_IOCTLS_H */
diff --git a/lib/mlibc/abis/ironclad/limits.h b/lib/mlibc/abis/ironclad/limits.h
new file mode 100644
index 0000000..6aac622
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/limits.h
@@ -0,0 +1,14 @@
+#ifndef _ABIBITS_LIMITS_H
+#define _ABIBITS_LIMITS_H
+
+#define IOV_MAX 1024
+
+// Niceness related
+#define NZERO 20
+
+// Maximum hostname length, posix defines it as 255
+#define HOST_NAME_MAX 255
+
+#define OPEN_MAX 256
+
+#endif //_ABIBITS_LIMITS_H
diff --git a/lib/mlibc/abis/ironclad/mode_t.h b/lib/mlibc/abis/ironclad/mode_t.h
new file mode 100644
index 0000000..77f75a9
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/mode_t.h
@@ -0,0 +1,6 @@
+#ifndef _ABIBITS_MODE_T_H
+#define _ABIBITS_MODE_T_H
+
+typedef int mode_t;
+
+#endif // _ABIBITS_MODE_T_H
diff --git a/lib/mlibc/abis/ironclad/mqueue.h b/lib/mlibc/abis/ironclad/mqueue.h
new file mode 100644
index 0000000..f18210c
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/mqueue.h
@@ -0,0 +1,20 @@
+#ifndef _ABIBITS_MQUEUE_H
+#define _ABIBITS_MQUEUE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct mq_attr {
+ long mq_flags;
+ long mq_maxmsg;
+ long mq_msgsize;
+ long mq_curmsgs;
+ long __pad[4];
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ABIBITS_MQUEUE_H */
diff --git a/lib/mlibc/abis/ironclad/msg.h b/lib/mlibc/abis/ironclad/msg.h
new file mode 100644
index 0000000..5e890c0
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/msg.h
@@ -0,0 +1,39 @@
+#ifndef _ABIBITS_MSG_H
+#define _ABIBITS_MSG_H
+
+#include <sys/ipc.h>
+#include <bits/ansi/time_t.h>
+#include <bits/types.h>
+#include <abi-bits/pid_t.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(__i386__)
+typedef __mlibc_uint64 msglen_t;
+typedef __mlibc_uint64 msgqnum_t;
+#else
+typedef unsigned long msglen_t;
+typedef unsigned long msgqnum_t;
+#endif
+
+struct msqid_ds {
+ struct ipc_perm msg_perm;
+ time_t msg_stime;
+ time_t msg_rtime;
+ time_t msg_ctime;
+ unsigned long msg_cbytes;
+ msgqnum_t msg_qnum;
+ msglen_t msg_qbytes;
+ pid_t msg_lspid;
+ pid_t msg_lrpid;
+ unsigned long __unused[2];
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ABIBITS_MSG_H */
+
diff --git a/lib/mlibc/abis/ironclad/nlink_t.h b/lib/mlibc/abis/ironclad/nlink_t.h
new file mode 100644
index 0000000..30e178c
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/nlink_t.h
@@ -0,0 +1,6 @@
+#ifndef _ABIBITS_NLINK_T_H
+#define _ABIBITS_NLINK_T_H
+
+typedef int nlink_t;
+
+#endif // _ABIBITS_NLINK_T_H
diff --git a/lib/mlibc/abis/ironclad/packet.h b/lib/mlibc/abis/ironclad/packet.h
new file mode 100644
index 0000000..ee1a424
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/packet.h
@@ -0,0 +1,6 @@
+#ifndef _ABIBITS_PACKET_H
+#define _ABIBITS_PACKET_H
+
+#define PACKET_HOST 0
+
+#endif // _ABIBITS_PACKET_H
diff --git a/lib/mlibc/abis/ironclad/pid_t.h b/lib/mlibc/abis/ironclad/pid_t.h
new file mode 100644
index 0000000..5ffbd06
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/pid_t.h
@@ -0,0 +1,6 @@
+#ifndef _ABIBITS_PID_T_H
+#define _ABIBITS_PID_T_H
+
+typedef int pid_t;
+
+#endif // _ABIBITS_PID_T_H
diff --git a/lib/mlibc/abis/ironclad/poll.h b/lib/mlibc/abis/ironclad/poll.h
new file mode 100644
index 0000000..e0fe1a5
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/poll.h
@@ -0,0 +1,16 @@
+#ifndef _ABIBITS_POLL_H
+#define _ABIBITS_POLL_H
+
+#define POLLIN 0x01
+#define POLLOUT 0x02
+#define POLLPRI 0x04
+#define POLLHUP 0x08
+#define POLLERR 0x10
+#define POLLRDHUP 0x20
+#define POLLNVAL 0x40
+#define POLLWRNORM 0x80
+#define POLLRDNORM 0x100
+#define POLLWRBAND 0x200
+#define POLLRDBAND 0x400
+
+#endif // _ABIBITS_POLL_H
diff --git a/lib/mlibc/abis/ironclad/ptrace.h b/lib/mlibc/abis/ironclad/ptrace.h
new file mode 100644
index 0000000..6f35eac
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/ptrace.h
@@ -0,0 +1,56 @@
+#ifndef _ABIBITS_PTRACE_H
+#define _ABIBITS_PTRACE_H
+
+#define PTRACE_PEEKTEXT 1
+#define PTRACE_PEEKDATA 2
+#define PTRACE_PEEKUSER 3
+#define PTRACE_POKETEXT 4
+#define PTRACE_POKEDATA 5
+#define PTRACE_CONT 7
+#define PTRACE_KILL 8
+#define PTRACE_SINGLESTEP 9
+#define PTRACE_GETREGS 14
+#define PTRACE_SETREGS 15
+#define PTRACE_ATTACH 16
+#define PTRACE_DETACH 17
+#define PTRACE_GETFPXREGS 18
+#define PTRACE_SETFPXREGS 19
+#define PTRACE_GETFPREGS 20
+#define PTRACE_SYSCALL 24
+#define PTRACE_SETOPTIONS 0x4200
+#define PTRACE_GETEVENTMSG 0x4201
+#define PTRACE_GETSIGINFO 0x4202
+#define PTRACE_SETSIGINFO 0x4203
+#define PTRACE_GETREGSET 0x4204
+#define PTRACE_SETREGSET 0x4205
+#define PTRACE_SEIZE 0x4206
+#define PTRACE_INTERRUPT 0x4207
+#define PTRACE_LISTEN 0x4208
+#define PTRACE_PEEKSIGINFO 0x4209
+#define PTRACE_GETSIGMASK 0x420A
+#define PTRACE_SETSIGMASK 0x420B
+#define PTRACE_SECCOMP_GET_FILTER 0x420C
+
+#define PTRACE_CE_O_TRACESYSGOOD 0x00000001
+#define PTRACE_O_TRACEFORK 0x00000002
+#define PTRACE_O_TRACEVFORK 0x00000004
+#define PTRACE_O_TRACECLONE 0x00000008
+#define PTRACE_O_TRACEEXEC 0x00000010
+#define PTRACE_O_TRACEVFORKDONE 0x00000020
+#define PTRACE_O_TRACEEXIT 0x00000040
+#define PTRACE_O_TRACESECCOMP 0x00000080
+#define PTRACE_O_EXITKILL 0x00100000
+#define PTRACE_O_SUSPEND_SECCOMP 0x00200000
+#define PTRACE_O_MASK 0x003000ff
+
+#define PTRACE_EVENT_FORK 1
+#define PTRACE_EVENT_VFORK 2
+#define PTRACE_EVENT_CLONE 3
+#define PTRACE_EVENT_EXEC 4
+#define PTRACE_EVENT_VFORK_DONE 5
+#define PTRACE_EVENT_EXIT 6
+#define PTRACE_EVENT_SECCOMP 7
+
+#define PTRACE_PEEKSIGINFO_SHARED 1
+
+#endif // _ABIBITS_PTRACE_H
diff --git a/lib/mlibc/abis/ironclad/reboot.h b/lib/mlibc/abis/ironclad/reboot.h
new file mode 100644
index 0000000..aadc18f
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/reboot.h
@@ -0,0 +1,12 @@
+#ifndef _ABIBITS_REBOOT_H
+#define _ABIBITS_REBOOT_H
+
+#define RB_AUTOBOOT 0x01234567
+#define RB_HALT_SYSTEM 0xcdef0123
+#define RB_ENABLE_CAD 0x89abcdef
+#define RB_DISABLE_CAD 0
+#define RB_POWER_OFF 0x4321fedc
+#define RB_SW_SUSPEND 0xd000fce2
+#define RB_KEXEC 0x45584543
+
+#endif // _ABIBITS_REBOOT_H
diff --git a/lib/mlibc/abis/ironclad/resource.h b/lib/mlibc/abis/ironclad/resource.h
new file mode 100644
index 0000000..927588b
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/resource.h
@@ -0,0 +1,53 @@
+#ifndef _ABIBITS_RESOURCE_H
+#define _ABIBITS_RESOURCE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <bits/posix/timeval.h>
+
+#define RUSAGE_SELF 1
+#define RUSAGE_CHILDREN 2
+
+#define RLIMIT_CORE 1
+#define RLIMIT_CPU 2
+#define RLIMIT_DATA 3
+#define RLIMIT_FSIZE 4
+#define RLIMIT_NOFILE 5
+#define RLIMIT_STACK 6
+#define RLIMIT_AS 7
+#define RLIMIT_MEMLOCK 8
+#define RLIMIT_RSS 9
+#define RLIMIT_NPROC 10
+#define RLIMIT_LOCKS 11
+#define RLIMIT_SIGPENDING 12
+#define RLIMIT_MSGQUEUE 13
+#define RLIMIT_NICE 14
+#define RLIMIT_RTPRIO 15
+#define RLIMIT_NLIMITS 16
+
+struct rusage {
+ struct timeval ru_utime;
+ struct timeval ru_stime;
+ long int ru_maxrss;
+ long int ru_ixrss;
+ long int ru_idrss;
+ long int ru_isrss;
+ long int ru_minflt;
+ long int ru_majflt;
+ long int ru_nswap;
+ long int ru_inblock;
+ long int ru_oublock;
+ long int ru_msgsnd;
+ long int ru_msgrcv;
+ long int ru_nsignals;
+ long int ru_nvcsw;
+ long int ru_nivcsw;
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // _ABIBITS_RESOURCE_H
diff --git a/lib/mlibc/abis/ironclad/seek-whence.h b/lib/mlibc/abis/ironclad/seek-whence.h
new file mode 100644
index 0000000..617b6f4
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/seek-whence.h
@@ -0,0 +1,8 @@
+#ifndef _ABIBITS_SEEK_WHENCE_H
+#define _ABIBITS_SEEK_WHENCE_H
+
+#define SEEK_SET 1
+#define SEEK_CUR 2
+#define SEEK_END 4
+
+#endif // _ABIBITS_SEEK_WHENCE_H
diff --git a/lib/mlibc/abis/ironclad/shm.h b/lib/mlibc/abis/ironclad/shm.h
new file mode 100644
index 0000000..93fb01b
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/shm.h
@@ -0,0 +1,21 @@
+#ifndef _ABIBITS_SHM_H
+#define _ABIBITS_SHM_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct shm_info {
+ int used_ids;
+ unsigned long shm_tot;
+ unsigned long shm_rss;
+ unsigned long shm_swp;
+ unsigned long swap_attempts;
+ unsigned long swap_successes;
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ABIBITS_SHM_H */
diff --git a/lib/mlibc/abis/ironclad/signal.h b/lib/mlibc/abis/ironclad/signal.h
new file mode 100644
index 0000000..2d20315
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/signal.h
@@ -0,0 +1,192 @@
+#ifndef _ABIBITS_SIGNAL_H
+#define _ABIBITS_SIGNAL_H
+
+#include <abi-bits/pid_t.h>
+#include <abi-bits/uid_t.h>
+#include <bits/size_t.h>
+
+union sigval {
+ int sival_int;
+ void *sival_ptr;
+};
+
+typedef struct {
+ int si_signo;
+ int si_code;
+ int si_errno;
+ pid_t si_pid;
+ uid_t si_uid;
+ void *si_addr;
+ int si_status;
+ union sigval si_value;
+} siginfo_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Argument for signal()
+typedef void (*__sighandler) (int);
+
+#define SIG_ERR ((__sighandler)(void *)(-1))
+#define SIG_DFL ((__sighandler)(void *)(-2))
+#define SIG_IGN ((__sighandler)(void *)(-3))
+
+#define SIGHUP 1
+#define SIGINT 2
+#define SIGQUIT 3
+#define SIGILL 4
+#define SIGTRAP 5
+#define SIGABRT 6
+#define SIGBUS 7
+#define SIGFPE 8
+#define SIGKILL 9
+#define SIGUSR1 10
+#define SIGSEGV 11
+#define SIGUSR2 12
+#define SIGPIPE 13
+#define SIGALRM 14
+#define SIGTERM 15
+#define SIGSTKFLT 16
+#define SIGCHLD 17
+#define SIGCONT 18
+#define SIGSTOP 19
+#define SIGTSTP 20
+#define SIGTTIN 21
+#define SIGTTOU 22
+#define SIGURG 23
+#define SIGXCPU 24
+#define SIGXFSZ 25
+#define SIGVTALRM 26
+#define SIGPROF 27
+#define SIGWINCH 28
+#define SIGIO 29
+#define SIGPOLL SIGIO
+#define SIGPWR 30
+#define SIGSYS 31
+#define SIGRTMIN 32
+#define SIGRTMAX 33
+#define SIGCANCEL SIGSYS
+
+// siginfo->si_info constants
+// SIGBUS
+#define BUS_ADRALN 1
+#define BUS_ADRERR 2
+#define BUS_OBJERR 3
+
+// SIGILL
+#define ILL_ILLOPC 1
+#define ILL_ILLOPN 2
+#define ILL_ILLADR 3
+#define ILL_ILLTRP 4
+#define ILL_PRVOPC 5
+#define ILL_PRVREG 6
+#define ILL_COPROC 7
+#define ILL_BADSTK 8
+#define ILL_BADIADDR 9
+
+// SIGSEGV
+#define SEGV_MAPERR 1
+#define SEGV_ACCERR 2
+
+// TODO: replace this by uint64_t
+typedef long sigset_t;
+
+#define SIGUNUSED SIGSYS
+
+// constants for sigprocmask()
+#define SIG_BLOCK 1
+#define SIG_UNBLOCK 2
+#define SIG_SETMASK 3
+
+#define SA_NOCLDSTOP (1 << 0)
+#define SA_ONSTACK (1 << 1)
+#define SA_RESETHAND (1 << 2)
+#define SA_RESTART (1 << 3)
+#define SA_SIGINFO (1 << 4)
+#define SA_NOCLDWAIT (1 << 5)
+#define SA_NODEFER (1 << 6)
+
+#define MINSIGSTKSZ 2048
+#define SIGSTKSZ 8192
+#define SS_ONSTACK 1
+#define SS_DISABLE 2
+
+typedef struct __stack {
+ void *ss_sp;
+ size_t ss_size;
+ int ss_flags;
+} stack_t;
+
+// constants for sigev_notify of struct sigevent
+#define SIGEV_NONE 1
+#define SIGEV_SIGNAL 2
+#define SIGEV_THREAD 3
+
+#define SI_ASYNCNL (-60)
+#define SI_TKILL (-6)
+#define SI_SIGIO (-5)
+#define SI_ASYNCIO (-4)
+#define SI_MESGQ (-3)
+#define SI_TIMER (-2)
+#define SI_QUEUE (-1)
+#define SI_USER 0
+#define SI_KERNEL 128
+
+#define NSIG 65
+#define _NSIG NSIG
+
+#define CLD_EXITED 1
+#define CLD_KILLED 2
+#define CLD_DUMPED 3
+#define CLD_TRAPPED 4
+#define CLD_STOPPED 5
+#define CLD_CONTINUED 6
+
+struct sigevent {
+ int sigev_notify;
+ int sigev_signo;
+ union sigval sigev_value;
+ void (*sigev_notify_function)(union sigval);
+ // MISSING: sigev_notify_attributes
+};
+
+struct sigaction {
+ union {
+ void (*sa_handler)(int);
+ void (*sa_sigaction)(int, siginfo_t *, void *);
+ };
+ sigset_t sa_mask;
+ int sa_flags;
+};
+
+#if defined(__x86_64__) || defined(__aarch64__)
+// TODO: This is wrong for AArch64.
+
+typedef struct {
+ unsigned long oldmask;
+ unsigned long gregs[16];
+ unsigned long pc, pr, sr;
+ unsigned long gbr, mach, macl;
+ unsigned long fpregs[16];
+ unsigned long xfpregs[16];
+ unsigned int fpscr, fpul, ownedfp;
+} mcontext_t;
+
+typedef struct __ucontext {
+ unsigned long uc_flags;
+ struct __ucontext *uc_link;
+ stack_t uc_stack;
+ mcontext_t uc_mcontext;
+ sigset_t uc_sigmask;
+} ucontext_t;
+
+#else
+#error "Missing architecture specific code."
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // _ABIBITS_SIGNAL_H
diff --git a/lib/mlibc/abis/ironclad/socket.h b/lib/mlibc/abis/ironclad/socket.h
new file mode 100644
index 0000000..48b8178
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/socket.h
@@ -0,0 +1,165 @@
+#ifndef _ABIBITS_SOCKET_H
+#define _ABIBITS_SOCKET_H
+
+#include <abi-bits/socklen_t.h>
+#include <bits/posix/iovec.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef unsigned int sa_family_t;
+
+struct msghdr {
+ void *msg_name;
+ socklen_t msg_namelen;
+ struct iovec *msg_iov;
+ int msg_iovlen;
+ void *msg_control;
+ socklen_t msg_controllen;
+ int msg_flags;
+};
+
+struct sockaddr_storage {
+ sa_family_t ss_family;
+ char __padding[128 - sizeof(sa_family_t)];
+};
+
+struct mmsghdr {
+ struct msghdr msg_hdr;
+ unsigned int msg_len;
+};
+
+struct cmsghdr {
+ socklen_t cmsg_len;
+ int cmsg_level;
+ int cmsg_type;
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#define SCM_RIGHTS 1
+#define SCM_TIMESTAMP SO_TIMESTAMP
+#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
+
+//MISSING: CMSG_DATA, CMSG_NXTHDR, CMSG_FIRSTHDR
+
+#define SCM_CREDENTIALS 0x02
+
+#define SOCK_DGRAM 1
+#define SOCK_RAW 2
+#define SOCK_SEQPACKET 3
+#define SOCK_STREAM 4
+#define SOCK_DCCP 5
+#define SOCK_NONBLOCK 0x10000
+#define SOCK_CLOEXEC 0x20000
+#define SOCK_RDM 0x40000
+
+#define SOL_SOCKET 1
+#define SOL_IPV6 41
+#define SOL_PACKET 263
+#define SOL_NETLINK 270
+
+#define SO_ACCEPTCONN 1
+#define SO_BROADCAST 2
+#define SO_DEBUG 3
+#define SO_DONTROUTE 4
+#define SO_ERROR 5
+#define SO_KEEPALIVE 6
+#define SO_LINGER 7
+#define SO_OOBINLINE 8
+#define SO_RCVBUF 9
+#define SO_RCVLOWAT 10
+#define SO_RCVTIMEO 11
+#define SO_REUSEADDR 12
+#define SO_SNDBUF 13
+#define SO_SNDLOWAT 14
+#define SO_SNDTIMEO 15
+#define SO_TYPE 16
+#define SO_SNDBUFFORCE 17
+#define SO_PEERCRED 18
+#define SO_ATTACH_FILTER 19
+#define SO_PASSCRED 20
+#define SO_RCVBUFFORCE 21
+#define SO_DETACH_FILTER 22
+#define SO_PROTOCOL 23
+#define SO_REUSEPORT 24
+#define SO_TIMESTAMP 25
+#define SO_PEERSEC 26
+#define SO_BINDTODEVICE 27
+#define SO_DOMAIN 28
+#define SO_PASSSEC 29
+#define SO_TIMESTAMPNS 30
+#define SO_PRIORITY 31
+#define SO_MARK 32
+
+#define SOMAXCONN 1
+
+#define MSG_CTRUNC 0x1
+#define MSG_DONTROUTE 0x2
+#define MSG_EOR 0x4
+#define MSG_OOB 0x8
+#define MSG_NOSIGNAL 0x10
+#define MSG_PEEK 0x20
+#define MSG_TRUNC 0x40
+#define MSG_WAITALL 0x80
+#define MSG_FIN 0x200
+#define MSG_CONFIRM 0x800
+
+// Linux extensions.
+#define MSG_DONTWAIT 0x1000
+#define MSG_CMSG_CLOEXEC 0x2000
+#define MSG_MORE 0x4000
+#define MSG_FASTOPEN 0x20000000
+
+// GNU (?) extension: Protocol family constants.
+
+#define PF_INET 1
+#define PF_INET6 2
+#define PF_UNIX 3
+#define PF_LOCAL 3
+#define PF_UNSPEC 4
+#define PF_NETLINK 5
+#define PF_BRIDGE 6
+#define PF_APPLETALK 7
+#define PF_BLUETOOTH 8
+#define PF_DECnet 9
+#define PF_IPX 10
+#define PF_ISDN 11
+#define PF_SNA 12
+#define PF_PACKET 13
+#define PF_AX25 14
+#define PF_NETROM 15
+#define PF_ROSE 16
+#define PF_TIPC 30
+#define PF_ALG 38
+#define PF_MAX 46
+
+#define AF_INET PF_INET
+#define AF_INET6 PF_INET6
+#define AF_UNIX PF_UNIX
+#define AF_LOCAL PF_LOCAL
+#define AF_UNSPEC PF_UNSPEC
+#define AF_NETLINK PF_NETLINK
+#define AF_BRIDGE PF_BRIDGE
+#define AF_APPLETALK PF_APPLETALK
+#define AF_BLUETOOTH PF_BLUETOOTH
+#define AF_DECnet PF_DECnet
+#define AF_IPX PF_IPX
+#define AF_ISDN PF_ISDN
+#define AF_SNA PF_SNA
+#define AF_PACKET PF_PACKET
+#define AF_PACKET PF_PACKET
+#define AF_AX25 PF_AX25
+#define AF_NETROM PF_NETROM
+#define AF_ROSE PF_ROSE
+#define AF_TIPC PF_TIPC
+#define AF_ALG PF_ALG
+#define AF_MAX PF_MAX
+
+#define SHUT_RD 1
+#define SHUT_RDWR 2
+#define SHUT_WR 3
+#endif
diff --git a/lib/mlibc/abis/ironclad/socklen_t.h b/lib/mlibc/abis/ironclad/socklen_t.h
new file mode 100644
index 0000000..190e5f9
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/socklen_t.h
@@ -0,0 +1,6 @@
+#ifndef _ABIBITS_SOCKLEN_T_H
+#define _ABIBITS_SOCKLEN_T_H
+
+typedef unsigned socklen_t;
+
+#endif /* _ABIBITS_SOCKLEN_T_H */
diff --git a/lib/mlibc/abis/ironclad/stat.h b/lib/mlibc/abis/ironclad/stat.h
new file mode 100644
index 0000000..3f55970
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/stat.h
@@ -0,0 +1,69 @@
+#ifndef _ABIBITS_STAT_H
+#define _ABIBITS_STAT_H
+
+#include <abi-bits/uid_t.h>
+#include <abi-bits/gid_t.h>
+#include <bits/off_t.h>
+#include <abi-bits/mode_t.h>
+#include <abi-bits/dev_t.h>
+#include <abi-bits/ino_t.h>
+#include <abi-bits/blksize_t.h>
+#include <abi-bits/blkcnt_t.h>
+#include <abi-bits/nlink_t.h>
+#include <bits/ansi/time_t.h>
+#include <bits/ansi/timespec.h>
+
+#define S_IFMT 0x0F000
+#define S_IFBLK 0x06000
+#define S_IFCHR 0x02000
+#define S_IFIFO 0x01000
+#define S_IFREG 0x08000
+#define S_IFDIR 0x04000
+#define S_IFLNK 0x0A000
+#define S_IFSOCK 0x0C000
+
+#define S_IRWXU 0700
+#define S_IRUSR 0400
+#define S_IWUSR 0200
+#define S_IXUSR 0100
+#define S_IRWXG 070
+#define S_IRGRP 040
+#define S_IWGRP 020
+#define S_IXGRP 010
+#define S_IRWXO 07
+#define S_IROTH 04
+#define S_IWOTH 02
+#define S_IXOTH 01
+#define S_ISUID 04000
+#define S_ISGID 02000
+#define S_ISVTX 01000
+
+#define S_IREAD S_IRUSR
+#define S_IWRITE S_IWUSR
+#define S_IEXEC S_IXUSR
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct stat {
+ dev_t st_dev;
+ ino_t st_ino;
+ mode_t st_mode;
+ nlink_t st_nlink;
+ uid_t st_uid;
+ gid_t st_gid;
+ dev_t st_rdev;
+ off_t st_size;
+ struct timespec st_atim;
+ struct timespec st_mtim;
+ struct timespec st_ctim;
+ blksize_t st_blksize;
+ blkcnt_t st_blocks;
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // _ABIBITS_STAT_H
diff --git a/lib/mlibc/abis/ironclad/statfs.h b/lib/mlibc/abis/ironclad/statfs.h
new file mode 100644
index 0000000..60c977f
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/statfs.h
@@ -0,0 +1,28 @@
+#ifndef _ABIBITS_STATFS_H
+#define _ABIBITS_STATFS_H
+
+#include <abi-bits/fsblkcnt_t.h>
+#include <abi-bits/fsfilcnt_t.h>
+
+typedef struct __mlibc_fsid {
+ int __val[2];
+} fsid_t;
+
+struct statfs {
+ unsigned long f_type;
+ unsigned long f_bsize;
+ fsblkcnt_t f_blocks;
+ fsblkcnt_t f_bfree;
+ fsblkcnt_t f_bavail;
+
+ fsfilcnt_t f_files;
+ fsfilcnt_t f_ffree;
+ fsid_t f_fsid;
+ unsigned long f_namelen;
+ unsigned long f_frsize;
+ unsigned long f_flags;
+ unsigned long __f_spare[4];
+};
+
+#endif /* _ABIBITS_STATFS_H */
+
diff --git a/lib/mlibc/abis/ironclad/statvfs.h b/lib/mlibc/abis/ironclad/statvfs.h
new file mode 100644
index 0000000..d4fc416
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/statvfs.h
@@ -0,0 +1,30 @@
+#ifndef _ABIBITS_STATVFS_H
+#define _ABIBITS_STATVFS_H
+
+#include <abi-bits/fsblkcnt_t.h>
+#include <abi-bits/fsfilcnt_t.h>
+
+#define ST_RDONLY 1
+#define ST_NOSUID 2
+#define ST_MANDLOCK 64
+
+// On Linux, this struct is not directly used by the kernel.
+struct statvfs {
+ unsigned long f_bsize;
+ unsigned long f_frsize;
+ fsblkcnt_t f_blocks;
+ fsblkcnt_t f_bfree;
+ fsblkcnt_t f_bavail;
+
+ fsfilcnt_t f_files;
+ fsfilcnt_t f_ffree;
+ fsfilcnt_t f_favail;
+
+ unsigned long f_fsid;
+ unsigned long f_flag;
+ unsigned long f_namemax;
+ char f_basetype[80];
+};
+
+#endif /* _ABIBITS_STATVFS_H */
+
diff --git a/lib/mlibc/abis/ironclad/suseconds_t.h b/lib/mlibc/abis/ironclad/suseconds_t.h
new file mode 100644
index 0000000..723ddfa
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/suseconds_t.h
@@ -0,0 +1,8 @@
+#ifndef _ABIBITS_SUSECONDS_T_H
+#define _ABIBITS_SUSECONDS_T_H
+
+#include <bits/types.h>
+
+typedef __mlibc_int64 suseconds_t;
+
+#endif /* _ABIBITS_SUSECONDS_T_H */
diff --git a/lib/mlibc/abis/ironclad/termios.h b/lib/mlibc/abis/ironclad/termios.h
new file mode 100644
index 0000000..4dd5987
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/termios.h
@@ -0,0 +1,116 @@
+#ifndef _ABIBITS_TERMIOS_H
+#define _ABIBITS_TERMIOS_H
+
+typedef unsigned int cc_t;
+typedef unsigned int speed_t;
+typedef unsigned int tcflag_t;
+
+// indices for the c_cc array in struct termios
+#define NCCS 11
+#define VEOF 0
+#define VEOL 1
+#define VERASE 2
+#define VINTR 3
+#define VKILL 4
+#define VMIN 5
+#define VQUIT 6
+#define VSTART 7
+#define VSTOP 8
+#define VSUSP 9
+#define VTIME 10
+
+// bitwise flags for c_iflag in struct termios
+#define BRKINT 0x0001
+#define ICRNL 0x0002
+#define IGNBRK 0x0004
+#define IGNCR 0x0008
+#define IGNPAR 0x0010
+#define INLCR 0x0020
+#define INPCK 0x0040
+#define ISTRIP 0x0080
+#define IXANY 0x0100
+#define IXOFF 0x0200
+#define IXON 0x0400
+#define PARMRK 0x0800
+#define ECHOCTL 0001000
+#define IMAXBEL 0020000
+#define ECHOKE 0004000
+
+// bitwise flags for c_oflag in struct termios
+#define OPOST 0x0001
+#define ONLCR 0x0002
+#define OCRNL 0x0004
+#define ONOCR 0x0008
+#define ONLRET 0x0010
+#define OFDEL 0x0020
+#define OFILL 0x0040
+
+#define NLDLY 0x0080
+#define NL0 0x0000
+#define NL1 0x0080
+
+#define CRDLY 0x0300
+#define CR0 0x0000
+#define CR1 0x0100
+#define CR2 0x0200
+#define CR3 0x0300
+
+#define TABDLY 0x0C00
+#define TAB0 0x0000
+#define TAB1 0x0400
+#define TAB2 0x0800
+#define TAB3 0x0C00
+
+#define BSDLY 0x1000
+#define BS0 0x0000
+#define BS1 0x1000
+
+#define VTDLY 0x2000
+#define VT0 0x0000
+#define VT1 0x2000
+
+#define FFDLY 0x4000
+#define FF0 0x0000
+#define FF1 0x4000
+
+// bitwise constants for c_cflag in struct termios
+#define CSIZE 0x0003
+#define CS5 0x0000
+#define CS6 0x0001
+#define CS7 0x0002
+#define CS8 0x0003
+
+#define CSTOPB 0x0004
+#define CREAD 0x0008
+#define PARENB 0x0010
+#define PARODD 0x0020
+#define HUPCL 0x0040
+#define CLOCAL 0x0080
+
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+#define CBAUD 0x100F
+#endif
+
+// bitwise constants for c_lflag in struct termios
+#define ECHO 0x0001
+#define ECHOE 0x0002
+#define ECHOK 0x0004
+#define ECHONL 0x0008
+#define ICANON 0x0010
+#define IEXTEN 0x0020
+#define ISIG 0x0040
+#define NOFLSH 0x0080
+#define TOSTOP 0x0100
+#define ECHOPRT 0x0200
+
+struct termios {
+ tcflag_t c_iflag;
+ tcflag_t c_oflag;
+ tcflag_t c_cflag;
+ tcflag_t c_lflag;
+ cc_t c_cc[NCCS];
+ speed_t ibaud;
+ speed_t obaud;
+};
+
+#endif
diff --git a/lib/mlibc/abis/ironclad/time.h b/lib/mlibc/abis/ironclad/time.h
new file mode 100644
index 0000000..3f49db3
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/time.h
@@ -0,0 +1,15 @@
+#ifndef _ABIBITS_TIME_H
+#define _ABIBITS_TIME_H
+
+#include <bits/posix/timeval.h>
+
+struct itimerval {
+ struct timeval it_interval; /* Interval for periodic timer */
+ struct timeval it_value; /* Time until next expiration */
+};
+
+#define ITIMER_REAL 0
+#define ITIMER_VIRTUAL 1
+#define ITIMER_PROF 2
+
+#endif // _ABIBITS_TIME_H
diff --git a/lib/mlibc/abis/ironclad/uid_t.h b/lib/mlibc/abis/ironclad/uid_t.h
new file mode 100644
index 0000000..1688d07
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/uid_t.h
@@ -0,0 +1,6 @@
+#ifndef _ABIBITS_UID_T_H
+#define _ABIBITS_UID_T_H
+
+typedef unsigned int uid_t;
+
+#endif // _ABIBITS_UID_T_H
diff --git a/lib/mlibc/abis/ironclad/utsname.h b/lib/mlibc/abis/ironclad/utsname.h
new file mode 100644
index 0000000..2cd2226
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/utsname.h
@@ -0,0 +1,12 @@
+#ifndef _ABIBITS_UTSNAME_T_H
+#define _ABIBITS_UTSNAME_T_H
+
+struct utsname {
+ char sysname[65];
+ char nodename[65];
+ char release[65];
+ char version[65];
+ char machine[65];
+};
+
+#endif // _ABIBITS_UTSNAME_T_H
diff --git a/lib/mlibc/abis/ironclad/vm-flags.h b/lib/mlibc/abis/ironclad/vm-flags.h
new file mode 100644
index 0000000..a686cd3
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/vm-flags.h
@@ -0,0 +1,46 @@
+#ifndef _ABIBITS_MMAP_FLAGS_H
+#define _ABIBITS_MMAP_FLAGS_H
+
+#define PROT_NONE 0x00
+#define PROT_READ 0x01
+#define PROT_WRITE 0x02
+#define PROT_EXEC 0x04
+
+#define MAP_FAILED ((void *)(-1))
+#define MAP_FILE 0x00
+#define MAP_PRIVATE 0x01
+#define MAP_SHARED 0x02
+#define MAP_FIXED 0x04
+#define MAP_ANON 0x08
+#define MAP_ANONYMOUS 0x08
+#define MAP_NORESERVE 0x10
+#define MAP_WC 0b10000
+
+#define MS_ASYNC 0x01
+#define MS_SYNC 0x02
+#define MS_INVALIDATE 0x04
+
+#define MCL_CURRENT 0x01
+#define MCL_FUTURE 0x02
+
+#define POSIX_MADV_NORMAL 1
+#define POSIX_MADV_SEQUENTIAL 2
+#define POSIX_MADV_RANDOM 3
+#define POSIX_MADV_DONTNEED 4
+#define POSIX_MADV_WILLNEED 5
+
+#define MADV_NORMAL 0
+#define MADV_RANDOM 1
+#define MADV_SEQUENTIAL 2
+#define MADV_WILLNEED 3
+#define MADV_DONTNEED 4
+#define MADV_FREE 8
+
+// Linux extensions:
+#define MREMAP_MAYMOVE 1
+#define MREMAP_FIXED 2
+
+#define MFD_CLOEXEC 1U
+#define MFD_ALLOW_SEALING 2U
+
+#endif // _ABIBITS_MMAP_FLAGS_H
diff --git a/lib/mlibc/abis/ironclad/wait.h b/lib/mlibc/abis/ironclad/wait.h
new file mode 100644
index 0000000..5aa6bb8
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/wait.h
@@ -0,0 +1,25 @@
+#ifndef _ABIBITS_WAIT_H
+#define _ABIBITS_WAIT_H
+
+#define WCONTINUED 1
+#define WNOHANG 2
+#define WUNTRACED 4
+#define WEXITED 8
+#define WNOWAIT 16
+#define WSTOPPED 32
+
+#define __WALL 0x40000000
+#define __WCLONE 0x80000000
+
+#define WCOREFLAG 0x80
+
+#define WEXITSTATUS(x) ((x) & 0x000000FF)
+#define WIFCONTINUED(x) ((x) & 0x00000100)
+#define WIFEXITED(x) ((x) & 0x00000200)
+#define WIFSIGNALED(x) ((x) & 0x00000400)
+#define WIFSTOPPED(x) ((x) & 0x00000800)
+#define WSTOPSIG(x) (((x) & 0x00FF0000) >> 16)
+#define WTERMSIG(x) (((x) & 0xFF000000) >> 24)
+#define WCOREDUMP(x) ((x) & WCOREFLAG)
+
+#endif //_ABIBITS_WAIT_H
diff --git a/lib/mlibc/abis/ironclad/xattr.h b/lib/mlibc/abis/ironclad/xattr.h
new file mode 100644
index 0000000..c0e7fbe
--- /dev/null
+++ b/lib/mlibc/abis/ironclad/xattr.h
@@ -0,0 +1,21 @@
+#ifndef MLIBC_ABIS_LINUX_XATTR_H
+#define MLIBC_ABIS_LINUX_XATTR_H
+
+/* __USE_KERNEL_XATTR_DEFS is exported when XATTR_* are emitted, and
+ * __UAPI_DEF_XATTR is used to determine the behaviour of the
+ * <linux/xattr.h> header (through <linux/libc-compat.h>), if it's set
+ * to 1, the header exports xattr defines and __USE_KERNEL_XATTR_DEFS.
+ * This applies for pretty much all other defines in libc-compat.h
+ * AFAICT.
+ */
+#ifndef __USE_KERNEL_XATTR_DEFS
+enum {
+ XATTR_CREATE = 1,
+#define XATTR_CREATE XATTR_CREATE
+ XATTR_REPLACE = 2,
+#define XATTR_REPLACE XATTR_REPLACE
+};
+# define __UAPI_DEF_XATTR 0
+#endif
+
+#endif /* MLIBC_ABIS_LINUX_XATTR_H */