RFC: [PATCH] x86: Add -mzero-caller-saved-regs=[skip|used|all]

Richard Biener richard.guenther@gmail.com
Thu Sep 27 15:13:00 GMT 2018


On Thu, Sep 27, 2018 at 3:16 PM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> On Thu, Sep 27, 2018 at 6:08 AM, Szabolcs Nagy <szabolcs.nagy@arm.com> wrote:
> > On 26/09/18 19:10, H.J. Lu wrote:
> >>
> >> Add -mzero-caller-saved-regs=[skip|used|all] command-line option and
> >> zero_caller_saved_regs("skip|used|all") function attribue:
> >>
> >> 1. -mzero-caller-saved-regs=skip and zero_caller_saved_regs("skip")
> >>
> >> Don't zero caller-saved integer registers upon function return.
> >>
> >> 2. -mzero-caller-saved-regs=used and zero_caller_saved_regs("used")
> >>
> >> Zero used caller-saved integer registers upon function return.
> >>
> >> 3. -mzero-caller-saved-regs=all and zero_caller_saved_regs("all")
> >>
> >> Zero all caller-saved integer registers upon function return.
> >>
> >> Tested on i686 and x86-64 with bootstrapping GCC trunk and
> >> -mzero-caller-saved-regs=used as well as -mzero-caller-saved-regs=all
> >> enabled by default.
> >>
> >
> > from this description and the documentation it's
> > not clear to me what this tries to achieve.
> >
> > is it trying to prevent information leak?
> > or some pcs hack the caller may rely on?
> >
> > if it's for information leak then i'd expect such
> > attribute to be used on crypto code.. however i'd
> > expect crypto code to use simd registers as well,
> > so integer only cleaning needs explanation.
>
> The target usage is in Linux kernel.

Maybe still somehow encode that in the option since it otherwise raises
expectations that are not met?
-mzero-call-clobbered-regs=used-int|all-int|skip|used-simd|used-fp,etc.?
and sorry() on unimplemented ones?  Or simply zero also non-integer
regs the same way?  I suppose
there isn't sth like vzeroupper that zeros all SIMD regs and completely?

Richard.

> --
> H.J.



More information about the Gcc-patches mailing list