Commit 82031827 authored by Mao Minkai's avatar Mao Minkai Committed by guzitao
Browse files

sw64: ptrace: add NT_SW64_SYSTEM_CALL regset

Sunway inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/IB73UR



--------------------------------

This regeset is intended to be used to get and set a system call number
while tracing.

Signed-off-by: default avatarMao Minkai <maominkai@wxiat.com>
Reviewed-by: default avatarHe Sheng <hesheng@wxiat.com>
Signed-off-by: default avatarGu Zitao <guzitao@wxiat.com>
parent 1df32503
Loading
Loading
Loading
Loading
+32 −0
Original line number Diff line number Diff line
@@ -290,9 +290,33 @@ static int fpr_set(struct task_struct *target,
				sizeof(struct user_fpsimd_state));
}

static int syscall_get(struct task_struct *target,
		const struct user_regset *regset,
		struct membuf to)
{
	return membuf_store(&to, task_pt_regs(target)->orig_r0);
}

static int syscall_set(struct task_struct *target,
		const struct user_regset *regset,
		unsigned int pos, unsigned int count,
		const void *kbuf, const void __user *ubuf)
{
	unsigned long nr = task_pt_regs(target)->orig_r0;
	int ret;

	ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &nr, 0, -1);
	if (ret)
		return ret;

	task_pt_regs(target)->orig_r0 = nr;
	return ret;
}

enum sw64_regset {
	REGSET_GPR,
	REGSET_FPR,
	REGSET_SYSCALL,
};

static const struct user_regset sw64_regsets[] = {
@@ -312,6 +336,14 @@ static const struct user_regset sw64_regsets[] = {
		.regset_get = fpr_get,
		.set = fpr_set
	},
	[REGSET_SYSCALL] = {
		.core_note_type = NT_SW64_SYSTEM_CALL,
		.n = 1,
		.size = sizeof(u64),
		.align = sizeof(u64),
		.regset_get = syscall_get,
		.set = syscall_set
	}
};

static const struct user_regset_view user_sw64_view = {
+1 −0
Original line number Diff line number Diff line
@@ -454,6 +454,7 @@ typedef struct elf64_shdr {
#define NT_LOONGARCH_LBT	0xa04	/* LoongArch Loongson Binary Translation registers */
#define NT_LOONGARCH_HW_BREAK	0xa05   /* LoongArch hardware breakpoint registers */
#define NT_LOONGARCH_HW_WATCH	0xa06   /* LoongArch hardware watchpoint registers */
#define NT_SW64_SYSTEM_CALL	0x7f00	/* SW64 system call number */

/* Note types with note name "GNU" */
#define NT_GNU_PROPERTY_TYPE_0	5