[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] ELF Notes for kernel image
Hi Andrew, Thank you so much for your help! In particular, I find your xen-test-framework code to be very instructive. I have a question about that code, though. I can't find any place where you're specifying that .note should be loaded as a PT_NOTE ELF header. Do you do that anywhere? Or is it done implicitly somehow? On Sun, Oct 25, 2015 at 2:45 PM, Andrew Cooper <andrew.cooper3@xxxxxxxxxx> wrote: > On 25/10/2015 00:07, Carl Patenaude Poulin wrote: >> Hi all, >> >> For my undergraduate project, I am developing a simple >> paravirtualized x64 Xen unikernel. I've been hitting some issues >> that I hope you can help me with! >> >> I'm trying to figure out how to equip an ELF binary with an ELF note >> that marks it as a valid Xen image. I've found the following >> resources: >> >> http://wiki.xenproject.org/wiki/X86_Paravirtualised_Memory_Management#Start_Of_Day >> http://www.netbsd.org/docs/kernel/elf-notes.html#note-creation >> http://xenbits.xen.org/docs/4.3-testing/hypercall/include,public,elfnote.h.html >> >> Unfortunately, they are quite hard to decipher! > > I have to concur. The Xen elf note documentation is in a poor state. > > I have recently made a set of unikernels from scratch for a different > project, and I had to reverse engineer some bits of the elfnote layout > from the domain building code. > >> I've tried to >> summarize what little information I've extracted. Can you please >> verify that the following is accurate, and maybe help me fill in the >> blanks or point me to additional resources? >> >> * A "PT_NOTE section" is any ELF header section which conforms to >> the PT_NOTE specification. It is typically named ".note.*" and >> marked allocatable. >> * A PT_NOTE section is a series of "notes", or key-value pairs, each >> formatted as `key_size: int32, value_size: int32, value_type: int32, >> key: (int32|int64|asciz), value: (int32|int64|asciz)`. > > This is not the PT_NOTE specification. > > Notes are: > name size, [4 bytes] > desc size, [4 bytes] > type [4 bytes] > name [variable length, typically NUL terminated ASCII string, padded to > 4 byte] > desc [variable length, padded to 4 bytes] > > For Xen notes, 'name' is always "Xen" to indicate the specifying entity > (i.e. us). > 'type' is the integer index from elfnote.h, and is effectively the key. > 'desc' is the value associated with 'type'. The type of data in 'desc' > is specified by 'type' > >> * The Xen PT_NOTE section is named ".note.Xen", and its keys are >> listen (in order) in $XEN_ROOT/xen/include/public/elfnote.h. > > There is no ordering requirements about notes, not an expectation that > all will be filled in. Very few are actually required to get a Paravirt > kernel started. > >> >> My questions: >> * Every PT_NOTE entry contains a type field. What does it do, and >> how do I decide what goes in it? > > I hope these are now clear, given the explanation above. > >> * In particular, what are the types of the various entries in the >> Xen PT_NOTES (as seen in elfnote.h)? > > An interpretation of the text describing the 'type'. Mostly NUL > terminated ASCII strings, but not always. > >> * After all of this is done, how can I verify that my compiled >> binary indeed has a valid PT_NOTE entry for Xen? Does `readelf` have >> a switch that's particularly appropriate for this? > > There is a utility called readnotes (tools/xcutils/readnotes.c in the > Xen source tree) which can parse and print the Xen elf notes, similar to > `readelf` > > To get you started, > http://xenbits.xen.org/gitweb/?p=people/andrewcoop/xen-test-framework.git;a=blob;f=arch/x86/boot/head_pv.S;h=078d6b85af704840a0abb700a4d5e40253c21fdf;hb=HEAD > are the minimal set of elfnotes to get a PV guest booted. (The > hypercall page note isn't strictly needed, but you would silly not to > include it). > > Alternatively, > http://lxr.free-electrons.com/source/arch/x86/xen/xen-head.S is the set > of elfnotes used by Linux. > > ~Andrew _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |