0013-llvm-fix-isOSGlibc-thinking-musl-is-glibc.patch (3103B)
1 From 194f8e7519bec165fefcaf2a4be82cfd4c271a7d Mon Sep 17 00:00:00 2001 2 From: q66 <q66@chimera-linux.org> 3 Date: Wed, 16 Apr 2025 00:30:51 +0200 4 Subject: [PATCH 13/29] llvm: fix isOSGlibc thinking musl is glibc 5 6 --- 7 llvm/include/llvm/TargetParser/Triple.h | 2 +- 8 llvm/lib/Target/X86/X86ISelDAGToDAG.cpp | 2 +- 9 llvm/lib/Target/X86/X86ISelLoweringCall.cpp | 2 +- 10 llvm/lib/Target/X86/X86Subtarget.h | 1 + 11 4 files changed, 4 insertions(+), 3 deletions(-) 12 13 diff --git a/llvm/include/llvm/TargetParser/Triple.h b/llvm/include/llvm/TargetParser/Triple.h 14 index 7d67966d1..721a7a3e1 100644 15 --- a/llvm/include/llvm/TargetParser/Triple.h 16 +++ b/llvm/include/llvm/TargetParser/Triple.h 17 @@ -737,7 +737,7 @@ public: 18 bool isOSGlibc() const { 19 return (getOS() == Triple::Linux || getOS() == Triple::KFreeBSD || 20 getOS() == Triple::Hurd) && 21 - !isAndroid(); 22 + !isAndroid() && !isMusl(); 23 } 24 25 /// Tests whether the OS is AIX. 26 diff --git a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp 27 index 84bcdae52..b6a8ce0ee 100644 28 --- a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp 29 +++ b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp 30 @@ -1876,7 +1876,7 @@ bool X86DAGToDAGISel::matchLoadInAddress(LoadSDNode *N, X86ISelAddressMode &AM, 31 // For more information see http://people.redhat.com/drepper/tls.pdf 32 if (isNullConstant(Address) && AM.Segment.getNode() == nullptr && 33 !IndirectTlsSegRefs && 34 - (Subtarget->isTargetGlibc() || Subtarget->isTargetAndroid() || 35 + (Subtarget->isTargetGlibc() || Subtarget->isTargetMusl() || Subtarget->isTargetAndroid() || 36 Subtarget->isTargetFuchsia())) { 37 if (Subtarget->isTarget64BitILP32() && !AllowSegmentRegForX32) 38 return true; 39 diff --git a/llvm/lib/Target/X86/X86ISelLoweringCall.cpp b/llvm/lib/Target/X86/X86ISelLoweringCall.cpp 40 index 6835c7e33..50eb2384b 100644 41 --- a/llvm/lib/Target/X86/X86ISelLoweringCall.cpp 42 +++ b/llvm/lib/Target/X86/X86ISelLoweringCall.cpp 43 @@ -536,7 +536,7 @@ unsigned X86TargetLowering::getAddressSpace() const { 44 } 45 46 static bool hasStackGuardSlotTLS(const Triple &TargetTriple) { 47 - return TargetTriple.isOSGlibc() || TargetTriple.isOSFuchsia() || 48 + return TargetTriple.isOSGlibc() || TargetTriple.isOSFuchsia() || TargetTriple.isMusl() || 49 (TargetTriple.isAndroid() && !TargetTriple.isAndroidVersionLT(17)); 50 } 51 52 diff --git a/llvm/lib/Target/X86/X86Subtarget.h b/llvm/lib/Target/X86/X86Subtarget.h 53 index 722076ca8..c2fc60eff 100644 54 --- a/llvm/lib/Target/X86/X86Subtarget.h 55 +++ b/llvm/lib/Target/X86/X86Subtarget.h 56 @@ -295,6 +295,7 @@ public: 57 bool isTargetLinux() const { return TargetTriple.isOSLinux(); } 58 bool isTargetKFreeBSD() const { return TargetTriple.isOSKFreeBSD(); } 59 bool isTargetGlibc() const { return TargetTriple.isOSGlibc(); } 60 + bool isTargetMusl() const { return TargetTriple.isMusl(); } 61 bool isTargetAndroid() const { return TargetTriple.isAndroid(); } 62 bool isTargetNaCl() const { return TargetTriple.isOSNaCl(); } 63 bool isTargetNaCl32() const { return isTargetNaCl() && !is64Bit(); } 64 -- 65 2.49.0 66