From 0ba43f4c2b263268f6fbc56bb3f6d43936781957 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Mon, 13 Jun 2022 19:12:13 -0700 Subject: [PATCH] [sanitizer] Add -lresolv only for non-Android non-musl Linux Refine the D127145 logic with my original suggestion. It turns out that many OSes don't have libresolv. --- clang/lib/Driver/ToolChains/CommonArgs.cpp | 7 +++++-- clang/test/Driver/sanitizer-ld.c | 1 - 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp index db022d1..7be2507 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -838,8 +838,11 @@ void tools::linkSanitizerRuntimeDeps(const ToolChain &TC, TC.getTriple().isOSNetBSD() || TC.getTriple().isOSOpenBSD()) CmdArgs.push_back("-lexecinfo"); - // There is no libresolv on Android. - if (!TC.getTriple().isAndroid()) + // There is no libresolv on Android, FreeBSD, OpenBSD, etc. On musl + // libresolv.a, even if exists, is an empty archive to satisfy POSIX -lresolv + // requirement. + if (TC.getTriple().isOSLinux() && !TC.getTriple().isAndroid() && + !TC.getTriple().isMusl()) CmdArgs.push_back("-lresolv"); } diff --git a/clang/test/Driver/sanitizer-ld.c b/clang/test/Driver/sanitizer-ld.c index b043a4d..423ce8b 100644 --- a/clang/test/Driver/sanitizer-ld.c +++ b/clang/test/Driver/sanitizer-ld.c @@ -107,7 +107,6 @@ // CHECK-ASAN-FREEBSD: "--export-dynamic" // CHECK-ASAN-FREEBSD: "-lpthread" // CHECK-ASAN-FREEBSD: "-lrt" -// CHECK-ASAN-FREEBSD: "-lresolv" // RUN: %clang -### %s 2>&1 \ // RUN: --target=i386-unknown-freebsd -fuse-ld=ld -fsanitize=address \ -- 2.7.4