@@ -58,10 +58,14 @@ static const std::pair<MCPhysReg, int8_t> FixedCSRFIMap[] = {
58
58
static void emitSCSPrologue (MachineFunction &MF, MachineBasicBlock &MBB,
59
59
MachineBasicBlock::iterator MI,
60
60
const DebugLoc &DL) {
61
- if (!MF.getFunction ().hasFnAttribute (Attribute::ShadowCallStack))
61
+ const auto &STI = MF.getSubtarget <RISCVSubtarget>();
62
+ bool HasHWShadowStack =
63
+ MF.getFunction ().hasFnAttribute (" hw-shadow-stack" ) && STI.hasStdExtZimop ();
64
+ bool HasSWShadowStack =
65
+ MF.getFunction ().hasFnAttribute (Attribute::ShadowCallStack);
66
+ if (!HasHWShadowStack && !HasSWShadowStack)
62
67
return ;
63
68
64
- const auto &STI = MF.getSubtarget <RISCVSubtarget>();
65
69
const llvm::RISCVRegisterInfo *TRI = STI.getRegisterInfo ();
66
70
Register RAReg = TRI->getRARegister ();
67
71
@@ -73,7 +77,7 @@ static void emitSCSPrologue(MachineFunction &MF, MachineBasicBlock &MBB,
73
77
return ;
74
78
75
79
const RISCVInstrInfo *TII = STI.getInstrInfo ();
76
- if (!STI. hasForcedSWShadowStack () && STI. hasStdExtZicfiss () ) {
80
+ if (HasHWShadowStack ) {
77
81
BuildMI (MBB, MI, DL, TII->get (RISCV::SSPUSH)).addReg (RAReg);
78
82
return ;
79
83
}
@@ -120,10 +124,14 @@ static void emitSCSPrologue(MachineFunction &MF, MachineBasicBlock &MBB,
120
124
static void emitSCSEpilogue (MachineFunction &MF, MachineBasicBlock &MBB,
121
125
MachineBasicBlock::iterator MI,
122
126
const DebugLoc &DL) {
123
- if (!MF.getFunction ().hasFnAttribute (Attribute::ShadowCallStack))
127
+ const auto &STI = MF.getSubtarget <RISCVSubtarget>();
128
+ bool HasHWShadowStack =
129
+ MF.getFunction ().hasFnAttribute (" hw-shadow-stack" ) && STI.hasStdExtZimop ();
130
+ bool HasSWShadowStack =
131
+ MF.getFunction ().hasFnAttribute (Attribute::ShadowCallStack);
132
+ if (!HasHWShadowStack && !HasSWShadowStack)
124
133
return ;
125
134
126
- const auto &STI = MF.getSubtarget <RISCVSubtarget>();
127
135
Register RAReg = STI.getRegisterInfo ()->getRARegister ();
128
136
129
137
// See emitSCSPrologue() above.
@@ -133,7 +141,7 @@ static void emitSCSEpilogue(MachineFunction &MF, MachineBasicBlock &MBB,
133
141
return ;
134
142
135
143
const RISCVInstrInfo *TII = STI.getInstrInfo ();
136
- if (!STI. hasForcedSWShadowStack () && STI. hasStdExtZicfiss () ) {
144
+ if (HasHWShadowStack ) {
137
145
BuildMI (MBB, MI, DL, TII->get (RISCV::SSPOPCHK)).addReg (RAReg);
138
146
return ;
139
147
}
0 commit comments