mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-21 03:05:26 -04:00
[SSP] In opt remarks, stream Function directly
With this, it shows up as an attribute in YAML and non-printable characters are properly removed by GlobalValue::getRealLinkageName. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297362 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -234,13 +234,12 @@ bool StackProtector::RequiresStackProtector() {
|
||||
// using the analysis pass to avoid building DominatorTree and LoopInfo which
|
||||
// are not available this late in the IR pipeline.
|
||||
OptimizationRemarkEmitter ORE(F);
|
||||
auto ReasonStub =
|
||||
Twine("Stack protection applied to function " + F->getName() + " due to ")
|
||||
.str();
|
||||
|
||||
if (F->hasFnAttribute(Attribute::StackProtectReq)) {
|
||||
ORE.emit(OptimizationRemark(DEBUG_TYPE, "StackProtectorRequested", F)
|
||||
<< ReasonStub << "a function attribute or command-line switch");
|
||||
<< "Stack protection applied to function "
|
||||
<< ore::NV("Function", F)
|
||||
<< " due to a function attribute or command-line switch");
|
||||
NeedsProtector = true;
|
||||
Strong = true; // Use the same heuristic as strong to determine SSPLayout
|
||||
} else if (F->hasFnAttribute(Attribute::StackProtectStrong))
|
||||
@@ -256,8 +255,10 @@ bool StackProtector::RequiresStackProtector() {
|
||||
if (AI->isArrayAllocation()) {
|
||||
OptimizationRemark Remark(DEBUG_TYPE, "StackProtectorAllocaOrArray",
|
||||
&I);
|
||||
Remark << ReasonStub
|
||||
<< "a call to alloca or use of a variable length array";
|
||||
Remark
|
||||
<< "Stack protection applied to function "
|
||||
<< ore::NV("Function", F)
|
||||
<< " due to a call to alloca or use of a variable length array";
|
||||
if (const auto *CI = dyn_cast<ConstantInt>(AI->getArraySize())) {
|
||||
if (CI->getLimitedValue(SSPBufferSize) >= SSPBufferSize) {
|
||||
// A call to alloca with size >= SSPBufferSize requires
|
||||
@@ -285,8 +286,10 @@ bool StackProtector::RequiresStackProtector() {
|
||||
Layout.insert(std::make_pair(AI, IsLarge ? SSPLK_LargeArray
|
||||
: SSPLK_SmallArray));
|
||||
ORE.emit(OptimizationRemark(DEBUG_TYPE, "StackProtectorBuffer", &I)
|
||||
<< ReasonStub
|
||||
<< "a stack allocated buffer or struct containing a buffer");
|
||||
<< "Stack protection applied to function "
|
||||
<< ore::NV("Function", F)
|
||||
<< " due to a stack allocated buffer or struct containing a "
|
||||
"buffer");
|
||||
NeedsProtector = true;
|
||||
continue;
|
||||
}
|
||||
@@ -296,7 +299,9 @@ bool StackProtector::RequiresStackProtector() {
|
||||
Layout.insert(std::make_pair(AI, SSPLK_AddrOf));
|
||||
ORE.emit(
|
||||
OptimizationRemark(DEBUG_TYPE, "StackProtectorAddressTaken", &I)
|
||||
<< ReasonStub << "the address of a local variable being taken");
|
||||
<< "Stack protection applied to function "
|
||||
<< ore::NV("Function", F)
|
||||
<< " due to the address of a local variable being taken");
|
||||
NeedsProtector = true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user