Skip to contentSkip to conversation

What is the purpose of parse_elf() in misc.c

DISCUSSION Graeme Russ 2 participants 2 messages Nov 25, 2011 – Dec 2, 2011

lore
Share & tools
lore
#0 lore raw

Hi All,

In looking at booting a raw x86 kernel image, I discovered that the compressed image in bzImage is actually an ELF image created with:

objcopy -R .comment -S vmlinux

After decompressing the image, the parse_elf() function in misc.c copies the sections from the ELF image (there are 3 sections, only 2 are marked PT_LOAD) into their final resting place in memory. This got me to thinking, why not use:

objcopy -O binary -R .comment -S vmlinux

I wrote a little stand-alone parse_elf() program, and lo-and-behold, the outputs are identical. So, in theory, if bzImage contained a raw binary, it could be decompressed directly to the target address.

Now there is some adjustment in parse_elf() for relocatable kernels, but I can't but think that this could be simply catered for in the decompression target address

Surely this would speed up kernel loading by removing the additional copy that parse_elf() introduces

Or am I missing something significant?

Regards,

Graeme

#1 lore raw

Hi Graeme....

Quoted 3 lines · Graeme Russ

I wrote a little stand-alone parse_elf() program, and lo-and-behold, the outputs are identical. So, in theory, if bzImage contained a raw binary, it could be decompressed directly to the target address.

I find your experiment quite interesting. After looking at parse_elf
(http://lxr.linux.no/#linux+v3.1.4/arch/x86/boot/compressed/misc.c#L276),
I guess it could be codes introduced long time before objcopy support "binary" form. And since then is rarely touched again.

But maybe it's left there in case there is a platform that doesn't have objcopy version that supports "binary" form conversion. So I think it's more about portability issue.

Signature · 7 lines
regards,

Mulyadi Santosa
Freelance Linux trainer and consultant

blog: the-hydra.blogspot.com
training: mulyaditraining.blogspot.com