From ce701555434c6ad5f01886fd2033d24915279f83 Mon Sep 17 00:00:00 2001
From: Michael Tuexen <tuexen@fh-muenster.de>
Date: Sat, 21 Apr 2018 11:53:35 +0200
Subject: [PATCH] Add symbols for MacOS.

---
 gtests/net/packetdrill/Makefile.Darwin  |   1 +
 gtests/net/packetdrill/Makefile.common  |   3 +-
 gtests/net/packetdrill/symbols_darwin.c | 421 ++++++++++++++++++++++++
 3 files changed, 424 insertions(+), 1 deletion(-)
 create mode 100644 gtests/net/packetdrill/symbols_darwin.c

diff --git a/gtests/net/packetdrill/Makefile.Darwin b/gtests/net/packetdrill/Makefile.Darwin
index 3f374222..c0802126 100644
--- a/gtests/net/packetdrill/Makefile.Darwin
+++ b/gtests/net/packetdrill/Makefile.Darwin
@@ -1,3 +1,4 @@
 packetdrill-ext-libs := -pthread -lpcap
+CFLAGS = -D__APPLE_USE_RFC_3542
 LDFLAGS =
 include Makefile.common
diff --git a/gtests/net/packetdrill/Makefile.common b/gtests/net/packetdrill/Makefile.common
index cfd80e3d..d7ce394e 100644
--- a/gtests/net/packetdrill/Makefile.common
+++ b/gtests/net/packetdrill/Makefile.common
@@ -1,6 +1,6 @@
 all: binaries
 
-CFLAGS = -g -Wall -Werror -Wno-unknown-warning-option -Wno-address-of-packed-member
+CFLAGS += -g -Wall -Werror -Wno-unknown-warning-option -Wno-address-of-packed-member
 LDFLAGS ?= -static
 
 parser.o: parser.y
@@ -20,6 +20,7 @@ packetdrill-lib := \
          symbols_freebsd.o \
          symbols_openbsd.o \
          symbols_netbsd.o \
+         symbols_darwin.o \
          gre_packet.o icmp_packet.o ip_packet.o \
          sctp_packet.o tcp_packet.o udp_packet.o udplite_packet.o \
          mpls_packet.o \
