R_AVR_13_PCREL against symbol

Gast #2735819
Lesenswert?

Hallo,

ich habe wie im Betreff geschrieben ein Problem beim Linken. Die 
Bibliothek libm.a wird im Linker am Ende mitgelinkt. Nichtsdestrotz 
bekomme ich immer den Fehler. Verschiedene Einstellungen am Compiler 
haben mich nicht weitegebracht.

Unten habe ich die gesamte Ausgabe eingefügt. Ich weiss nicht woran der 
Fehler liegen könnte.

Wäre dankbar wenn mir jemand einen Tipp geben könnte.

Grüße
Werner
1
avr-gcc -Wall -Os -lm -mmcu=atmega162 -DF_CPU=11059200UL -MMD -MP -MF"ucossource/os_core.d" -MT"ucossource/os_core.d" -c -o "ucossource/os_core.o" "../ucossource/os_core.c"
2

3
avr-gcc -Wall -Os -lm -mmcu=atmega162 -DF_CPU=11059200UL -MMD -MP -MF"ucossource/os_flag.d" -MT"ucossource/os_flag.d" -c -o "ucossource/os_flag.o" "../ucossource/os_flag.c"
4

5
avr-gcc -Wall -Os -lm -mmcu=atmega162 -DF_CPU=11059200UL -MMD -MP -MF"ucossource/os_mbox.d" -MT"ucossource/os_mbox.d" -c -o "ucossource/os_mbox.o" "../ucossource/os_mbox.c"
6

7
avr-gcc -Wall -Os -lm -mmcu=atmega162 -DF_CPU=11059200UL -MMD -MP -MF"ucossource/os_mem.d" -MT"ucossource/os_mem.d" -c -o "ucossource/os_mem.o" "../ucossource/os_mem.c"
8

9
avr-gcc -Wall -Os -lm -mmcu=atmega162 -DF_CPU=11059200UL -MMD -MP -MF"ucossource/os_mutex.d" -MT"ucossource/os_mutex.d" -c -o "ucossource/os_mutex.o" "../ucossource/os_mutex.c"
10

11
avr-gcc -Wall -Os -lm -mmcu=atmega162 -DF_CPU=11059200UL -MMD -MP -MF"ucossource/os_q.d" -MT"ucossource/os_q.d" -c -o "ucossource/os_q.o" "../ucossource/os_q.c"
12

13
avr-gcc -Wall -Os -lm -mmcu=atmega162 -DF_CPU=11059200UL -MMD -MP -MF"ucossource/os_sem.d" -MT"ucossource/os_sem.d" -c -o "ucossource/os_sem.o" "../ucossource/os_sem.c"
14

15
avr-gcc -Wall -Os -lm -mmcu=atmega162 -DF_CPU=11059200UL -MMD -MP -MF"ucossource/os_task.d" -MT"ucossource/os_task.d" -c -o "ucossource/os_task.o" "../ucossource/os_task.c"
16

17
avr-gcc -Wall -Os -lm -mmcu=atmega162 -DF_CPU=11059200UL -MMD -MP -MF"ucossource/os_time.d" -MT"ucossource/os_time.d" -c -o "ucossource/os_time.o" "../ucossource/os_time.c"
18
 
19
avr-gcc -Wall -Os -lm -mmcu=atmega162 -DF_CPU=11059200UL -MMD -MP -MF"MTuart.d" -MT"MTuart.d" -c -o "MTuart.o" "../MTuart.c"
20

21
avr-gcc -Wall -Os -lm -mmcu=atmega162 -DF_CPU=11059200UL -MMD -MP -MF"Main.d" -MT"Main.d" -c -o "Main.o" "../Main.c"
22
../Main.c:264: warning: 'AppTask3' defined but not used
23
../Main.c:280: warning: 'AppTask4' defined but not used
24
 
25

26
avr-gcc -x assembler-with-cpp -mmcu=atmega162 -MMD -MP -MF"os_cpu_a.d" -MT"os_cpu_a.d" -c -o "os_cpu_a.o" "../os_cpu_a.S"
27
 
28
avr-gcc -Wall -Os -lm -mmcu=atmega162 -DF_CPU=11059200UL -MMD -MP -MF"os_cpu_c.d" -MT"os_cpu_c.d" -c -o "os_cpu_c.o" "../os_cpu_c.c"
29

30
avr-gcc -Wl,-Map,AVRCompilerTest.map -lm -mmcu=atmega162 -o "AVRCompilerTest.elf"  ./ucossource/os_core.o ./ucossource/os_flag.o ./ucossource/os_mbox.o ./ucossource/os_mem.o ./ucossource/os_mutex.o ./ucossource/os_q.o ./ucossource/os_sem.o ./ucossource/os_task.o ./ucossource/os_time.o  ./MTuart.o ./Main.o ./os_cpu_a.o ./os_cpu_c.o   -lm
31
./os_cpu_a.o: In function `_not_first_int':
32
(.text+0x1ea): relocation truncated to fit: R_AVR_13_PCREL against symbol `OSTimeTick' defined in .text section in ./ucossource/os_core.o
33
./os_cpu_a.o: In function `_not_first_int':
34
(.text+0x1ee): relocation truncated to fit: R_AVR_13_PCREL against symbol `OSIntExit' defined in .text section in ./ucossource/os_core.o
Moderator #2735897
Lesenswert?

