[PATCH] D103202: [AIX] Add traceback ssp canary bit support
Jinsong Ji via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed May 26 13:32:53 PDT 2021
jsji created this revision.
jsji added reviewers: PowerPC, DiggerLin, xingxue, hubert.reinterpretcast, shchenz, lkail.
Herald added subscribers: kbarton, hiraditya, nemanjai.
jsji requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
We will need to set the ssp canary bit in traceback table to communicate
with unwinder about the canary.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D103202
Files:
llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
llvm/test/CodeGen/PowerPC/aix-emit-tracebacktable-ssp.ll
Index: llvm/test/CodeGen/PowerPC/aix-emit-tracebacktable-ssp.ll
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/PowerPC/aix-emit-tracebacktable-ssp.ll
@@ -0,0 +1,37 @@
+; RUN: llc -mtriple=powerpc64-ibm-aix-xcoff -O0 < %s | FileCheck %s
+
+; CHECK-LABEL: f:
+; CHECK: __ssp_canary_word
+; CHECK: TB_SSP_CANARY
+define i32 @f() #0 personality i8* bitcast (i32 (...)* @__xlcxx_personality_v1 to i8*) {
+ invoke i32 undef(i8* undef)
+ to label %invoke unwind label %lpad
+
+ invoke:
+ %var = alloca i32, align 4
+ store i32 0, i32* %var, align 4
+ %gep = getelementptr inbounds i32, i32* %var, i32 1
+ %ret = load i32, i32* %gep, align 4
+ ret i32 %ret
+ lpad:
+ landingpad { i8*, i32 }
+ catch i8* null
+ unreachable
+
+}
+
+; CHECK-LABEL: f2:
+; CHECK: __ssp_canary_word
+; Not emitting traceback bit when no unwinding needed.
+; CHECK-NOT: TB_SSP_CANARY
+define i32 @f2() #0 {
+ %var = alloca i32, align 4
+ store i32 0, i32* %var, align 4
+ %gep = getelementptr inbounds i32, i32* %var, i32 1
+ %ret = load i32, i32* %gep, align 4
+ ret i32 %ret
+}
+
+declare i32 @__xlcxx_personality_v1(...)
+attributes #0 = { sspstrong }
+
Index: llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
===================================================================
--- llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+++ llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
@@ -2110,6 +2110,8 @@
if (SecondHalfOfMandatoryField & TracebackTable::HasExtensionTableMask) {
if (ShouldEmitEHBlock)
ExtensionTableFlag |= ExtendedTBTableFlag::TB_EH_INFO;
+ if (TargetLoweringObjectFileXCOFF::ShouldSetSSPCanaryBitInTB(MF))
+ ExtensionTableFlag |= ExtendedTBTableFlag::TB_SSP_CANARY;
CommentOS << "ExtensionTableFlag = "
<< getExtendedTBTableFlagString(ExtensionTableFlag);
Index: llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
===================================================================
--- llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -2171,6 +2171,17 @@
return true;
}
+bool TargetLoweringObjectFileXCOFF::ShouldSetSSPCanaryBitInTB(
+ const MachineFunction *MF) {
+ const Function &F = MF->getFunction();
+ if (!F.hasStackProtectorFnAttr())
+ return false;
+ // FIXME: check presence of canary word
+ // There are cases that the stack protectors are not really inserted even if
+ // the attributes are on.
+ return true;
+}
+
MCSymbol *
TargetLoweringObjectFileXCOFF::getEHInfoTableSymbol(const MachineFunction *MF) {
return MF->getMMI().getContext().getOrCreateSymbol(
Index: llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
===================================================================
--- llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
+++ llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
@@ -229,6 +229,7 @@
~TargetLoweringObjectFileXCOFF() override = default;
static bool ShouldEmitEHBlock(const MachineFunction *MF);
+ static bool ShouldSetSSPCanaryBitInTB(const MachineFunction *MF);
static MCSymbol *getEHInfoTableSymbol(const MachineFunction *MF);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D103202.348074.patch
Type: text/x-patch
Size: 3192 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210526/7a905c59/attachment.bin>
More information about the llvm-commits
mailing list