www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Luminary 3s6965 Cortex-m3, Linker Problem


Autor: Oliver R. (oliverr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich experimantiere gerade etwas mit obigen Controller. Dabei benutze ich 
den Codesourcery-lite Compiler. Ich bin gerade dabei ein bisschen was in 
Festkommaarithmetik auszuprobieren. Dabei benutzte ich öfters 64bit 
Operationen. Teilweise bekomme ich dann einen Linker Fehler:

section .ARM.exidx [00020b6c -> 00020b73] overlaps section .data

Der Fehler kommt nicht immer, sondern nur bei 64bit Operationen, da aber 
auch nur sporadisch. Bisher habe ich das Problem durch Codeumsortieren 
beheben können. Bei dieser Funktion ist mir das aber bisher nicht 
gelungen.

Als Linker-script verwende ich die Beispiele von Luminary.

Ich hoffe, jemand von Euch kennt sich mit dem Linker aus, und kann mir 
weiterhelfen?

Dank und Grüße
Oliver
#define norm 20
int divN(int z1, int z2){
  long long z3;
  z3 = (long long)z1 << 32 ;
  z3 = (z3/z2) >> (32-norm); // ACHTUNG: Hier gibts wieder den exidx-Fehler
  return  z3;
}

Autor: GNU Meister (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Poste mal das Makefile und das Linkerskript.
Die Section exidx ist eigentlich für die Exceptions. Brauchst Du die?
Sonst probier mal -fno-exceptions bei den Flags.

Autor: Oliver R. (oliverr)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe es (-fno-exceptions) bei den CFLAGS (makedefs) dazugeschrieben. 
Ändert leider auch nichts.

Grüße
Oliver

Autor: Linus Torvald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Problematisch ist folgende Section im Linkerfile:
 .data : AT(ADDR(.text) + SIZEOF(.text))
    {
        _data = .;
        *(vtable)
        *(.data*)
        _edata = .;
    } > SRAM

AT und > zu mischen, kann zu diesen Fehler führen.
Versuch mal sowas wie
 .data :
    {
        _data = .;
        *(vtable)
        *(.data*)
        _edata = .;
    } > SRAM AT>FLASH

Autor: Oliver R. (oliverr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank,

Damit lief der Compiler durch. Was mich jetzt aber doch interessiert, 
ist, was ist eigentlich der Unterschied? Ich bin leider völlig blank, 
was die Linker-Konfiguration anbelangt.

Grüße
OR

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich bin jetzt kein Profi und beschäftige mich erst seit ein paar 
Monaten mit der M3-Programmierung, aber ich denke, daß die Ursache und 
der Unterschied wie folgt sind:

In Deinem Skript hast Du in der Section .text sowohl *(.text*) als auch 
*(.rodata*), legst .data aber an die Adresse
   ADDR(.text) + SIZEOF(.text).
Meiner Meinung nach müßte das aber
   ADDR(.text) + SIZEOF(.text) + SIZEOF(.rodata).
heißen. Sobald Konstanten im Programm genutzt werden, müßte dann der 
Fehler kommen.

Mit dem Ausdruck von Linus
   > SRAM AT>FLASH
überläßt Du dem Linker die korrekte Berechnung.
In Deinem Fall ist die manuelle Berechnung ja auch nicht nötig. 
Eleganter ist dann in der Tat der Ausdruck von Linus.

Das Ganze aber ohne Gewähr.
Wäre aber schön, wenn Du das mal ausprobierst, mich würde das Ergebnis 
interssieren ;)

Autor: Oliver R. (oliverr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Vielen Dank für Deine Erklärung.

Mit dem Hinweis von Linus funktioniert. Mit Deiner Änderung bekomme ich 
wieder den exidx-Fehler.

Dank und Grüße
Oliver

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.