Forum: Compiler & IDEs objcopy produziert riesiges binary


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Vincent H. (vinci)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Grüß euch

Im Anhang befinden sich 2x ELF Datein für einen Cortex-M4. Die beiden 
Datein wurden mit unterschiedlichen Compilern erzeugt, einmal mit GCC10, 
einmal mit Clang10.

gcc.elf sollte ein 344B großes Binary erzeugen
clang.elf sollte ein 868B großes Binary erzeugen

Letzteres funktioniert allerdings leider nicht. Versuche ich mit objcopy 
(egal ob von binutils oder llvm-objcopy) ein Binary zu erstellen, so ist 
das Resultat 256MB(!) groß.

Hat irgendwer eine Idee woran das liegen könnte?

tia

von User (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Ja an den Sections, wenn der Flash-Speicher bei einer höheren Adresse 
anfängt, wird der Bereich zwischen 0 und der Adresse mit 0en aufgefüllt. 
Bei dir wird wohl der Flash-Speicher bei 256MByte anfangen.

von Vincent H. (vinci)


Bewertung
0 lesenswert
nicht lesenswert
Ah verstehe. In den beiden ELF Datein findet sich auch ein Eintrag 
namens "Section to Segment mapping" und während im GCC lediglich
 Section to Segment mapping:
  Segment Sections...
   00     .vector_table .version .text 
   01     .bss ._user_heap_stack 

zu finden ist, listet Clang
 Section to Segment mapping:
  Segment Sections...
   00     .vector_table .version .text .rodata .ARM.exidx 
   01     .preinit_array .init_array .fini_array 
   02     .data .bss .bss2 ._user_heap_stack 
   03     .preinit_array .init_array .fini_array 
   04     
   05     .rodata .ARM.exidx 


Die Frage ist nur... wie bekomm ich das weg. :)

von Gerald K. (geku)


Bewertung
0 lesenswert
nicht lesenswert
Achtung : ein ELF File enthält auch einen Header und kann zusätzlich 
durch Debug-Informationen "aufgeblasen" werden. Erklärt aber nicht die 
256MB

Versuche einmal den ELF File in ein Binärfile umzuwandeln.

arm-elf-objcopy -O binary [elf-input-file] [binary-output-file]

https://stackoverflow.com/questions/2427011/what-is-the-difference-between-elf-files-and-bin-files

von Vincent H. (vinci)


Bewertung
0 lesenswert
nicht lesenswert
Gerald K. schrieb:
> Achtung : ein ELF File enthält auch einen Header und kann zusätzlich
> durch Debug-Informationen "aufgeblasen" werden. Erklärt aber nicht die
> *256MB*
>
> Versuche einmal den ELF File in ein Binärfile umzuwandeln.
>
> arm-elf-objcopy -O binary [elf-input-file] [binary-output-file]
>
> 
https://stackoverflow.com/questions/2427011/what-is-the-difference-between-elf-files-and-bin-files

Bitte den letzten Absatz nochmal lesen. Es geht um erzeugte Binaries. ;)


/edit
Interessant, mit (NOLOAD) bei .data, .bss, .bss2 und ._user_heap_stack 
wird das Binary noch größer...?

: Bearbeitet durch User
von Vincent H. (vinci)


Bewertung
0 lesenswert
nicht lesenswert
Mit etwas mehr Infos nun auch auf stackoverflow, da doch sehr spezielles 
Thema:
https://stackoverflow.com/questions/62320128/differences-between-gcc-clang-when-linking

von Vincent H. (vinci)


Bewertung
0 lesenswert
nicht lesenswert

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.

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