mgorny created this revision. mgorny added reviewers: krytarowski, vitalybuka, joerg, bkramer. Herald added subscribers: jfb, cryptoad.
Requested by @krytarowski with the following rationale: We intend to support only reentrant interfaces in interceptors and if we use -lpthread without _REENTRANT defined, things are not guaranteed to work. This defined _REENTRANT is especially important for <stdio.h> and sanitization of interfaces around struct FILE. Some APIs have alternative modes depending on whether there is _REENTRANT enabled in the preprocessor namespace. We intend to sanitize only the _REENTRANT ones. Repository: rC Clang https://reviews.llvm.org/D55654 Files: lib/Driver/ToolChains/NetBSD.cpp lib/Driver/ToolChains/NetBSD.h Index: lib/Driver/ToolChains/NetBSD.h =================================================================== --- lib/Driver/ToolChains/NetBSD.h +++ lib/Driver/ToolChains/NetBSD.h @@ -76,6 +76,10 @@ SanitizerMask getSupportedSanitizers() const override; + void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs, + llvm::opt::ArgStringList &CC1Args, + Action::OffloadKind DeviceOffloadKind) const override; + protected: Tool *buildAssembler() const override; Tool *buildLinker() const override; Index: lib/Driver/ToolChains/NetBSD.cpp =================================================================== --- lib/Driver/ToolChains/NetBSD.cpp +++ lib/Driver/ToolChains/NetBSD.cpp @@ -457,3 +457,18 @@ } return Res; } + +void NetBSD::addClangTargetOptions(const ArgList &, + ArgStringList &CC1Args, + Action::OffloadKind) const { + const SanitizerArgs &SanArgs = getSanitizerArgs(); + if (SanArgs.needsAsanRt() || SanArgs.needsHwasanRt() || + SanArgs.needsDfsanRt() || SanArgs.needsLsanRt() || + SanArgs.needsMsanRt() || SanArgs.needsTsanRt() || + SanArgs.needsUbsanRt() || SanArgs.needsSafeStackRt() || + SanArgs.needsCfiRt() || SanArgs.needsCfiDiagRt() || + SanArgs.needsStatsRt() || SanArgs.needsEsanRt() || + SanArgs.needsScudoRt()) { + CC1Args.push_back("-D_REENTRANT"); + } +}
Index: lib/Driver/ToolChains/NetBSD.h =================================================================== --- lib/Driver/ToolChains/NetBSD.h +++ lib/Driver/ToolChains/NetBSD.h @@ -76,6 +76,10 @@ SanitizerMask getSupportedSanitizers() const override; + void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs, + llvm::opt::ArgStringList &CC1Args, + Action::OffloadKind DeviceOffloadKind) const override; + protected: Tool *buildAssembler() const override; Tool *buildLinker() const override; Index: lib/Driver/ToolChains/NetBSD.cpp =================================================================== --- lib/Driver/ToolChains/NetBSD.cpp +++ lib/Driver/ToolChains/NetBSD.cpp @@ -457,3 +457,18 @@ } return Res; } + +void NetBSD::addClangTargetOptions(const ArgList &, + ArgStringList &CC1Args, + Action::OffloadKind) const { + const SanitizerArgs &SanArgs = getSanitizerArgs(); + if (SanArgs.needsAsanRt() || SanArgs.needsHwasanRt() || + SanArgs.needsDfsanRt() || SanArgs.needsLsanRt() || + SanArgs.needsMsanRt() || SanArgs.needsTsanRt() || + SanArgs.needsUbsanRt() || SanArgs.needsSafeStackRt() || + SanArgs.needsCfiRt() || SanArgs.needsCfiDiagRt() || + SanArgs.needsStatsRt() || SanArgs.needsEsanRt() || + SanArgs.needsScudoRt()) { + CC1Args.push_back("-D_REENTRANT"); + } +}
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits