[sanitizer] Avoid including any system headers in the system-header-free part of the runtime library.


git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@190161 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/sanitizer_common/sanitizer_common_syscalls.inc b/lib/sanitizer_common/sanitizer_common_syscalls.inc
index f8fc979..10809c7 100644
--- a/lib/sanitizer_common/sanitizer_common_syscalls.inc
+++ b/lib/sanitizer_common/sanitizer_common_syscalls.inc
@@ -284,7 +284,8 @@
 
 PRE_SYSCALL(getgroups)(long gidsetsize, void *grouplist) {}
 
-POST_SYSCALL(getgroups)(long res, long gidsetsize, __kernel_gid_t *grouplist) {
+POST_SYSCALL(getgroups)(long res, long gidsetsize,
+                        __sanitizer___kernel_gid_t *grouplist) {
   if (res >= 0) {
     if (grouplist) POST_WRITE(grouplist, res * sizeof(*grouplist));
   }
@@ -330,11 +331,12 @@
 
 POST_SYSCALL(setsid)(long res) {}
 
-PRE_SYSCALL(setgroups)(long gidsetsize, __kernel_gid_t *grouplist) {
+PRE_SYSCALL(setgroups)(long gidsetsize, __sanitizer___kernel_gid_t *grouplist) {
   if (grouplist) POST_WRITE(grouplist, gidsetsize * sizeof(*grouplist));
 }
 
-POST_SYSCALL(setgroups)(long res, long gidsetsize, __kernel_gid_t *grouplist) {}
+POST_SYSCALL(setgroups)(long res, long gidsetsize,
+                        __sanitizer___kernel_gid_t *grouplist) {}
 
 PRE_SYSCALL(acct)(const void *name) {
   if (name)
@@ -1267,7 +1269,7 @@
 PRE_SYSCALL(sendfile)(long out_fd, long in_fd, void *offset, long count) {}
 
 POST_SYSCALL(sendfile)(long res, long out_fd, long in_fd,
-                       __kernel_off_t *offset, long count) {
+                       __sanitizer___kernel_off_t *offset, long count) {
   if (res >= 0) {
     if (offset) POST_WRITE(offset, sizeof(*offset));
   }
@@ -1276,7 +1278,7 @@
 PRE_SYSCALL(sendfile64)(long out_fd, long in_fd, void *offset, long count) {}
 
 POST_SYSCALL(sendfile64)(long res, long out_fd, long in_fd,
-                         __kernel_loff_t *offset, long count) {
+                         __sanitizer___kernel_loff_t *offset, long count) {
   if (res >= 0) {
     if (offset) POST_WRITE(offset, sizeof(*offset));
   }
@@ -1388,8 +1390,9 @@
 
 PRE_SYSCALL(getresuid16)(void *ruid, void *euid, void *suid) {}
 
-POST_SYSCALL(getresuid16)(long res, __kernel_old_uid_t *ruid,
-                          __kernel_old_uid_t *euid, __kernel_old_uid_t *suid) {
+POST_SYSCALL(getresuid16)(long res, __sanitizer___kernel_old_uid_t *ruid,
+                          __sanitizer___kernel_old_uid_t *euid,
+                          __sanitizer___kernel_old_uid_t *suid) {
   if (res >= 0) {
     if (ruid) POST_WRITE(ruid, sizeof(*ruid));
     if (euid) POST_WRITE(euid, sizeof(*euid));
@@ -1403,8 +1406,9 @@
 
 PRE_SYSCALL(getresgid16)(void *rgid, void *egid, void *sgid) {}
 
-POST_SYSCALL(getresgid16)(long res, __kernel_old_gid_t *rgid,
-                          __kernel_old_gid_t *egid, __kernel_old_gid_t *sgid) {
+POST_SYSCALL(getresgid16)(long res, __sanitizer___kernel_old_gid_t *rgid,
+                          __sanitizer___kernel_old_gid_t *egid,
+                          __sanitizer___kernel_old_gid_t *sgid) {
   if (res >= 0) {
     if (rgid) POST_WRITE(rgid, sizeof(*rgid));
     if (egid) POST_WRITE(egid, sizeof(*egid));
@@ -1420,21 +1424,23 @@
 
 POST_SYSCALL(setfsgid16)(long res, long gid) {}
 
-PRE_SYSCALL(getgroups16)(long gidsetsize, __kernel_old_gid_t *grouplist) {}
+PRE_SYSCALL(getgroups16)(long gidsetsize,
+                         __sanitizer___kernel_old_gid_t *grouplist) {}
 
 POST_SYSCALL(getgroups16)(long res, long gidsetsize,
-                          __kernel_old_gid_t *grouplist) {
+                          __sanitizer___kernel_old_gid_t *grouplist) {
   if (res >= 0) {
     if (grouplist) POST_WRITE(grouplist, res * sizeof(*grouplist));
   }
 }
 
-PRE_SYSCALL(setgroups16)(long gidsetsize, __kernel_old_gid_t *grouplist) {
+PRE_SYSCALL(setgroups16)(long gidsetsize,
+                         __sanitizer___kernel_old_gid_t *grouplist) {
   if (grouplist) POST_WRITE(grouplist, gidsetsize * sizeof(*grouplist));
 }
 
 POST_SYSCALL(setgroups16)(long res, long gidsetsize,
-                          __kernel_old_gid_t *grouplist) {}
+                          __sanitizer___kernel_old_gid_t *grouplist) {}
 
 PRE_SYSCALL(getuid16)() {}
 
@@ -1807,11 +1813,13 @@
   }
 }
 
-PRE_SYSCALL(select)(long n, __kernel_fd_set *inp, __kernel_fd_set *outp,
-                    __kernel_fd_set *exp, void *tvp) {}
+PRE_SYSCALL(select)(long n, __sanitizer___kernel_fd_set *inp,
+                    __sanitizer___kernel_fd_set *outp,
+                    __sanitizer___kernel_fd_set *exp, void *tvp) {}
 
-POST_SYSCALL(select)(long res, long n, __kernel_fd_set *inp,
-                     __kernel_fd_set *outp, __kernel_fd_set *exp, void *tvp) {
+POST_SYSCALL(select)(long res, long n, __sanitizer___kernel_fd_set *inp,
+                     __sanitizer___kernel_fd_set *outp,
+                     __sanitizer___kernel_fd_set *exp, void *tvp) {
   if (res >= 0) {
     if (inp) POST_WRITE(inp, sizeof(*inp));
     if (outp) POST_WRITE(outp, sizeof(*outp));
@@ -2587,11 +2595,14 @@
   // Missing definition of 'struct old_linux_dirent'.
 }
 
-PRE_SYSCALL(pselect6)(long arg0, __kernel_fd_set *arg1, __kernel_fd_set *arg2,
-                      __kernel_fd_set *arg3, void *arg4, void *arg5) {}
+PRE_SYSCALL(pselect6)(long arg0, __sanitizer___kernel_fd_set *arg1,
+                      __sanitizer___kernel_fd_set *arg2,
+                      __sanitizer___kernel_fd_set *arg3, void *arg4,
+                      void *arg5) {}
 
-POST_SYSCALL(pselect6)(long res, long arg0, __kernel_fd_set *arg1,
-                       __kernel_fd_set *arg2, __kernel_fd_set *arg3, void *arg4,
+POST_SYSCALL(pselect6)(long res, long arg0, __sanitizer___kernel_fd_set *arg1,
+                       __sanitizer___kernel_fd_set *arg2,
+                       __sanitizer___kernel_fd_set *arg3, void *arg4,
                        void *arg5) {
   if (res >= 0) {
     if (arg1) POST_WRITE(arg1, sizeof(*arg1));
diff --git a/lib/sanitizer_common/sanitizer_platform_limits_posix.cc b/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
index 26fef2a..3c8abca 100644
--- a/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
+++ b/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
@@ -58,6 +58,7 @@
 #include <linux/soundcard.h>
 #include <linux/sysctl.h>
 #include <linux/utsname.h>
+#include <linux/posix_types.h>
 #endif
 
 #if !SANITIZER_ANDROID
@@ -863,6 +864,14 @@
 CHECK_SIZE_AND_OFFSET(__sysctl_args, oldlenp);
 CHECK_SIZE_AND_OFFSET(__sysctl_args, newval);
 CHECK_SIZE_AND_OFFSET(__sysctl_args, newlen);
+
+CHECK_TYPE_SIZE(__kernel_uid_t);
+CHECK_TYPE_SIZE(__kernel_gid_t);
+CHECK_TYPE_SIZE(__kernel_old_uid_t);
+CHECK_TYPE_SIZE(__kernel_old_gid_t);
+CHECK_TYPE_SIZE(__kernel_off_t);
+CHECK_TYPE_SIZE(__kernel_loff_t);
+CHECK_TYPE_SIZE(__kernel_fd_set);
 #endif
 
 #endif  // SANITIZER_LINUX || SANITIZER_MAC
diff --git a/lib/sanitizer_common/sanitizer_platform_limits_posix.h b/lib/sanitizer_common/sanitizer_platform_limits_posix.h
index af563d0..88f398d 100644
--- a/lib/sanitizer_common/sanitizer_platform_limits_posix.h
+++ b/lib/sanitizer_common/sanitizer_platform_limits_posix.h
@@ -17,12 +17,6 @@
 
 #include "sanitizer_platform.h"
 
-#if SANITIZER_LINUX
-// This header is limited to declaration of __kernel_*_t, which are unlikely to
-// conflict with any sanitizer declarations.
-#include <linux/posix_types.h>
-#endif
-
 namespace __sanitizer {
   extern unsigned struct_utsname_sz;
   extern unsigned struct_stat_sz;
@@ -166,6 +160,23 @@
   };
 #endif
 
+#if SANITIZER_LINUX
+#ifdef _LP64
+  typedef unsigned __sanitizer___kernel_uid_t;
+  typedef unsigned __sanitizer___kernel_gid_t;
+#else
+  typedef unsigned short  __sanitizer___kernel_uid_t;
+  typedef unsigned short __sanitizer___kernel_gid_t;
+#endif
+  typedef unsigned short __sanitizer___kernel_old_uid_t;
+  typedef unsigned short __sanitizer___kernel_old_gid_t;
+  typedef long __sanitizer___kernel_off_t;
+  typedef long long __sanitizer___kernel_loff_t;
+  typedef struct {
+    unsigned long fds_bits[1024 / (8 * sizeof(long))];
+  } __sanitizer___kernel_fd_set;
+#endif
+
   // This thing depends on the platform. We are only interested in the upper
   // limit. Verified with a compiler assert in .cc.
   const int pthread_attr_t_max_sz = 128;