Forum: Compiler & IDEs LTO und <avr/fuse.h>


von abc (Gast)


Lesenswert?

Hallo,

bin gerade über ein Problem mit der Atmel Toolchain 3.4.2.1002 (GCC 
4.7.2) gestolpert:
bei Experimenten mit der LTO 
(http://gcc.gnu.org/onlinedocs/gccint/LTO.html) habe ich festgestellt, 
das der Compiler irgendwie die per
1
FUSES =
2
{
3
  .extended = 0xF9,
4
  .high = 0xDC,
5
  .low = 0xFF,
6
};
definierten Werte für die Fuse-Bytes nicht in das ELF-File packt.

dank http://comments.gmane.org/gmane.comp.hardware.avr.gcc/7911
bin ich darauf gekommen, in fuse.h die Zeile
1
#define FUSES __fuse_t __fuse FUSEMEM
um
1
__attribute__((__used__))
zu ergänzen, damit sind die Fusesbytes wieder im ELF.

Spricht irgendetwas gegen diese Lösung? Und falls nein, gibt es eine 
Möglichkeit, das in der nächsten Version der AVR-libc zu einzubauen?

viele Grüße,
Hermann

von Martin (Gast)


Lesenswert?

In der Toolchain Version 4.8.1 ist das schon korrigiert

von abc (Gast)


Lesenswert?

Martin schrieb:
> In der Toolchain Version 4.8.1 ist das schon korrigiert

ok, wo find ich solche Infos?

viele Grüße,
Hermann

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Martin schrieb:
> In der Toolchain Version 4.8.1 ist das schon korrigiert

Das hat mit (avr-)gcc nix zu tun; es hängt allein an der Version der 
AVR-Libc, die damit verbandelt ist.  Behoben 2012-06-19:

http://svn.savannah.nongnu.org/viewvc?view=rev&root=avr-libc&revision=2297

Wobei der ChangeLog-Eintrag

>>  mark as "used" so the linker won't throw it away

zumindest verwirrend ist, denn "used" wirkt nur auf den Compiler, der 
Linker sieht nix davon (ausser eben die Symbole, die der Compiler 
aufgrund von "used" nicht wegwirft).  Das hindert aber den Linker 
nicht daran, die entsprechende Section zu entsorgen falls die nicht 
referenziert wird und kein KEEP hat.

von abc (Gast)


Lesenswert?

Johann L. schrieb:
> Das hat mit (avr-)gcc nix zu tun; es hängt allein an der Version der
> AVR-Libc, die damit verbandelt ist.  Behoben 2012-06-19:
Hm, wo find ich denn raus, ab welchem Release der AVR-Libc den der Patch 
enthalten ist?

Was müßte man den in der fuse.h noch ergänzen, damit auch der Linker 
definitiv die finger weg läßt?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

abc schrieb:
> Johann L. schrieb:
>> Das hat mit (avr-)gcc nix zu tun; es hängt allein an der Version der
>> AVR-Libc, die damit verbandelt ist.  Behoben 2012-06-19:
> Hm, wo find ich denn raus, ab welchem Release der AVR-Libc den der Patch
> enthalten ist?

Hmmm, da bin ich überfragt.  Von 2011-12-29 gibt's ein Release-Tag für 
die 1.8.0, aber soviel ich weiß ist eine 1.8.0 nie releast worden.  Auf 
der AVR-Libc Frontseite steht auch nix von 1.8.0.

Die Änderung ist aber einfach genug, um sie von Hand in die Header 
einzutragen.  Ein Neuübersetzen der AVR-Libc ist ja nicht erforderlich.

> Was müßte man den in der fuse.h noch ergänzen, damit auch der Linker
> definitiv die finger weg läßt?

Wenn man die Standard-Sections der fuse.h verwendet dann muß nix gemacht 
werden, denn die entsprechenden Input-Sections haben ein KEEP im 
Linkerscript:
1
.fuse  :
2
  {
3
    KEEP(*(.fuse))
4
    KEEP(*(.lfuse))
5
    KEEP(*(.hfuse))
6
    KEEP(*(.efuse))
7
  }  > fuse

von abc (Gast)


Lesenswert?

Hallo,

sorry für die späte Antwort...
in der Toolchain, die Atmel Studio 6.2 mitbringt, ist das Fuse-Problem 
behoben, bringt also wohl eine aktuellere avr-libc-Version mit.

Allerdings spuckt der enthaltene AVR-gcc falsche Fehlermeldungen bez. 
"misspelled signal handler " aus...

viele Grüße,
Hermann

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Das Problem tritt ausschleißlich in der 4.8.2 auf und ist bereits 
behoben:

http://gcc.gnu.org/PR59396

von abc (Gast)


Lesenswert?

hmpf, dann liefert Atmel genau den 4.8.2 mit dem Studio 6.2 aus. Mal 
sehen, obs irgendwann von denen ein Update der AVR-Toolchain gibt...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.