Offensichtlich werden irgendwo OSTimeTick und OSIntExit PC-relativ über
eine zu große Distanz angesprungen. Schau mal nach, ob du in os_cpu_a.S
folgende Zeilen findest:
1
  rcall OSTimeTick

und
1
  rcall OSIntExit

Wenn ja, ersetze rcall jeweils durch call.

Alternativ kannst du im Linker-Befehl die Argumente anders anordnen, so
dass ./os_cpu_a.o näher bei ./ucossource/os_core.o steht.
Gast #2736325
Lesenswert?

Danke Euch allen Dreien.

Yalu X. schrieb:
> rcall OSTimeTick
>
> und
>   rcall OSIntExit
>
> Wenn ja, ersetze rcall jeweils durch call.


Exakt das war es. Wäre ich nie selber drauf gekommen. Mir ist zwar schon 
aufgefallen, dass sich die Fehlermeldungen auf die Assembler-Datei 
bezogen aber auf den rcall bin ich nicht gekommen. Ich habe da schon 
seit Tagen gesucht und Google hat mir auch nicht weitergeholfen.

Nochmals vielen Dank
Persönliche Seite #2736416
Lesenswert?

Werner schrieb:
> Danke Euch allen Dreien.
>
> Yalu X. schrieb:
>>   rcall OSTimeTick
>> und
>>   rcall OSIntExit
>>
>> Wenn ja, ersetze rcall jeweils durch call.
>
> Exakt das war es. Wäre ich nie selber drauf gekommen.

Wenn die Quelle für unterschiedliche Devices zum Einsatz kommt kann man 
auch parametrisieren, zB per
1
#if defined (__AVR_HAVE_JMP_CALL__)
2
#define XCALL call
3
#define XJMP  jmp
4
#else
5
#define XCALL rcall
6
#define XJMP  rjmp
7
#endif

und XCALL bzw. XJMP verwenden.  Um die kurze Variante zu erzeugen falls 
verfügbar, gibt man -mrelax oder -Wl,--relax an.

Jörg Wunsch schrieb:
> Johann L. schrieb:
>> Mach das -lm ans Ende der Optionen des (Linker-)Aufrufs.
>
> Hat er schon.

Ah ja, jetzt seh ich's.

> Die Beschwerde richtet sich ja auch überhaupt nicht
> gegen irgendwas aus libm.a oder libgcc.a.

A propos, wird #33698 irdendwann mal gefixt?
Moderator Persönliche Seite #2736481
Lesenswert?

Johann L. schrieb:
> A propos, wird #33698 irdendwann mal gefixt?

Ja, wie ich schon mal schrieb, typischerweise setze ich mich ein
paar Abende lang hin und arbeite Bugfixes ein während der Vorbereitung
für ein neues Release.  Ich gehe mal davon aus, dass das noch vor
den Sommerferien sein wird, aber vorher möchte ich erstmal AVRDUDE
6.0 freigeben.
Persönliche Seite #2737199
Lesenswert?

Jörg Wunsch schrieb:

> typischerweise setze ich mich ein paar Abende lang hin und arbeite
> Bugfixes ein während der Vorbereitung für ein neues Release.

hmm, ok

Insbesondere #35407 ist womöglich doch etwas mehr Aufwand, insbesondere 
die erforderlichen Erweiterungen im Buildsystem gegen verschiedene 
gcc-Versionen zu testen. Wenn ich recht sehe wird momentan noch 
-mtiny-stack als multilib-Option verwendet; korrekt wäre aber -msp8.

Wenn die multilib-Layouts von Lib und gcc nicht zusammenpassen, dann 
kann man mit einer Release nicht viel anfangen -- egal wieviel andere 
Bugs diese behebt :-/
Moderator Persönliche Seite #2737859
Lesenswert?

Johann L. schrieb:
> Wenn die multilib-Layouts von Lib und gcc nicht zusammenpassen, dann
> kann man mit einer Release nicht viel anfangen -- egal wieviel andere
> Bugs diese behebt :-/

Ja, danke für die Vorwarnung, ich werde mir dafür entsprechend mehr
Zeit gedanklich einplanen.  Einen SVN-trunk-GCC habe ich ja typisch
ohnehin daliegen, gegen den ich das testen kann.
Persönliche Seite #2737905
Lesenswert?

Jörg Wunsch schrieb:
> Johann L. schrieb:
>> Wenn die multilib-Layouts von Lib und gcc nicht zusammenpassen, dann
>> kann man mit einer Release nicht viel anfangen -- egal wieviel andere
>> Bugs diese behebt :-/
>
> Ja, danke für die Vorwarnung, ich werde mir dafür entsprechend mehr
> Zeit gedanklich einplanen.

und damit's nicht allzu langweilig wird: -msp8 ist erst ab 4.7.1 
bekannt.
In 4.7.0 — und nur dort — fungiert -mtiny-stack als multilib-Option, 
siehe PR51345 und PR52741.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren