lenary added a comment.

In D84414#2234255 <https://reviews.llvm.org/D84414#2234255>, @zzheng wrote:

> In D84414#2234112 <https://reviews.llvm.org/D84414#2234112>, @lenary wrote:
>
>> Why do we have to pass `-ffixed-x18` when compiling? Is it enough to just 
>> reserve `x18` whenever the function has the shadow call stack attribute?
>
> When SCS is on, x18 must be preserved across calls. Given it's a 
> callee-saved, value in x18 is preserved by functions that do not have SCS 
> attribute.
>
> However, saving x18 on stack risks leaking SCS's location in memory, making 
> the defense useless.

Ok, so any compilation units without `-fsanitize=shadow-call-stack` should be 
compiled with `-ffixed-x18` if you want to link those together. That is 
reasonable. My question was whether we can ensure that 
`-fsanitize=shadow-call-stack` can imply `-ffixed-x18` rather than having to 
pass both options.

It is my understanding that all functions in a CU with 
`-fsanitize=shadow-call-stack` will get the SCS function attribute, so why 
can't we use that attribute to work out whether x18 should be reserved, rather 
than using `-ffixed-x18`? You'll see `RISCVRegisterInfo::getReservedRegs` 
reserves `fp` and `bp` only if they're needed by the function (which can be 
based on attributes or other info), rather than using 
`isRegisterReservedByUser` - which seems cleaner to me.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D84414/new/

https://reviews.llvm.org/D84414

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to