[PATCH] D19762: [safestack] Support USP in TCB for musl libc
Michael LeMay via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 2 14:16:07 PDT 2016
mlemay-intel updated this revision to Diff 70233.
mlemay-intel added a comment.
Rebase.
https://reviews.llvm.org/D19762
Files:
lib/Target/X86/X86ISelLowering.cpp
lib/Target/X86/X86Subtarget.h
test/Transforms/SafeStack/addr-taken.ll
Index: test/Transforms/SafeStack/addr-taken.ll
===================================================================
--- test/Transforms/SafeStack/addr-taken.ll
+++ test/Transforms/SafeStack/addr-taken.ll
@@ -1,5 +1,6 @@
; 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 -mattr=+separate-stack-seg < %s -o - | FileCheck --check-prefix TCB %s
@.str = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 1
@@ -9,14 +10,18 @@
define void @foo() nounwind uwtable safestack {
entry:
; CHECK: __safestack_unsafe_stack_ptr
+ ; TCB: %unsafe_stack_ptr = load i8*, i8* addrspace(256)* inttoptr (i32 36 to i8* addrspace(256)*)
+ ; TCB-NEXT: %unsafe_stack_static_top = getelementptr i8, i8* %unsafe_stack_ptr, i32 -16
+ ; TCB-NEXT: store i8* %unsafe_stack_static_top, i8* addrspace(256)* inttoptr (i32 36 to i8* addrspace(256)*)
%retval = alloca i32, align 4
%a = alloca i32, align 4
%j = alloca i32*, align 8
store i32 0, i32* %retval
%0 = load i32, i32* %a, align 4
%add = add nsw i32 %0, 1
store i32 %add, i32* %a, align 4
store i32* %a, i32** %j, align 8
+ ; TCB: store i8* %unsafe_stack_ptr, i8* addrspace(256)* inttoptr (i32 36 to i8* addrspace(256)*)
ret void
}
Index: lib/Target/X86/X86Subtarget.h
===================================================================
--- lib/Target/X86/X86Subtarget.h
+++ lib/Target/X86/X86Subtarget.h
@@ -494,6 +494,7 @@
bool isTargetNaCl64() const { return isTargetNaCl() && is64Bit(); }
bool isTargetMCU() const { return TargetTriple.isOSIAMCU(); }
bool isTargetContiki() const { return TargetTriple.isOSContiki(); }
+ bool isTargetMusl() const { return TargetTriple.isMusl(); }
bool isTargetWindowsMSVC() const {
return TargetTriple.isWindowsMSVCEnvironment();
Index: lib/Target/X86/X86ISelLowering.cpp
===================================================================
--- lib/Target/X86/X86ISelLowering.cpp
+++ lib/Target/X86/X86ISelLowering.cpp
@@ -2045,7 +2045,12 @@
return V;
}
- if (!Subtarget.isTargetAndroid())
+ bool MuslSeparateStack =
+ Subtarget.isTargetMusl() &&
+ Subtarget.isTargetLinux() &&
+ Subtarget.useSeparateStackSeg();
+
+ if (!(MuslSeparateStack || Subtarget.isTargetAndroid()))
return TargetLowering::getSafeStackPointerLocation(IRB);
// Android provides a fixed TLS slot for the SafeStack pointer. See the
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D19762.70233.patch
Type: text/x-patch
Size: 2536 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160902/bcbd69d2/attachment.bin>
More information about the llvm-commits
mailing list