WARNUNG: Debian gcc-avr 4.8.2-1 bringt lästigen Bug

(Firma: Brainit GmbH) #3597006
Lesenswert?

Guten Morgen allerseits,

heute bin ich fast aus allen Wolken gefallen: Ein Code der gestern abend 
noch problemlos kompiliert wurde, hat heute Warnungen ausgespuckt:
1
warning: ‘_vector_11’ appears to be a misspelled signal handler [enabled by default]

Ursache war ein Paketupdate des avr-gcc von 4.8-2 auf 4.8-2.1

Dieses Update enthält einen bekannten (kleinen) Bug, der dazu führt dass 
bei benutzung von -flto diese Warnungen fälschlicherweise ausgegeben 
werden (das Binary selbst ist nicht betroffen und funktioniert 
problemlos)

Details siehe hier: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59396

Die Warnung kann also ignoriert werden, ist aber lästig: Mein Code wird 
grundsätzlich solange behandelt, bis er keine Warnungen ausgibt (weil 
ich dann eine neu dazugekommene sofort sehe). Gefixt wird das 
offensichtlich erst in 4.8.3

Ich bin jedenfalls wieder auf 4.8-2 zurück.

Vielleicht hilft es jemandem...
Moderator Persönliche Seite #3597139
Lesenswert?

Konrad S. schrieb:
> Es ist - hmm - etwas zeitaufwendig, wenn man sich als gelegentlicher
> Compilerselbst(bio)bauer die benötigten (welche denn?) Patches
> zusammensuchen will.

Naja, diejenigen, die für die jeweilige Distributionsversion benutzt
worden sind, sollten doch einfach zu beschaffen sein, oder?  Man muss
doch eigentlich nur das nachvollziehen, was der Distributor da getan
hat, dann den gewünschten zusätzlichen Patch beilegen und alles nochmal
compilieren.
Moderator Persönliche Seite #3597155
Lesenswert?

Jörg Wunsch schrieb:
> Konrad S. schrieb:
>> Es ist - hmm - etwas zeitaufwendig, wenn man sich als gelegentlicher
>> Compilerselbst(bio)bauer die benötigten (welche denn?) Patches
>> zusammensuchen will.
>
> Naja, diejenigen, die für die jeweilige Distributionsversion benutzt
> worden sind, sollten doch einfach zu beschaffen sein, oder?  Man muss
> doch eigentlich nur das nachvollziehen, was der Distributor da getan
> hat, dann den gewünschten zusätzlichen Patch beilegen und alles nochmal
> compilieren.

Ja. Normalerweise gibt es zu jedem kompilierten Paket die entsprechenden 
Quellpakete, aus denen die Pakete erzeugt wurden.

Dann noch den Fix einpatchen und los geht's :-)

Der Aufwand hält sich im Rahmen.
Persönliche Seite #3597162
Lesenswert?

Michael Reinelt schrieb:
> Johann L. schrieb:
>> Kannst du nicht einfach mit -w linken?
>
> Könnte ich sicher, wenn ich wüsste was -w tut. Meine gcc-ManPage kennts
> mal nicht (oder ich finds nicht), ld-manpage auch nicht.
1
-w
2
    Inhibit all warning messages.

http://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/Warning-Options.html#index-w-250

Also normal compilieren mit all den -W Warnungen die du magst, und 
während dem LTO-Lauf die Warnungen deaktivieren.

Ist zwar nur ein Work-Around, aber wenn's eben ein Problem in den Tools 
gibt, braucht's eben nen Work-Around.
(Firma: Brainit GmbH) #3597174
Lesenswert?

Johann L. schrieb:
>
1
> -w
2
>     Inhibit all warning messages.
3
>

Das war vorher nicht da! ich schwöre! :-)
keine Ahnung wie ich das übersehen konnte...

> Also normal compilieren mit all den -W Warnungen die du magst, und
> während dem LTO-Lauf die Warnungen deaktivieren.

Hmmm... da ich erst seit kurzem mit LTO arbeite (dank einem 
interessanten Thread hier) hab ich keinen "extra LTO-Lauf" (ist 
vielleicht ein Fehler?)

Mein makefile sieht so aus:
1
MCU     = atmega328p
2
F_CPU   = 16000000UL
3

4
SOURCES = main.c i2c_master.c dog.c uart.c qprintf.c
5

6
CFLAGS = -W -Wall -Wextra -std=gnu99 -Os -flto -fshort-enums -fno-strict-aliasing -fverbose-asm -save-temps -Wl,-Os,-flto,--relax,--gc-sections
7

8
COMPILE = avr-gcc $(CFLAGS) -DF_CPU=$(F_CPU) -mmcu=$(MCU)
9

10

11
all:  main.hex
12

