Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 60b3b9af authored by Roland McGrath's avatar Roland McGrath Committed by Ingo Molnar
Browse files

x86: x86 user_regset cleanup



This removes a bunch of dead code that is no longer needed now
that the user_regset interfaces are being used for all these jobs.

Signed-off-by: default avatarRoland McGrath <roland@redhat.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 5a4646a4
Loading
Loading
Loading
Loading
+9 −96
Original line number Original line Diff line number Diff line
@@ -454,113 +454,26 @@ int restore_i387_ia32(struct _fpstate_ia32 __user *buf)
	return err;
	return err;
}
}


#endif	/* CONFIG_X86_32 || CONFIG_IA32_EMULATION */

#ifdef CONFIG_X86_64

int get_fpregs(struct user_i387_struct __user *buf, struct task_struct *tsk)
{
	return xfpregs_get(tsk, NULL, 0, sizeof(*buf), NULL, buf);
}

int set_fpregs(struct task_struct *tsk, struct user_i387_struct __user *buf)
{
	return xfpregs_set(tsk, NULL, 0, sizeof(*buf), NULL, buf);
}

#else

int get_fpregs(struct user_i387_struct __user *buf, struct task_struct *tsk)
{
	return fpregs_get(tsk, NULL, 0, sizeof(*buf), NULL, buf);
}

int set_fpregs(struct task_struct *tsk, struct user_i387_struct __user *buf)
{
	return fpregs_set(tsk, NULL, 0, sizeof(*buf), NULL, buf);
}

int get_fpxregs(struct user_fxsr_struct __user *buf, struct task_struct *tsk)
{
	return xfpregs_get(tsk, NULL, 0, sizeof(*buf), NULL, buf);
}

int set_fpxregs(struct task_struct *tsk, struct user_fxsr_struct __user *buf)
{
	return xfpregs_get(tsk, NULL, 0, sizeof(*buf), NULL, buf);
}

#endif

/*
/*
 * FPU state for core dumps.
 * FPU state for core dumps.
 * This is only used for a.out dumps now.
 * It is declared generically using elf_fpregset_t (which is
 * struct user_i387_struct) but is in fact only used for 32-bit
 * dumps, so on 64-bit it is really struct user_i387_ia32_struct.
 */
 */

static inline void copy_fpu_fsave(struct task_struct *tsk,
				  struct user_i387_struct *fpu)
{
	memcpy(fpu, &tsk->thread.i387.fsave,
	       sizeof(struct user_i387_struct));
}

static inline void copy_fpu_fxsave(struct task_struct *tsk,
				   struct user_i387_struct *fpu)
{
	unsigned short *to;
	unsigned short *from;
	int i;

	memcpy(fpu, &tsk->thread.i387.fxsave, 7 * sizeof(long));

	to = (unsigned short *)&fpu->st_space[0];
	from = (unsigned short *)&tsk->thread.i387.fxsave.st_space[0];
	for (i = 0; i < 8; i++, to += 5, from += 8)
		memcpy(to, from, 5 * sizeof(unsigned short));
}

int dump_fpu(struct pt_regs *regs, struct user_i387_struct *fpu)
int dump_fpu(struct pt_regs *regs, struct user_i387_struct *fpu)
{
{
	int fpvalid;
	int fpvalid;
	struct task_struct *tsk = current;
	struct task_struct *tsk = current;


	fpvalid = !!used_math();
	fpvalid = !!used_math();
	if (fpvalid) {
	if (fpvalid)
		unlazy_fpu(tsk);
		fpvalid = !fpregs_get(tsk, NULL,
		if (cpu_has_fxsr) {
				      0, sizeof(struct user_i387_ia32_struct),
			copy_fpu_fxsave(tsk, fpu);
				      fpu, NULL);
		} else {
			copy_fpu_fsave(tsk, fpu);
		}
	}


	return fpvalid;
	return fpvalid;
}
}
EXPORT_SYMBOL(dump_fpu);
EXPORT_SYMBOL(dump_fpu);


int dump_task_fpu(struct task_struct *tsk, struct user_i387_struct *fpu)
#endif	/* CONFIG_X86_32 || CONFIG_IA32_EMULATION */
{
	int fpvalid = !!tsk_used_math(tsk);

	if (fpvalid) {
		if (tsk == current)
			unlazy_fpu(tsk);
		if (cpu_has_fxsr)
			copy_fpu_fxsave(tsk, fpu);
		else
			copy_fpu_fsave(tsk, fpu);
	}
	return fpvalid;
}

