[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