On Fri, Nov 22, 2013 at 07:21:07PM +0100, Arnaud Charlet wrote:
> > This is exactly the patch referenced in the pointer to the upstream repo.
> > Arno, does this fix the build for you?
> 
> Well now I encounter:
> 
> /users/charlet/fsf/trunk/libsanitizer/sanitizer_common/sanitizer_linux.cc: In 
> function '__sanitizer::uptr 
> __sanitizer::internal_filesize(__sanitizer::fd_t)':
> /users/charlet/fsf/trunk/libsanitizer/sanitizer_common/sanitizer_linux.cc:176:19:
>  warning: 'st.stat::st_size' may be used uninitialized in this function 
> [-Wmaybe-uninitialized]
>    return (uptr)st.st_size;
>                    ^
> 
> So I guess that's what we call "progress".
> 
> I'll keep using --disable-libsanitizer for the time being, this library is
> clearly not quite productized yet IMO.

Here is a patch to fix various warnings, the remaining ones I'm seeing are
mostly that libsanitizer uses incorrectly C90/C++98 ... in macros (the
standard require it to be non-empty), either use the GNU extension
instead, #define INTERCEPTOR(a, b, c...) and ,## c if needed to get rid
of the preceeding comma if empty (though, you compile with -pedantic, so
might get warnings about that too), or rework the macros or have different
ones for the zero argument cases (INTERCEPTOR0).

There are some additional warnings caused by the #ifdef SYSCALL_INTERCEPTION
hacks we have to avoid various issues with problematic kernel headers or
libsanitizer code not having non-i?86/x86_64 in mind.

The sanitizer_syscall_linux_x86_64.inc changes fix real bugs, the rest is
just to get the noise level down.

--- sanitizer_common/sanitizer_linux.cc.jj      2013-11-12 11:31:00.000000000 
+0100
+++ sanitizer_common/sanitizer_linux.cc 2013-11-22 20:15:26.652376137 +0100
@@ -216,7 +216,7 @@ uptr GetTid() {
 }
 
 u64 NanoTime() {
-  kernel_timeval tv = {};
+  kernel_timeval tv = {0, 0};
   internal_syscall(__NR_gettimeofday, (uptr)&tv, 0);
   return (u64)tv.tv_sec * 1000*1000*1000 + tv.tv_usec * 1000;
 }
--- sanitizer_common/sanitizer_syscall_linux_x86_64.inc.jj      2013-11-12 
11:31:00.000000000 +0100
+++ sanitizer_common/sanitizer_syscall_linux_x86_64.inc 2013-11-22 
20:14:32.752657581 +0100
@@ -11,7 +11,7 @@
 
 static uptr internal_syscall(u64 nr) {
   u64 retval;
-  asm volatile("syscall" : "=a"(retval) : "a"(nr) : "rcx", "r11");
+  asm volatile("syscall" : "=a"(retval) : "a"(nr) : "rcx", "r11", "memory");
   return retval;
 }
 
@@ -19,7 +19,7 @@ template <typename T1>
 static uptr internal_syscall(u64 nr, T1 arg1) {
   u64 retval;
   asm volatile("syscall" : "=a"(retval) : "a"(nr), "D"((u64)arg1) :
-               "rcx", "r11");
+               "rcx", "r11", "memory");
   return retval;
 }
 
@@ -27,7 +27,7 @@ template <typename T1, typename T2>
 static uptr internal_syscall(u64 nr, T1 arg1, T2 arg2) {
   u64 retval;
   asm volatile("syscall" : "=a"(retval) : "a"(nr), "D"((u64)arg1),
-               "S"((u64)arg2) : "rcx", "r11");
+               "S"((u64)arg2) : "rcx", "r11", "memory");
   return retval;
 }
 
@@ -35,7 +35,7 @@ template <typename T1, typename T2, type
 static uptr internal_syscall(u64 nr, T1 arg1, T2 arg2, T3 arg3) {
   u64 retval;
   asm volatile("syscall" : "=a"(retval) : "a"(nr), "D"((u64)arg1),
-               "S"((u64)arg2), "d"((u64)arg3) : "rcx", "r11");
+               "S"((u64)arg2), "d"((u64)arg3) : "rcx", "r11", "memory");
   return retval;
 }
 
@@ -45,7 +45,7 @@ static uptr internal_syscall(u64 nr, T1
   asm volatile("mov %5, %%r10;"
                "syscall" : "=a"(retval) : "a"(nr), "D"((u64)arg1),
                "S"((u64)arg2), "d"((u64)arg3), "r"((u64)arg4) :
-               "rcx", "r11", "r10");
+               "rcx", "r11", "r10", "memory");
   return retval;
 }
 
@@ -57,7 +57,7 @@ static uptr internal_syscall(u64 nr, T1
                "mov %6, %%r8;"
                "syscall" : "=a"(retval) : "a"(nr), "D"((u64)arg1),
                "S"((u64)arg2), "d"((u64)arg3), "r"((u64)arg4), "r"((u64)arg5) :
-               "rcx", "r11", "r10", "r8");
+               "rcx", "r11", "r10", "r8", "memory");
   return retval;
 }
 
@@ -71,7 +71,7 @@ static uptr internal_syscall(u64 nr, T1
                "mov %7, %%r9;"
                "syscall" : "=a"(retval) : "a"(nr), "D"((u64)arg1),
                "S"((u64)arg2), "d"((u64)arg3), "r"((u64)arg4), "r"((u64)arg5),
-               "r"((u64)arg6) : "rcx", "r11", "r10", "r8", "r9");
+               "r"((u64)arg6) : "rcx", "r11", "r10", "r8", "r9", "memory");
   return retval;
 }
 
--- ubsan/ubsan_value.h.jj      2013-11-12 11:31:01.000000000 +0100
+++ ubsan/ubsan_value.h 2013-11-22 20:30:45.404835606 +0100
@@ -23,8 +23,8 @@
 
 // FIXME: Move this out to a config header.
 #if __SIZEOF_INT128__
-typedef __int128 s128;
-typedef unsigned __int128 u128;
+__extension__ typedef __int128 s128;
+__extension__ typedef unsigned __int128 u128;
 #define HAVE_INT128_T 1
 #else
 #define HAVE_INT128_T 0
--- ubsan/ubsan_diag.h.jj       2013-08-30 21:40:13.000000000 +0200
+++ ubsan/ubsan_diag.h  2013-11-22 20:46:21.047182217 +0100
@@ -48,11 +48,11 @@ private:
 public:
   Location() : Kind(LK_Null) {}
   Location(SourceLocation Loc) :
-    Kind(LK_Source), SourceLoc(Loc) {}
+    Kind(LK_Source), SourceLoc(Loc), ModuleLoc(), MemoryLoc() {}
   Location(ModuleLocation Loc) :
-    Kind(LK_Module), ModuleLoc(Loc) {}
+    Kind(LK_Module), SourceLoc(), ModuleLoc(Loc), MemoryLoc() {}
   Location(MemoryLocation Loc) :
-    Kind(LK_Memory), MemoryLoc(Loc) {}
+    Kind(LK_Memory), SourceLoc(), ModuleLoc(), MemoryLoc(Loc) {}
 
   LocationKind getKind() const { return Kind; }
 


        Jakub

Reply via email to