0016-clang-add-fortify-include-paths-for-musl-triplets-en.patch (2267B)
1 From e54c80ab9def177802bb2bd758041933db24f76a Mon Sep 17 00:00:00 2001 2 From: q66 <q66@chimera-linux.org> 3 Date: Sun, 14 Apr 2024 14:47:34 +0200 4 Subject: [PATCH 16/29] clang: add fortify include paths for musl triplets + 5 enable fortify 6 7 --- 8 clang/lib/Driver/ToolChains/Linux.cpp | 12 ++++++++---- 9 clang/lib/Frontend/InitPreprocessor.cpp | 5 +++++ 10 2 files changed, 13 insertions(+), 4 deletions(-) 11 12 diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp 13 index 2ac0139dc..9a9b40a25 100644 14 --- a/clang/lib/Driver/ToolChains/Linux.cpp 15 +++ b/clang/lib/Driver/ToolChains/Linux.cpp 16 @@ -688,10 +688,14 @@ void Linux::AddClangSystemIncludeArgs(const ArgList &DriverArgs, 17 if (getTriple().getOS() == llvm::Triple::RTEMS) 18 return; 19 20 - // Add an include of '/include' directly. This isn't provided by default by 21 - // system GCCs, but is often used with cross-compiling GCCs, and harmless to 22 - // add even when Clang is acting as-if it were a system compiler. 23 - addExternCSystemInclude(DriverArgs, CC1Args, concat(SysRoot, "/include")); 24 + if (getTriple().isMusl()) { 25 + addExternCSystemInclude(DriverArgs, CC1Args, concat(SysRoot, "/usr/include/fortify")); 26 + } else { 27 + // Preserve original clang behavior for non-musl triples, but for musl 28 + // this just gets in the way and none of our crosstoolchains are ever 29 + // actually built this way (and we'd have to figure out fortify for it) 30 + addExternCSystemInclude(DriverArgs, CC1Args, concat(SysRoot, "/include")); 31 + } 32 33 addExternCSystemInclude(DriverArgs, CC1Args, concat(SysRoot, "/usr/include")); 34 35 diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp 36 index 17f624e96..c239342fa 100644 37 --- a/clang/lib/Frontend/InitPreprocessor.cpp 38 +++ b/clang/lib/Frontend/InitPreprocessor.cpp 39 @@ -1523,6 +1523,11 @@ static void InitializePredefinedMacros(const TargetInfo &TI, 40 #undef TARGET_OS 41 } 42 43 + // Enable fortify by default on musl when optimizing, but not with asan 44 + if (TI.getTriple().isMusl() && LangOpts.Optimize && 45 + !LangOpts.Sanitize.has(SanitizerKind::Address)) 46 + Builder.defineMacro("_FORTIFY_SOURCE", "3"); 47 + 48 // Get other target #defines. 49 TI.getTargetDefines(LangOpts, Builder); 50 } 51 -- 52 2.49.0 53