diff options
author | Ed Maste <emaste@FreeBSD.org> | 2022-01-19 18:08:18 +0000 |
---|---|---|
committer | Ed Maste <emaste@FreeBSD.org> | 2022-02-04 16:18:12 +0000 |
commit | 96fe7c8ab0f65cf829619abd74ae6c126b21e15f (patch) | |
tree | 6bc8dfb4a70c0118ad98fe680cb7205a8edad5ac | |
parent | 867b4decb4d50579152e52c594632cdc0f6266ff (diff) | |
download | src-96fe7c8ab0f65cf829619abd74ae6c126b21e15f.tar.gz src-96fe7c8ab0f65cf829619abd74ae6c126b21e15f.zip |
compiler-rt: support ReExec() on FreeBSD
Based on getMainExecutable() in llvm/lib/Support/Unix/Path.inc.
This will need a little more work for an upstream change as it must
support older FreeBSD releases that lack elf_aux_info() / AT_EXEC_PATH.
No objection: dim
MFC after: 2 weeks
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D33934
-rw-r--r-- | contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp b/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp index 7ce9e25da342..59f8d5d1fec2 100644 --- a/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp +++ b/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp @@ -46,7 +46,9 @@ #if SANITIZER_FREEBSD #include <pthread_np.h> +#include <stdlib.h> #include <osreldate.h> +#include <sys/auxv.h> #include <sys/sysctl.h> #define pthread_getattr_np pthread_attr_get_np // The MAP_NORESERVE define has been removed in FreeBSD 11.x, and even before @@ -865,7 +867,14 @@ u64 MonotonicNanoTime() { void ReExec() { const char *pathname = "/proc/self/exe"; -#if SANITIZER_NETBSD +#if SANITIZER_FREEBSD + char exe_path[PATH_MAX]; + if (elf_aux_info(AT_EXECPATH, exe_path, sizeof(exe_path)) == 0) { + char link_path[PATH_MAX]; + if (realpath(exe_path, link_path)) + pathname = link_path; + } +#elif SANITIZER_NETBSD static const int name[] = { CTL_KERN, KERN_PROC_ARGS, |