On 20.11.2007 18:12, Stefan Reinauer wrote:
- Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net [071120 17:44]:
Can we recreate an object file from the map file? Or can we avoid stripping all symbols from stage0/1?
Nope, and nope, unfortunately. The unstripped bootblock is an ELF file, but we need a binary blob there, so we have the reset vector and such in the right place...
We can recreate an object file from a small symbol file (similar to a map file). Ph33r my m4d sk1llz! (I have no idea whether that is correct l33t-speak.)
Do not try to understand the command sequence below. It will rot your brain. It was written by me with the help of sleep deprivation. Do not try to be clever with the command sequence below. objcopy in one step works, but the output file is 8 times bigger, plus you will trigger an assertion in BFD. Do not try to use the command sequence below for any architecture besides x86(32bit).
objcopy --extract-symbol --strip-all --keep-symbols=keepsymbols.txt -O symbolsrec build/stage0.o build/stage0-onlysymbols.sym objcopy -I symbolsrec -O elf32-i386 build/stage0-onlysymbols.sym build/stage0-onlysymbols.o echo -en "\003\000"|dd of=build/stage0-onlysymbols.o bs=1 count=2 seek=18 conv=notrunc
keepsymbols.txt must contain all shared symbol names from stage 0, one symbol name per line. stage0-onlysymbols.o contains all shared symbols and has to be shipped in the LAR. We can link initram and stage2 against it without any problems.
If we use LZMA compression for stage0-onlysymbols.o, it needs about 200 bytes. The qemu bootblock currently has about 4600 bytes free, so there is plenty of space for such a symbol table.
Comments?
Regards, Carl-Daniel