[llvm-commits] [compiler-rt] r164020 - in /compiler-rt/trunk/lib/sanitizer_common: sanitizer_common.h sanitizer_linux.cc sanitizer_mac.cc sanitizer_posix.cc sanitizer_win.cc

Alexey Samsonov samsonov at google.com
Mon Sep 17 02:12:40 PDT 2012


Author: samsonov
Date: Mon Sep 17 04:12:39 2012
New Revision: 164020

URL: http://llvm.org/viewvc/llvm-project?rev=164020&view=rev
Log:
[Sanitizer] Hoist functions to get/set stack size and re-exec from memory-sanitizer branch to sanitizer_common

Modified:
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.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_win.cc

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=164020&r1=164019&r2=164020&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h Mon Sep 17 04:12:39 2012
@@ -112,12 +112,16 @@
 // in '*buff_size'.
 void *MapFileToMemory(const char *file_name, uptr *buff_size);
 
+// OS
+void DisableCoreDumper();
+void DumpProcessMap();
 const char *GetEnv(const char *name);
 const char *GetPwd();
+void ReExec();
+bool StackSizeIsUnlimited();
+void SetStackSizeLimitInBytes(uptr limit);
 
 // Other
-void DisableCoreDumper();
-void DumpProcessMap();
 void SleepForSeconds(int seconds);
 void SleepForMillis(int millis);
 int Atexit(void (*function)(void));

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=164020&r1=164019&r2=164020&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc Mon Sep 17 04:12:39 2012
@@ -164,6 +164,26 @@
   return 0;  // Not found.
 }
 
+void ReExec() {
+  static const int kMaxArgv = 100;
+  InternalScopedBuffer<char*> argv(kMaxArgv + 1);
+  static char *buff;
+  uptr buff_size = 0;
+  ReadFileToBuffer("/proc/self/cmdline", &buff, &buff_size, 1024 * 1024);
+  argv[0] = buff;
+  int argc, i;
+  for (argc = 1, i = 1; ; i++) {
+    if (buff[i] == 0) {
+      if (buff[i+1] == 0) break;
+      argv[argc] = &buff[i+1];
+      CHECK_LE(argc, kMaxArgv);  // FIXME: make this more flexible.
+      argc++;
+    }
+  }
+  argv[argc] = 0;
+  execv(argv[0], argv.data());
+}
+
 // ----------------- sanitizer_procmaps.h
 MemoryMappingLayout::MemoryMappingLayout() {
   proc_self_maps_buff_len_ =

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=164020&r1=164019&r2=164020&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc Mon Sep 17 04:12:39 2012
@@ -110,6 +110,10 @@
   return 0;
 }
 
+void ReExec() {
+  UNIMPLEMENTED();
+}
+
 // ----------------- sanitizer_procmaps.h
 
 MemoryMappingLayout::MemoryMappingLayout() {

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=164020&r1=164019&r2=164020&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc Mon Sep 17 04:12:39 2012
@@ -138,6 +138,20 @@
   setrlimit(RLIMIT_CORE, &nocore);
 }
 
+bool StackSizeIsUnlimited() {
+  struct rlimit rlim;
+  CHECK_EQ(0, getrlimit(RLIMIT_STACK, &rlim));
+  return (rlim.rlim_cur == (uptr)-1);
+}
+
+void SetStackSizeLimitInBytes(uptr limit) {
+  struct rlimit rlim;
+  rlim.rlim_cur = limit;
+  rlim.rlim_max = limit;
+  CHECK_EQ(0, setrlimit(RLIMIT_STACK, &rlim));
+  CHECK(!StackSizeIsUnlimited());
+}
+
 void SleepForSeconds(int seconds) {
   sleep(seconds);
 }

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=164020&r1=164019&r2=164020&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc Mon Sep 17 04:12:39 2012
@@ -109,6 +109,19 @@
   UNIMPLEMENTED();
 }
 
+void ReExec() {
+  UNIMPLEMENTED();
+}
+
+bool StackSizeIsUnlimited() {
+  UNIMPLEMENTED();
+  return false;
+}
+
+void SetStackSizeLimitInBytes(uptr limit) {
+  UNIMPLEMENTED();
+}
+
 void SleepForSeconds(int seconds) {
   Sleep(seconds * 1000);
 }





More information about the llvm-commits mailing list