On Mon, Aug 24, 2020 at 01:48:02PM -0500, Qing Zhao wrote: > > > > On Aug 24, 2020, at 12:59 PM, Segher Boessenkool > > <seg...@kernel.crashing.org> wrote: > > > > [ Please quote correctly. I fixed this up a bit. ] > > > > On Mon, Aug 24, 2020 at 02:47:22PM +0000, Rodriguez Bahena, Victor wrote: > >>> The call-clobbered regs are the only ones you *can* touch. That does > >>> not mean you should clear them all (it doesn't help much at all in some > >>> cases). Only the backend knows. > >> > >> I think that for ROP mitigation purpose, we only need to clear the > >> call-used (i.e, call-clobbered) registers that are used in the current > >> routine and > >> can pass parameters. > > > > Which is more than you *can* do as well (consider return value registers > > for example; there are more cases, in general; only the backend code can > > know what is safe to do). > > Yes, So, we agreed to move the code generation implementation part into > backend. > > In Middle-end, we will only compute the hard register set based on call abi > information and data flow information, also handle the command line option.
You cannot in general figure out what registers you can clobber without asking the backend. You can figure out some that you *cannot* clobber, but that isn't very useful. Do you want to do this before or after the epilogue code is generated? Segher