13
main.elf: $(SOURCES)
14
  $(COMPILE) -o main.elf $(SOURCES) -lm
15

16
main.hex: main.elf
17
  avr-objcopy -O ihex -j .text -j .data main.elf main.hex
18
  avr-size --format=avr --mcu=$(MCU) main.elf
19

20
size:  main.elf
21
  avr-nm --size-sort --print-size -td main.elf
22

23
flash:  all
24
  avrdude -c stk500v2 -P /dev/ttyUSB0 -p atmega328p -q -U flash:w:main.hex:i
25

26
fuse:
27
  avrdude -c stk500v2 -P /dev/ttyUSB0 -p atmega328p -q -U lfuse:w:0xff:m 
28
  avrdude -c stk500v2 -P /dev/ttyUSB0 -p atmega328p -q -U hfuse:w:0xd0:m 
29
  avrdude -c stk500v2 -P /dev/ttyUSB0 -p atmega328p -q -U efuse:w:0x07:m 
30

31
check:
32
  avrdude -c stk500v2 -P /dev/ttyUSB0 -p atmega328p -n -v
33

34
clean:
35
  rm -f main.hex main.elf *.o *.s *.i *.res *.out *~

im wesentlichen gibts also eine Regel die alles macht (main.elf) und da 
mag ich verständlicherweise keine Warnings unterdrücken...
#3597206
Lesenswert?

Peter Dannegger schrieb:
> Ich würd mal sagen, 99% der Compilerbenutzer wissen nicht, wie man einen
> Compiler selber compiliert.

Hab mir schon gedacht, dass ich einer Minderheit angehöre. :-)

Chris D. schrieb:
> Ja. Normalerweise gibt es zu jedem kompilierten Paket die entsprechenden
> Quellpakete, aus denen die Pakete erzeugt wurden.

Die zuhause für AVR-Entwicklung verwendetete Distribution macht bei 
gcc-4.4 Schluss. Damit ist kein Blumentopf zu gewinnen. Ich könnte 
natürlich die Paketquellen einer anderen Distribution zerpflücken ...

Welche Distribution ist denn bei den gcc-Versionen immer vorne mit 
dabei? Den gcc-4.8.1 habe ich schon - ungepatcht allerdings.
(Firma: Brainit GmbH) #3597223
Lesenswert?

Konrad S. schrieb:
> Welche Distribution ist denn bei den gcc-Versionen immer vorne mit
> dabei? Den gcc-4.8.1 habe ich schon - ungepatcht allerdings.

ich bin da mit Debian eigentlich sehr zufrieden, sofern du dich aus dem 
stabilen Bereich raustraust. Das geht aber mit "Pinning" sehr gut und 
komfortabel. Ich hab einen mix aus Stable (sehr wenig), Testing (das 
meiste), Unstable (sehr wenig) und von Fall zu Fall probier ich gerne 
mal ein Paket aus Experimental aus.

beim gcc-avr siehts da momentan so aus:
stable: 4.7.2
testing, unstable, experimental: 4.8-2.1

der "normale" gcc ist im experimental schon auf 4.9
#3597281
Lesenswert?

Michael Reinelt schrieb:
> ich bin da mit Debian eigentlich sehr zufrieden, sofern du dich aus dem
> stabilen Bereich raustraust. Das geht aber mit "Pinning" sehr gut und
> komfortabel. Ich hab einen mix aus Stable (sehr wenig), Testing (das
> meiste), Unstable (sehr wenig) und von Fall zu Fall probier ich gerne
> mal ein Paket aus Experimental aus.

Danke, dann schau ich mal in die Richtung. Ich hole mir da dann eh nur 
die Quelltext-Pakete, denn mein aktuelles System bleibt drauf, solange 
es dafür Security-Updates gibt. Da sind 'ne Menge (angepasste, selbst 
compilierte und selbst geschriebene) Sachen drauf, die wunderbar laufen, 
solange mir Updates nicht wieder was zerlegen (VDR ist da etwas 
anfällig).
Gast #3600195
Lesenswert?

Peter Dannegger schrieb:
> Ich würd mal sagen, 99% der Compilerbenutzer wissen nicht, wie man einen
> Compiler selber compiliert.

Jap, so ist es halt.
Wozu muss ich es wissen? was bringt mir das?
Mein Auto braucht Diesel zum fahren was er damit macht ist mir Sch... 
egal
Gast #3600212
Lesenswert?

Martin schrieb:
> Wozu muss ich es wissen? was bringt mir das?
> Mein Auto braucht Diesel zum fahren was er damit macht ist mir Sch...
> egal

Für den Ottonormalverbraucher mag das egal sein, aber wenn du selbst 
Autos herstellen willst ( Compilerbenutzer ), solltest du auch wissen 
wie ein Auto und seine Bestandteile funktionieren.

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