On Sun, Nov 1, 2020 at 2:04 PM Iain Sandoe <[email protected]> wrote:
>
> Hi Uros,
>
> I was looking into the test fails for the new keylocker-* testcases.
>
> Many are because of missing “_” (which seems to happen more often than
> not). These I can fix trivially.
>
> But some are because we have:
>
> name+constant(%rip) being emitted on Linux
>
> and
>
> constant+name(%rip) being emitted on Darwin.
>
> ——
>
> The reason is that Darwin is always PIC and so outputs
> (const:DI (plus:DI (symbol_ref:DI ("h2") [flags 0x2] <var_decl
> 0x7ffff55e3c60 h2>)
> (const_int 16 [0x10])))
>
> using - gcc/i386.c:output_pic_addr_const
>
> Linux outputs the same thing
>
> using - gcc/final.c:output_addr_const
>
> ====
>
> for the PLUS case final.c says:
>
> /* Some assemblers need integer constants to appear last (eg masm). */
>
>
> for the PLUS case i386.c says:
>
> /* Some assemblers need integer constants to appear first. */
>
> =====
>
> So .. I could make a really tedious patch to match the different forms in the
> keylocker tests for Darwin ..
>
> .. but ISTM that maybe one of those comments is wrong / out of date - and the
> right thing would be to fix that.
I don't know which assemblers are referred to in the comment, but gas
accepts both forms:
mov k2+16(%rip), %eax
mov 16+k2(%rip), %eax
> Any insight welcome,
Maybe those scan-asm regexp are too strict and should be relaxed a
bit. Please resolve this issue with the author (CC'd).
Uros.