Maximilian Schneider schreef op 2023-09-02 16:06:
While trying to create a custom IVT for a bootloader I noticed that
the ELF and IHEX output differ when converted to binary.
example:
echo "int main() { }\n" > main.c
sdcc -DF_CPU=16000000UL -mstm8 --std-sdcc11 -c main.c -o main.c.rel
sdcc -DF_CPU=16000000UL -mstm8 --std-sdcc11 --out-fmt-elf main.c.rel -o
out.elf
objcopy -I elf32-big -O binary out.elf out.elf.bin
sdcc -DF_CPU=16000000UL -mstm8 --std-sdcc11 --out-fmt-ihx main.c.rel -o
out.ihx
objcopy -I ihex -O binary out.ihx out.ihx.bin
readelf -S out.elf
hexdump -C out.elf.bin | head
cat out.ihx | head
hexdump -C out.ihx.bin | head
The output is:
There are 9 section headers, starting at offset 0x214:
Section Headers:
[Nr] Name Type Addr Off Size ES Flg
Lk Inf Al
[ 0] NULL 00000000 000000 000000 00
0 0 0
[ 1] SSEG PROGBITS 00000001 000034 000001 00 A
0 0 0
[ 2] HOME PROGBITS 00008000 000035 000007 00 A
0 0 0
[ 3] GSINIT PROGBITS 00008007 00003c 00001a 00 A
0 0 0
[ 4] GSFINAL PROGBITS 00008021 000056 000003 00 A
0 0 0
[ 5] CODE PROGBITS 00008024 000059 000001 00 A
0 0 0
[ 6] .symtab SYMTAB 00000000 00005a 000090 10
7 1 0
[ 7] .strtab STRTAB 00000000 0000ea 000051 00
0 0 0
[ 8] .shstrtab STRTAB 00000000 00013b 000039 00
0 0 0
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
L (link order), O (extra OS processing required), G (group), T (TLS),
C (compressed), x (unknown), o (OS specific), E (exclude),
p (processor specific)
hexdump -C out.elf.bin | head
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|................|
*
00007ff0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 82
|................|
00008000 00 80 07 cc 80 24 ae 00 00 27 07 72 4f 00 00 5a
|.....$...'.rO..Z|
00008010 26 f9 ae 00 00 27 09 d6 80 23 d7 00 00 5a 26 f7
|&....'...#...Z&.|
00008020 cc 80 04 81 |....|
00008024
cat out.ihx | head
:048000008200800773
:1D800700AE00002707724F00005A26F9AE00002709D68023D700005A26F7CC800451
:03800400CC802409
:0180240081DA
:00000001FF
hexdump -C out.ihx.bin | head
00000000 82 00 80 07 cc 80 24 ae 00 00 27 07 72 4f 00 00
|......$...'.rO..|
00000010 5a 26 f9 ae 00 00 27 09 d6 80 23 d7 00 00 5a 26
|Z&....'...#...Z&|
00000020 f7 cc 80 04 81 |.....|
00000025
The out.elf.bin has 0x7fff zeros prepended to the output and is not
correctly aligned.
I could understand why it might have been 0x8000 but 0x7fff just seems
wrong.
Why do these outputs differ like this?
Best regards,
Maximilian Schneider
Hello Maximilian,
Unless someone responds soon that you are doing something wrong, can you
please open a bug report about this?
Btw. You don't need to supply "-DF_CPU=16000000UL --std-sdcc11" when
linking.
Maarten
_______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user