Xtensa --- dangerous relocation: windowed long call crosses 1GB boundary -
i got following error during compilation
(.sram.text+0x1283): dangerous relocation: windowed longcall crosses 1gb boundary; return may fail: (und+0xdeadcafe)
in 1 of functions.
the architecture xtensa , toolchain used gnu toolchain built xtensa. error inside function elf_xtensa_do_reloc() in file elf32-xtensa.c in binutils source code.
please let me know cause of error , possible solution.
thanks , regards, hari
this known caveat of default xtensa windowed-register abi. quoting xtensa isa reference manual:
the window increment stored return address register in
a4
occupies 2 significant bits of register, , therefore bits must filled in subroutine return.retw
,retw.n
instructions fill in these bits 2 significant bits of own address. prevents register-window calls being used call routine in different 1gb region of address space.
you have 2 options fix this:
- you can try adjusting load base address code and/or make smaller (!) until fits within 1gb region fix it.
- if doesn't work or isn't option, you'll have recompile everything running on xtensa system compiler supports alternative call0 abi, treats register file 'flat' , avoids offending windowed call , return instructions.
Comments
Post a Comment