diff --git a/gtests/net/packetdrill/symbols_darwin.c b/gtests/net/packetdrill/symbols_darwin.c
new file mode 100644
index 00000000..f6895ca7
--- /dev/null
+++ b/gtests/net/packetdrill/symbols_darwin.c
@@ -0,0 +1,421 @@
+/*
+ * Copyright 2013 Google Inc.
+ * Copyright 2018 Michael Tuexen
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+/*
+ * Author: tuexen@fh-muenster.de (Michael Tuexen)
+ *
+ * Definitions of strace-style symbols for FreeBSD.
+ * Allows us to map from symbolic strings to integers for system call inputs.
+ */
+
+#if defined(__APPLE__)
+
+#include "symbols.h"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <netinet/in.h>
+#include <netinet/udp.h>
+#include <poll.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/unistd.h>
+
+#include "tcp.h"
+
+/* A table of platform-specific string->int mappings. */
+struct int_symbol platform_symbols_table[] = {
+
+	/* /usr/include/sys/socket.h */
+	{ SO_DEBUG,                         "SO_DEBUG"                        },
+	{ SO_ACCEPTCONN,                    "SO_ACCEPTCONN"                   },
+	{ SO_REUSEADDR,                     "SO_REUSEADDR"                    },
+	{ SO_KEEPALIVE,                     "SO_KEEPALIVE"                    },
+	{ SO_DONTROUTE,                     "SO_DONTROUTE"                    },
+	{ SO_BROADCAST,                     "SO_BROADCAST"                    },
+	{ SO_USELOOPBACK,                   "SO_USELOOPBACK"                  },
+	{ SO_LINGER,                        "SO_LINGER"                       },
+	{ SO_OOBINLINE,                     "SO_OOBINLINE"                    },
+	{ SO_REUSEPORT,                     "SO_REUSEPORT"                    },
+	{ SO_TIMESTAMP,                     "SO_TIMESTAMP"                    },
+	{ SO_TIMESTAMP_MONOTONIC,           "SO_TIMESTAMP_MONOTONIC"          },
+	{ SO_DONTTRUNC,                     "SO_DONTTRUNC"                    },
+	{ SO_WANTMORE,                      "SO_WANTMORE"                     },
+	{ SO_WANTOOBFLAG,                   "SO_WANTOOBFLAG"                  },
+	{ SO_SNDBUF,                        "SO_SNDBUF"                       },
+	{ SO_RCVBUF,                        "SO_RCVBUF"                       },
+	{ SO_SNDLOWAT,                      "SO_SNDLOWAT"                     },
+	{ SO_RCVLOWAT,                      "SO_RCVLOWAT"                     },
+	{ SO_SNDTIMEO,                      "SO_SNDTIMEO"                     },
+	{ SO_RCVTIMEO,                      "SO_RCVTIMEO"                     },
+	{ SO_ERROR,                         "SO_ERROR"                        },
+	{ SO_TYPE,                          "SO_TYPE"                         },
+	{ SO_LABEL,                         "SO_LABEL"                        },
+	{ SO_PEERLABEL,                     "SO_PEERLABEL"                    },
+	{ SO_NREAD,                         "SO_NREAD"                        },
+	{ SO_NKE,                           "SO_NKE"                          },
+	{ SO_NOSIGPIPE,                     "SO_NOSIGPIPE"                    },
+	{ SO_NOADDRERR,                     "SO_NOADDRERR"                    },
+	{ SO_NWRITE,                        "SO_NWRITE"                       },
+	{ SO_REUSESHAREUID,                 "SO_REUSESHAREUID"                },
+	{ SO_LINGER_SEC,                    "SO_LINGER_SEC"                   },
+	{ SO_RANDOMPORT,                    "SO_RANDOMPORT"                   },
+	{ SO_NP_EXTENSIONS,                 "SO_NP_EXTENSIONS"                },
+	{ SO_NUMRCVPKT,                     "SO_NUMRCVPKT"                    },
+
+	/* /usr/include/netinet/in.h */
+	{ IP_OPTIONS,                       "IP_OPTIONS"                      },
+	{ IP_HDRINCL,                       "IP_HDRINCL"                      },
+	{ IP_TOS,                           "IP_TOS"                          },
+	{ IP_TTL,                           "IP_TTL"                          },
+	{ IP_RECVOPTS,                      "IP_RECVOPTS"                     },
+	{ IP_RECVRETOPTS,                   "IP_RECVRETOPTS"                  },
+	{ IP_RECVDSTADDR,                   "IP_RECVDSTADDR"                  },
+	{ IP_RETOPTS,                       "IP_RETOPTS"                      },
+	{ IP_PORTRANGE,                     "IP_PORTRANGE"                    },
+	{ IP_RECVIF,                        "IP_RECVIF"                       },
+	{ IP_RECVTTL,                       "IP_RECVTTL"                      },
+	{ IP_PKTINFO,                       "IP_PKTINFO,"                     },
+	{ IP_RECVPKTINFO,                   "IP_RECVPKTINFO"                  },
+	{ IP_RECVTOS,                       "IP_RECVTOS"                      },
+
+	/* /usr/include/netinet6/in6.h */
+	{ IPV6_UNICAST_HOPS,                "IPV6_UNICAST_HOPS"               },
+	{ IPV6_PORTRANGE,                   "IPV6_PORTRANGE"                  },
+	{ ICMP6_FILTER,                     "ICMP6_FILTER"                    },
+	{ IPV6_2292PKTINFO,                 "IPV6_2292PKTINFO"                },
+	{ IPV6_2292HOPLIMIT,                "IPV6_2292HOPLIMIT"               },
+	{ IPV6_2292NEXTHOP,                 "IPV6_2292NEXTHOP"                },
+	{ IPV6_2292HOPOPTS,                 "IPV6_2292HOPOPTS"                },
+	{ IPV6_2292DSTOPTS,                 "IPV6_2292DSTOPTS"                },
+	{ IPV6_2292RTHDR,                   "IPV6_2292RTHDR"                  },
+	{ IPV6_2292PKTOPTIONS,              "IPV6_2292PKTOPTIONS"             },
+	{ IPV6_CHECKSUM,                    "IPV6_CHECKSUM"                   },
+	{ IPV6_V6ONLY,                      "IPV6_V6ONLY"                     },
+	{ IPV6_BINDV6ONLY,                  "IPV6_BINDV6ONLY"                 },
+	{ IPV6_RECVTCLASS,                  "IPV6_RECVTCLASS"                 },
+	{ IPV6_TCLASS,                      "IPV6_TCLASS"                     },
+	{ IPV6_RTHDRDSTOPTS,                "IPV6_RTHDRDSTOPTS"               },
+	{ IPV6_RECVPKTINFO,                 "IPV6_RECVPKTINFO"                },
+	{ IPV6_RECVHOPLIMIT,                "IPV6_RECVHOPLIMIT"               },
+	{ IPV6_RECVRTHDR,                   "IPV6_RECVRTHDR"                  },
+	{ IPV6_RECVHOPOPTS,                 "IPV6_RECVHOPOPTS"                },
+	{ IPV6_RECVDSTOPTS,                 "IPV6_RECVDSTOPTS"                },
+	{ IPV6_USE_MIN_MTU,                 "IPV6_USE_MIN_MTU"                },
+	{ IPV6_RECVPATHMTU,                 "IPV6_RECVPATHMTU"                },
+	{ IPV6_PATHMTU,                     "IPV6_PATHMTU"                    },
+	{ IPV6_3542PKTINFO,                 "IPV6_3542PKTINFO"                },
+	{ IPV6_3542HOPLIMIT,                "IPV6_3542HOPLIMIT"               },
+	{ IPV6_3542NEXTHOP,                 "IPV6_3542NEXTHOP"                },
+	{ IPV6_3542HOPOPTS,                 "IPV6_3542HOPOPTS"                },
+	{ IPV6_3542DSTOPTS,                 "IPV6_3542DSTOPTS"                },
+	{ IPV6_3542RTHDR,                   "IPV6_3542RTHDR"                  },
+	{ IPV6_PKTINFO,                     "IPV6_PKTINFO"                    },
+	{ IPV6_HOPLIMIT,                    "IPV6_HOPLIMIT"                   },
+	{ IPV6_NEXTHOP,                     "IPV6_NEXTHOP"                    },
+	{ IPV6_HOPOPTS,                     "IPV6_HOPOPTS"                    },
+	{ IPV6_DSTOPTS,                     "IPV6_DSTOPTS"                    },
+	{ IPV6_RTHDR,                       "IPV6_RTHDR"                      },
+	{ IPV6_AUTOFLOWLABEL,               "IPV6_AUTOFLOWLABEL"              },
+	{ IPV6_DONTFRAG,                    "IPV6_DONTFRAG"                   },
+	{ IPV6_PREFER_TEMPADDR,             "IPV6_PREFER_TEMPADDR"            },
+	{ IPV6_BOUND_IF,                    "IPV6_BOUND_IF"                   },
+
+	/* /usr/include/netinet/tcp.h */
+	{ TCP_NODELAY,                      "TCP_NODELAY"                     },
+	{ TCP_MAXSEG,                       "TCP_MAXSEG"                      },
+	{ TCP_NOPUSH,                       "TCP_NOPUSH"                      },
+	{ TCP_NOOPT,                        "TCP_NOOPT"                       },
+	{ TCP_KEEPALIVE,                    "TCP_KEEPALIVE"                   },
+	{ TCP_CONNECTIONTIMEOUT,            "TCP_CONNECTIONTIMEOUT"           },
+	{ PERSIST_TIMEOUT,                  "PERSIST_TIMEOUT"                 },
+	{ TCP_RXT_CONNDROPTIME,             "TCP_RXT_CONNDROPTIME"            },
+	{ TCP_RXT_FINDROP,                  "TCP_RXT_FINDROP"                 },
+	{ TCP_KEEPINTVL,                    "TCP_KEEPINTVL"                   },
+	{ TCP_KEEPCNT,                      "TCP_KEEPCNT"                     },
+	{ TCP_SENDMOREACKS,                 "TCP_SENDMOREACKS"                },
+	{ TCP_ENABLE_ECN,                   "TCP_ENABLE_ECN"                  },
+	{ TCP_FASTOPEN,                     "TCP_FASTOPEN"                    },
+	{ TCP_CONNECTION_INFO,              "TCP_CONNECTION_INFO"             },
+	{ TCP_NOTSENT_LOWAT,                "TCP_NOTSENT_LOWAT"               },
+
+	/* /usr/include/sys/fcntl.h */
+	{ O_RDONLY,                         "O_RDONLY"                        },
+	{ O_WRONLY,                         "O_WRONLY"                        },
+	{ O_RDWR,                           "O_RDWR"                          },
+	{ O_ACCMODE,                        "O_ACCMODE"                       },
+	{ FREAD,                            "FREAD"                           },
+	{ FWRITE,                           "FWRITE"                          },
+	{ O_NONBLOCK,                       "O_NONBLOCK"                      },
+	{ O_APPEND,                         "O_APPEND"                        },
+	{ O_SHLOCK,                         "O_SHLOCK"                        },
+	{ O_EXLOCK,                         "O_EXLOCK"                        },
+	{ O_ASYNC,                          "O_ASYNC"                         },
+	{ O_FSYNC,                          "O_FSYNC"                         },
+	{ O_NOFOLLOW,                       "O_NOFOLLOW"                      },
+	{ O_CREAT,                          "O_CREAT"                         },
+	{ O_TRUNC,                          "O_TRUNC"                         },
+	{ O_EXCL,                           "O_EXCL"                          },
+	{ AT_FDCWD,                         "AT_FDCWD"                        },
+	{ AT_EACCESS,                       "AT_EACCESS"                      },
+	{ AT_SYMLINK_NOFOLLOW,              "AT_SYMLINK_NOFOLLOW"             },
+	{ AT_SYMLINK_FOLLOW,                "AT_SYMLINK_FOLLOW"               },
+	{ AT_REMOVEDIR,                     "AT_REMOVEDIR"                    },
+	{ O_EVTONLY,                        "O_EVTONLY"                       },
+	{ O_NOCTTY,                         "O_NOCTTY"                        },
+	{ O_DIRECTORY,                      "O_DIRECTORY"                     },
+	{ O_SYMLINK,                        "O_SYMLINK"                       },
+	{ O_CLOEXEC,                        "O_CLOEXEC"                       },
+	{ O_DP_GETRAWENCRYPTED,             "O_DP_GETRAWENCRYPTED"            },
+	{ O_DP_GETRAWUNENCRYPTED,           "O_DP_GETRAWUNENCRYPTED"          },
+	{ FAPPEND,                          "FAPPEND"                         },
+	{ FASYNC,                           "FASYNC"                          },
+	{ FFSYNC,                           "FFSYNC"                          },
+	{ FFDSYNC,                          "FFDSYNC"                         },
+	{ FNONBLOCK,                        "FNONBLOCK"                       },
+	{ FNDELAY,                          "FNDELAY"                         },
+	{ O_NDELAY,                         "O_NDELAY"                        },
+	{ CPF_OVERWRITE,                    "CPF_OVERWRITE"                   },
+	{ CPF_IGNORE_MODE,                  "CPF_IGNORE_MODE"                 },
+	{ F_DUPFD,                          "F_DUPFD"                         },
+	{ F_GETFD,                          "F_GETFD"                         },
+	{ F_SETFD,                          "F_SETFD"                         },
+	{ F_GETFL,                          "F_GETFL"                         },
+	{ F_SETFL,                          "F_SETFL"                         },
+	{ F_GETOWN,                         "F_GETOWN"                        },
+	{ F_SETOWN,                         "F_SETOWN"                        },
+	{ F_GETLK,                          "F_GETLK"                         },
+	{ F_SETLK,                          "F_SETLK"                         },
+	{ F_SETLKW,                         "F_SETLKW"                        },
+	{ F_SETLKWTIMEOUT,                  "F_SETLKWTIMEOUT"                 },
+	{ F_FLUSH_DATA,                     "F_FLUSH_DATA"                    },
+	{ F_CHKCLEAN,                       "F_CHKCLEAN"                      },
+	{ F_PREALLOCATE,                    "F_PREALLOCATE"                   },
+	{ F_SETSIZE,                        "F_SETSIZE"                       },
+	{ F_RDADVISE,                       "F_RDADVISE"                      },
+	{ F_RDAHEAD,                        "F_RDAHEAD"                       },
+	{ F_NOCACHE,                        "F_NOCACHE"                       },
+	{ F_LOG2PHYS,                       "F_LOG2PHYS"                      },
+	{ F_GETPATH,                        "F_GETPATH"                       },
+	{ F_FULLFSYNC,                      "F_FULLFSYNC"                     },
+	{ F_PATHPKG_CHECK,                  "F_PATHPKG_CHECK"                 },
+	{ F_FREEZE_FS,                      "F_FREEZE_FS"                     },
+	{ F_THAW_FS,                        "F_THAW_FS"                       },
+	{ F_GLOBAL_NOCACHE,                 "F_GLOBAL_NOCACHE"                },
+	{ F_ADDSIGS,                        "F_ADDSIGS"                       },
+	{ F_ADDFILESIGS,                    "F_ADDFILESIGS"                   },
+	{ F_NODIRECT,                       "F_NODIRECT"                      },
+	{ F_GETPROTECTIONCLASS,             "F_GETPROTECTIONCLASS"            },
+	{ F_SETPROTECTIONCLASS,             "F_SETPROTECTIONCLASS"            },
+	{ F_LOG2PHYS_EXT,                   "F_LOG2PHYS_EXT"                  },
+	{ F_GETLKPID,                       "F_GETLKPID"                      },
+	{ F_SETBACKINGSTORE,                "F_SETBACKINGSTORE"               },
+	{ F_GETPATH_MTMINFO,                "F_GETPATH_MTMINFO"               },
+	{ F_GETCODEDIR,                     "F_GETCODEDIR"                    },
+	{ F_SETNOSIGPIPE,                   "F_SETNOSIGPIPE"                  },
+	{ F_GETNOSIGPIPE,                   "F_GETNOSIGPIPE"                  },
+	{ F_TRANSCODEKEY,                   "F_TRANSCODEKEY"                  },
+	{ F_SINGLE_WRITER,                  "F_SINGLE_WRITER"                 },
+	{ F_GETPROTECTIONLEVEL,             "F_GETPROTECTIONLEVEL"            },
+	{ F_FINDSIGS,                       "F_FINDSIGS"                      },
+	{ F_ADDFILESIGS_FOR_DYLD_SIM,       "F_ADDFILESIGS_FOR_DYLD_SIM"      },
+	{ F_BARRIERFSYNC,                   "F_BARRIERFSYNC"                  },
+	{ F_ADDFILESIGS_RETURN,             "F_ADDFILESIGS_RETURN"            },
+	{ F_CHECK_LV,                       "F_CHECK_LV"                      },
+	{ F_PUNCHHOLE,                      "F_PUNCHHOLE"                     },
+	{ F_TRIM_ACTIVE_FILE,               "F_TRIM_ACTIVE_FILE"              },
+	{ FCNTL_FS_SPECIFIC_BASE,           "F_UFCNTL_FS_SPECIFIC_BASENLCK"   },
+	{ F_DUPFD_CLOEXEC,                  "F_DUPFD_CLOEXEC"                 },
+	{ FD_CLOEXEC,                       "FD_CLOEXEC"                      },
+	{ F_RDLCK,                          "F_RDLCK"                         },
+	{ F_UNLCK,                          "F_UNLCK"                         },
+	{ F_WRLCK,                          "F_WRLCK"                         },
+	{ F_ALLOCATECONTIG,                 "F_ALLOCATECONTIG"                },
+	{ F_ALLOCATEALL,                    "F_ALLOCATEALL"                   },
+	{ F_PEOFPOSMODE,                    "F_PEOFPOSMODE"                   },
+	{ F_VOLPOSMODE,                     "F_VOLPOSMODE"                    },
+
+	/* /usr/include/sys/unistd.h */
+	{ SEEK_SET,                         "SEEK_SET"                        },
+	{ SEEK_CUR,                         "SEEK_CUR"                        },
+	{ SEEK_END,                         "SEEK_END"                        },
+
+	/* /usr/include/sys/socket.h */
+	{ MSG_OOB,                          "MSG_OOB"                         },
+	{ MSG_PEEK,                         "MSG_PEEK"                        },
+	{ MSG_DONTROUTE,                    "MSG_DONTROUTE"                   },
+	{ MSG_EOR,                          "MSG_EOR"                         },
+	{ MSG_TRUNC,                        "MSG_TRUNC"                       },
+	{ MSG_CTRUNC,                       "MSG_CTRUNC"                      },
+	{ MSG_WAITALL,                      "MSG_WAITALL"                     },
+	{ MSG_DONTWAIT,                     "MSG_DONTWAIT"                    },
+	{ MSG_EOF,                          "MSG_EOF"                         },
+	{ MSG_FLUSH,                        "MSG_FLUSH"                       },
+	{ MSG_HOLD,                         "MSG_HOLD"                        },
+	{ MSG_SEND,                         "MSG_SEND"                        },
+	{ MSG_HAVEMORE,                     "MSG_HAVEMORE"                    },
+	{ MSG_RCVMORE,                      "MSG_RCVMORE"                     },
+	{ MSG_NEEDSA,                       "MSG_NEEDSA"                      },
+
+	/* /usr/include/sys/filio.h */
+	{ FIOCLEX,                          "FIOCLEX"                         },
+	{ FIONCLEX,                         "FIONCLEX"                        },
+	{ FIONREAD,                         "FIONREAD"                        },
+	{ FIONBIO,                          "FIONBIO"                         },
+	{ FIOASYNC,                         "FIOASYNC"                        },
+	{ FIOSETOWN,                        "FIOSETOWN"                       },
+	{ FIOGETOWN,                        "FIOGETOWN"                       },
+	{ FIODTYPE,                         "FIODTYPE"                        },
+
+	/* /usr/include/sys/poll.h */
+	{ POLLIN,                           "POLLIN"                          },
+	{ POLLPRI,                          "POLLPRI"                         },
+	{ POLLOUT,                          "POLLOUT"                         },
+	{ POLLRDNORM,                       "POLLRDNORM"                      },
+	{ POLLWRNORM,                       "POLLWRNORM"                      },
+	{ POLLRDBAND,                       "POLLRDBAND"                      },
+	{ POLLWRBAND,                       "POLLWRBAND"                      },
+	{ POLLERR,                          "POLLERR"                         },
+	{ POLLHUP,                          "POLLHUP"                         },
+	{ POLLNVAL,                         "POLLNVAL"                        },
+
+	/* /usr/include/sys/errno.h */
+	{ EPERM,                            "EPERM"                           },
+	{ ENOENT,                           "ENOENT"                          },
+	{ ESRCH,                            "ESRCH"                           },
+	{ EINTR,                            "EINTR"                           },
+	{ EIO,                              "EIO"                             },
+	{ ENXIO,                            "ENXIO"                           },
+	{ E2BIG,                            "E2BIG"                           },
+	{ ENOEXEC,                          "ENOEXEC"                         },
+	{ EBADF,                            "EBADF"                           },
+	{ ECHILD,                           "ECHILD"                          },
+	{ EDEADLK,                          "EDEADLK"                         },
+	{ ENOMEM,                           "ENOMEM"                          },
+	{ EACCES,                           "EACCES"                          },
+	{ EFAULT,                           "EFAULT"                          },
+	{ ENOTBLK,                          "ENOTBLK"                         },
+	{ EBUSY,                            "EBUSY"                           },
+	{ EEXIST,                           "EEXIST"                          },
+	{ EXDEV,                            "EXDEV"                           },
+	{ ENODEV,                           "ENODEV"                          },
+	{ ENOTDIR,                          "ENOTDIR"                         },
+	{ EISDIR,                           "EISDIR"                          },
+	{ EINVAL,                           "EINVAL"                          },
+	{ ENFILE,                           "ENFILE"                          },
+	{ EMFILE,                           "EMFILE"                          },
+	{ ENOTTY,                           "ENOTTY"                          },
+	{ ETXTBSY,                          "ETXTBSY"                         },
+	{ EFBIG,                            "EFBIG"                           },
+	{ ENOSPC,                           "ENOSPC"                          },
+	{ ESPIPE,                           "ESPIPE"                          },
+	{ EROFS,                            "EROFS"                           },
+	{ EMLINK,                           "EMLINK"                          },
+	{ EPIPE,                            "EPIPE"                           },
+	{ EDOM,                             "EDOM"                            },
+	{ ERANGE,                           "ERANGE"                          },
+	{ EAGAIN,                           "EAGAIN"                          },
+	{ EWOULDBLOCK,                      "EWOULDBLOCK"                     },
+	{ EINPROGRESS,                      "EINPROGRESS"                     },
+	{ EALREADY,                         "EALREADY"                        },
+	{ ENOTSOCK,                         "ENOTSOCK"                        },
+	{ EDESTADDRREQ,                     "EDESTADDRREQ"                    },
+	{ EMSGSIZE,                         "EMSGSIZE"                        },
+	{ EPROTOTYPE,                       "EPROTOTYPE"                      },
+	{ ENOPROTOOPT,                      "ENOPROTOOPT"                     },
+	{ EPROTONOSUPPORT,                  "EPROTONOSUPPORT"                 },
+	{ ESOCKTNOSUPPORT,                  "ESOCKTNOSUPPORT"                 },
+	{ EOPNOTSUPP,                       "EOPNOTSUPP"                      },
+	{ ENOTSUP,                          "ENOTSUP"                         },
+	{ EPFNOSUPPORT,                     "EPFNOSUPPORT"                    },
+	{ EAFNOSUPPORT,                     "EAFNOSUPPORT"                    },
+	{ EADDRINUSE,                       "EADDRINUSE"                      },
+	{ EADDRNOTAVAIL,                    "EADDRNOTAVAIL"                   },
+	{ ENETDOWN,                         "ENETDOWN"                        },
+	{ ENETUNREACH,                      "ENETUNREACH"                     },
+	{ ENETRESET,                        "ENETRESET"                       },
+	{ ECONNABORTED,                     "ECONNABORTED"                    },
+	{ ECONNRESET,                       "ECONNRESET"                      },
+	{ ENOBUFS,                          "ENOBUFS"                         },
+	{ EISCONN,                          "EISCONN"                         },
+	{ ENOTCONN,                         "ENOTCONN"                        },
+	{ ESHUTDOWN,                        "ESHUTDOWN"                       },
+	{ ETOOMANYREFS,                     "ETOOMANYREFS"                    },
+	{ ETIMEDOUT,                        "ETIMEDOUT"                       },
+	{ ECONNREFUSED,                     "ECONNREFUSED"                    },
+	{ ELOOP,                            "ELOOP"                           },
+	{ ENAMETOOLONG,                     "ENAMETOOLONG"                    },
+	{ EHOSTDOWN,                        "EHOSTDOWN"                       },
+	{ EHOSTUNREACH,                     "EHOSTUNREACH"                    },
+	{ ENOTEMPTY,                        "ENOTEMPTY"                       },
+	{ EPROCLIM,                         "EPROCLIM"                        },
+	{ EUSERS,                           "EUSERS"                          },
+	{ EDQUOT,                           "EDQUOT"                          },
+	{ ESTALE,                           "ESTALE"                          },
+	{ EREMOTE,                          "EREMOTE"                         },
+	{ EBADRPC,                          "EBADRPC"                         },
+	{ ERPCMISMATCH,                     "ERPCMISMATCH"                    },
+	{ EPROGUNAVAIL,                     "EPROGUNAVAIL"                    },
+	{ EPROGMISMATCH,                    "EPROGMISMATCH"                   },
+	{ EPROCUNAVAIL,                     "EPROCUNAVAIL"                    },
+	{ ENOLCK,                           "ENOLCK"                          },
+	{ ENOSYS,                           "ENOSYS"                          },
+	{ EFTYPE,                           "EFTYPE"                          },
+	{ EAUTH,                            "EAUTH"                           },
+	{ ENEEDAUTH,                        "ENEEDAUTH"                       },
+	{ EPWROFF,                          "EPWROFF"                         },
+	{ EDEVERR,                          "EDEVERR"                         },
+	{ EOVERFLOW,                        "EOVERFLOW"                       },
+	{ EBADEXEC,                         "EBADEXEC"                        },
+	{ EBADARCH,                         "EBADARCH"                        },
+	{ ESHLIBVERS,                       "ESHLIBVERS"                      },
+	{ EBADMACHO,                        "EBADMACHO"                       },
+	{ ECANCELED,                        "ECANCELED"                       },
+	{ EIDRM,                            "EIDRM"                           },
+	{ ENOMSG,                           "ENOMSG"                          },
+	{ EILSEQ,                           "EILSEQ"                          },
+	{ ENOATTR,                          "ENOATTR"                         },
+	{ EBADMSG,                          "EBADMSG"                         },
+	{ EMULTIHOP,                        "EMULTIHOP"                       },
+	{ ENODATA,                          "ENODATA"                         },
+	{ ENOLINK,                          "ENOLINK"                         },
+	{ ENOSR,                            "ENOSR"                           },
+	{ ENOSTR,                           "ENOSTR"                          },
+	{ EPROTO,                           "EPROTO"                          },
+	{ ETIME,                            "ETIME"                           },
+	{ EOPNOTSUPP,                       "EOPNOTSUPP"                      },
+	{ ENOPOLICY,                        "ENOPOLICY"                       },
+	{ ENOTRECOVERABLE,                  "ENOTRECOVERABLE"                 },
+	{ EOWNERDEAD,                       "EOWNERDEAD"                      },
+	{ EQFULL,                           "EQFULL"                          },
+
+	/* Sentinel marking the end of the table. */
+	{ 0, NULL },
+};
+
+struct int_symbol *platform_symbols(void)
+{
+	return platform_symbols_table;
+}
+
+#endif  /* __APPLE__ */
-- 
GitLab