diff options
| author | Alex Rønne Petersen <alex@alexrp.com> | 2025-04-10 19:19:09 +0200 |
|---|---|---|
| committer | Alex Rønne Petersen <alex@alexrp.com> | 2025-04-11 02:08:18 +0200 |
| commit | ee0ff134e9f82bf87751a5174c27b191c04e16c0 (patch) | |
| tree | b06060c8a3a26ade0be2139b7d1fa2b0d285d13f /lib/tsan/interception/interception_linux.cpp | |
| parent | 71a237e764717a69495af531ea0d4f123bec7294 (diff) | |
| download | zig-ee0ff134e9f82bf87751a5174c27b191c04e16c0.tar.gz zig-ee0ff134e9f82bf87751a5174c27b191c04e16c0.zip | |
tsan: Rename lib/tsan to lib/libtsan.
For consistency with other vendored C/C++ libraries.
Diffstat (limited to 'lib/tsan/interception/interception_linux.cpp')
| -rw-r--r-- | lib/tsan/interception/interception_linux.cpp | 83 |
1 files changed, 0 insertions, 83 deletions
diff --git a/lib/tsan/interception/interception_linux.cpp b/lib/tsan/interception/interception_linux.cpp deleted file mode 100644 index ef8136eb4f..0000000000 --- a/lib/tsan/interception/interception_linux.cpp +++ /dev/null @@ -1,83 +0,0 @@ -//===-- interception_linux.cpp ----------------------------------*- C++ -*-===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// -// -// This file is a part of AddressSanitizer, an address sanity checker. -// -// Linux-specific interception methods. -//===----------------------------------------------------------------------===// - -#include "interception.h" - -#if SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_NETBSD || \ - SANITIZER_SOLARIS - -#include <dlfcn.h> // for dlsym() and dlvsym() - -namespace __interception { - -#if SANITIZER_NETBSD -static int StrCmp(const char *s1, const char *s2) { - while (true) { - if (*s1 != *s2) - return false; - if (*s1 == 0) - return true; - s1++; - s2++; - } -} -#endif - -static void *GetFuncAddr(const char *name, uptr trampoline) { -#if SANITIZER_NETBSD - // FIXME: Find a better way to handle renames - if (StrCmp(name, "sigaction")) - name = "__sigaction14"; -#endif - void *addr = dlsym(RTLD_NEXT, name); - if (!addr) { - // If the lookup using RTLD_NEXT failed, the sanitizer runtime library is - // later in the library search order than the DSO that we are trying to - // intercept, which means that we cannot intercept this function. We still - // want the address of the real definition, though, so look it up using - // RTLD_DEFAULT. - addr = dlsym(RTLD_DEFAULT, name); - - // In case `name' is not loaded, dlsym ends up finding the actual wrapper. - // We don't want to intercept the wrapper and have it point to itself. - if ((uptr)addr == trampoline) - addr = nullptr; - } - return addr; -} - -bool InterceptFunction(const char *name, uptr *ptr_to_real, uptr func, - uptr trampoline) { - void *addr = GetFuncAddr(name, trampoline); - *ptr_to_real = (uptr)addr; - return addr && (func == trampoline); -} - -// dlvsym is a GNU extension supported by some other platforms. -#if SANITIZER_GLIBC || SANITIZER_FREEBSD || SANITIZER_NETBSD -static void *GetFuncAddr(const char *name, const char *ver) { - return dlvsym(RTLD_NEXT, name, ver); -} - -bool InterceptFunction(const char *name, const char *ver, uptr *ptr_to_real, - uptr func, uptr trampoline) { - void *addr = GetFuncAddr(name, ver); - *ptr_to_real = (uptr)addr; - return addr && (func == trampoline); -} -# endif // SANITIZER_GLIBC || SANITIZER_FREEBSD || SANITIZER_NETBSD - -} // namespace __interception - -#endif // SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_NETBSD || - // SANITIZER_SOLARIS |
