All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/2] ppc64le-linux-user fixes
@ 2014-06-28 16:45 Richard Henderson
  2014-06-28 16:45 ` [Qemu-devel] [PATCH 1/2] target-ppc: Change default cpu for ppc64le-linux-user Richard Henderson
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Richard Henderson @ 2014-06-28 16:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: qemu-ppc, agraf

Two fixes needed to run and debug hello world.


r~


Richard Henderson (2):
  target-ppc: Change default cpu for ppc64le-linux-user
  target-ppc: Fix gdbstub for ppc64le-linux-user

 linux-user/main.c           | 10 +++++++---
 target-ppc/gdbstub.c        | 24 +++++++++++++-----------
 target-ppc/translate_init.c |  4 ++++
 3 files changed, 24 insertions(+), 14 deletions(-)

-- 
1.9.3

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH 1/2] target-ppc: Change default cpu for ppc64le-linux-user
  2014-06-28 16:45 [Qemu-devel] [PATCH 0/2] ppc64le-linux-user fixes Richard Henderson
@ 2014-06-28 16:45 ` Richard Henderson
  2014-06-28 16:50   ` Alexander Graf
  2014-06-28 16:45 ` [Qemu-devel] [PATCH 2/2] target-ppc: Fix gdbstub " Richard Henderson
  2014-06-30 12:20 ` [Qemu-devel] [PATCH 0/2] ppc64le-linux-user fixes Alexander Graf
  2 siblings, 1 reply; 9+ messages in thread
From: Richard Henderson @ 2014-06-28 16:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: Aldy Hernandez, qemu-ppc, agraf

The default, 970fx, doesn't support MSR_LE.  So even though we set LE in
ppc_cpu_reset, it gets cleared again in hreg_store_msr.  Error out if a
user-selected cpu model doesn't support LE.

Cc: Aldy Hernandez <aldyh@redhat.com>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
The warning one gets from the unimplemented insns from tcg
is perhaps unfortunate, but it's better than silently dropping
the MSR_LE bit and interpreting the first few insns with the
wrong endianness and generating SIGILL.

One could, perhaps, simply return false from need_byteswap.
But then the value of MSR would still be wrong, and I can imagine
that would affect gdb's interpretation of the current mode.


r~
---
 linux-user/main.c           | 10 +++++++---
 target-ppc/translate_init.c |  4 ++++
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/linux-user/main.c b/linux-user/main.c
index 900a17f..058b08c 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -3901,11 +3901,15 @@ int main(int argc, char **argv, char **envp)
 #elif defined TARGET_OPENRISC
         cpu_model = "or1200";
 #elif defined(TARGET_PPC)
-#ifdef TARGET_PPC64
+# ifdef TARGET_PPC64
+#  ifdef TARGET_WORDS_BIGENDIAN
         cpu_model = "970fx";
-#else
+#  else
+        cpu_model = "POWER7";
+#  endif
+# else
         cpu_model = "750";
-#endif
+# endif
 #else
         cpu_model = "any";
 #endif
diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c
index 85581c9..72128d8 100644
--- a/target-ppc/translate_init.c
+++ b/target-ppc/translate_init.c
@@ -9538,6 +9538,10 @@ static void ppc_cpu_reset(CPUState *s)
 #endif
 #if !defined(TARGET_WORDS_BIGENDIAN)
     msr |= (target_ulong)1 << MSR_LE; /* Little-endian user mode */
+    if (!((env->msr_mask >> MSR_LE) & 1)) {
+        fprintf(stderr, "Selected CPU does not support little-endian.\n");
+        exit(1);
+    }
 #endif
 #endif
 
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH 2/2] target-ppc: Fix gdbstub for ppc64le-linux-user
  2014-06-28 16:45 [Qemu-devel] [PATCH 0/2] ppc64le-linux-user fixes Richard Henderson
  2014-06-28 16:45 ` [Qemu-devel] [PATCH 1/2] target-ppc: Change default cpu for ppc64le-linux-user Richard Henderson
