[PATCH] gas/RISC-V: adjust assembler for opcode table re-ordering

Maciej W. Rozycki macro@orcam.me.uk
Thu Jan 12 01:28:45 GMT 2023


On Wed, 11 Jan 2023, Jan Beulich wrote:

> >  And it does appear to happen, because correct machine code is produced 
> > regardless of your hack, except for the spurious symbol produced.  So is 
> > it not the case that simply the state (interal relocations recorded) is 
> > not correctly reset on an unsuccessful operand match?  Why does it have to 
> > be special-cased just for the `a' operand type?
> 
> The parsing of an 'a' type operand involves expression(), a side effect of
> which is to insert a symbol table entry for symbols not otherwise
> recognized (and note how my_getSmallExpression() addresses the same issue
> by filtering out GPR names first [1]). Yes, in a way this is an
> "insufficient undoing" issue, just that undoing of that symbol table
> insertion would be quite hard and/or fragile (from all I can tell). And
> this is where the dual meaning of symbol names comes into play: This looks
> to be intentional, and hence we can't make use of md_parse_name() to
> suppress the symbol table insertion in the first place for symbols which
> (in other contexts) identify registers.

 Thank you for looking into it.  Indeed it looks to me like a problem with 
`expression' (or `expr' really) and the way the RISC-V assembly dialect 
defines register references (unlike the MIPS one which uses a `$' prefix).  

 At a glance it seems to me that the correct approach would be to define a 
"dry run" mode for `expr' and use it in the RISC-V backend to validate an 
operand in the first invocation without causing any side effects, and then 
only once all the operands have been processed and an opcode table entry 
accepted `expr' would be called to finalise the expression.

 I realise it's something you may not be willing to commit to, as it's 
likely a larger task than a random tweak to the RISC-V backend, but I 
think it's the way we ought to do it rather than piling up workarounds.

 FWIW,

  Maciej


More information about the Binutils mailing list