Index: iwyu_include_picker.cc
--- iwyu_include_picker.cc.orig
+++ iwyu_include_picker.cc
@@ -136,8 +136,6 @@ const IncludeMapEntry libc_symbol_map[] = {
   { "imaxdiv_t", kPrivate, "<inttypes.h>", kPublic },
   { "intmax_t", kPrivate, "<stdint.h>", kPublic },
   { "uintmax_t", kPrivate, "<stdint.h>", kPublic },
-  { "ino64_t", kPrivate, "<sys/types.h>", kPublic },
-  { "ino64_t", kPrivate, "<dirent.h>", kPublic },
   { "ino_t", kPrivate, "<sys/types.h>", kPublic },
   { "ino_t", kPrivate, "<dirent.h>", kPublic },
   { "ino_t", kPrivate, "<sys/stat.h>", kPublic },
@@ -172,8 +170,6 @@ const IncludeMapEntry libc_symbol_map[] = {
   { "nlink_t", kPrivate, "<sys/stat.h>", kPublic },
   { "ntohl", kPrivate, "<arpa/inet.h>", kPublic },
   { "ntohs", kPrivate, "<arpa/inet.h>", kPublic },
-  { "off64_t", kPrivate, "<sys/types.h>", kPublic },
-  { "off64_t", kPrivate, "<unistd.h>", kPublic },
   { "off_t", kPrivate, "<sys/types.h>", kPublic },
   { "off_t", kPrivate, "<aio.h>", kPublic },
   { "off_t", kPrivate, "<fcntl.h>", kPublic },
@@ -208,13 +204,10 @@ const IncludeMapEntry libc_symbol_map[] = {
   { "sigevent", kPrivate, "<time.h>", kPublic },
   { "siginfo_t", kPrivate, "<signal.h>", kPublic },
   { "siginfo_t", kPrivate, "<sys/wait.h>", kPublic },
-  { "sigset_t", kPrivate, "<signal.h>", kPublic },
-  { "sigset_t", kPrivate, "<spawn.h>", kPublic },
   { "sigset_t", kPrivate, "<sys/select.h>", kPublic },
   { "sigval", kPrivate, "<signal.h>", kPublic },
   { "sockaddr", kPrivate, "<sys/socket.h>", kPublic },
   { "socklen_t", kPrivate, "<sys/socket.h>", kPublic },
-  { "socklen_t", kPrivate, "<netdb.h>", kPublic },
   { "ssize_t", kPrivate, "<sys/types.h>", kPublic },
   { "ssize_t", kPrivate, "<aio.h>", kPublic },
   { "ssize_t", kPrivate, "<monetary.h>", kPublic },
@@ -296,6 +289,7 @@ const IncludeMapEntry libc_symbol_map[] = {
   { "size_t", kPrivate, "<unistd.h>", kPublic },
   { "size_t", kPrivate, "<wchar.h>", kPublic },
   { "size_t", kPrivate, "<wordexp.h>", kPublic },
+  { "size_t", kPrivate, "<sys/types.h>", kPublic },
   // Macros that can be defined in more than one file, don't have the
   // same __foo_defined guard that other types do, so the grep above
   // doesn't discover them.  Until I figure out a better way, I just
@@ -321,6 +315,10 @@ const IncludeMapEntry libc_symbol_map[] = {
   { "calloc", kPrivate, "<stdlib.h>", kPublic },
   { "realloc", kPrivate, "<stdlib.h>", kPublic },
   { "free", kPrivate, "<stdlib.h>", kPublic },
+  { "htonl", kPrivate, "<arpa/inet.h>", kPublic },
+  { "htons", kPrivate, "<arpa/inet.h>", kPublic },
+  { "ntohl", kPrivate, "<arpa/inet.h>", kPublic },
+  { "ntohs", kPrivate, "<arpa/inet.h>", kPublic },
   // Entries for NULL
   { "NULL", kPrivate, "<stddef.h>", kPublic },  // 'canonical' location for NULL
   { "NULL", kPrivate, "<clocale>", kPublic },
@@ -377,7 +375,7 @@ const IncludeMapEntry stdlib_cxx_symbol_map[] = {
 // Symbol -> include mappings for GNU libstdc++
 const IncludeMapEntry libstdcpp_symbol_map[] = {};
 
-const IncludeMapEntry libc_include_map[] = {
+const IncludeMapEntry glibc_include_map[] = {
   // Private -> public include mappings for GNU libc
   // ( cd /usr/include && grep '^ *# *include' {sys/,net/,}* | perl -nle 'm/^([^:]+).*<([^>]+)>/ && print qq@    { "<$2>", kPrivate, "<$1>", kPublic },@' | grep bits/ | sort )
   // When I saw more than one mapping for these, I typically picked
@@ -590,6 +588,42 @@ const IncludeMapEntry libc_include_map[] = {
   { "<sys/ucontext.h>", kPrivate, "<ucontext.h>", kPublic },
   // Exports guaranteed by the C standard
   { "<stdint.h>", kPublic, "<inttypes.h>", kPublic },
+};
+
+// Private -> public include mappings for OpenBSD libc
+const IncludeMapEntry libc_include_map[] = {
+  { "<machine/_float.h>", kPrivate, "<float.h>", kPublic },
+  { "<machine/_types.h>", kPrivate, "<sys/_types.h>", kPrivate },
+  { "<machine/atomic.h>", kPrivate, "<sys/atomic.h>", kPublic },
+  { "<machine/cdefs.h>", kPrivate, "<sys/cdefs.h>", kPublic },
+  { "<machine/disklabel.h>", kPrivate, "<sys/disklabel.h>", kPublic },
+  { "<machine/endian.h>", kPrivate, "<sys/endian.h>", kPrivate },
+  { "<machine/limits.h>", kPrivate, "<sys/limits.h>", kPrivate },
+  { "<machine/param.h>", kPrivate, "<sys/param.h>", kPublic },
+  { "<machine/ptrace.h>", kPrivate, "<sys/ptrace.h>", kPublic },
+  { "<machine/signal.h>", kPrivate, "<sys/signal.h>", kPrivate },
+  { "<machine/stdarg.h>", kPrivate, "<sys/stdarg.h>", kPrivate },
+  { "<machine/stdint.h>", kPrivate, "<sys/stdint.h>", kPrivate },
+  { "<machine/varargs.h>", kPrivate, "<sys/varags.h>", kPrivate },
+  { "<netinet6/in6.h>", kPrivate, "<netinet/in.h>", kPublic },
+  { "<sys/_endian.h>", kPrivate, "<sys/endian.h>", kPrivate },
+  { "<sys/_time.h>", kPrivate, "<time.h>", kPublic },
+  { "<sys/_types.h>", kPrivate, "<sys/types.h>", kPublic },
+  { "<sys/endian.h>", kPrivate, "<endian.h>", kPublic },
+  { "<sys/dirent.h>", kPrivate, "<dirent.h>", kPublic },
+  { "<sys/errno.h>", kPrivate, "<errno.h>", kPublic },
+  { "<sys/fcntl.h>", kPrivate, "<fcntl.h>", kPublic },
+  { "<sys/limits.h>", kPrivate, "<limits.h>", kPublic },
+  { "<sys/poll.h>", kPrivate, "<poll.h>", kPublic },
+  { "<sys/signal.h>", kPrivate, "<signal.h>", kPublic },
+  { "<sys/stdarg.h>", kPrivate, "<stdarg.h>", kPublic },
+  { "<sys/stdint.h>", kPrivate, "<stdint.h>", kPublic },
+  { "<sys/syslimits.h>", kPrivate, "<limits.h>", kPublic },
+  { "<sys/syslog.h>", kPrivate, "<syslog.h>", kPublic },
+  { "<sys/termios.h>", kPrivate, "<termios.h>", kPublic },
+  { "<sys/unistd.h>", kPrivate, "<unistd.h>", kPublic },
+  { "<sys/uuid.h>", kPrivate, "<uuid.h>", kPublic },
+  { "<sys/varargs.h>", kPrivate, "<varargs.h>", kPublic },
 };
 
 const IncludeMapEntry stdlib_c_include_map[] = {
