Port-xen archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: BSD_SYMTAB ELF notes



On Aug 11,  4:52pm, =?ISO-8859-1?Q?Roger_Pau_Monn=E9?= wrote:
} On 09/08/14 04:25, John Nemeth wrote:
} > On Aug 8, 11:51am, =?UTF-8?B?Um9nZXIgUGF1IE1vbm7DqQ==?= wrote:
} > } On 07/08/14 23:48, Ryan O'Neill wrote:
} > } > Hello. After reading through some of the libelf-loader.c and 
} > } > libelf-dominfo.c code, it appears that Xen expects BSD guest
} > } > kernels to have an ELF .note auxillary entry of type
} > } > XEN_ELFNOTE_BSD_SYMTAB that gets parsed in so that Xen knows to
} > } > allocate room for the kernels symbol table.
} > } 
} > } This is only used by PV(H) guests, this note is simply a boolean that
} > } tells Xen whether to load the symtab and strtab or not. Linux for
} > } example doesn't load the symtab and strtab, because it has no
} > } in-kernel debugger and doesn't use the full symbol table.
} > } 
} > } > I do not see this Note (Or any note segment/section) in my freebsd
} > } > guest kernel image (readelf -n). Can someone explain to me if this
} > } > Note is still used? If so, then in what case?
} > } 
} > } You will see this note if you compile a i386 XEN kernel, or if you
} > } compile a GENERIC amd64 kernel from -current.
} > 
} >      No, I don't.  I only see the IDENT note giving the kernel
} > version.  However, this might explain something.
} 
} This is the output I see when I do a readelf -n of an amd64 FreeBSD HEAD
} kernel:

     Guess I should have specified that I'm talking about NetBSD.
readelf -n of a NetBSD kernel only produced a single note for the
NetBSD version.

}   Owner               Data size       Description
}   Xen         0x00000008      Unknown note type: (0x00000006)
}   Xen         0x00000009      Unknown note type: (0x00000007)
}   Xen         0x00000008      Unknown note type: (0x00000005)
}   Xen         0x00000008      Unknown note type: (0x00000003)
}   Xen         0x00000008      Unknown note type: (0x00000004)
}   Xen         0x00000008      NT_VERSION (version)
}   Xen         0x00000008      NT_ARCH (architecture)
}   Xen         0x00000008      Unknown note type: (0x0000000c)
}   Xen         0x0000005e      Unknown note type: (0x0000000a)
}   Xen         0x00000004      Unknown note type: (0x00000009)
}   Xen         0x00000008      Unknown note type: (0x0000000d)
}   Xen         0x00000008      Unknown note type: (0x00000008)
}   Xen         0x00000004      Unknown note type: (0x0000000e)
}   Xen         0x00000004      Unknown note type: (0x0000000b)
} 
} Better way to display them is to use xl -vvv when creating the guest in
} order to see the notes (again this are from the same kernel):
} 
} xc: detail: elf_xen_parse_note: GUEST_OS = "FreeBSD"
} xc: detail: elf_xen_parse_note: GUEST_VERSION = "0x10c8fa"
} xc: detail: elf_xen_parse_note: XEN_VERSION = "xen-3.0"
} xc: detail: elf_xen_parse_note: VIRT_BASE = 0xffffffff80000000
} xc: detail: elf_xen_parse_note: PADDR_OFFSET = 0xffffffff80000000
} xc: detail: elf_xen_parse_note: ENTRY = 0xffffffff80d09000
} xc: detail: elf_xen_parse_note: HYPERCALL_PAGE = 0xffffffff80d08000
} xc: detail: elf_xen_parse_note: HV_START_LOW = 0xffff800000000000
} xc: detail: elf_xen_parse_note: FEATURES =
} 
"writable_descriptor_tables|auto_translated_physmap|supervisor_mode_kernel|hvm_callback_vector"
} xc: detail: elf_xen_parse_note: PAE_MODE = "yes"
} xc: detail: elf_xen_parse_note: unknown xen elf note (0xd)
} xc: detail: elf_xen_parse_note: LOADER = "generic"
} xc: detail: elf_xen_parse_note: SUSPEND_CANCEL = 0x0
} xc: detail: elf_xen_parse_note: BSD_SYMTAB = "yes"

     Looks like there might be some work to be done on how the
NetBSD Xen kernels are produced.  A lot of this info is placed in
to a __xen_guest section as a series of strings.  Is there any
documentation on what Xen expects from kernels in the way of
information and how it should be presented?

} > One project I
} > worked on was trying to make modules work with Xen domU kernels.
} > I managed to make them work for very simple modules, but got stymied
} > with complex modules due to missing symbols.  This could potentially
} > be the cause.  The question now is, how does one go about adding
} > these notes?  Even if you don't know how to add the note, do you
} > know the details of the note?
} 
} The way to add the notes is to use the Xen ELFNOTE macro, see:
} 
} 
http://svnweb.freebsd.org/base/head/sys/amd64/amd64/xen-locore.S?revision=264882&view=markup
} 
} But you should keep in mind that Xen only parses the kernel as an ELF
} file and loads it into the guest memory in order to run. The modules are
} just copied as raw data over to the guest memory (ie: not parsed in any
} way).

     I was talking about modules that the kernel loads and links
by itself at runtime (ala options MODULAR).

}-- End of excerpt from =?ISO-8859-1?Q?Roger_Pau_Monn=E9?=


Home | Main Index | Thread Index | Old Index