On Fri, Sep 5, 2025 at 10:07 AM Jakub Jelinek <ja...@redhat.com> wrote:
>
> On Fri, Sep 05, 2025 at 08:51:10AM +0100, Iain Sandoe wrote:
> > > BARRIER in RTL is like __builtin_unreachable (), so the observable
> > > checkpoint certainly can't be represented like that.
> > > Anyway, my point is that one call call std::observable_checkpoint ()
> > > or exit (0) in any external function (unless say some standard describes
> > > what the function does), so we really should be creating any non-builtin
> > > call we know nothing about like that.
> >
> > A volatile read would work, I guess - but the issue then is where to read
> > from - the intent of the paper is to generate no code, i.e. that the 
> > function
> > is only there for it’s effect as a checkpoint.
>
> I think a volatile read is not sufficient for preventing time travel.
> I think a CALL_INSN is safe (exactly because it could have done exit (0)
> or std::observable_checkpoint () inside of it where the compiler doesn't see
> it) but in RTL has the major disadvantage (even if optimized away during
> final) that RA clobbers all call clobbered registers there.
> I wonder if we treat a volatile asm similarly (especially with "memory"
> clobber), because it actually might contain a call, though obviously RA
> doesn't add the cost of clobbering call clobbered registers there (if one
> calls from inline asm, one needs to save/restore those registers or use
> a different ABI with no call clobbered registers or only the ones specified
> in clobbers of the inline asm).  And inline asm can expand to nothing or
> almost nothing (the latter if it has inputs/outputs, but this one doesn't
> need any, just "memory").

Just to agree - a call is safe modulo bugs in GCC.  A returns-twice call
is "safer" because it avoids a certain class of bugs in GCC.  On RTL
there isn't much UB and UB exploiting cases left - it should be mostly
reads from uninitialized storage, so a memory barrier should work there.
TBAA might be another thing, but again a memory barrier should be OK.

Richard.

>         Jakub
>

Reply via email to