avr-libc-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[avr-libc-dev] [bug #33698] Explicit use of RJMP/RCALL can cause "reloca


From: Georg-Johann Lay
Subject: [avr-libc-dev] [bug #33698] Explicit use of RJMP/RCALL can cause "relocation truncated to fit: R_AVR_13_PCREL" linker error
Date: Thu, 16 Feb 2012 11:10:09 +0000
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.10) Gecko/20100506 SUSE/3.5.10-0.1.2 Firefox/3.5.10

Follow-up Comment #7, bug #33698 (project avr-libc):

> IMO, I think the cleaner solution is to:
> 
> 1. Improve the definition of XCALL/XJMP - at present
> it's defines call/jmp when __AVR_MEGA__ and rjmp/rcall
> otherwise. We need to correct this.

That won't catch all cases because sources use RJMP directly.
See the initial post for examples.
 
> 2. Like Jan Waclawek mentioned, let the linker relaxation
> optimize it, rather than changing the linker script to
> keep the math functions closer (even if we do, i wonder if
> it's going to solve the problem completely)

Keeping functions together and knowing that RCALL is always
legal can simplify the sources.  There is a silicon bug that
obsoletes call-skip sequences.

For example, in libgcc we see code like the following:

#ifdef __AVR_ERRATA_SKIP_JMP_CALL__
    ;; Some cores have problem skipping 2-word instruction
    tst  A0
    brmi 1f
#else
    sbrs A0, 7
#endif /* __AVR_HAVE_JMP_CALL__ */
    XJMP  __fmul
1:  XCALL __fmul

This must not rely on linker relaxation.

If, however, binutils ensured that functions in
section .text.libgcc and any .text.libgcc.foo are close
together, the snip above could be simplified as

    sbrs A0, 7
    XJMP  __fmul
    XCALL __fmul

For avr-libc this means that replacing RCALL/RJMP with
XCALL/XJMP must be done carefully if the instruction
is a skip's payload (SBRS, SBRC, SBIS, SBIC, CPSE).


    _______________________________________________________

Reply to this item at:

  <http://savannah.nongnu.org/bugs/?33698>

_______________________________________________
  Nachricht geschickt von/durch Savannah
  http://savannah.nongnu.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]