diff mbox

[18/29] target-sparc: use SparcV9MMU type for sparc64 I/D-MMUs

Message ID 3c760513-ca31-f45b-1853-ba1c0c65a71b@twiddle.net
State New
Headers show

Commit Message

Richard Henderson Oct. 10, 2016, 8:13 p.m. UTC
On 10/01/2016 05:05 AM, Artyom Tarasenko wrote:
> -    //typedef struct SparcMMU
> -    union {
> -        uint64_t immuregs[16];
> -        struct {
> -            uint64_t tsb_tag_target;
> -            uint64_t unused_mmu_primary_context;   // use DMMU
> -            uint64_t unused_mmu_secondary_context; // use DMMU
> -            uint64_t sfsr;
> -            uint64_t sfar;
> -            uint64_t tsb;
> -            uint64_t tag_access;
> -            uint64_t virtual_watchpoint;
> -            uint64_t physical_watchpoint;
> -        } immu;
> -    };
> -    union {
> -        uint64_t dmmuregs[16];
> -        struct {
> -            uint64_t tsb_tag_target;
> -            uint64_t mmu_primary_context;
> -            uint64_t mmu_secondary_context;
> -            uint64_t sfsr;
> -            uint64_t sfar;
> -            uint64_t tsb;
> -            uint64_t tag_access;
> -            uint64_t virtual_watchpoint;
> -            uint64_t physical_watchpoint;
> -        } dmmu;
> -    };
> +    SparcV9MMU immu;
> +    SparcV9MMU dmmu;

You'll find this broke sparc64-linux-user.  You'll need



r~

Comments

Artyom Tarasenko Oct. 11, 2016, 1:56 p.m. UTC | #1
On Mon, Oct 10, 2016 at 10:13 PM, Richard Henderson <rth@twiddle.net> wrote:
> On 10/01/2016 05:05 AM, Artyom Tarasenko wrote:
>>
>> -    //typedef struct SparcMMU
>> -    union {
>> -        uint64_t immuregs[16];
>> -        struct {
>> -            uint64_t tsb_tag_target;
>> -            uint64_t unused_mmu_primary_context;   // use DMMU
>> -            uint64_t unused_mmu_secondary_context; // use DMMU
>> -            uint64_t sfsr;
>> -            uint64_t sfar;
>> -            uint64_t tsb;
>> -            uint64_t tag_access;
>> -            uint64_t virtual_watchpoint;
>> -            uint64_t physical_watchpoint;
>> -        } immu;
>> -    };
>> -    union {
>> -        uint64_t dmmuregs[16];
>> -        struct {
>> -            uint64_t tsb_tag_target;
>> -            uint64_t mmu_primary_context;
>> -            uint64_t mmu_secondary_context;
>> -            uint64_t sfsr;
>> -            uint64_t sfar;
>> -            uint64_t tsb;
>> -            uint64_t tag_access;
>> -            uint64_t virtual_watchpoint;
>> -            uint64_t physical_watchpoint;
>> -        } dmmu;
>> -    };
>> +    SparcV9MMU immu;
>> +    SparcV9MMU dmmu;
>
>
> You'll find this broke sparc64-linux-user.  You'll need
>
> diff --git a/linux-user/main.c b/linux-user/main.c
> index bb48260..b1f1347 100644
> --- a/linux-user/main.c
> +++ b/linux-user/main.c
> @@ -1163,7 +1163,7 @@ void cpu_loop (CPUSPARCState *env)
>                  /* XXX: check env->error_code */
>                  info.si_code = TARGET_SEGV_MAPERR;
>                  if (trapnr == TT_DFAULT)
> -                    info._sifields._sigfault._addr = env->dmmuregs[4];
> +                    info._sifields._sigfault._addr = env->dmmu.mmuregs[4];
>                  else
>                      info._sifields._sigfault._addr = cpu_tsptr(env)->tpc;
>                  queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
>

Will add this. Thanks!
diff mbox

Patch

diff --git a/linux-user/main.c b/linux-user/main.c
index bb48260..b1f1347 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -1163,7 +1163,7 @@  void cpu_loop (CPUSPARCState *env)
                  /* XXX: check env->error_code */
                  info.si_code = TARGET_SEGV_MAPERR;
                  if (trapnr == TT_DFAULT)
-                    info._sifields._sigfault._addr = env->dmmuregs[4];
+                    info._sifields._sigfault._addr = env->dmmu.mmuregs[4];
                  else
                      info._sifields._sigfault._addr = cpu_tsptr(env)->tpc;
                  queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);