@@ -67,10 +67,14 @@ static const std::pair<MCPhysReg, int8_t> FixedCSRFIMap[] = {
67
67
static void emitSCSPrologue (MachineFunction &MF, MachineBasicBlock &MBB,
68
68
MachineBasicBlock::iterator MI,
69
69
const DebugLoc &DL) {
70
- if (!MF.getFunction ().hasFnAttribute (Attribute::ShadowCallStack))
70
+ const auto &STI = MF.getSubtarget <RISCVSubtarget>();
71
+ bool HasHWShadowStack = MF.getFunction ().hasFnAttribute (" hw-shadow-stack" ) &&
72
+ STI.hasStdExtZimop ();
73
+ bool HasSWShadowStack =
74
+ MF.getFunction ().hasFnAttribute (Attribute::ShadowCallStack);
75
+ if (!HasHWShadowStack && !HasSWShadowStack)
71
76
return ;
72
77
73
- const auto &STI = MF.getSubtarget <RISCVSubtarget>();
74
78
const llvm::RISCVRegisterInfo *TRI = STI.getRegisterInfo ();
75
79
Register RAReg = TRI->getRARegister ();
76
80
@@ -82,7 +86,7 @@ static void emitSCSPrologue(MachineFunction &MF, MachineBasicBlock &MBB,
82
86
return ;
83
87
84
88
const RISCVInstrInfo *TII = STI.getInstrInfo ();
85
- if (!STI. hasForcedSWShadowStack () && STI. hasStdExtZicfiss () ) {
89
+ if (HasHWShadowStack ) {
86
90
BuildMI (MBB, MI, DL, TII->get (RISCV::SSPUSH)).addReg (RAReg);
87
91
return ;
88
92
}
@@ -129,10 +133,14 @@ static void emitSCSPrologue(MachineFunction &MF, MachineBasicBlock &MBB,
129
133
static void emitSCSEpilogue (MachineFunction &MF, MachineBasicBlock &MBB,
130
134
MachineBasicBlock::iterator MI,
131
135
const DebugLoc &DL) {
132
- if (!MF.getFunction ().hasFnAttribute (Attribute::ShadowCallStack))
136
+ const auto &STI = MF.getSubtarget <RISCVSubtarget>();
137
+ bool HasHWShadowStack = MF.getFunction ().hasFnAttribute (" hw-shadow-stack" ) &&
138
+ STI.hasStdExtZimop ();
139
+ bool HasSWShadowStack =
140
+ MF.getFunction ().hasFnAttribute (Attribute::ShadowCallStack);
141
+ if (!HasHWShadowStack && !HasSWShadowStack)
133
142
return ;
134
143
135
- const auto &STI = MF.getSubtarget <RISCVSubtarget>();
136
144
Register RAReg = STI.getRegisterInfo ()->getRARegister ();
137
145
138
146
// See emitSCSPrologue() above.
@@ -142,7 +150,7 @@ static void emitSCSEpilogue(MachineFunction &MF, MachineBasicBlock &MBB,
142
150
return ;
143
151
144
152
const RISCVInstrInfo *TII = STI.getInstrInfo ();
145
- if (!STI. hasForcedSWShadowStack () && STI. hasStdExtZicfiss () ) {
153
+ if (HasHWShadowStack ) {
146
154
BuildMI (MBB, MI, DL, TII->get (RISCV::SSPOPCHK)).addReg (RAReg);
147
155
return ;
148
156
}
0 commit comments