# HG changeset patch # User kaf24@scramble.cl.cam.ac.uk # Date 1107877353 0 # Node ID 9db7fbdf56b6b7fca17bbaee7290b8df47a30618 # Parent 4f427b73128867f70abd66dcd5edead41fbf3226# Parent 5612c06cde33a7f431bfacdafbfc3c329d6b41e1 bitkeeper revision 1.1159.212.130 (4208dde9v8U9U_7hI23vverH97_FLQ) Merge scramble.cl.cam.ac.uk:/auto/groups/xeno/BK/xeno.bk into scramble.cl.cam.ac.uk:/local/scratch/kaf24/xen-unstable.bk diff -r 4f427b731288 -r 9db7fbdf56b6 tools/libxc/xc_linux_build.c --- a/tools/libxc/xc_linux_build.c Tue Feb 08 15:18:48 2005 +0000 +++ b/tools/libxc/xc_linux_build.c Tue Feb 08 15:42:33 2005 +0000 @@ -558,10 +558,10 @@ static int parseelfimage(char *elfbase, phdr = (Elf_Phdr *)(elfbase + ehdr->e_phoff + (h*ehdr->e_phentsize)); if ( !is_loadable_phdr(phdr) ) continue; - if ( phdr->p_vaddr < kernstart ) - kernstart = phdr->p_vaddr; - if ( (phdr->p_vaddr + phdr->p_memsz) > kernend ) - kernend = phdr->p_vaddr + phdr->p_memsz; + if ( phdr->p_paddr < kernstart ) + kernstart = phdr->p_paddr; + if ( (phdr->p_paddr + phdr->p_memsz) > kernend ) + kernend = phdr->p_paddr + phdr->p_memsz; } if ( (kernstart > kernend) || @@ -611,7 +611,7 @@ loadelfimage( for ( done = 0; done < phdr->p_filesz; done += chunksz ) { - pa = (phdr->p_vaddr + done) - vstart; + pa = (phdr->p_paddr + done) - vstart; va = xc_map_foreign_range( xch, dom, PAGE_SIZE, PROT_WRITE, parray[pa>>PAGE_SHIFT]); chunksz = phdr->p_filesz - done; @@ -624,7 +624,7 @@ loadelfimage( for ( ; done < phdr->p_memsz; done += chunksz ) { - pa = (phdr->p_vaddr + done) - vstart; + pa = (phdr->p_paddr + done) - vstart; va = xc_map_foreign_range( xch, dom, PAGE_SIZE, PROT_WRITE, parray[pa>>PAGE_SHIFT]); chunksz = phdr->p_memsz - done; diff -r 4f427b731288 -r 9db7fbdf56b6 tools/libxc/xc_vmx_build.c --- a/tools/libxc/xc_vmx_build.c Tue Feb 08 15:18:48 2005 +0000 +++ b/tools/libxc/xc_vmx_build.c Tue Feb 08 15:42:33 2005 +0000 @@ -629,10 +629,10 @@ static int parseelfimage(char *elfbase, phdr = (Elf_Phdr *)(elfbase + ehdr->e_phoff + (h*ehdr->e_phentsize)); if ( !is_loadable_phdr(phdr) ) continue; - if ( phdr->p_vaddr < kernstart ) - kernstart = phdr->p_vaddr; - if ( (phdr->p_vaddr + phdr->p_memsz) > kernend ) - kernend = phdr->p_vaddr + phdr->p_memsz; + if ( phdr->p_paddr < kernstart ) + kernstart = phdr->p_paddr; + if ( (phdr->p_paddr + phdr->p_memsz) > kernend ) + kernend = phdr->p_paddr + phdr->p_memsz; } if ( (kernstart > kernend) || @@ -676,7 +676,7 @@ loadelfimage( for ( done = 0; done < phdr->p_filesz; done += chunksz ) { - pa = (phdr->p_vaddr + done) - vstart - LINUX_PAGE_OFFSET; + pa = (phdr->p_paddr + done) - vstart - LINUX_PAGE_OFFSET; va = xc_map_foreign_range( xch, dom, PAGE_SIZE, PROT_WRITE, parray[pa>>PAGE_SHIFT]); chunksz = phdr->p_filesz - done; @@ -689,7 +689,7 @@ loadelfimage( for ( ; done < phdr->p_memsz; done += chunksz ) { - pa = (phdr->p_vaddr + done) - vstart - LINUX_PAGE_OFFSET; + pa = (phdr->p_paddr + done) - vstart - LINUX_PAGE_OFFSET; va = xc_map_foreign_range( xch, dom, PAGE_SIZE, PROT_WRITE, parray[pa>>PAGE_SHIFT]); chunksz = phdr->p_memsz - done; diff -r 4f427b731288 -r 9db7fbdf56b6 xen/common/elf.c --- a/xen/common/elf.c Tue Feb 08 15:18:48 2005 +0000 +++ b/xen/common/elf.c Tue Feb 08 15:42:33 2005 +0000 @@ -13,10 +13,8 @@ #ifdef CONFIG_X86 #define FORCE_XENELF_IMAGE 1 -#define ELF_ADDR p_vaddr #elif defined(__ia64__) #define FORCE_XENELF_IMAGE 0 -#define ELF_ADDR p_paddr #endif static inline int is_loadable_phdr(Elf_Phdr *phdr) @@ -100,10 +98,10 @@ int parseelfimage(char *elfbase, phdr = (Elf_Phdr *)(elfbase + ehdr->e_phoff + (h*ehdr->e_phentsize)); if ( !is_loadable_phdr(phdr) ) continue; - if ( phdr->ELF_ADDR < kernstart ) - kernstart = phdr->ELF_ADDR; - if ( (phdr->ELF_ADDR + phdr->p_memsz) > kernend ) - kernend = phdr->ELF_ADDR + phdr->p_memsz; + if ( phdr->p_paddr < kernstart ) + kernstart = phdr->p_paddr; + if ( (phdr->p_paddr + phdr->p_memsz) > kernend ) + kernend = phdr->p_paddr + phdr->p_memsz; } if ( (kernstart > kernend) || @@ -144,10 +142,10 @@ int loadelfimage(char *elfbase) if ( !is_loadable_phdr(phdr) ) continue; if ( phdr->p_filesz != 0 ) - memcpy((char *)phdr->ELF_ADDR, elfbase + phdr->p_offset, + memcpy((char *)phdr->p_paddr, elfbase + phdr->p_offset, phdr->p_filesz); if ( phdr->p_memsz > phdr->p_filesz ) - memset((char *)phdr->ELF_ADDR + phdr->p_filesz, 0, + memset((char *)phdr->p_paddr + phdr->p_filesz, 0, phdr->p_memsz - phdr->p_filesz); }