[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