Index: lib/Target/X86/X86ISelLowering.cpp =================================================================== --- lib/Target/X86/X86ISelLowering.cpp +++ lib/Target/X86/X86ISelLowering.cpp @@ -2048,7 +2048,7 @@ if (Subtarget.getTargetTriple().isOSContiki()) return getDefaultSafeStackPointerLocation(IRB, false); - if (!Subtarget.isTargetAndroid()) + if (!(Subtarget.isTargetAndroid() || Subtarget.getTargetTriple().isMusl())) return TargetLowering::getSafeStackPointerLocation(IRB); // Android provides a fixed TLS slot for the SafeStack pointer. See the Index: test/Transforms/SafeStack/X86/addr-taken.ll =================================================================== --- test/Transforms/SafeStack/X86/addr-taken.ll +++ test/Transforms/SafeStack/X86/addr-taken.ll @@ -1,5 +1,7 @@ ; RUN: opt -safe-stack -S -mtriple=i386-pc-linux-gnu < %s -o - | FileCheck %s ; RUN: opt -safe-stack -S -mtriple=x86_64-pc-linux-gnu < %s -o - | FileCheck %s +; RUN: opt -safe-stack -S -mtriple=i386-pc-linux-musl < %s -o - | FileCheck --check-prefix TCB32 %s +; RUN: opt -safe-stack -S -mtriple=x86_64-pc-linux-musl < %s -o - | FileCheck --check-prefix TCB64 %s @.str = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 1 @@ -9,6 +11,12 @@ define void @foo() nounwind uwtable safestack { entry: ; CHECK: __safestack_unsafe_stack_ptr + ; TCB32: %unsafe_stack_ptr = load i8*, i8* addrspace(256)* inttoptr (i32 36 to i8* addrspace(256)*) + ; TCB32-NEXT: %unsafe_stack_static_top = getelementptr i8, i8* %unsafe_stack_ptr, i32 -16 + ; TCB32-NEXT: store i8* %unsafe_stack_static_top, i8* addrspace(256)* inttoptr (i32 36 to i8* addrspace(256)*) + ; TCB64: %unsafe_stack_ptr = load i8*, i8* addrspace(257)* inttoptr (i32 72 to i8* addrspace(257)*) + ; TCB64-NEXT: %unsafe_stack_static_top = getelementptr i8, i8* %unsafe_stack_ptr, i32 -16 + ; TCB64-NEXT: store i8* %unsafe_stack_static_top, i8* addrspace(257)* inttoptr (i32 72 to i8* addrspace(257)*) %retval = alloca i32, align 4 %a = alloca i32, align 4 %j = alloca i32*, align 8 @@ -17,6 +25,8 @@ %add = add nsw i32 %0, 1 store i32 %add, i32* %a, align 4 store i32* %a, i32** %j, align 8 + ; TCB32: store i8* %unsafe_stack_ptr, i8* addrspace(256)* inttoptr (i32 36 to i8* addrspace(256)*) + ; TCB64: store i8* %unsafe_stack_ptr, i8* addrspace(257)* inttoptr (i32 72 to i8* addrspace(257)*) ret void }