qemu-riscv
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RFC PATCH 4/8] riscv: Implement payload load interfaces


From: Richard Henderson
Subject: Re: [RFC PATCH 4/8] riscv: Implement payload load interfaces
Date: Mon, 11 May 2020 11:03:47 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0

On 4/30/20 12:21 AM, LIU Zhiwei wrote:
> +void reginfo_init(struct reginfo *ri, ucontext_t *uc)
> +{
> +    int i;
> +    union __riscv_mc_fp_state *fp;
> +    /* necessary to be able to compare with memcmp later */
> +    memset(ri, 0, sizeof(*ri));
> +
> +    for (i = 0; i < 32; i++) {
> +        ri->regs[i] = uc->uc_mcontext.__gregs[i];
> +    }
> +
> +    ri->sp = 0xdeadbeefdeadbeef;
> +    ri->regs[2] = 0xdeadbeefdeadbeef;
> +    ri->regs[3] = 0xdeadbeefdeadbeef;
> +    ri->regs[4] = 0xdeadbeefdeadbeef;
> +    ri->pc = uc->uc_mcontext.__gregs[0] - image_start_address;
> +    ri->faulting_insn = *((uint32_t *) uc->uc_mcontext.__gregs[0]);
> +    fp = &uc->uc_mcontext.__fpregs;
> +    ri->fcsr = fp->__d.__fcsr;
> +
> +    for (i = 0; i < 32; i++) {
> +        ri->fregs[i] = fp->__d.__f[i];
> +    }
> +}

Perhaps wrap the fp bits here in

#if __riscv_flen == 64
    ri->fcsr = fp->__d.__fscr;
    ...
#else
# error "Unsupported fp length"
#endif

> +        if (m->regs[i] != a->regs[i]) {
> +            fprintf(f, "  X%-2d    : %016" PRIx64 " vs %016" PRIx64 "\n",
> +                    i, m->regs[i], a->regs[i]);
> +        }

riscv doesn't name its registers with an x.


r~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]