[PATCH 1/5] gas: streamline expr_build_dot()

Jan Beulich jbeulich@suse.com
Wed Dec 4 08:12:57 GMT 2024


On 04.12.2024 02:46, Maciej W. Rozycki wrote:
> On Tue, 26 Nov 2024, Jan Beulich wrote:
> 
>>>> There's no point involving symbol_clone_if_forward_ref(), just for it to
>>>> replace dot_symbol by one obtained from symbol_temp_new_now(). For the
>>>> abs-section case also produce a slightly more "complete" (as in: all
>>>> potentially relevant fields filled) expression by going through
>>>> expr_build_uconstant().
>>>
>>>  As I recall this cloning is needed for equated symbols, so that the value 
>>> of `.' used in an expression used for a symbol's calculation is obtained 
>>> at the time of the symbol's reference and not the symbol's definition.
>>
>> Yet then symbol_clone_if_forward_ref() would be wrong to use here, as that
>> pins down . at the present location (the cloning is done to keep this
>> "pinning down" from affecting the original symbol). Aiui it's quite the
>> opposite: expr_build_dot() _wants_ to latch . at its current location. At
>> least according to my interpretation of all the uses of it that we
>> presently have.
> 
>  Correct indeed, I misremembered.
> 
>  I'm not convinced by your simplification though, as the key here is to
> tie `expr_build_dot' to `dot_symbol', even if it adds extra layering and 
> effectively boils down to the same calculation your proposed replacement 
> does.  This layering is so that we have a single tracking symbol, as 
> proposed by Richard Sandiford to represent ".".  See the discussion in: 
> <https://inbox.sourceware.org/binutils/alpine.DEB.1.10.1010291442440.25860@tp.orcam.me.uk/> 
> for the rationale.
> 
>  Any inconsistency between `dot_symbol' and `dot_frag'/`dot_value' can I 
> think be sorted by setting the latter values to corresponding pieces of 
> information retrieved from `dot_symbol', or maybe even discarding them as 
> redundant.
> 
>  I can see there are three places where they are set, namely `md_assemble' 
> in the POWER backend (which I suppose knows what it's doing, so should 
> presumably just call `symbol_set_value_now (&dot_symbol)' instead), and 
> then `expr' and `emit_expr_with_reloc'.  Perhaps the latter two can be 
> discarded now that we have `dot_symbol' updated at every assembly line, 
> but that would have to be verified.  I don't know offhand.

I don't think they can be deleted, or else e.g.

d0:
	.long .-d0, .-d0, .-d0

would emit three times the same value, I expect.

Jan


More information about the Binutils mailing list