From 194f8e7519bec165fefcaf2a4be82cfd4c271a7d Mon Sep 17 00:00:00 2001 From: q66 Date: Wed, 16 Apr 2025 00:30:51 +0200 Subject: [PATCH 13/29] llvm: fix isOSGlibc thinking musl is glibc --- llvm/include/llvm/TargetParser/Triple.h | 2 +- llvm/lib/Target/X86/X86ISelDAGToDAG.cpp | 2 +- llvm/lib/Target/X86/X86ISelLoweringCall.cpp | 2 +- llvm/lib/Target/X86/X86Subtarget.h | 1 + 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/llvm/include/llvm/TargetParser/Triple.h b/llvm/include/llvm/TargetParser/Triple.h index 7d67966d1..721a7a3e1 100644 --- a/llvm/include/llvm/TargetParser/Triple.h +++ b/llvm/include/llvm/TargetParser/Triple.h @@ -737,7 +737,7 @@ public: bool isOSGlibc() const { return (getOS() == Triple::Linux || getOS() == Triple::KFreeBSD || getOS() == Triple::Hurd) && - !isAndroid(); + !isAndroid() && !isMusl(); } /// Tests whether the OS is AIX. diff --git a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp index 84bcdae52..b6a8ce0ee 100644 --- a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp +++ b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp @@ -1876,7 +1876,7 @@ bool X86DAGToDAGISel::matchLoadInAddress(LoadSDNode *N, X86ISelAddressMode &AM, // For more information see http://people.redhat.com/drepper/tls.pdf if (isNullConstant(Address) && AM.Segment.getNode() == nullptr && !IndirectTlsSegRefs && - (Subtarget->isTargetGlibc() || Subtarget->isTargetAndroid() || + (Subtarget->isTargetGlibc() || Subtarget->isTargetMusl() || Subtarget->isTargetAndroid() || Subtarget->isTargetFuchsia())) { if (Subtarget->isTarget64BitILP32() && !AllowSegmentRegForX32) return true; diff --git a/llvm/lib/Target/X86/X86ISelLoweringCall.cpp b/llvm/lib/Target/X86/X86ISelLoweringCall.cpp index 6835c7e33..50eb2384b 100644 --- a/llvm/lib/Target/X86/X86ISelLoweringCall.cpp +++ b/llvm/lib/Target/X86/X86ISelLoweringCall.cpp @@ -536,7 +536,7 @@ unsigned X86TargetLowering::getAddressSpace() const { } static bool hasStackGuardSlotTLS(const Triple &TargetTriple) { - return TargetTriple.isOSGlibc() || TargetTriple.isOSFuchsia() || + return TargetTriple.isOSGlibc() || TargetTriple.isOSFuchsia() || TargetTriple.isMusl() || (TargetTriple.isAndroid() && !TargetTriple.isAndroidVersionLT(17)); } diff --git a/llvm/lib/Target/X86/X86Subtarget.h b/llvm/lib/Target/X86/X86Subtarget.h index 722076ca8..c2fc60eff 100644 --- a/llvm/lib/Target/X86/X86Subtarget.h +++ b/llvm/lib/Target/X86/X86Subtarget.h @@ -295,6 +295,7 @@ public: bool isTargetLinux() const { return TargetTriple.isOSLinux(); } bool isTargetKFreeBSD() const { return TargetTriple.isOSKFreeBSD(); } bool isTargetGlibc() const { return TargetTriple.isOSGlibc(); } + bool isTargetMusl() const { return TargetTriple.isMusl(); } bool isTargetAndroid() const { return TargetTriple.isAndroid(); } bool isTargetNaCl() const { return TargetTriple.isOSNaCl(); } bool isTargetNaCl32() const { return isTargetNaCl() && !is64Bit(); } -- 2.49.0