summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexey Samsonov <samsonov@google.com>2012-09-17 09:12:39 +0000
committerAlexey Samsonov <samsonov@google.com>2012-09-17 09:12:39 +0000
commit97ca3066410be348997b863d336290a0db959359 (patch)
tree8eab6cf166f77c2effc7aca6b90ab59f9f48227f
parent3869b4b35a389621fefdfa20ba843961ca539593 (diff)
downloadbcm5719-llvm-97ca3066410be348997b863d336290a0db959359.tar.gz
bcm5719-llvm-97ca3066410be348997b863d336290a0db959359.zip
[Sanitizer] Hoist functions to get/set stack size and re-exec from memory-sanitizer branch to sanitizer_common
llvm-svn: 164020
-rw-r--r--compiler-rt/lib/sanitizer_common/sanitizer_common.h8
-rw-r--r--compiler-rt/lib/sanitizer_common/sanitizer_linux.cc20
-rw-r--r--compiler-rt/lib/sanitizer_common/sanitizer_mac.cc4
-rw-r--r--compiler-rt/lib/sanitizer_common/sanitizer_posix.cc14
-rw-r--r--compiler-rt/lib/sanitizer_common/sanitizer_win.cc13
5 files changed, 57 insertions, 2 deletions
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common.h b/compiler-rt/lib/sanitizer_common/sanitizer_common.h
index 544f8e4aa61..c4d236447a7 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_common.h
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_common.h
@@ -112,12 +112,16 @@ uptr ReadFileToBuffer(const char *file_name, char **buff,
// 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));
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc
index 853be7a7303..a280a8bcaa7 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc
@@ -164,6 +164,26 @@ const char *GetEnv(const char *name) {
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_ =
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_mac.cc b/compiler-rt/lib/sanitizer_common/sanitizer_mac.cc
index ca55c8ce764..202c4f702e1 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_mac.cc
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_mac.cc
@@ -110,6 +110,10 @@ const char *GetEnv(const char *name) {
return 0;
}
+void ReExec() {
+ UNIMPLEMENTED();
+}
+
// ----------------- sanitizer_procmaps.h
MemoryMappingLayout::MemoryMappingLayout() {
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_posix.cc b/compiler-rt/lib/sanitizer_common/sanitizer_posix.cc
index 143fcb0036c..e3f851611ec 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_posix.cc
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_posix.cc
@@ -138,6 +138,20 @@ void DisableCoreDumper() {
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);
}
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_win.cc b/compiler-rt/lib/sanitizer_common/sanitizer_win.cc
index b2ddd61c615..680184f2666 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_win.cc
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_win.cc
@@ -109,6 +109,19 @@ void DisableCoreDumper() {
UNIMPLEMENTED();
}
+void ReExec() {
+ UNIMPLEMENTED();
+}
+
+bool StackSizeIsUnlimited() {
+ UNIMPLEMENTED();
+ return false;
+}
+
+void SetStackSizeLimitInBytes(uptr limit) {
+ UNIMPLEMENTED();
+}
+
void SleepForSeconds(int seconds) {
Sleep(seconds * 1000);
}
OpenPOWER on IntegriCloud