[compiler-rt] r175622 - [Sanitizer] use raw syscall instead of _exit() function on Linux

Alexey Samsonov samsonov at google.com
Wed Feb 20 11:38:24 PST 2013


On Wed, Feb 20, 2013 at 9:18 PM, Alexander Potapenko <glider at google.com>wrote:

> Have you just renamed Exit to internal__exit?
>
And changed its implementation on Linux to:
+void internal__exit(int exitcode) {
+  syscall(__NR_exit_group, exitcode);
+  Die();  // Unreachable.
+}


> On Feb 20, 2013 5:56 PM, "Alexey Samsonov" <samsonov at google.com> wrote:
>
>> Author: samsonov
>> Date: Wed Feb 20 07:54:32 2013
>> New Revision: 175622
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=175622&view=rev
>> Log:
>> [Sanitizer] use raw syscall instead of _exit() function on Linux
>>
>> Modified:
>>     compiler-rt/trunk/lib/asan/asan_report.cc
>>     compiler-rt/trunk/lib/asan/asan_rtl.cc
>>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc
>>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h
>>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_libc.h
>>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc
>>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc
>>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc
>>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_linux.cc
>>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc
>>
>> Modified: compiler-rt/trunk/lib/asan/asan_report.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_report.cc?rev=175622&r1=175621&r2=175622&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/asan/asan_report.cc (original)
>> +++ compiler-rt/trunk/lib/asan/asan_report.cc Wed Feb 20 07:54:32 2013
>> @@ -435,9 +435,9 @@ class ScopedInErrorReport {
>>          // an error report will finish doing it.
>>          SleepForSeconds(Max(100, flags()->sleep_before_dying + 1));
>>        }
>> -      // If we're still not dead for some reason, use raw Exit() instead
>> of
>> +      // If we're still not dead for some reason, use raw _exit()
>> instead of
>>        // Die() to bypass any additional checks.
>> -      Exit(flags()->exitcode);
>> +      internal__exit(flags()->exitcode);
>>      }
>>      ASAN_ON_ERROR();
>>      reporting_thread_tid = asanThreadRegistry().GetCurrentTidOrInvalid();
>>
>> Modified: compiler-rt/trunk/lib/asan/asan_rtl.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_rtl.cc?rev=175622&r1=175621&r2=175622&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/asan/asan_rtl.cc (original)
>> +++ compiler-rt/trunk/lib/asan/asan_rtl.cc Wed Feb 20 07:54:32 2013
>> @@ -51,7 +51,7 @@ static void AsanDie() {
>>      death_callback();
>>    if (flags()->abort_on_error)
>>      Abort();
>> -  Exit(flags()->exitcode);
>> +  internal__exit(flags()->exitcode);
>>  }
>>
>>  static void AsanCheckFailed(const char *file, int line, const char *cond,
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc?rev=175622&r1=175621&r2=175622&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc Wed Feb 20
>> 07:54:32 2013
>> @@ -45,7 +45,7 @@ void NORETURN Die() {
>>    if (DieCallback) {
>>      DieCallback();
>>    }
>> -  Exit(1);
>> +  internal__exit(1);
>>  }
>>
>>  static CheckFailedCallbackType CheckFailedCallback;
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h?rev=175622&r1=175621&r2=175622&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h Wed Feb 20
>> 07:54:32 2013
>> @@ -140,7 +140,6 @@ void SortArray(uptr *array, uptr size);
>>
>>  // Exit
>>  void NORETURN Abort();
>> -void NORETURN Exit(int exitcode);
>>  void NORETURN Die();
>>  void NORETURN SANITIZER_INTERFACE_ATTRIBUTE
>>  CheckFailed(const char *file, int line, const char *cond, u64 v1, u64
>> v2);
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_libc.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_libc.h?rev=175622&r1=175621&r2=175622&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_libc.h (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_libc.h Wed Feb 20
>> 07:54:32 2013
>> @@ -45,6 +45,7 @@ char *internal_strrchr(const char *s, in
>>  char *internal_strstr(const char *haystack, const char *needle);
>>  // Works only for base=10 and doesn't set errno.
>>  s64 internal_simple_strtoll(const char *nptr, char **endptr, int base);
>> +int internal_snprintf(char *buffer, uptr length, const char *format,
>> ...);
>>
>>  // Return true if all bytes in [mem, mem+size) are zero.
>>  // Optimized for the case when the result is true.
>> @@ -70,14 +71,15 @@ fd_t internal_open(const char *filename,
>>
>>  uptr internal_read(fd_t fd, void *buf, uptr count);
>>  uptr internal_write(fd_t fd, const void *buf, uptr count);
>> +
>> +// OS
>>  uptr internal_filesize(fd_t fd);  // -1 on error.
>>  int internal_stat(const char *path, void *buf);
>>  int internal_lstat(const char *path, void *buf);
>>  int internal_fstat(fd_t fd, void *buf);
>> -
>>  int internal_dup2(int oldfd, int newfd);
>>  uptr internal_readlink(const char *path, char *buf, uptr bufsize);
>> -int internal_snprintf(char *buffer, uptr length, const char *format,
>> ...);
>> +void NORETURN internal__exit(int exitcode);
>>
>>  // Threading
>>  int internal_sched_yield();
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc?rev=175622&r1=175621&r2=175622&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc Wed Feb 20
>> 07:54:32 2013
>> @@ -140,6 +140,11 @@ int internal_sched_yield() {
>>    return syscall(__NR_sched_yield);
>>  }
>>
>> +void internal__exit(int exitcode) {
>> +  syscall(__NR_exit_group, exitcode);
>> +  Die();  // Unreachable.
>> +}
>> +
>>  // ----------------- sanitizer_common.h
>>  bool FileExists(const char *filename) {
>>  #if SANITIZER_LINUX_USES_64BIT_SYSCALLS
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc?rev=175622&r1=175621&r2=175622&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc Wed Feb 20
>> 07:54:32 2013
>> @@ -106,6 +106,10 @@ int internal_sched_yield() {
>>    return sched_yield();
>>  }
>>
>> +void internal__exit(int exitcode) {
>> +  _exit(exitcode);
>> +}
>> +
>>  // ----------------- sanitizer_common.h
>>  bool FileExists(const char *filename) {
>>    struct stat st;
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc?rev=175622&r1=175621&r2=175622&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc Wed Feb 20
>> 07:54:32 2013
>> @@ -209,10 +209,6 @@ void SleepForMillis(int millis) {
>>    usleep(millis * 1000);
>>  }
>>
>> -void Exit(int exitcode) {
>> -  _exit(exitcode);
>> -}
>> -
>>  void Abort() {
>>    abort();
>>  }
>>
>> Modified:
>> compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_linux.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_linux.cc?rev=175622&r1=175621&r2=175622&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_linux.cc
>> (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_linux.cc
>> Wed Feb 20 07:54:32 2013
>> @@ -99,7 +99,7 @@ bool StartSymbolizerSubprocess(const cha
>>      for (int fd = getdtablesize(); fd > 2; fd--)
>>        internal_close(fd);
>>      execl(path_to_symbolizer, path_to_symbolizer, (char*)0);
>> -    Exit(1);
>> +    internal__exit(1);
>>    }
>>
>>    // Continue execution in parent process.
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc?rev=175622&r1=175621&r2=175622&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc Wed Feb 20
>> 07:54:32 2013
>> @@ -167,10 +167,6 @@ void SleepForMillis(int millis) {
>>    Sleep(millis);
>>  }
>>
>> -void Exit(int exitcode) {
>> -  _exit(exitcode);
>> -}
>> -
>>  void Abort() {
>>    abort();
>>    _exit(-1);  // abort is not NORETURN on Windows.
>> @@ -257,6 +253,10 @@ int internal_sched_yield() {
>>    return 0;
>>  }
>>
>> +void internal__exit(int exitcode) {
>> +  _exit(exitcode);
>> +}
>> +
>>  // ---------------------- BlockingMutex ---------------- {{{1
>>  const uptr LOCK_UNINITIALIZED = 0;
>>  const uptr LOCK_READY = (uptr)-1;
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>


-- 
Alexey Samsonov, MSK
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130220/2007a253/attachment.html>


More information about the llvm-commits mailing list