[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~
- Re: [RFC PATCH 4/8] riscv: Implement payload load interfaces,
Richard Henderson <=