Commit 3399d90c authored by Al Viro's avatar Al Viro
Browse files

sh: convert to ->regset_get()



NB: there's a direct call of fpregs_get() left in dump_fpu().
To be taken out once we convert ELF_FDPIC to use of regset.

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 759de58f
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -103,9 +103,8 @@ int dump_fpu(struct pt_regs *regs, elf_fpregset_t *fpu)

	fpvalid = !!tsk_used_math(tsk);
	if (fpvalid)
		fpvalid = !fpregs_get(tsk, NULL, 0,
				      sizeof(struct user_fpu_struct),
				      fpu, NULL);
		fpvalid = !fpregs_get(tsk, NULL,
				      (struct membuf){fpu, sizeof(*fpu)});
#endif

	return fpvalid;
+10 −38
Original line number Diff line number Diff line
@@ -134,26 +134,11 @@ void ptrace_disable(struct task_struct *child)

static int genregs_get(struct task_struct *target,
		       const struct user_regset *regset,
		       unsigned int pos, unsigned int count,
		       void *kbuf, void __user *ubuf)
		       struct membuf to)
{
	const struct pt_regs *regs = task_pt_regs(target);
	int ret;

	ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
				  regs->regs,
				  0, 16 * sizeof(unsigned long));
	if (!ret)
		/* PC, PR, SR, GBR, MACH, MACL, TRA */
		ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
					  &regs->pc,
					  offsetof(struct pt_regs, pc),
					  sizeof(struct pt_regs));
	if (!ret)
		ret = user_regset_copyout_zero(&pos, &count, &kbuf, &ubuf,
					       sizeof(struct pt_regs), -1);

	return ret;
	return membuf_write(&to, regs, sizeof(struct pt_regs));
}

static int genregs_set(struct task_struct *target,
@@ -182,8 +167,7 @@ static int genregs_set(struct task_struct *target,
#ifdef CONFIG_SH_FPU
int fpregs_get(struct task_struct *target,
	       const struct user_regset *regset,
	       unsigned int pos, unsigned int count,
	       void *kbuf, void __user *ubuf)
	       struct membuf to)
{
	int ret;

@@ -191,12 +175,8 @@ int fpregs_get(struct task_struct *target,
	if (ret)
		return ret;

	if ((boot_cpu_data.flags & CPU_HAS_FPU))
		return user_regset_copyout(&pos, &count, &kbuf, &ubuf,
					   &target->thread.xstate->hardfpu, 0, -1);

	return user_regset_copyout(&pos, &count, &kbuf, &ubuf,
				   &target->thread.xstate->softfpu, 0, -1);
	return membuf_write(&to, target->thread.xstate,
			    sizeof(struct user_fpu_struct));
}

static int fpregs_set(struct task_struct *target,
@@ -230,20 +210,12 @@ static int fpregs_active(struct task_struct *target,
#ifdef CONFIG_SH_DSP
static int dspregs_get(struct task_struct *target,
		       const struct user_regset *regset,
		       unsigned int pos, unsigned int count,
		       void *kbuf, void __user *ubuf)
		       struct membuf to)
{
	const struct pt_dspregs *regs =
		(struct pt_dspregs *)&target->thread.dsp_status.dsp_regs;
	int ret;

	ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf, regs,
				  0, sizeof(struct pt_dspregs));
	if (!ret)
		ret = user_regset_copyout_zero(&pos, &count, &kbuf, &ubuf,
					       sizeof(struct pt_dspregs), -1);

	return ret;
	return membuf_write(&to, regs, sizeof(struct pt_dspregs));
}

static int dspregs_set(struct task_struct *target,
@@ -324,7 +296,7 @@ static const struct user_regset sh_regsets[] = {
		.n		= ELF_NGREG,
		.size		= sizeof(long),
		.align		= sizeof(long),
		.get		= genregs_get,
		.regset_get		= genregs_get,
		.set		= genregs_set,
	},

@@ -334,7 +306,7 @@ static const struct user_regset sh_regsets[] = {
		.n		= sizeof(struct user_fpu_struct) / sizeof(long),
		.size		= sizeof(long),
		.align		= sizeof(long),
		.get		= fpregs_get,
		.regset_get		= fpregs_get,
		.set		= fpregs_set,
		.active		= fpregs_active,
	},
@@ -345,7 +317,7 @@ static const struct user_regset sh_regsets[] = {
		.n		= sizeof(struct pt_dspregs) / sizeof(long),
		.size		= sizeof(long),
		.align		= sizeof(long),
		.get		= dspregs_get,
		.regset_get		= dspregs_get,
		.set		= dspregs_set,
		.active		= dspregs_active,
	},