musllvm

A pure LLVM/Clang cross compiler toolchain targeting musl C
git clone git://git.daat.foo/musllvm.git
Log | Files | Refs | README | LICENSE

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