From: Thiemo Seufer <ths@networkno.de>
To: "J. Mayer" <l_indien@magic.fr>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] Mips target '-kernel' option bug
Date: Wed, 17 Oct 2007 14:51:48 +0100 [thread overview]
Message-ID: <20071017135148.GZ3379@networkno.de> (raw)
In-Reply-To: <1192568594.9976.523.camel@rapid>
J. Mayer wrote:
> I failed to run Mips target test image on my amd64 machine and I now
> found the reason of the bug:
> the kernel loader code used in hw/mips_r4k.c and hw/mips_malta.c
> implicitelly assumes that the ram_addr_t is 32 bits long.
> Unfortunatelly, on 64 bits hosts, this won't be the case and the kernel
> load address then is over 4 GB. Then, when computing the initrd_offset,
> the code always concludes that there's not enough RAM available to load
> it at the top of the kernel.
> I found 2 ways of fixing the bug, but I don't know which one is correct
> in Mips execution environment.
> The first patch is to make the VIRT_TO_PHYS_ADDEND negative, thus
> translating the kernel virtual address from 0x8000nnnn to the physical
> one 0x0000nnnn (instead of 0x10000nnnn, when running on 64 bits hosts).
> The second solution would be to explicitelly always cast the kernel_high
> value to 32 bits.
> As I do not really know if some Mips target specific constraints would
> make one of the other solution prefered, I'd better let the specialist
> choose !
>
> The good news is that, once this issue is fixed, the Mips test images
> run with the reverse-endian softmmu patch applied.
I think this patch is the correct fix. Please test and comment.
Thiemo
Index: qemu-work/elf_ops.h
===================================================================
--- qemu-work.orig/elf_ops.h 2007-10-17 14:18:09.000000000 +0100
+++ qemu-work/elf_ops.h 2007-10-17 14:20:20.000000000 +0100
@@ -159,7 +159,7 @@
goto fail;
if (pentry)
- *pentry = (uint64_t)ehdr.e_entry;
+ *pentry = (uint64_t)(elf_sword)ehdr.e_entry;
glue(load_symbols, SZ)(&ehdr, fd, must_swab);
@@ -206,9 +206,9 @@
}
qemu_free(phdr);
if (lowaddr)
- *lowaddr = (uint64_t)low;
+ *lowaddr = (uint64_t)(elf_sword)low;
if (highaddr)
- *highaddr = (uint64_t)high;
+ *highaddr = (uint64_t)(elf_sword)high;
return total_size;
fail:
qemu_free(data);
Index: qemu-work/loader.c
===================================================================
--- qemu-work.orig/loader.c 2007-10-17 14:18:09.000000000 +0100
+++ qemu-work/loader.c 2007-10-17 14:20:19.000000000 +0100
@@ -173,6 +173,7 @@
#define SZ 32
#define elf_word uint32_t
+#define elf_sword int32_t
#define bswapSZs bswap32s
#include "elf_ops.h"
@@ -182,6 +183,7 @@
#undef elf_sym
#undef elf_note
#undef elf_word
+#undef elf_sword
#undef bswapSZs
#undef SZ
#define elfhdr elf64_hdr
@@ -190,6 +192,7 @@
#define elf_shdr elf64_shdr
#define elf_sym elf64_sym
#define elf_word uint64_t
+#define elf_sword int64_t
#define bswapSZs bswap64s
#define SZ 64
#include "elf_ops.h"
next prev parent reply other threads:[~2007-10-17 13:52 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-10-16 21:03 [Qemu-devel] Mips target '-kernel' option bug J. Mayer
2007-10-17 13:51 ` Thiemo Seufer [this message]
2007-10-17 18:50 ` Jocelyn Mayer
2007-10-17 19:04 ` Thiemo Seufer
2007-10-17 19:06 ` Blue Swirl
2007-10-17 21:24 ` J. Mayer
2007-10-17 23:07 ` Thiemo Seufer
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=20071017135148.GZ3379@networkno.de \
--to=ths@networkno.de \
--cc=l_indien@magic.fr \
--cc=qemu-devel@nongnu.org \
/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.