-
Notifications
You must be signed in to change notification settings - Fork 12.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add two new ways of accessing the unsafe stack pointer: * At a fixed offset from the thread TLS base. This is very similar to StackProtector cookies, but we plan to extend it to other backends (ARM in particular) soon. Bionic-side implementation here: https://android-review.googlesource.com/170988. * Via a function call, as a fallback for platforms that provide neither a fixed TLS slot, nor a reasonable TLS implementation (i.e. not emutls). This is a re-commit of a change in r248357 that was reverted in r248358. llvm-svn: 248405
- Loading branch information
Showing
13 changed files
with
190 additions
and
43 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
; RUN: opt -safe-stack -S -mtriple=aarch64-linux-android < %s -o - | FileCheck %s | ||
|
||
|
||
define void @foo() nounwind uwtable safestack { | ||
entry: | ||
; CHECK: %[[SPA:.*]] = call i8** @__safestack_pointer_address() | ||
; CHECK: %[[USP:.*]] = load i8*, i8** %[[SPA]] | ||
; CHECK: %[[USST:.*]] = getelementptr i8, i8* %[[USP]], i32 -16 | ||
; CHECK: store i8* %[[USST]], i8** %[[SPA]] | ||
|
||
%a = alloca i8, align 8 | ||
call void @Capture(i8* %a) | ||
|
||
; CHECK: store i8* %[[USP]], i8** %[[SPA]] | ||
ret void | ||
} | ||
|
||
declare void @Capture(i8*) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
if not 'AArch64' in config.root.targets: | ||
config.unsupported = True | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
; RUN: opt -safe-stack -S -mtriple=arm-linux-android < %s -o - | FileCheck %s | ||
|
||
|
||
define void @foo() nounwind uwtable safestack { | ||
entry: | ||
; CHECK: %[[SPA:.*]] = call i8** @__safestack_pointer_address() | ||
; CHECK: %[[USP:.*]] = load i8*, i8** %[[SPA]] | ||
; CHECK: %[[USST:.*]] = getelementptr i8, i8* %[[USP]], i32 -16 | ||
; CHECK: store i8* %[[USST]], i8** %[[SPA]] | ||
|
||
%a = alloca i8, align 8 | ||
call void @Capture(i8* %a) | ||
|
||
; CHECK: store i8* %[[USP]], i8** %[[SPA]] | ||
ret void | ||
} | ||
|
||
declare void @Capture(i8*) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
if not 'ARM' in config.root.targets: | ||
config.unsupported = True | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
; RUN: opt -safe-stack -S -mtriple=i386-pc-linux-gnu < %s -o - | FileCheck %s --check-prefix=TLS | ||
; RUN: opt -safe-stack -S -mtriple=x86_64-pc-linux-gnu < %s -o - | FileCheck %s --check-prefix=TLS | ||
; RUN: opt -safe-stack -S -mtriple=i686-linux-android < %s -o - | FileCheck %s --check-prefix=DIRECT-TLS32 | ||
; RUN: opt -safe-stack -S -mtriple=x86_64-linux-android < %s -o - | FileCheck %s --check-prefix=DIRECT-TLS64 | ||
|
||
|
||
define void @foo() nounwind uwtable safestack { | ||
entry: | ||
; TLS: %[[USP:.*]] = load i8*, i8** @__safestack_unsafe_stack_ptr | ||
; TLS: %[[USST:.*]] = getelementptr i8, i8* %[[USP]], i32 -16 | ||
; TLS: store i8* %[[USST]], i8** @__safestack_unsafe_stack_ptr | ||
|
||
; DIRECT-TLS32: %[[USP:.*]] = load i8*, i8* addrspace(36)* inttoptr (i32 256 to i8* addrspace(36)*) | ||
; DIRECT-TLS32: %[[USST:.*]] = getelementptr i8, i8* %[[USP]], i32 -16 | ||
; DIRECT-TLS32: store i8* %[[USST]], i8* addrspace(36)* inttoptr (i32 256 to i8* addrspace(36)*) | ||
|
||
; DIRECT-TLS64: %[[USP:.*]] = load i8*, i8* addrspace(72)* inttoptr (i32 257 to i8* addrspace(72)*) | ||
; DIRECT-TLS64: %[[USST:.*]] = getelementptr i8, i8* %[[USP]], i32 -16 | ||
; DIRECT-TLS64: store i8* %[[USST]], i8* addrspace(72)* inttoptr (i32 257 to i8* addrspace(72)*) | ||
|
||
%a = alloca i8, align 8 | ||
call void @Capture(i8* %a) | ||
|
||
; TLS: store i8* %[[USP]], i8** @__safestack_unsafe_stack_ptr | ||
; DIRECT-TLS32: store i8* %[[USP]], i8* addrspace(36)* inttoptr (i32 256 to i8* addrspace(36)*) | ||
; DIRECT-TLS64: store i8* %[[USP]], i8* addrspace(72)* inttoptr (i32 257 to i8* addrspace(72)*) | ||
ret void | ||
} | ||
|
||
declare void @Capture(i8*) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
if not 'X86' in config.root.targets: | ||
config.unsupported = True | ||
|