[compiler-rt] [asan] Ignore vDSO on FreeBSD (PR #76223)
Rainer Orth via llvm-commits
llvm-commits at lists.llvm.org
Fri Dec 22 01:45:05 PST 2023
https://github.com/rorth updated https://github.com/llvm/llvm-project/pull/76223
>From 5ce112814a3f56f2aebee65ec5ab94b28d145e42 Mon Sep 17 00:00:00 2001
From: Rainer Orth <ro at gcc.gnu.org>
Date: Fri, 22 Dec 2023 10:30:48 +0100
Subject: [PATCH 1/2] [asan] Ignore vDSO on FreeBSD
Most asan tests `FAIL` on FreeBSD 14.0/amd64 with
```
==17651==ASan runtime does not come first in initial library list; you should either link runtime to your application or manually preload it with LD_PRELOAD.
```
With `ASAN_OPTIONS=verbosity=2` one sees:
```
==4880==info->dlpi_name = [vdso] info->dlpi_addr = 0xffffe780
==4880==info->dlpi_name = lib/clang/18/lib/freebsd/libclang_rt.asan-i386.so info->dlpi_addr = 0x2808a000
```
Ignoring the vDSO as on Linux fixes this.
Tested on `amd64-pc-freebsd14.0`.
---
compiler-rt/lib/asan/asan_linux.cpp | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/compiler-rt/lib/asan/asan_linux.cpp b/compiler-rt/lib/asan/asan_linux.cpp
index e19b4479aaf345..f1a9ddceaa8e7b 100644
--- a/compiler-rt/lib/asan/asan_linux.cpp
+++ b/compiler-rt/lib/asan/asan_linux.cpp
@@ -148,6 +148,11 @@ static int FindFirstDSOCallback(struct dl_phdr_info *info, size_t size,
internal_strncmp(info->dlpi_name, "linux-", sizeof("linux-") - 1) == 0)
return 0;
# endif
+# if SANITIZER_FREEBSD
+ // Ignore vDSO.
+ if (internal_strcmp(info->dlpi_name, "[vdso]") == 0)
+ return 0;
+# endif
*name = info->dlpi_name;
return 1;
>From d608b00bec69c35ed013c6776fd94ab153f24788 Mon Sep 17 00:00:00 2001
From: Rainer Orth <ro at gcc.gnu.org>
Date: Fri, 22 Dec 2023 10:44:35 +0100
Subject: [PATCH 2/2] Fix clang-format.
---
compiler-rt/lib/asan/asan_linux.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/compiler-rt/lib/asan/asan_linux.cpp b/compiler-rt/lib/asan/asan_linux.cpp
index f1a9ddceaa8e7b..6b1c0f24bd53c6 100644
--- a/compiler-rt/lib/asan/asan_linux.cpp
+++ b/compiler-rt/lib/asan/asan_linux.cpp
@@ -148,11 +148,11 @@ static int FindFirstDSOCallback(struct dl_phdr_info *info, size_t size,
internal_strncmp(info->dlpi_name, "linux-", sizeof("linux-") - 1) == 0)
return 0;
# endif
-# if SANITIZER_FREEBSD
+# if SANITIZER_FREEBSD
// Ignore vDSO.
if (internal_strcmp(info->dlpi_name, "[vdso]") == 0)
return 0;
-# endif
+# endif
*name = info->dlpi_name;
return 1;
More information about the llvm-commits
mailing list