int dump_task_extended_fpu(struct task_struct *tsk,
			   struct user32_fxsr_struct *fpu)
{
	int fpvalid = tsk_used_math(tsk) && cpu_has_fxsr;

	if (fpvalid) {
		if (tsk == current)
		       unlazy_fpu(tsk);
		memcpy(fpu, &tsk->thread.i387.fxsave, sizeof(*fpu));
	}
	return fpvalid;
}
+0 −16
Original line number Original line Diff line number Diff line
@@ -571,22 +571,6 @@ void dump_thread(struct pt_regs * regs, struct user * dump)
}
}
EXPORT_SYMBOL(dump_thread);
EXPORT_SYMBOL(dump_thread);


/*
 * Capture the user space registers if the task is not running (in user space)
 */
int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs)
{
	struct pt_regs ptregs = *task_pt_regs(tsk);
	ptregs.cs &= 0xffff;
	ptregs.ds &= 0xffff;
	ptregs.es &= 0xffff;
	ptregs.ss &= 0xffff;

	elf_core_copy_regs(regs, &ptregs);

	return 1;
}

#ifdef CONFIG_SECCOMP
#ifdef CONFIG_SECCOMP
static void hard_disable_TSC(void)
static void hard_disable_TSC(void)
{
{
+0 −19
Original line number Original line Diff line number Diff line
@@ -544,24 +544,6 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long sp,
 */
 */
#define loaddebug(thread, r) set_debugreg(thread->debugreg ## r, r)
#define loaddebug(thread, r) set_debugreg(thread->debugreg ## r, r)


/*
 * Capture the user space registers if the task is not running (in user space)
 */
int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs)
{
	struct pt_regs *pp, ptregs;

	pp = task_pt_regs(tsk);

	ptregs = *pp;
	ptregs.cs &= 0xffff;
	ptregs.ss &= 0xffff;

	elf_core_copy_regs(regs, &ptregs);

	return 1;
}

static inline void __switch_to_xtra(struct task_struct *prev_p,
static inline void __switch_to_xtra(struct task_struct *prev_p,
				    struct task_struct *next_p,
				    struct task_struct *next_p,
				    struct tss_struct *tss)
				    struct tss_struct *tss)
@@ -929,4 +911,3 @@ unsigned long arch_randomize_brk(struct mm_struct *mm)
	unsigned long range_end = mm->brk + 0x02000000;
	unsigned long range_end = mm->brk + 0x02000000;
	return randomize_range(mm->brk, range_end, 0) ? : mm->brk;
	return randomize_range(mm->brk, range_end, 0) ? : mm->brk;
}
}
+0 −14
Original line number Original line Diff line number Diff line
@@ -761,17 +761,3 @@ int fpregs_soft_get(struct task_struct *target,


	return ret;
	return ret;
}
}

int save_i387_soft(void *s387, struct _fpstate __user *buf)
{
	return fpregs_soft_get(current, NULL,
			       0, sizeof(struct user_i387_struct),
			       NULL, buf) ? -1 : 1;
}

int restore_i387_soft(void *s387, struct _fpstate __user *buf)
{
	return fpregs_soft_set(current, NULL,
			       0, sizeof(struct user_i387_struct),
			       NULL, buf) ? -1 : 1;
}
+0 −68
Original line number Original line Diff line number Diff line
@@ -104,28 +104,6 @@ typedef struct user_fxsr_struct elf_fpxregset_t;
	_r->ax = 0; \
	_r->ax = 0; \
} while (0)
} while (0)


/* regs is struct pt_regs, pr_reg is elf_gregset_t (which is
   now struct_user_regs, they are different) */

#define ELF_CORE_COPY_REGS(pr_reg, regs)		\
	pr_reg[0] = regs->bx;				\
	pr_reg[1] = regs->cx;				\
	pr_reg[2] = regs->dx;				\
	pr_reg[3] = regs->si;				\
	pr_reg[4] = regs->di;				\
	pr_reg[5] = regs->bp;				\
	pr_reg[6] = regs->ax;				\
	pr_reg[7] = regs->ds & 0xffff;			\
	pr_reg[8] = regs->es & 0xffff;			\
	pr_reg[9] = regs->fs & 0xffff;			\
	savesegment(gs,pr_reg[10]);			\
	pr_reg[11] = regs->orig_ax;			\
	pr_reg[12] = regs->ip;				\
	pr_reg[13] = regs->cs & 0xffff;			\
	pr_reg[14] = regs->flags;			\
	pr_reg[15] = regs->sp;				\
	pr_reg[16] = regs->ss & 0xffff;

