Plan9 kernel image format
Today I decided to leave plan9 ELF booting effort. Plan9 linker’s ELF output is not correct. This is creating lot of problems.
So now I am going to write custom boot loader for plan9’s kernel.
First thing i need to do is to understand plan9 kernel’s format.
Here is the information that i got from a.out.h:
struct Exec
{
long magic; /* magic number */
long text; /* size of text segment */
long data; /* size of initialized data */
long bss; /* size of uninitialized data */
long syms; /* size of symbol table */
long entry; /* entry point */
long spsz; /* size of pc/sp offset table */
long pcsz; /* size of pc/line number table */
};
I wrote a simple C program to read plan9 kernel image and print above information from it.
Kernel file image size = text + data + syms + spsz + pcsz
Also another important thing that I found out is that, this header is in big endian format, so on x86 architecture we need to swap data to read it correctly.