[PATCH] D47960: [asan, myriad] Support environment variables
Walter Lee via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 8 14:56:01 PDT 2018
waltl created this revision.
waltl added reviewers: vitalybuka, eugenis, alekseyshl.
Herald added a subscriber: kubamracek.
Provide a buffer that the test harness can write into to provide
values for the environment variables. Format is a null-separated list
of VAR=value pairs; this is sufficent for our purpose.
Repository:
rL LLVM
https://reviews.llvm.org/D47960
Files:
compiler-rt/lib/sanitizer_common/sanitizer_rtems.cc
Index: compiler-rt/lib/sanitizer_common/sanitizer_rtems.cc
===================================================================
--- compiler-rt/lib/sanitizer_common/sanitizer_rtems.cc
+++ compiler-rt/lib/sanitizer_common/sanitizer_rtems.cc
@@ -34,6 +34,11 @@
#define __mmap_free free
#define __mmap_memset memset
+static const __asan::uptr __sanitizer_env_len = 1024;
+// This variable needs to not be in .bss because we don't want
+// zero-initialization by the OS.
+char __sanitizer_env[__sanitizer_env_len] __attribute__((section(".data")));
+
namespace __sanitizer {
#include "sanitizer_syscall_generic.inc"
@@ -239,8 +244,26 @@
return true;
}
-char **GetArgv() { return NULL; }
-const char *GetEnv(const char *name) { return NULL; }
+char **GetArgv() { return nullptr; }
+
+const char *GetEnv(const char *name) {
+ char *const env = __sanitizer_env;
+ uptr env_len = __sanitizer_env_len;
+ // To avoid buffer overrun, give up if buffer is not null terminated.
+ if (env[env_len - 1] != '\0')
+ return nullptr;
+
+ uptr name_len = internal_strlen(name);
+ uptr end = env_len - name_len - 2;
+ uptr i = 0;
+ while (i <= end) {
+ if (internal_strncmp(&env[i], name, name_len) == 0 &&
+ env[i + name_len] == '=')
+ return &env[i + name_len + 1];
+ i += internal_strlen(env) + 1;
+ }
+ return nullptr;
+}
uptr ReadBinaryName(/*out*/char *buf, uptr buf_len) {
internal_strncpy(buf, "StubBinaryName", buf_len);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D47960.150576.patch
Type: text/x-patch
Size: 1459 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180608/0215e57c/attachment.bin>
More information about the llvm-commits
mailing list