diff -r 88bb0d305308 xen/arch/x86/domain_build.c --- a/xen/arch/x86/domain_build.c Wed Aug 01 15:47:54 2007 +0100 +++ b/xen/arch/x86/domain_build.c Thu Aug 02 13:47:54 2007 +0200 @@ -268,9 +268,6 @@ int __init construct_dom0( if ( (rc = elf_init(&elf, image_start, image_len)) != 0 ) return rc; -#ifdef VERBOSE - elf_set_verbose(&elf); -#endif elf_parse_binary(&elf); if ( (rc = elf_xen_parse(&elf, &parms)) != 0 ) return rc; @@ -318,7 +315,7 @@ int __init construct_dom0( elf.pstart, elf.pend); if ( parms.bsd_symtab ) printk(" Dom0 symbol map 0x%" PRIx64 " -> 0x%" PRIx64 "\n", - elf.sstart, elf.send); + parms.virt_kend, parms.virt_end); if ( !compatible ) { diff -r 88bb0d305308 xen/common/libelf/libelf-dominfo.c --- a/xen/common/libelf/libelf-dominfo.c Wed Aug 01 15:47:54 2007 +0100 +++ b/xen/common/libelf/libelf-dominfo.c Thu Aug 02 13:46:24 2007 +0200 @@ -337,7 +337,7 @@ static void elf_xen_loadsymtab(struct el static void elf_xen_loadsymtab(struct elf_binary *elf, struct elf_dom_parms *parms) { - unsigned long maxva, len; + unsigned long maxva; if ( !parms->bsd_symtab ) return; @@ -353,8 +353,7 @@ static void elf_xen_loadsymtab(struct el maxva = elf_round_up(elf, maxva); /* Space for the symbol and string tabs */ - len = (unsigned long)elf->send - (unsigned long)elf->sstart; - maxva = elf_round_up(elf, maxva + len); + maxva = elf_round_up(elf, maxva + elf->symsize); /* The address the kernel must expanded to */ parms->virt_end = maxva; diff -r 88bb0d305308 xen/common/libelf/libelf-loader.c --- a/xen/common/libelf/libelf-loader.c Wed Aug 01 15:47:54 2007 +0100 +++ b/xen/common/libelf/libelf-loader.c Thu Aug 02 13:46:05 2007 +0200 @@ -10,8 +10,7 @@ int elf_init(struct elf_binary *elf, con { const elf_shdr *shdr; uint64_t i, count, section, offset; - uint64_t low = -1; - uint64_t high = 0; + uint64_t symsize = 0; if ( !elf_is_elfbinary(image) ) { @@ -53,8 +52,12 @@ int elf_init(struct elf_binary *elf, con /* Find section string table. */ section = elf_uval(elf, elf->ehdr, e_shstrndx); shdr = elf_shdr_by_index(elf, section); - if ( shdr != NULL ) + if ( shdr != NULL ) { elf->sec_strtab = elf_section_start(elf, shdr); + /* Size of section string table */ + symsize = ((unsigned long)elf_section_end(elf, shdr) + - (unsigned long)elf_section_start(elf, shdr)); + } /* Find symbol table and symbol string table. */ count = elf_shdr_count(elf); @@ -77,15 +80,10 @@ int elf_init(struct elf_binary *elf, con elf->sym_strtab = elf_section_start(elf, shdr); sh_strend = (const char *)elf_section_end(elf, shdr); - if ( low > (unsigned long)elf->sym_tab ) - low = (unsigned long)elf->sym_tab; - if ( low > (unsigned long)shdr ) - low = (unsigned long)shdr; - - if ( high < ((unsigned long)sh_symend) ) - high = (unsigned long)sh_symend; - if ( high < ((unsigned long)sh_strend) ) - high = (unsigned long)sh_strend; + /* Symbol and string table sizes */ + symsize += ((unsigned long)sh_strend - (unsigned long)elf->sym_strtab); + symsize += ((unsigned long)sh_symend + - (unsigned long)elf_section_start(elf, elf->sym_tab)); elf_msg(elf, "%s: shdr: sym_tab=%p size=0x%" PRIx64 "\n", __FUNCTION__, elf->sym_tab, @@ -93,10 +91,11 @@ int elf_init(struct elf_binary *elf, con elf_msg(elf, "%s: shdr: str_tab=%p size=0x%" PRIx64 "\n", __FUNCTION__, elf->sym_strtab, elf_uval(elf, shdr, sh_size)); - elf->sstart = low; - elf->send = high; + elf->symsize = symsize; elf_msg(elf, "%s: symbol map: 0x%" PRIx64 " -> 0x%" PRIx64 "\n", - __FUNCTION__, elf->sstart, elf->send); + __FUNCTION__, elf->pend, elf->pend + elf->symsize); + + break; } return 0; diff -r 88bb0d305308 xen/include/public/libelf.h --- a/xen/include/public/libelf.h Wed Aug 01 15:47:54 2007 +0100 +++ b/xen/include/public/libelf.h Thu Aug 02 13:27:11 2007 +0200 @@ -65,8 +65,7 @@ struct elf_binary { /* loaded to */ char *dest; - uint64_t sstart; - uint64_t send; + uint64_t symsize; uint64_t pstart; uint64_t pend; uint64_t reloc_offset;