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?