On Tuesday 11 October 2022 15:33:59 Nick Clifton wrote:
> Hi Pali, Hi Richard,
> 
> > Having file name and line number would be also useful as it took me
> > some time to figure out where is the issue...
> 
> Right - I have tried a little harder and come up with a follow up patch.
> This is now checked in, and given an input file that looks like this:
> 
>   % cat t.s
>   kernoff:
>       .set KERNEL_OFFSET, 0x40000
>       .set CONFIG_SYS_TEXT_BASE, 0x80008000
>       .word 44
>       .word KERNEL_OFFSET - (. - CONFIG_SYS_TEXT_BASE)
>       .word - (. - 0x80008000)
>       .word 0x40000 - (. - 0x0)
> 
> The assembler now produces the following output:
> 
>   t.s: Assembler messages:
>   t.s:5: Error: expression is too complex to be resolved or converted into 
> relocations
>   t.s:6: Error: expression is too complex to be resolved or converted into 
> relocations
> 
> Note - some targets do support applying multiple relocations to a
> single address, but even then there can be expressions that cannot
> be resolved this way.  That is why the error message refers to
> "converted into relocations" rather than just "converted into a
> relocation".
> 
> Cheers
>   Nick
> 

Nice!

Anyway, what should I use in code?

  .word . - CONFIG_SYS_TEXT_BASE - KERNEL_OFFSET

or

  .word CONFIG_SYS_TEXT_BASE + KERNEL_OFFSET - .

And can you guarantee that one of those form would work also in future
gcc/binutils versions, and it is not something version specific or
undocumented?

Reply via email to