[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] Allow 32-bit libxc to load 64-bit ELF files.
# HG changeset patch # User kaf24@xxxxxxxxxxxxxxxxxxxx # Node ID c14f26a7b0bc9c8852e0fd38ba4f2b8d502dad75 # Parent 130a5badf2b7f58982c91330bbaf2b1b2f6c0efc Allow 32-bit libxc to load 64-bit ELF files. - use 64-bit integral types for addresses in struct domain_start_info - use stroull() to parse 64-bit values - remove redundant _p(a) definition and add a comment - printf format changes for the new types Signed-off-by: Jimi Xenidis <jimix@xxxxxxxxxxxxxx> Signed-off-by: Hollis Blanchard <hollisb@xxxxxxxxxx> --- tools/libxc/xc_hvm_build.c | 6 +++--- tools/libxc/xc_linux_build.c | 17 ++++++++--------- tools/libxc/xc_load_elf.c | 6 +++--- tools/libxc/xg_private.h | 14 +++++++------- 4 files changed, 21 insertions(+), 22 deletions(-) diff -r 130a5badf2b7 -r c14f26a7b0bc tools/libxc/xc_hvm_build.c --- a/tools/libxc/xc_hvm_build.c Fri Jun 30 22:02:58 2006 +0100 +++ b/tools/libxc/xc_hvm_build.c Fri Jun 30 22:18:01 2006 +0100 @@ -208,11 +208,11 @@ static int setup_guest(int xc_handle, v_end = (unsigned long long)memsize << 20; IPRINTF("VIRTUAL MEMORY ARRANGEMENT:\n" - " Loaded HVM loader: %08lx->%08lx\n" - " TOTAL: %08lx->%016llx\n", + " Loaded HVM loader: %016llx->%016llx\n" + " TOTAL: %016llx->%016llx\n", dsi.v_kernstart, dsi.v_kernend, dsi.v_start, v_end); - IPRINTF(" ENTRY ADDRESS: %08lx\n", dsi.v_kernentry); + IPRINTF(" ENTRY ADDRESS: %016llx\n", dsi.v_kernentry); if ( (v_end - dsi.v_start) > ((unsigned long long)nr_pages << PAGE_SHIFT) ) { diff -r 130a5badf2b7 -r c14f26a7b0bc tools/libxc/xc_linux_build.c --- a/tools/libxc/xc_linux_build.c Fri Jun 30 22:02:58 2006 +0100 +++ b/tools/libxc/xc_linux_build.c Fri Jun 30 22:18:01 2006 +0100 @@ -11,6 +11,9 @@ #include <unistd.h> #include <inttypes.h> #include <zlib.h> + +/* Handy for printing out '0' prepended values at native pointer size */ +#define _p(a) ((void *) ((ulong)a)) #if defined(__i386__) #define L1_PROT (_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED) @@ -502,8 +505,6 @@ static int setup_guest(int xc_handle, goto error_out; } -#define _p(a) ((void *) (a)) - IPRINTF("VIRTUAL MEMORY ARRANGEMENT:\n" " Loaded kernel: %p->%p\n" " Init. ramdisk: %p->%p\n" @@ -766,9 +767,9 @@ static int setup_guest(int xc_handle, goto error_out; } -#define NR(_l,_h,_s) \ - (((((_h) + ((1UL<<(_s))-1)) & ~((1UL<<(_s))-1)) - \ - ((_l) & ~((1UL<<(_s))-1))) >> (_s)) +#define NR(_l,_h,_s) \ + (((((unsigned long)(_h) + ((1UL<<(_s))-1)) & ~((1UL<<(_s))-1)) - \ + ((unsigned long)(_l) & ~((1UL<<(_s))-1))) >> (_s)) #if defined(__i386__) if ( dsi.pae_kernel != PAEKERN_no ) { @@ -796,8 +797,6 @@ static int setup_guest(int xc_handle, break; #endif } - -#define _p(a) ((void *) (a)) IPRINTF("VIRTUAL MEMORY ARRANGEMENT:\n"); IPRINTF(" Loaded kernel: %p->%p\n", _p(dsi.v_kernstart), @@ -819,8 +818,8 @@ static int setup_guest(int xc_handle, if ( ((v_end - dsi.v_start)>>PAGE_SHIFT) > nr_pages ) { PERROR("Initial guest OS requires too much space\n" - "(%luMB is greater than %luMB limit)\n", - (v_end-dsi.v_start)>>20, nr_pages>>(20-PAGE_SHIFT)); + "(%pMB is greater than %luMB limit)\n", + _p((v_end-dsi.v_start)>>20), nr_pages>>(20-PAGE_SHIFT)); goto error_out; } diff -r 130a5badf2b7 -r c14f26a7b0bc tools/libxc/xc_load_elf.c --- a/tools/libxc/xc_load_elf.c Fri Jun 30 22:02:58 2006 +0100 +++ b/tools/libxc/xc_load_elf.c Fri Jun 30 22:18:01 2006 +0100 @@ -162,12 +162,12 @@ static int parseelfimage(const char *ima /* Initial guess for virt_base is 0 if it is not explicitly defined. */ p = strstr(guestinfo, "VIRT_BASE="); virt_base_defined = (p != NULL); - virt_base = virt_base_defined ? strtoul(p+10, &p, 0) : 0; + virt_base = virt_base_defined ? strtoull(p+10, &p, 0) : 0; /* Initial guess for elf_pa_off is virt_base if not explicitly defined. */ p = strstr(guestinfo, "ELF_PADDR_OFFSET="); elf_pa_off_defined = (p != NULL); - elf_pa_off = elf_pa_off_defined ? strtoul(p+17, &p, 0) : virt_base; + elf_pa_off = elf_pa_off_defined ? strtoull(p+17, &p, 0) : virt_base; if ( elf_pa_off_defined && !virt_base_defined ) goto bad_image; @@ -196,7 +196,7 @@ static int parseelfimage(const char *ima dsi->v_kernentry = ehdr->e_entry; if ( (p = strstr(guestinfo, "VIRT_ENTRY=")) != NULL ) - dsi->v_kernentry = strtoul(p+11, &p, 0); + dsi->v_kernentry = strtoull(p+11, &p, 0); if ( (kernstart > kernend) || (dsi->v_kernentry < kernstart) || diff -r 130a5badf2b7 -r c14f26a7b0bc tools/libxc/xg_private.h --- a/tools/libxc/xg_private.h Fri Jun 30 22:02:58 2006 +0100 +++ b/tools/libxc/xg_private.h Fri Jun 30 22:18:01 2006 +0100 @@ -132,13 +132,13 @@ typedef unsigned long l4_pgentry_t; struct domain_setup_info { - unsigned long v_start; - unsigned long v_end; - unsigned long v_kernstart; - unsigned long v_kernend; - unsigned long v_kernentry; - - unsigned long elf_paddr_offset; + uint64_t v_start; + uint64_t v_end; + uint64_t v_kernstart; + uint64_t v_kernend; + uint64_t v_kernentry; + + uint64_t elf_paddr_offset; #define PAEKERN_no 0 #define PAEKERN_yes 1 _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |