From: Anthony Liguori <aliguori@us.ibm.com>
To: Jimi Xenidis <jimix@watson.ibm.com>
Cc: xen-devel@lists.xensource.com
Subject: Re: [patch] load 64-bit files with 32-bit tools
Date: Mon, 19 Jun 2006 20:22:46 -0500 [thread overview]
Message-ID: <44974DE6.3070701@us.ibm.com> (raw)
In-Reply-To: <E1FsUWR-0001Ln-Vq@localhost.localdomain>
I believe that on x86-64 uint64_t is defined to be unsigned long.
I think the proper (albeit ugly) thing to do here is use PRIu64.
Regards,
Anthony Liguori
Jimi Xenidis wrote:
> This patch allows 32bit libxc to grok 64bit files by:
> - using 64bit types for addresses in struct domain_start_info
> - uses stroull() so it can parse 64bit values
>
> xc_hvm_build.c and xc_linux_build.c are effected because these
> data-types are printed.
>
>
> Signed-off-by: Jimi Xenidis <jimix@watson.ibm.com>
>
>
>
> diff -r 05ab081f3c67 tools/libxc/xc_hvm_build.c
> --- a/tools/libxc/xc_hvm_build.c Fri Jun 16 18:08:27 2006 +0100
> +++ b/tools/libxc/xc_hvm_build.c Mon Jun 19 17:03:51 2006 -0400
> @@ -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 05ab081f3c67 tools/libxc/xc_linux_build.c
> --- a/tools/libxc/xc_linux_build.c Fri Jun 16 18:08:27 2006 +0100
> +++ b/tools/libxc/xc_linux_build.c Mon Jun 19 17:03:51 2006 -0400
> @@ -508,16 +508,14 @@ 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"
> - " TOTAL: %p->%p\n",
> - _p(dsi.v_kernstart), _p(dsi.v_kernend),
> - _p(vinitrd_start), _p(vinitrd_end),
> - _p(dsi.v_start), _p(v_end));
> - IPRINTF(" ENTRY ADDRESS: %p\n", _p(dsi.v_kernentry));
> + " Loaded kernel: %016llx->%016llx\n"
> + " Init. ramdisk: %016llx->%016llx\n"
> + " TOTAL: %016llx->%016llx\n",
> + dsi.v_kernstart, dsi.v_kernend,
> + vinitrd_start, vinitrd_end,
> + dsi.v_start, v_end);
> + IPRINTF(" ENTRY ADDRESS: %016llx\n", dsi.v_kernentry);
>
> (load_funcs.loadimage)(image, image_size, xc_handle, dom, page_array,
> &dsi);
> @@ -803,29 +801,27 @@ static int setup_guest(int xc_handle,
> #endif
> }
>
> -#define _p(a) ((void *) (a))
> -
> IPRINTF("VIRTUAL MEMORY ARRANGEMENT:\n");
> - IPRINTF(" Loaded kernel: %p->%p\n", _p(dsi.v_kernstart),
> - _p(dsi.v_kernend));
> + IPRINTF(" Loaded kernel: %016llx->%016llx\n", dsi.v_kernstart,
> + dsi.v_kernend);
> if ( initrd->len )
> - IPRINTF(" Initial ramdisk: %p->%p\n", _p(vinitrd_start),
> - _p(vinitrd_start + initrd->len));
> - IPRINTF(" Phys-Mach map: %p\n", _p(vphysmap_start));
> - IPRINTF(" Start info: %p\n", _p(vstartinfo_start));
> - IPRINTF(" Store page: %p\n", _p(vstoreinfo_start));
> - IPRINTF(" Console page: %p\n", _p(vconsole_start));
> + IPRINTF(" Initial ramdisk: %lx->%lx\n", vinitrd_start,
> + vinitrd_start + initrd->len);
> + IPRINTF(" Phys-Mach map: %016lx\n", vphysmap_start);
> + IPRINTF(" Start info: %016lx\n", vstartinfo_start);
> + IPRINTF(" Store page: %016lx\n", vstoreinfo_start);
> + IPRINTF(" Console page: %016lx\n", vconsole_start);
> if ( shadow_mode_enabled )
> - IPRINTF(" Shared Info page: %p\n", _p(vsharedinfo_start));
> - IPRINTF(" Page tables: %p\n", _p(vpt_start));
> - IPRINTF(" Boot stack: %p\n", _p(vstack_start));
> - IPRINTF(" TOTAL: %p->%p\n", _p(dsi.v_start), _p(v_end));
> - IPRINTF(" ENTRY ADDRESS: %p\n", _p(dsi.v_kernentry));
> + IPRINTF(" Shared Info page: %016lx\n", vsharedinfo_start);
> + IPRINTF(" Page tables: %016lx\n", vpt_start);
> + IPRINTF(" Boot stack: %016lx\n", vstack_start);
> + IPRINTF(" TOTAL: %016llx->%016lx\n", dsi.v_start, v_end);
> + IPRINTF(" ENTRY ADDRESS: %016llx\n", dsi.v_kernentry);
>
> 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",
> + "(%lluMB is greater than %luMB limit)\n",
> (v_end-dsi.v_start)>>20, nr_pages>>(20-PAGE_SHIFT));
> goto error_out;
> }
> diff -r 05ab081f3c67 tools/libxc/xc_load_elf.c
> --- a/tools/libxc/xc_load_elf.c Fri Jun 16 18:08:27 2006 +0100
> +++ b/tools/libxc/xc_load_elf.c Mon Jun 19 17:03:51 2006 -0400
> @@ -68,7 +68,7 @@ static int parseelfimage(const char *ima
> Elf_Ehdr *ehdr = (Elf_Ehdr *)image;
> Elf_Phdr *phdr;
> Elf_Shdr *shdr;
> - unsigned long kernstart = ~0UL, kernend=0UL, vaddr, virt_base, elf_pa_off;
> + Elf_Addr kernstart = -1, kernend = 0, vaddr, virt_base, elf_pa_off;
> const char *shstrtab;
> char *guestinfo=NULL, *p;
> int h, virt_base_defined, elf_pa_off_defined;
> @@ -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 05ab081f3c67 tools/libxc/xg_private.h
> --- a/tools/libxc/xg_private.h Fri Jun 16 18:08:27 2006 +0100
> +++ b/tools/libxc/xg_private.h Mon Jun 19 17:03:51 2006 -0400
> @@ -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-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
>
next prev parent reply other threads:[~2006-06-20 1:22 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-06-20 0:55 [patch] load 64-bit files with 32-bit tools Jimi Xenidis
2006-06-20 1:22 ` Anthony Liguori [this message]
2006-06-20 7:30 ` Keir Fraser
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=44974DE6.3070701@us.ibm.com \
--to=aliguori@us.ibm.com \
--cc=jimix@watson.ibm.com \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.