[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