#define ELF_PLATFORM	(utsname()->machine)
#define ELF_PLATFORM	(utsname()->machine)
#define set_personality_64bit()	do { } while (0)
#define set_personality_64bit()	do { } while (0)
extern unsigned int vdso_enabled;
extern unsigned int vdso_enabled;
@@ -159,41 +137,6 @@ extern unsigned int vdso_enabled;
	clear_thread_flag(TIF_IA32);			  \
	clear_thread_flag(TIF_IA32);			  \
} while (0)
} while (0)


/* regs is struct pt_regs, pr_reg is elf_gregset_t (which is
   now struct_user_regs, they are different). Assumes current is the process
   getting dumped. */

#define ELF_CORE_COPY_REGS(pr_reg, regs)  do {			\
	unsigned v;						\
	(pr_reg)[0] = (regs)->r15;				\
	(pr_reg)[1] = (regs)->r14;				\
	(pr_reg)[2] = (regs)->r13;				\
	(pr_reg)[3] = (regs)->r12;				\
	(pr_reg)[4] = (regs)->bp;				\
	(pr_reg)[5] = (regs)->bx;				\
	(pr_reg)[6] = (regs)->r11;				\
	(pr_reg)[7] = (regs)->r10;				\
	(pr_reg)[8] = (regs)->r9;				\
	(pr_reg)[9] = (regs)->r8;				\
	(pr_reg)[10] = (regs)->ax;				\
	(pr_reg)[11] = (regs)->cx;				\
	(pr_reg)[12] = (regs)->dx;				\
	(pr_reg)[13] = (regs)->si;				\
	(pr_reg)[14] = (regs)->di;				\
	(pr_reg)[15] = (regs)->orig_ax;			\
	(pr_reg)[16] = (regs)->ip;				\
	(pr_reg)[17] = (regs)->cs;				\
	(pr_reg)[18] = (regs)->flags;				\
	(pr_reg)[19] = (regs)->sp;				\
	(pr_reg)[20] = (regs)->ss;				\
	(pr_reg)[21] = current->thread.fs;			\
	(pr_reg)[22] = current->thread.gs;			\
	asm("movl %%ds,%0" : "=r" (v)); (pr_reg)[23] = v;	\
	asm("movl %%es,%0" : "=r" (v)); (pr_reg)[24] = v;	\
	asm("movl %%fs,%0" : "=r" (v)); (pr_reg)[25] = v;	\
	asm("movl %%gs,%0" : "=r" (v)); (pr_reg)[26] = v;	\
} while(0);

/* I'm not sure if we can use '-' here */
/* I'm not sure if we can use '-' here */
#define ELF_PLATFORM       ("x86_64")
#define ELF_PLATFORM       ("x86_64")
extern void set_personality_64bit(void);
extern void set_personality_64bit(void);
@@ -236,18 +179,7 @@ extern int vdso_enabled;


struct task_struct;
struct task_struct;


extern int dump_task_regs (struct task_struct *, elf_gregset_t *);
extern int dump_task_fpu (struct task_struct *, elf_fpregset_t *);

#define ELF_CORE_COPY_TASK_REGS(tsk, elf_regs) dump_task_regs(tsk, elf_regs)
#define ELF_CORE_COPY_FPREGS(tsk, elf_fpregs) dump_task_fpu(tsk, elf_fpregs)

#ifdef CONFIG_X86_32
#ifdef CONFIG_X86_32
extern int dump_task_extended_fpu (struct task_struct *,
				   struct user_fxsr_struct *);
#define ELF_CORE_COPY_XFPREGS(tsk, elf_xfpregs) \
	dump_task_extended_fpu(tsk, elf_xfpregs)
#define ELF_CORE_XFPREG_TYPE NT_PRXFPREG


#define VDSO_HIGH_BASE		(__fix_to_virt(FIX_VDSO))
#define VDSO_HIGH_BASE		(__fix_to_virt(FIX_VDSO))


Loading