www.mikrocontroller.net

Forum: Compiler & IDEs section-start wird nur auf erstes .o file angewendet


Autor: Dirk Armbrust (tuxbow)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich hab' jetzt einen halben Tag lang gegoogled und probiert, und komme 
nicht weiter:

ich habe in mehreren .c files einige Funktionen mit 
__attribute__((section(".xbootloader"))) versehen.

der GCC aufruf zum linken lautet:
avr-gcc fb_prot.o fb_bootloader.o msg_queue.o fb_hal.o fbrf_hal.o fbrf_prot.o rf22.o Spi.o 
-Wl,-Map,fb-bootloader.out.map -mmcu=atmega328p -lm  -Wl,--section-start=.xbootloader=0x1000
-Wl,--section-start=.text=0x7000 -o fb-bootloader.out
danach stehen die .xbootloader funktionen von fb_prot.o wie gewünscht 
auf 0x1000.
.xbootloader    0x00001000      0x3e0
 .xbootloader   0x00001000      0x3e0 fb_prot.o
                0x0000123a                fbprot_msg_handler
                0x000013c8                fbprot_Init
die funktionen aus fb_bootloader.o z.B. jedoch nicht, sie werden hinten 
an .text angehängt:
.xbootloader    0x00007e96      0x15c
 .xbootloader   0x00007e96      0x15c fb_bootloader.o
                0x00007e96                jumpToApplication
                0x00007edc                restartApplication
                0x00007ee0                runApplication
                0x00007f6a                main
wenn ich im gcc aufruf fb_bootloader.o nach vorn schiebe, ist es genau 
umgekehrt. --section-start wird also offenbar nur das erste .o file 
angewendet.
Wie bekomme ich den gcc dazu, alle .o files zu berücksichtigen?

Gruß,
tuxbow.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
--section-start bezieht sich auf eine output section.

Ich glaube, damit dein Vorhaben funktioniert, müsstest du einen
eigenen Linkerscript benutzen, der dein .xbootloader explizit als
output section anlegt.  Andernfalls sortiert der Linker das wohl
implizit hinter .text, weil er dafür keine weite Angabe im
Linkerscript hat.

Ganz genau verstehe ich die Linkerstrategie auch nicht ;), aber
mit einem expliziten Linkerscript geht's zumindest.

Autor: Dirk Armbrust (tuxbow)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, ich hab's jetzt doch selbst herausgefunden:
 ich hab eine Kopie des ldscripts (in meinem Fall avr5.x) in mein 
Projektverzeichnis getan (neuer Name fb-avr5.x)und dort hinzugefügt;
MEMORY
{
  text   (rx)   : ORIGIN = 0, LENGTH = 128K
  xbootloader (rx)   : ORIGIN = 0, LENGTH = 128K    /* <--- */
  data   (rw!x) : ORIGIN = 0x800060, LENGTH = 0xffa0
  eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 64K
}
SECTIONS
{
....
  .xbootloader  :
  {
    *(.xbootloader*)
  }  > xbootloader
....

und dann natürlich die option

-T fb-avr5.x   ins link Kommando mitgeben.

so bekomme ich die .xbootloader sections aus allen .o files dort wo ich 
sie haben will:
.bootloader     0x00001000      0x53c
 *(.bootloader*)
 .bootloader    0x00001000      0x15c fb_bootloader.o
                0x00001000                jumpToApplication
                0x00001046                restartApplication
                0x0000104a                runApplication
                0x000010d4                main
 .bootloader    0x0000115c      0x3e0 fb_prot.o
                0x00001396                fbprot_msg_handler
                0x00001524                fbprot_Init

BINGO!

Autor: Dirk Armbrust (tuxbow)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, Jörg. Während ich die Lösung getippt habe, ist Deine Antwort 
eingetroffen. That's life, danke für Deine Mühe.

Gruß,
Dirk.

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.