max_pages = dom0_size / PAGE_SIZE;
d->max_pages = max_pages;
d->tot_pages = 0;
- dsi.image_addr = (unsigned long)image_start;
- dsi.image_len = image_len;
- rc = parseelfimage(&dsi);
+
+ rc = elf_init(&elf, (void*)image_start, image_len);
if ( rc != 0 )
return rc;
+ #ifdef VERBOSE
+ elf_set_verbose(&elf);
+ #endif
+ elf_parse_binary(&elf);
+ if (0 != (elf_xen_parse(&elf, &parms)))
+ return rc;
+
+ printk(" Dom0 kernel: %s, %s, paddr 0x%" PRIx64 " -> 0x%" PRIx64 "\n",
+ elf_64bit(&elf) ? "64-bit" : "32-bit",
+ elf_msb(&elf) ? "msb" : "lsb",
+ elf.pstart, elf.pend);
+ if (!elf_64bit(&elf) ||
+ elf_uval(&elf, elf.ehdr, e_machine) != EM_IA_64) {
+ printk("Incompatible kernel binary\n");
+ return -1;
+ }
- p_start = dsi.v_start;
- pkern_start = dsi.v_kernstart;
- pkern_end = dsi.v_kernend;
- pkern_entry = dsi.v_kernentry;
-#ifdef VALIDATE_VT
- /* Temp workaround */
- if (running_on_sim)
- dsi.xen_section_string = (char *)1;
-
- /* Check whether dom0 is vti domain */
- if ((!vmx_enabled) && !dsi.xen_section_string) {
- printk("Lack of hardware support for unmodified vmx dom0\n");
- panic("");
- }
-
- if (vmx_enabled && !dsi.xen_section_string) {
- printk("Dom0 is vmx domain!\n");
- vmx_dom0 = 1;
- }
-#endif
-
+ p_start = parms.virt_base;
+ pkern_start = parms.virt_kstart;
+ pkern_end = parms.virt_kend;
+ pkern_entry = parms.virt_entry;
//printk("p_start=%lx, pkern_start=%lx, pkern_end=%lx, pkern_entry=%lx\n",p_start,pkern_start,pkern_end,pkern_entry);