[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [avr-gcc-list] Trouble with: relocation truncated to fit: R_AVR_13_P
From: |
Weddington, Eric |
Subject: |
Re: [avr-gcc-list] Trouble with: relocation truncated to fit: R_AVR_13_PCREL |
Date: |
Wed, 15 Jun 2011 17:45:25 -0600 |
> -----Original Message-----
> From: Georg-Johann Lay [mailto:address@hidden
> Sent: Wednesday, June 15, 2011 6:32 PM
> To: address@hidden
> Cc: Denis Chertykov; Weddington, Eric
> Subject: Trouble with: relocation truncated to fit: R_AVR_13_PCREL
>
> Hi, running avr-gcc-4.7.0 testsuite I observe mentioned problem with
> the following command line:
>
> avr-gcc ./gcc/testsuite/gcc.c-torture/execute/980709-1.c -include
> stdlib.h -O2 -flto -flto-partition=none -mmcu=atmega128
> -Wl,-u,vfprintf -lprintf_flt
> -Wl,-Tbss=0x802000,--defsym=__heap_end=0x80ffff -lm
>
> For the source see
> http://gcc.gnu.org/viewcvs/trunk/gcc/testsuite/gcc.c-
> torture/execute/980709-1.c?content-type=text%2Fplain&view=co
>
> #include <math.h>
>
> main()
> {
> volatile double a;
> double c;
> a = 32.0;
> c = pow(a, 1.0/3.0);
> if (c + 0.1 > 3.174802
> && c - 0.1 < 3.174802)
> exit (0);
> else
> abort ();
> }
>
> Error message:
>
> /local/gnu/install/gcc-
> 4.7/lib/gcc/avr/4.7.0/../../../../avr/lib/avr51/libc.a(log.o):../../../../
> ../source/avr-libc-1.7.1/libm/fplib/log.S:96:
> relocation truncated to fit: R_AVR_13_PCREL against symbol `__addsf3'
> defined in .text section in
> /local/gnu/install/gcc-4.7/lib/gcc/avr/4.7.0/avr51/libgcc.a(_addsub_sf.o)
> /local/gnu/install/gcc-
> 4.7/lib/gcc/avr/4.7.0/../../../../avr/lib/avr51/libc.a(log.o):../../../../
> ../source/avr-libc-1.7.1/libm/fplib/log.S:100:
> relocation truncated to fit: R_AVR_13_PCREL against symbol `__addsf3'
> defined in .text section in
> /local/gnu/install/gcc-4.7/lib/gcc/avr/4.7.0/avr51/libgcc.a(_addsub_sf.o)
> /local/gnu/install/gcc-
> 4.7/lib/gcc/avr/4.7.0/../../../../avr/lib/avr51/libc.a(modf.o):../../../..
> /../source/avr-libc-1.7.1/libm/fplib/modf.S:90:
> relocation truncated to fit: R_AVR_13_PCREL against symbol `__subsf3'
> defined in .text section in
> /local/gnu/install/gcc-4.7/lib/gcc/avr/4.7.0/avr51/libgcc.a(_addsub_sf.o)
>
> The command line is a typical commandline used in testsuite regression
> test runs for avr-gcc.
>
> $avr-libc/libm/fplib/log.S shows explicit use of RCALL/RJMP to
> external symbols which should definitely not be there.
>
> Is this worth a bug report or is someone already working on this?
>
> I've seen similar topics in avr forums then and when...
>
> Then, I wonder why _addsub_sf.o is dragged in (by __addsf3 or
> __subsf3) even though avr-libc implements that.
>
> I've already consulted Jörg about that, and that the hackish
> "overwrite" of stuff from libgcc by avr-libc does not always work as
> intended.
Do we know why that is the case, why it's not working for certain cases?
Because it does work in other cases.
Eric
> It's obvious that the desired solution was to have that code
> integrated into libgcc instead of in avr-libc (which is not the case
> for reasons we all know).
>
> So I proposed a fix that involves less administrative and
> implementational overhead and resource:
>
> * Add a new option to avr-gcc: -mavr-libc (on by default)
>
> * If -mavr-libc is on, use gcc optabs to emit other function names
> for distinct function in libgcc, e.g. __avrlibc___addsf3 instead
> of __addsf3.
>
> * Sprinkle some new __avrlibc_* labels over avr-libc like, e.g:
> .global __avrlibc___addsf3
> .global __addsf3
> __avrlibc___addsf3:
> __addsf3:
> instead of
> .global __addsf3
> __addsf3:
>
> That way the bulky libgcc implementations could be bypassed. It would
> be a minimal change in avr backend and it is the preferred way to
> interface with a 3rd party library (like gofast).
>
> Johann