qemu-riscv
[Top][All Lists]
Advanced

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

Re: [PATCH for-9.0 2/4] linux-headers: riscv: add ptrace.h


From: Alistair Francis
Subject: Re: [PATCH for-9.0 2/4] linux-headers: riscv: add ptrace.h
Date: Wed, 6 Dec 2023 10:24:29 +1000

On Fri, Dec 1, 2023 at 4:29 AM Daniel Henrique Barboza
<dbarboza@ventanamicro.com> wrote:
>
> KVM vector support for RISC-V requires the linux-header ptrace.h.
>
> Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>

Acked-by: Alistair Francis <alistair.francis@wdc.com>

Alistair

> ---
>  linux-headers/asm-riscv/ptrace.h | 132 +++++++++++++++++++++++++++++++
>  scripts/update-linux-headers.sh  |   3 +
>  2 files changed, 135 insertions(+)
>  create mode 100644 linux-headers/asm-riscv/ptrace.h
>
> diff --git a/linux-headers/asm-riscv/ptrace.h 
> b/linux-headers/asm-riscv/ptrace.h
> new file mode 100644
> index 0000000000..1e3166caca
> --- /dev/null
> +++ b/linux-headers/asm-riscv/ptrace.h
> @@ -0,0 +1,132 @@
> +/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
> +/*
> + * Copyright (C) 2012 Regents of the University of California
> + */
> +
> +#ifndef _ASM_RISCV_PTRACE_H
> +#define _ASM_RISCV_PTRACE_H
> +
> +#ifndef __ASSEMBLY__
> +
> +#include <linux/types.h>
> +
> +#define PTRACE_GETFDPIC                33
> +
> +#define PTRACE_GETFDPIC_EXEC   0
> +#define PTRACE_GETFDPIC_INTERP 1
> +
> +/*
> + * User-mode register state for core dumps, ptrace, sigcontext
> + *
> + * This decouples struct pt_regs from the userspace ABI.
> + * struct user_regs_struct must form a prefix of struct pt_regs.
> + */
> +struct user_regs_struct {
> +       unsigned long pc;
> +       unsigned long ra;
> +       unsigned long sp;
> +       unsigned long gp;
> +       unsigned long tp;
> +       unsigned long t0;
> +       unsigned long t1;
> +       unsigned long t2;
> +       unsigned long s0;
> +       unsigned long s1;
> +       unsigned long a0;
> +       unsigned long a1;
> +       unsigned long a2;
> +       unsigned long a3;
> +       unsigned long a4;
> +       unsigned long a5;
> +       unsigned long a6;
> +       unsigned long a7;
> +       unsigned long s2;
> +       unsigned long s3;
> +       unsigned long s4;
> +       unsigned long s5;
> +       unsigned long s6;
> +       unsigned long s7;
> +       unsigned long s8;
> +       unsigned long s9;
> +       unsigned long s10;
> +       unsigned long s11;
> +       unsigned long t3;
> +       unsigned long t4;
> +       unsigned long t5;
> +       unsigned long t6;
> +};
> +
> +struct __riscv_f_ext_state {
> +       __u32 f[32];
> +       __u32 fcsr;
> +};
> +
> +struct __riscv_d_ext_state {
> +       __u64 f[32];
> +       __u32 fcsr;
> +};
> +
> +struct __riscv_q_ext_state {
> +       __u64 f[64] __attribute__((aligned(16)));
> +       __u32 fcsr;
> +       /*
> +        * Reserved for expansion of sigcontext structure.  Currently zeroed
> +        * upon signal, and must be zero upon sigreturn.
> +        */
> +       __u32 reserved[3];
> +};
> +
> +struct __riscv_ctx_hdr {
> +       __u32 magic;
> +       __u32 size;
> +};
> +
> +struct __riscv_extra_ext_header {
> +       __u32 __padding[129] __attribute__((aligned(16)));
> +       /*
> +        * Reserved for expansion of sigcontext structure.  Currently zeroed
> +        * upon signal, and must be zero upon sigreturn.
> +        */
> +       __u32 reserved;
> +       struct __riscv_ctx_hdr hdr;
> +};
> +
> +union __riscv_fp_state {
> +       struct __riscv_f_ext_state f;
> +       struct __riscv_d_ext_state d;
> +       struct __riscv_q_ext_state q;
> +};
> +
> +struct __riscv_v_ext_state {
> +       unsigned long vstart;
> +       unsigned long vl;
> +       unsigned long vtype;
> +       unsigned long vcsr;
> +       unsigned long vlenb;
> +       void *datap;
> +       /*
> +        * In signal handler, datap will be set a correct user stack offset
> +        * and vector registers will be copied to the address of datap
> +        * pointer.
> +        */
> +};
> +
> +struct __riscv_v_regset_state {
> +       unsigned long vstart;
> +       unsigned long vl;
> +       unsigned long vtype;
> +       unsigned long vcsr;
> +       unsigned long vlenb;
> +       char vreg[];
> +};
> +
> +/*
> + * According to spec: The number of bits in a single vector register,
> + * VLEN >= ELEN, which must be a power of 2, and must be no greater than
> + * 2^16 = 65536bits = 8192bytes
> + */
> +#define RISCV_MAX_VLENB (8192)
> +
> +#endif /* __ASSEMBLY__ */
> +
> +#endif /* _ASM_RISCV_PTRACE_H */
> diff --git a/scripts/update-linux-headers.sh b/scripts/update-linux-headers.sh
> index 34295c0fe5..a0006eec6f 100755
> --- a/scripts/update-linux-headers.sh
> +++ b/scripts/update-linux-headers.sh
> @@ -156,6 +156,9 @@ for arch in $ARCHLIST; do
>          cp_portable "$tmpdir/bootparam.h" \
>                      "$output/include/standard-headers/asm-$arch"
>      fi
> +    if [ $arch = riscv ]; then
> +        cp "$tmpdir/include/asm/ptrace.h" "$output/linux-headers/asm-riscv/"
> +    fi
>  done
>
>  rm -rf "$output/linux-headers/linux"
> --
> 2.41.0
>
>



reply via email to

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