@ 2014-06-28 16:45 ` Richard Henderson
  2014-06-30 12:20   ` Alexander Graf
  2014-06-30 12:20 ` [Qemu-devel] [PATCH 0/2] ppc64le-linux-user fixes Alexander Graf
  2 siblings, 1 reply; 9+ messages in thread
From: Richard Henderson @ 2014-06-28 16:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: Aldy Hernandez, qemu-ppc, agraf

The bswap that's needed for system mode isn't required for
user mode, and in fact breaks debugging.

Cc: Aldy Hernandez <aldyh@redhat.com>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
 target-ppc/gdbstub.c | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/target-ppc/gdbstub.c b/target-ppc/gdbstub.c
index 381a3c7..7a01e62 100644
--- a/target-ppc/gdbstub.c
+++ b/target-ppc/gdbstub.c
@@ -58,16 +58,24 @@ static int ppc_gdb_register_len(int n)
     }
 }
 
-
-static void ppc_gdb_swap_register(uint8_t *mem_buf, int n, int len)
+/* We need to present the registers to gdb in the "current" memory ordering.
+   For user-only mode we get this for free; TARGET_WORDS_BIGENDIAN is set to
+   the proper ordering for the binary, and cannot be changed.
+   For system mode, TARGET_WORDS_BIGENDIAN is always set, and we must check
+   the current mode of the chip to see if we're running in little-endian.  */
+static void maybe_bswap_register(CPUPPCState *env, uint8_t *mem_buf, int len)
 {
-    if (len == 4) {
+#ifndef CONFIG_USER_ONLY
+    if (!msr_le) {
+        /* do nothing */
+    } else if (len == 4) {
         bswap32s((uint32_t *)mem_buf);
     } else if (len == 8) {
         bswap64s((uint64_t *)mem_buf);
     } else {
         g_assert_not_reached();
     }
+#endif
 }
 
 /* Old gdb always expects FP registers.  Newer (xml-aware) gdb only
@@ -125,10 +133,7 @@ int ppc_cpu_gdb_read_register(CPUState *cs, uint8_t *mem_buf, int n)
             break;
         }
     }
-    if (msr_le) {
-        /* If cpu is in LE mode, convert memory contents to LE. */
-        ppc_gdb_swap_register(mem_buf, n, r);
-    }
+    maybe_bswap_register(env, mem_buf, r);
     return r;
 }
 
@@ -141,10 +146,7 @@ int ppc_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
     if (!r) {
         return r;
     }
-    if (msr_le) {
-        /* If cpu is in LE mode, convert memory contents to LE. */
-        ppc_gdb_swap_register(mem_buf, n, r);
-    }
+    maybe_bswap_register(env, mem_buf, r);
     if (n < 32) {
         /* gprs */
         env->gpr[n] = ldtul_p(mem_buf);
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH 1/2] target-ppc: Change default cpu for ppc64le-linux-user
  2014-06-28 16:45 ` [Qemu-devel] [PATCH 1/2] target-ppc: Change default cpu for ppc64le-linux-user Richard Henderson
@ 2014-06-28 16:50   ` Alexander Graf
  2014-06-28 18:42     ` Richard Henderson
  0 siblings, 1 reply; 9+ messages in thread
From: Alexander Graf @ 2014-06-28 16:50 UTC (permalink / raw)
  To: Richard Henderson
  Cc: Aldy Hernandez, qemu-ppc@nongnu.org, qemu-devel@nongnu.org



