Hi On Sun, Jul 30, 2017 at 2:42 PM, Eduardo Habkost <ehabk...@redhat.com> wrote: > > CCing Alex, the original author of load_multiboot(), and Kevin, > who touched multiboot code recently. > > > On Fri, Jul 28, 2017 at 02:28:34PM -0700, Anatol Pomozov wrote: >> Hi >> >> I am looking at x86 multiboot code and trying to add "ELF section >> header" info feature. This will let target to learn more about booted >> binary and its sections. > > Are there existing OSes that use that information?
ELF sections info is needed for an OS to map address space properly. I do not know much about production-grade OS but multiboot protocol is quite popular among newly created and hobby OS. Multiboot provide some useful information that need to be found somewhere else (e.g. by requesting info from BIOS). Here is an example of Phil's Rust OS that uses multiboot to read ELF section information. https://os.phil-opp.com/allocating-frames/ They use GRUB that loads all ELF sections into memory and provides ELF info via multiboot structure. It is interesting to see how LittleKernel tries to find the sections information by using _start/_end markers in their linker script https://github.com/littlekernel/lk/blob/master/arch/x86/64/kernel.ld And while it works, in fact it just tries to recover ELF sections information. And that is why I think it would be more useful if qemu implemented ELF sections feature from Multiboot. > Do you have a pointer to what that feature does exactly? Quoting Multiboot specification https://www.gnu.org/software/grub/manual/multiboot/multiboot.html =======BEGIN===== If bit 5 in the ‘flags’ word is set, then the following fields in the Multiboot information structure starting at byte 28 are valid: +-------------------+ 28 | num | 32 | size | 36 | addr | 40 | shndx | +-------------------+ These indicate where the section header table from an ELF kernel is, the size of each entry, number of entries, and the string table used as the index of names. They correspond to the ‘shdr_*’ entries (‘shdr_num’, etc.) in the Executable and Linkable Format (elf) specification in the program header. All sections are loaded, and the physical address fields of the elf section header then refer to where the sections are in memory (refer to the i386 elf documentation for details as to how to read the section header(s)). Note that ‘shdr_num’ may be 0, indicating no symbols, even if bit 5 in the ‘flags’ =======END======= Basically it makes some info from ELF header and section headers available for target.