<div dir="ltr"><br><div class="gmail_extra"><div class="gmail_quote">On Wed, Feb 20, 2013 at 9:18 PM, Alexander Potapenko <span dir="ltr"><<a href="mailto:glider@google.com" target="_blank">glider@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><p dir="ltr">Have you just renamed Exit to internal__exit?</p>
</blockquote><div style>And changed its implementation on Linux to:</div><div style><span style="font-family:arial,sans-serif;font-size:13px">+void internal__exit(int exitcode) {</span><br style="font-family:arial,sans-serif;font-size:13px">
<span style="font-family:arial,sans-serif;font-size:13px">+  syscall(__NR_exit_group, exitcode);</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">+  Die();  // Unreachable.</span><br style="font-family:arial,sans-serif;font-size:13px">
<span style="font-family:arial,sans-serif;font-size:13px">+}</span><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div class=""><div class="h5">
<div class="gmail_quote">On Feb 20, 2013 5:56 PM, "Alexey Samsonov" <<a href="mailto:samsonov@google.com" target="_blank">samsonov@google.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

Author: samsonov<br>
Date: Wed Feb 20 07:54:32 2013<br>
New Revision: 175622<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=175622&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=175622&view=rev</a><br>
Log:<br>
[Sanitizer] use raw syscall instead of _exit() function on Linux<br>
<br>
Modified:<br>
    compiler-rt/trunk/lib/asan/asan_report.cc<br>
    compiler-rt/trunk/lib/asan/asan_rtl.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_libc.h<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_linux.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_report.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_report.cc?rev=175622&r1=175621&r2=175622&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_report.cc?rev=175622&r1=175621&r2=175622&view=diff</a><br>


==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_report.cc (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_report.cc Wed Feb 20 07:54:32 2013<br>
@@ -435,9 +435,9 @@ class ScopedInErrorReport {<br>
         // an error report will finish doing it.<br>
         SleepForSeconds(Max(100, flags()->sleep_before_dying + 1));<br>
       }<br>
-      // If we're still not dead for some reason, use raw Exit() instead of<br>
+      // If we're still not dead for some reason, use raw _exit() instead of<br>
       // Die() to bypass any additional checks.<br>
-      Exit(flags()->exitcode);<br>
+      internal__exit(flags()->exitcode);<br>
     }<br>
     ASAN_ON_ERROR();<br>
     reporting_thread_tid = asanThreadRegistry().GetCurrentTidOrInvalid();<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_rtl.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_rtl.cc?rev=175622&r1=175621&r2=175622&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_rtl.cc?rev=175622&r1=175621&r2=175622&view=diff</a><br>