> Am 28.06.2014 um 18:45 schrieb Richard Henderson <rth@twiddle.net>:
> 
> The default, 970fx, doesn't support MSR_LE.  So even though we set LE in
> ppc_cpu_reset, it gets cleared again in hreg_store_msr.  Error out if a
> user-selected cpu model doesn't support LE.
> 
> Cc: Aldy Hernandez <aldyh@redhat.com>
> Signed-off-by: Richard Henderson <rth@twiddle.net>
> ---
> The warning one gets from the unimplemented insns from tcg
> is perhaps unfortunate, but it's better than silently dropping
> the MSR_LE bit and interpreting the first few insns with the
> wrong endianness and generating SIGILL.
> 
> One could, perhaps, simply return false from need_byteswap.
> But then the value of MSR would still be wrong, and I can imagine
> that would affect gdb's interpretation of the current mode.
> 
> 
> r~
> ---
> linux-user/main.c           | 10 +++++++---
> target-ppc/translate_init.c |  4 ++++
> 2 files changed, 11 insertions(+), 3 deletions(-)
> 
> diff --git a/linux-user/main.c b/linux-user/main.c
> index 900a17f..058b08c 100644
> --- a/linux-user/main.c
> +++ b/linux-user/main.c
> @@ -3901,11 +3901,15 @@ int main(int argc, char **argv, char **envp)
> #elif defined TARGET_OPENRISC
>         cpu_model = "or1200";
> #elif defined(TARGET_PPC)
> -#ifdef TARGET_PPC64
> +# ifdef TARGET_PPC64
> +#  ifdef TARGET_WORDS_BIGENDIAN
>         cpu_model = "970fx";
> -#else
> +#  else
> +        cpu_model = "POWER7";

How about we switch to p7 for BE top?

Alex

> +#  endif
> +# else
>         cpu_model = "750";
> -#endif
> +# endif
> #else
>         cpu_model = "any";
> #endif
> diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c
> index 85581c9..72128d8 100644
> --- a/target-ppc/translate_init.c
> +++ b/target-ppc/translate_init.c
> @@ -9538,6 +9538,10 @@ static void ppc_cpu_reset(CPUState *s)
> #endif
> #if !defined(TARGET_WORDS_BIGENDIAN)
>     msr |= (target_ulong)1 << MSR_LE; /* Little-endian user mode */
> +    if (!((env->msr_mask >> MSR_LE) & 1)) {
> +        fprintf(stderr, "Selected CPU does not support little-endian.\n");
> +        exit(1);
> +    }
> #endif
> #endif
> 
> -- 
> 1.9.3
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH 1/2] target-ppc: Change default cpu for ppc64le-linux-user
  2014-06-28 16:50   ` Alexander Graf
@ 2014-06-28 18:42     ` Richard Henderson
  2014-06-30 12:08       ` Tom Musta
  0 siblings, 1 reply; 9+ messages in thread
From: Richard Henderson @ 2014-06-28 18:42 UTC (permalink / raw)
  To: Alexander Graf; +Cc: Aldy Hernandez, qemu-ppc@nongnu.org, qemu-devel@nongnu.org

On 06/28/2014 09:50 AM, Alexander Graf wrote:
> How about we switch to p7 for BE top?

Not ideal until we implement all of p7's insns in TCG:

Warning: Disabling some instructions which are not emulated by TCG (0x0, 0x4)


r~

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH 1/2] target-ppc: Change default cpu for ppc64le-linux-user
  2014-06-28 18:42     ` Richard Henderson
@ 2014-06-30 12:08       ` Tom Musta
  2014-06-30 12:17         ` Alexander Graf
  0 siblings, 1 reply; 9+ messages in thread
From: Tom Musta @ 2014-06-30 12:08 UTC (permalink / raw)
  To: Richard Henderson, Alexander Graf
  Cc: Aldy Hernandez, qemu-ppc@nongnu.org, qemu-devel@nongnu.org

On 6/28/2014 1:42 PM, Richard Henderson wrote:
> On 06/28/2014 09:50 AM, Alexander Graf wrote:
>> How about we switch to p7 for BE top?
> 
> Not ideal until we implement all of p7's insns in TCG:
> 
> Warning: Disabling some instructions which are not emulated by TCG (0x0, 0x4)
> 
> 
> r~
> 

