Forum: Compiler & IDEs objcopy produziert riesiges binary


von Vincent H. (vinci)


Angehängte Dateien:

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)


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)


Lesenswert?

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

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


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

von Gerald K. (geku)


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)


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)


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)


Lesenswert?


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.