Forum: Mikrocontroller und Digitale Elektronik elf32-avr object file format (gcc)


von mira (Gast)


Lesenswert?

Hallo,

ich suche vergeblich eine ausführliche Beschreibung zum Object file 
format (*.o) des avr-gcc (8-Bit). Freund Google findet nichts passendes. 
Kann jemand helfen?

mira

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ist ein völliges Standard-ELF32, was erwartest du sonst noch?

Es gibt irgendwo eine Kennung für die Zielarchitektur, nur darin
unterscheidet sich AVR dann von anderen.

von mira (Gast)


Lesenswert?

es wird in verschiedensten threads und auch beispielsweise hier:
http://www.rn-wissen.de/index.php/Avr-gcc/Interna
immer von einem "speziellen elf32-avr-format" gesprochen.

Wenn ich nachfrage wird dies bestätigt, in verbindung mit der 
Information, dass es gerade kein standard-elf32 wäre. Ich habe hier von 
keiner Seite bisher eine wirklich eindeutige Antwort erhalten, daher die 
Frage.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Dann glaub' mir: es ist ein stinknormalens Standard-ELF32.

Unter Linux unterscheidet es sich wohl nur in einem einzigen Byte
vom native ELF32, sodass man statt der avr-Tools (avr-nm, avr-objcopy
etc.) auch genausogut die Tools des Systems nehmen kann.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

p.s.: FreeBSD hat zwar noch ein von Linux unterschiedliches OS-Feld,
aber elfdump geht auch hier ganz normal.  Hier der Anfang:
1
elf header:
2
3
        e_ident: ELFCLASS32 ELFDATA2LSB ELFOSABI_SYSV
4
        e_type: ET_REL
5
        e_machine: (unknown machine) -- type 0x53
6
        e_version: EV_CURRENT
7
        e_entry: 0
8
        e_phoff: 0
9
        e_shoff: 7776
10
        e_flags: 179
11
        e_ehsize: 52
12
        e_phentsize: 0
13
        e_phnum: 0
14
        e_shentsize: 40
15
        e_shnum: 11
16
        e_shstrndx: 8
17
18
program header:
19
20
section header:
21
22
entry: 0
23
        sh_name: 
24
        sh_type: SHT_NULL
25
        sh_flags: 
26
        sh_addr: 0
27
        sh_offset: 0
28
        sh_size: 0
29
        sh_link: 0
30
        sh_info: 0
31
        sh_addralign: 0
32
        sh_entsize: 0
33
34
entry: 1
35
        sh_name: .text
36
        sh_type: SHT_PROGBITS
37
        sh_flags: SHF_ALLOC|SHF_EXECINSTR
38
        sh_addr: 0
39
        sh_offset: 52
40
        sh_size: 330
41
        sh_link: 0
42
        sh_info: 0
43
        sh_addralign: 1
44
        sh_entsize: 0
45
46
...

Das Feld e_machine ist das wesentliche Unterscheidungsmerkmal für den
AVR.  Ein FreeBSD native ELF32 sieht im Vergleich so aus:
1
elf header:
2
3
        e_ident: ELFCLASS32 ELFDATA2LSB ELFOSABI_FREEBSD
4
        e_type: ET_REL
5
        e_machine: EM_386
6
        e_version: EV_CURRENT
7
        e_entry: 0
8
        e_phoff: 0
9
        e_shoff: 144
10
        e_flags: 0
11
        e_ehsize: 52
12
        e_phentsize: 0
13
        e_phnum: 0
14
        e_shentsize: 40
15
        e_shnum: 8
16
        e_shstrndx: 5

von mira (Gast)


Lesenswert?

Danke Jörg, jetzt glaube ich das.
Falls jemand Details nachlesen will, habe ich das PDF dazu als Anhang 
hinzugefügt.

mira

von mira (Gast)


Angehängte Dateien:

Lesenswert?

Sorry, Datei war beschädigt, hier nochmal.

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.