summaryrefslogtreecommitdiff
path: root/bolt/lib/Core/BinaryFunction.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'bolt/lib/Core/BinaryFunction.cpp')
-rw-r--r--bolt/lib/Core/BinaryFunction.cpp25
1 files changed, 21 insertions, 4 deletions
diff --git a/bolt/lib/Core/BinaryFunction.cpp b/bolt/lib/Core/BinaryFunction.cpp
index 96878925ecca..07bc71ee538d 100644
--- a/bolt/lib/Core/BinaryFunction.cpp
+++ b/bolt/lib/Core/BinaryFunction.cpp
@@ -2814,9 +2814,15 @@ private:
case MCCFIInstruction::OpLLVMDefAspaceCfa:
case MCCFIInstruction::OpLabel:
case MCCFIInstruction::OpValOffset:
- case MCCFIInstruction::OpNegateRAState:
llvm_unreachable("unsupported CFI opcode");
break;
+ case MCCFIInstruction::OpNegateRAState:
+ if (!(opts::BinaryAnalysisMode || opts::HeatmapMode)) {
+ llvm_unreachable("BOLT-ERROR: binaries using pac-ret hardening (e.g. "
+ "as produced by '-mbranch-protection=pac-ret') are "
+ "currently not supported by BOLT.");
+ }
+ break;
case MCCFIInstruction::OpRememberState:
case MCCFIInstruction::OpRestoreState:
case MCCFIInstruction::OpGnuArgsSize:
@@ -2830,7 +2836,6 @@ public:
void advanceTo(int32_t State) {
for (int32_t I = CurState, E = State; I != E; ++I) {
const MCCFIInstruction &Instr = FDE[I];
- assert(Instr.getOperation() != MCCFIInstruction::OpNegateRAState);
if (Instr.getOperation() != MCCFIInstruction::OpRestoreState) {
update(Instr, I);
continue;
@@ -2955,9 +2960,15 @@ struct CFISnapshotDiff : public CFISnapshot {
case MCCFIInstruction::OpLLVMDefAspaceCfa:
case MCCFIInstruction::OpLabel:
case MCCFIInstruction::OpValOffset:
- case MCCFIInstruction::OpNegateRAState:
llvm_unreachable("unsupported CFI opcode");
return false;
+ case MCCFIInstruction::OpNegateRAState:
+ if (!(opts::BinaryAnalysisMode || opts::HeatmapMode)) {
+ llvm_unreachable("BOLT-ERROR: binaries using pac-ret hardening (e.g. "
+ "as produced by '-mbranch-protection=pac-ret') are "
+ "currently not supported by BOLT.");
+ }
+ break;
case MCCFIInstruction::OpRememberState:
case MCCFIInstruction::OpRestoreState:
case MCCFIInstruction::OpGnuArgsSize:
@@ -3106,9 +3117,15 @@ BinaryFunction::unwindCFIState(int32_t FromState, int32_t ToState,
case MCCFIInstruction::OpLLVMDefAspaceCfa:
case MCCFIInstruction::OpLabel:
case MCCFIInstruction::OpValOffset:
- case MCCFIInstruction::OpNegateRAState:
llvm_unreachable("unsupported CFI opcode");
break;
+ case MCCFIInstruction::OpNegateRAState:
+ if (!(opts::BinaryAnalysisMode || opts::HeatmapMode)) {
+ llvm_unreachable("BOLT-ERROR: binaries using pac-ret hardening (e.g. "
+ "as produced by '-mbranch-protection=pac-ret') are "
+ "currently not supported by BOLT.");
+ }
+ break;
case MCCFIInstruction::OpGnuArgsSize:
// do not affect CFI state
break;