LTO und <avr/fuse.h>

Gast #3656772
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
Persönliche Seite #3656830
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.
Gast #3656887
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?
Persönliche Seite #3658463
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
Gast #3664731
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.