[PATCH] D15225: [Driver] Sanitizer support based on runtime library presence
George Karpenkov via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Jul 20 10:56:59 PDT 2018
george.karpenkov added a comment.
@delcypher sorry i don't agree with the change requests.
@mracek any comments?
================
Comment at: clang/lib/Driver/ToolChains/Darwin.cpp:2298
SanitizerMask Res = ToolChain::getSupportedSanitizers();
- Res |= SanitizerKind::Address;
- Res |= SanitizerKind::Leak;
- Res |= SanitizerKind::Fuzzer;
- Res |= SanitizerKind::FuzzerNoLink;
+
+ if (sanitizerRuntimeExists("asan"))
----------------
delcypher wrote:
> I feel that we should assert that `Res` doesn't already contain the SanitizerKind we are decided whether or not to set.
> E.g.
>
> ```
> assert(!(Res & SanitizerKind::Address));
> if (sanitizerRuntimeExists("asan")) {
> Res |= SanitizerKind::Address;
> }
> ```
I'm not sure it would be worth crashing the driver.
================
Comment at: clang/lib/Driver/ToolChains/Darwin.h:134
+ /// \return Directory to find the runtime library in.
+ SmallString<128> runtimeLibDir(bool IsEmbedded=false) const;
+
----------------
delcypher wrote:
> Why is this a `SmallString<128>` but in other places we're just using `std::string`?
For driver it does not matter which datastructure to use.
Here SmallString is used because that's what is more convenient to return.
================
Comment at: clang/lib/Driver/ToolChains/Darwin.h:427
+ /// containing the sanitizer {@code SanitizerName}.
+ std::string sanitizerToRelativeLibName(StringRef SanitizerName,
+ bool Shared = true) const;
----------------
delcypher wrote:
> I don't like this name very much. Given that the path is relative to the directory containing the library, what this function really does is given the **file name** for a sanitizer library. Mentioning "relative" is just confusing.
>
> Wouldn't something like `getSanitizerLibName()` or `getNameForSanitizerLib()` be much clearer?
Then it's not clear whether the returned path is relative or absolute though.
================
Comment at: clang/test/Driver/darwin-asan-nofortify.c:3
-// RUN: %clang -fsanitize=address %s -E -dM -target x86_64-darwin | FileCheck %s
+// RUN: %clang -fsanitize=address %s -E -dM -target x86_64-darwin -resource-dir %S/Inputs/resource_dir | FileCheck %s
----------------
delcypher wrote:
> Are these `-resource-dir %S/Inputs/resource_dir` needed because compiler-rt might not be present and now the driver checks for these?
By default -resource-dir points to the resource dir in the "bin" directory. The contents of that is sort of random, and depends on what ninja commands have you ran before.
https://reviews.llvm.org/D15225
More information about the cfe-commits
mailing list