==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_rtl.cc (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_rtl.cc Wed Feb 20 07:54:32 2013<br>
@@ -51,7 +51,7 @@ static void AsanDie() {<br>
     death_callback();<br>
   if (flags()->abort_on_error)<br>
     Abort();<br>
-  Exit(flags()->exitcode);<br>
+  internal__exit(flags()->exitcode);<br>
 }<br>
<br>
 static void AsanCheckFailed(const char *file, int line, const char *cond,<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc?rev=175622&r1=175621&r2=175622&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc?rev=175622&r1=175621&r2=175622&view=diff</a><br>


==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc Wed Feb 20 07:54:32 2013<br>
@@ -45,7 +45,7 @@ void NORETURN Die() {<br>
   if (DieCallback) {<br>
     DieCallback();<br>
   }<br>
-  Exit(1);<br>
+  internal__exit(1);<br>
 }<br>
<br>
 static CheckFailedCallbackType CheckFailedCallback;<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h?rev=175622&r1=175621&r2=175622&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h?rev=175622&r1=175621&r2=175622&view=diff</a><br>


==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h Wed Feb 20 07:54:32 2013<br>
@@ -140,7 +140,6 @@ void SortArray(uptr *array, uptr size);<br>
<br>
 // Exit<br>
 void NORETURN Abort();<br>
-void NORETURN Exit(int exitcode);<br>
 void NORETURN Die();<br>
 void NORETURN SANITIZER_INTERFACE_ATTRIBUTE<br>
 CheckFailed(const char *file, int line, const char *cond, u64 v1, u64 v2);<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_libc.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_libc.h?rev=175622&r1=175621&r2=175622&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_libc.h?rev=175622&r1=175621&r2=175622&view=diff</a><br>


==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_libc.h (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_libc.h Wed Feb 20 07:54:32 2013<br>
@@ -45,6 +45,7 @@ char *internal_strrchr(const char *s, in<br>
 char *internal_strstr(const char *haystack, const char *needle);<br>
 // Works only for base=10 and doesn't set errno.<br>
 s64 internal_simple_strtoll(const char *nptr, char **endptr, int base);<br>
+int internal_snprintf(char *buffer, uptr length, const char *format, ...);<br>
<br>
 // Return true if all bytes in [mem, mem+size) are zero.<br>
 // Optimized for the case when the result is true.<br>
@@ -70,14 +71,15 @@ fd_t internal_open(const char *filename,<br>
<br>
 uptr internal_read(fd_t fd, void *buf, uptr count);<br>
 uptr internal_write(fd_t fd, const void *buf, uptr count);<br>
+<br>
+// OS<br>
 uptr internal_filesize(fd_t fd);  // -1 on error.<br>
 int internal_stat(const char *path, void *buf);<br>
 int internal_lstat(const char *path, void *buf);<br>
 int internal_fstat(fd_t fd, void *buf);<br>
-<br>
 int internal_dup2(int oldfd, int newfd);<br>
 uptr internal_readlink(const char *path, char *buf, uptr bufsize);<br>
-int internal_snprintf(char *buffer, uptr length, const char *format, ...);<br>
+void NORETURN internal__exit(int exitcode);<br>
<br>
 // Threading<br>
 int internal_sched_yield();<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc?rev=175622&r1=175621&r2=175622&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc?rev=175622&r1=175621&r2=175622&view=diff</a><br>


==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc Wed Feb 20 07:54:32 2013<br>
@@ -140,6 +140,11 @@ int internal_sched_yield() {<br>
   return syscall(__NR_sched_yield);<br>
 }<br>
<br>
+void internal__exit(int exitcode) {<br>
+  syscall(__NR_exit_group, exitcode);<br>
+  Die();  // Unreachable.<br>
+}<br>
+<br>
 // ----------------- sanitizer_common.h<br>
 bool FileExists(const char *filename) {<br>
 #if SANITIZER_LINUX_USES_64BIT_SYSCALLS<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc?rev=175622&r1=175621&r2=175622&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc?rev=175622&r1=175621&r2=175622&view=diff</a><br>


==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc Wed Feb 20 07:54:32 2013<br>
@@ -106,6 +106,10 @@ int internal_sched_yield() {<br>
   return sched_yield();<br>
 }<br>
<br>
+void internal__exit(int exitcode) {<br>
+  _exit(exitcode);<br>
+}<br>
+<br>
 // ----------------- sanitizer_common.h<br>
 bool FileExists(const char *filename) {<br>
   struct stat st;<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc?rev=175622&r1=175621&r2=175622&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc?rev=175622&r1=175621&r2=175622&view=diff</a><br>


==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc Wed Feb 20 07:54:32 2013<br>
@@ -209,10 +209,6 @@ void SleepForMillis(int millis) {<br>
   usleep(millis * 1000);<br>
 }<br>
<br>
-void Exit(int exitcode) {<br>
-  _exit(exitcode);<br>
-}<br>
-<br>
 void Abort() {<br>
   abort();<br>
 }<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_linux.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_linux.cc?rev=175622&r1=175621&r2=175622&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_linux.cc?rev=175622&r1=175621&r2=175622&view=diff</a><br>


==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_linux.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_linux.cc Wed Feb 20 07:54:32 2013<br>
@@ -99,7 +99,7 @@ bool StartSymbolizerSubprocess(const cha<br>
     for (int fd = getdtablesize(); fd > 2; fd--)<br>
       internal_close(fd);<br>
     execl(path_to_symbolizer, path_to_symbolizer, (char*)0);<br>
-    Exit(1);<br>
+    internal__exit(1);<br>
   }<br>
<br>
   // Continue execution in parent process.<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc?rev=175622&r1=175621&r2=175622&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc?rev=175622&r1=175621&r2=175622&view=diff</a><br>


==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc Wed Feb 20 07:54:32 2013<br>
@@ -167,10 +167,6 @@ void SleepForMillis(int millis) {<br>
   Sleep(millis);<br>
 }<br>
<br>
-void Exit(int exitcode) {<br>
-  _exit(exitcode);<br>
-}<br>
-<br>
 void Abort() {<br>
   abort();<br>
   _exit(-1);  // abort is not NORETURN on Windows.<br>
@@ -257,6 +253,10 @@ int internal_sched_yield() {<br>
   return 0;<br>
 }<br>
<br>
+void internal__exit(int exitcode) {<br>
+  _exit(exitcode);<br>
+}<br>
+<br>
 // ---------------------- BlockingMutex ---------------- {{{1<br>
 const uptr LOCK_UNINITIALIZED = 0;<br>
 const uptr LOCK_READY = (uptr)-1;<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div>Alexey Samsonov, MSK</div>
</div></div>