[PATCH] D19762: [safestack] Support USP in TCB for musl libc
Michael LeMay via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 19 16:44:17 PDT 2016
mlemay-intel updated this revision to Diff 75254.
mlemay-intel added a comment.
Revised patch so that it no longer modifies X86 subtarget.
https://reviews.llvm.org/D19762
Files:
lib/Target/X86/X86ISelLowering.cpp
test/Transforms/SafeStack/X86/addr-taken.ll
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,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/X86ISelLowering.cpp
===================================================================
--- lib/Target/X86/X86ISelLowering.cpp
+++ lib/Target/X86/X86ISelLowering.cpp
@@ -2053,7 +2053,12 @@
if (Subtarget.getTargetTriple().isOSContiki())
return getDefaultSafeStackPointerLocation(IRB, false);
- if (!Subtarget.isTargetAndroid())
+ bool MuslSeparateStack =
+ Subtarget.getTargetTriple().isMusl() &&
+ 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.75254.patch
Type: text/x-patch
Size: 2094 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161019/aa4fabb6/attachment.bin>
More information about the llvm-commits
mailing list