[PATCH] D129016: [PowerPC] implemented @llvm.ppc.kill.canary to corrupt stack guard
    Kai Nacke via Phabricator via cfe-commits 
    cfe-commits at lists.llvm.org
       
    Tue Jul  5 06:55:22 PDT 2022
    
    
  
Kai added a comment.
Did you consider to make this more generalized? From skimming through the change, I see only 2 ppc-specific things:
- Loading of the canary word
- Value of `XORWord`
The first bullet is solved by the the other inline comment I made.
The second bullet can be solved by using all 64 bits. If a 32 bit value is used, the upper bits are ignored because the `VT` should be `MVT::i32` in this case.
================
Comment at: llvm/lib/Target/PowerPC/PPCISelLowering.cpp:11154-11156
+    GlobalValue *GV = (Subtarget.isAIXABI())
+                          ? M->getGlobalVariable(AIXSSPCanaryWordName)
+                          : M->getNamedValue("__stack_chk_guard");
----------------
I think this can be simplified using `getSDagStackGuard()`.
================
Comment at: llvm/lib/Target/PowerPC/PPCISelLowering.cpp:11157
+                          : M->getNamedValue("__stack_chk_guard");
+    if (GV == nullptr) { // linux uses LOAD_STACK_GUARD node instead of having a
+                         // canary word global value
----------------
pscoro wrote:
> Addressing a comment from the previous review, GV != nullptr can not be an assert because linux implements stack guard loading differently than aix. This review now also supports linux as well
You can simplify the code by reordering the conditions:
```
if (useLoadStackGuardNode()) {
  // LOAD_STACK_GUARD
} else if (Value *GV = getSDagStackGuard(M)) {
  // AIX implementation
} else
  llvm_unreachable("Unhandled stack guard case");
```
Repository:
  rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D129016/new/
https://reviews.llvm.org/D129016
    
    
More information about the cfe-commits
mailing list