That was dealt with in this patch: http://lists.nongnu.org/archive/html/qemu-ppc/2014-06/msg00479.html and has now made its way into HEAD.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH 1/2] target-ppc: Change default cpu for ppc64le-linux-user
  2014-06-30 12:08       ` Tom Musta
@ 2014-06-30 12:17         ` Alexander Graf
  0 siblings, 0 replies; 9+ messages in thread
From: Alexander Graf @ 2014-06-30 12:17 UTC (permalink / raw)
  To: Tom Musta, Richard Henderson
  Cc: Aldy Hernandez, qemu-ppc@nongnu.org, qemu-devel@nongnu.org


On 30.06.14 14:08, Tom Musta wrote:
> On 6/28/2014 1:42 PM, Richard Henderson wrote:
>> On 06/28/2014 09:50 AM, Alexander Graf wrote:
>>> How about we switch to p7 for BE top?
>> Not ideal until we implement all of p7's insns in TCG:
>>
>> Warning: Disabling some instructions which are not emulated by TCG (0x0, 0x4)
>>
>>
>> r~
>>
> That was dealt with in this patch: http://lists.nongnu.org/archive/html/qemu-ppc/2014-06/msg00479.html and has now made its way into HEAD.
>

Yup, I'll change the default for BE to POWER7 too while applying.


Alex

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH 2/2] target-ppc: Fix gdbstub for ppc64le-linux-user
  2014-06-28 16:45 ` [Qemu-devel] [PATCH 2/2] target-ppc: Fix gdbstub " Richard Henderson
@ 2014-06-30 12:20   ` Alexander Graf
  0 siblings, 0 replies; 9+ messages in thread
From: Alexander Graf @ 2014-06-30 12:20 UTC (permalink / raw)
  To: Richard Henderson, qemu-devel; +Cc: Aldy Hernandez, qemu-ppc


On 28.06.14 18:45, Richard Henderson wrote:
> The bswap that's needed for system mode isn't required for
> user mode, and in fact breaks debugging.
>
> Cc: Aldy Hernandez <aldyh@redhat.com>
> Signed-off-by: Richard Henderson <rth@twiddle.net>

This breaks the Apple gdbstub backend we recently got in target-ppc. 
I'll fix it up while applying.


Alex

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH 0/2] ppc64le-linux-user fixes
  2014-06-28 16:45 [Qemu-devel] [PATCH 0/2] ppc64le-linux-user fixes Richard Henderson
  2014-06-28 16:45 ` [Qemu-devel] [PATCH 1/2] target-ppc: Change default cpu for ppc64le-linux-user Richard Henderson
  2014-06-28 16:45 ` [Qemu-devel] [PATCH 2/2] target-ppc: Fix gdbstub " Richard Henderson
@ 2014-06-30 12:20 ` Alexander Graf
  2 siblings, 0 replies; 9+ messages in thread
From: Alexander Graf @ 2014-06-30 12:20 UTC (permalink / raw)
  To: Richard Henderson, qemu-devel; +Cc: qemu-ppc


On 28.06.14 18:45, Richard Henderson wrote:
> Two fixes needed to run and debug hello world.

Thanks, fixed up both patches and applied the to ppc-next (2.1 branch).


Alex

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2014-06-30 12:20 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-06-28 16:45 [Qemu-devel] [PATCH 0/2] ppc64le-linux-user fixes Richard Henderson
2014-06-28 16:45 ` [Qemu-devel] [PATCH 1/2] target-ppc: Change default cpu for ppc64le-linux-user Richard Henderson
2014-06-28 16:50   ` Alexander Graf
2014-06-28 18:42     ` Richard Henderson
2014-06-30 12:08       ` Tom Musta
2014-06-30 12:17         ` Alexander Graf
2014-06-28 16:45 ` [Qemu-devel] [PATCH 2/2] target-ppc: Fix gdbstub " Richard Henderson
2014-06-30 12:20   ` Alexander Graf
2014-06-30 12:20 ` [Qemu-devel] [PATCH 0/2] ppc64le-linux-user fixes Alexander Graf

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.