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

Commit 742fa54a authored by H. Peter Anvin's avatar H. Peter Anvin Committed by Ingo Molnar
Browse files

x86: use generic register names in struct sigcontext



Switch struct sigcontext (defined in <asm/sigcontext*.h>) to using
register names withut e- or r-prefixes for both 32- and 64-bit x86.
This is intended as a preliminary step in unifying this code between
architectures.

Signed-off-by: default avatarH. Peter Anvin <hpa@zytor.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 153d5f2e
Loading
Loading
Loading
Loading
+16 −16
Original line number Original line Diff line number Diff line
@@ -194,7 +194,7 @@ struct rt_sigframe


#define COPY(x)		{ 		\
#define COPY(x)		{ 		\
	unsigned int reg;		\
	unsigned int reg;		\
	err |= __get_user(reg, &sc->e ##x);	\
	err |= __get_user(reg, &sc->x);	\
	regs->x = reg;			\
	regs->x = reg;			\
}
}


@@ -248,7 +248,7 @@ static int ia32_restore_sigcontext(struct pt_regs *regs,
	err |= __get_user(regs->ss, &sc->ss);
	err |= __get_user(regs->ss, &sc->ss);
	regs->ss |= 3;
	regs->ss |= 3;


	err |= __get_user(tmpflags, &sc->eflags);
	err |= __get_user(tmpflags, &sc->flags);
	regs->flags = (regs->flags & ~0x40DD5) | (tmpflags & 0x40DD5);
	regs->flags = (regs->flags & ~0x40DD5) | (tmpflags & 0x40DD5);
	/* disable syscall checks */
	/* disable syscall checks */
	regs->orig_ax = -1;
	regs->orig_ax = -1;
@@ -268,7 +268,7 @@ static int ia32_restore_sigcontext(struct pt_regs *regs,
		}
		}
	}
	}


	err |= __get_user(tmp, &sc->eax);
	err |= __get_user(tmp, &sc->ax);
	*peax = tmp;
	*peax = tmp;


	return err;
	return err;
@@ -361,21 +361,21 @@ static int ia32_setup_sigcontext(struct sigcontext_ia32 __user *sc,
	__asm__("movl %%es,%0" : "=r"(tmp): "0"(tmp));
	__asm__("movl %%es,%0" : "=r"(tmp): "0"(tmp));
	err |= __put_user(tmp, (unsigned int __user *)&sc->es);
	err |= __put_user(tmp, (unsigned int __user *)&sc->es);


	err |= __put_user((u32)regs->di, &sc->edi);
	err |= __put_user((u32)regs->di, &sc->di);
	err |= __put_user((u32)regs->si, &sc->esi);
	err |= __put_user((u32)regs->si, &sc->si);
	err |= __put_user((u32)regs->bp, &sc->ebp);
	err |= __put_user((u32)regs->bp, &sc->bp);
	err |= __put_user((u32)regs->sp, &sc->esp);
	err |= __put_user((u32)regs->sp, &sc->sp);
	err |= __put_user((u32)regs->bx, &sc->ebx);
	err |= __put_user((u32)regs->bx, &sc->bx);
	err |= __put_user((u32)regs->dx, &sc->edx);
	err |= __put_user((u32)regs->dx, &sc->dx);
	err |= __put_user((u32)regs->cx, &sc->ecx);
	err |= __put_user((u32)regs->cx, &sc->cx);
	err |= __put_user((u32)regs->ax, &sc->eax);
	err |= __put_user((u32)regs->ax, &sc->ax);
	err |= __put_user((u32)regs->cs, &sc->cs);
	err |= __put_user((u32)regs->cs, &sc->cs);
	err |= __put_user((u32)regs->ss, &sc->ss);
	err |= __put_user((u32)regs->ss, &sc->ss);
	err |= __put_user(current->thread.trap_no, &sc->trapno);
	err |= __put_user(current->thread.trap_no, &sc->trapno);
	err |= __put_user(current->thread.error_code, &sc->err);
	err |= __put_user(current->thread.error_code, &sc->err);
	err |= __put_user((u32)regs->ip, &sc->eip);
	err |= __put_user((u32)regs->ip, &sc->ip);
	err |= __put_user((u32)regs->flags, &sc->eflags);
	err |= __put_user((u32)regs->flags, &sc->flags);
	err |= __put_user((u32)regs->sp, &sc->esp_at_signal);
	err |= __put_user((u32)regs->sp, &sc->sp_at_signal);


	tmp = save_i387_ia32(current, fpstate, regs, 0);
	tmp = save_i387_ia32(current, fpstate, regs, 0);
	if (tmp < 0)
	if (tmp < 0)
+9 −9
Original line number Original line Diff line number Diff line
@@ -38,15 +38,15 @@ void foo(void);


void foo(void)
void foo(void)
{
{
	OFFSET(IA32_SIGCONTEXT_eax, sigcontext, eax);
	OFFSET(IA32_SIGCONTEXT_ax, sigcontext, ax);
	OFFSET(IA32_SIGCONTEXT_ebx, sigcontext, ebx);
	OFFSET(IA32_SIGCONTEXT_bx, sigcontext, bx);
	OFFSET(IA32_SIGCONTEXT_ecx, sigcontext, ecx);
	OFFSET(IA32_SIGCONTEXT_cx, sigcontext, cx);
	OFFSET(IA32_SIGCONTEXT_edx, sigcontext, edx);
	OFFSET(IA32_SIGCONTEXT_dx, sigcontext, dx);
	OFFSET(IA32_SIGCONTEXT_esi, sigcontext, esi);
	OFFSET(IA32_SIGCONTEXT_si, sigcontext, si);
	OFFSET(IA32_SIGCONTEXT_edi, sigcontext, edi);
	OFFSET(IA32_SIGCONTEXT_di, sigcontext, di);
	OFFSET(IA32_SIGCONTEXT_ebp, sigcontext, ebp);
	OFFSET(IA32_SIGCONTEXT_bp, sigcontext, bp);
	OFFSET(IA32_SIGCONTEXT_esp, sigcontext, esp);
	OFFSET(IA32_SIGCONTEXT_sp, sigcontext, sp);
	OFFSET(IA32_SIGCONTEXT_eip, sigcontext, eip);
	OFFSET(IA32_SIGCONTEXT_ip, sigcontext, ip);
	BLANK();
	BLANK();


	OFFSET(CPUINFO_x86, cpuinfo_x86, x86);
	OFFSET(CPUINFO_x86, cpuinfo_x86, x86);
+9 −9
Original line number Original line Diff line number Diff line
@@ -63,15 +63,15 @@ int main(void)
#undef ENTRY
#undef ENTRY
#ifdef CONFIG_IA32_EMULATION
#ifdef CONFIG_IA32_EMULATION
#define ENTRY(entry) DEFINE(IA32_SIGCONTEXT_ ## entry, offsetof(struct sigcontext_ia32, entry))
#define ENTRY(entry) DEFINE(IA32_SIGCONTEXT_ ## entry, offsetof(struct sigcontext_ia32, entry))
	ENTRY(eax);
	ENTRY(ax);
	ENTRY(ebx);
	ENTRY(bx);
	ENTRY(ecx);
	ENTRY(cx);
	ENTRY(edx);
	ENTRY(dx);
	ENTRY(esi);
	ENTRY(si);
	ENTRY(edi);
	ENTRY(di);
	ENTRY(ebp);
	ENTRY(bp);
	ENTRY(esp);
	ENTRY(sp);
	ENTRY(eip);
	ENTRY(ip);
	BLANK();
	BLANK();
#undef ENTRY
#undef ENTRY
	DEFINE(IA32_RT_SIGFRAME_sigcontext,
	DEFINE(IA32_RT_SIGFRAME_sigcontext,
+14 −14
Original line number Original line Diff line number Diff line
@@ -105,7 +105,7 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, int *peax
	/* Always make any pending restarted system calls return -EINTR */
	/* Always make any pending restarted system calls return -EINTR */
	current_thread_info()->restart_block.fn = do_no_restart_syscall;
	current_thread_info()->restart_block.fn = do_no_restart_syscall;


#define COPY(x)		err |= __get_user(regs->x, &sc->e ## x)
#define COPY(x)		err |= __get_user(regs->x, &sc->x)


#define COPY_SEG(seg)							\
#define COPY_SEG(seg)							\
	{ unsigned short tmp;						\
	{ unsigned short tmp;						\
@@ -144,7 +144,7 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, int *peax
	
	
	{
	{
		unsigned int tmpflags;
		unsigned int tmpflags;
		err |= __get_user(tmpflags, &sc->eflags);
		err |= __get_user(tmpflags, &sc->flags);
		regs->flags = (regs->flags & ~FIX_EFLAGS) | (tmpflags & FIX_EFLAGS);
		regs->flags = (regs->flags & ~FIX_EFLAGS) | (tmpflags & FIX_EFLAGS);
		regs->orig_ax = -1;		/* disable syscall checks */
		regs->orig_ax = -1;		/* disable syscall checks */
	}
	}
@@ -165,7 +165,7 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, int *peax
		}
		}
	}
	}


	err |= __get_user(*peax, &sc->eax);
	err |= __get_user(*peax, &sc->ax);
	return err;
	return err;


badframe:
badframe:
@@ -256,20 +256,20 @@ setup_sigcontext(struct sigcontext __user *sc, struct _fpstate __user *fpstate,


	err |= __put_user(regs->es, (unsigned int __user *)&sc->es);
	err |= __put_user(regs->es, (unsigned int __user *)&sc->es);
	err |= __put_user(regs->ds, (unsigned int __user *)&sc->ds);
	err |= __put_user(regs->ds, (unsigned int __user *)&sc->ds);
	err |= __put_user(regs->di, &sc->edi);
	err |= __put_user(regs->di, &sc->di);
	err |= __put_user(regs->si, &sc->esi);
	err |= __put_user(regs->si, &sc->si);
	err |= __put_user(regs->bp, &sc->ebp);
	err |= __put_user(regs->bp, &sc->bp);
	err |= __put_user(regs->sp, &sc->esp);
	err |= __put_user(regs->sp, &sc->sp);
	err |= __put_user(regs->bx, &sc->ebx);
	err |= __put_user(regs->bx, &sc->bx);
	err |= __put_user(regs->dx, &sc->edx);
	err |= __put_user(regs->dx, &sc->dx);
	err |= __put_user(regs->cx, &sc->ecx);
	err |= __put_user(regs->cx, &sc->cx);
	err |= __put_user(regs->ax, &sc->eax);
	err |= __put_user(regs->ax, &sc->ax);
	err |= __put_user(current->thread.trap_no, &sc->trapno);
	err |= __put_user(current->thread.trap_no, &sc->trapno);
	err |= __put_user(current->thread.error_code, &sc->err);
	err |= __put_user(current->thread.error_code, &sc->err);
	err |= __put_user(regs->ip, &sc->eip);
	err |= __put_user(regs->ip, &sc->ip);
	err |= __put_user(regs->cs, (unsigned int __user *)&sc->cs);
	err |= __put_user(regs->cs, (unsigned int __user *)&sc->cs);
	err |= __put_user(regs->flags, &sc->eflags);
	err |= __put_user(regs->flags, &sc->flags);
	err |= __put_user(regs->sp, &sc->esp_at_signal);
	err |= __put_user(regs->sp, &sc->sp_at_signal);
	err |= __put_user(regs->ss, (unsigned int __user *)&sc->ss);
	err |= __put_user(regs->ss, (unsigned int __user *)&sc->ss);


	tmp = save_i387(fpstate);
	tmp = save_i387(fpstate);
+14 −15
Original line number Original line Diff line number Diff line
@@ -62,11 +62,10 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, unsigned
	/* Always make any pending restarted system calls return -EINTR */
	/* Always make any pending restarted system calls return -EINTR */
	current_thread_info()->restart_block.fn = do_no_restart_syscall;
	current_thread_info()->restart_block.fn = do_no_restart_syscall;


#define COPYR(x)	err |= __get_user(regs->x, &sc->r ## x)
#define COPY(x)		err |= __get_user(regs->x, &sc->x)
#define COPY(x)		err |= __get_user(regs->x, &sc->x)


	COPYR(di); COPYR(si); COPYR(bp); COPYR(sp); COPYR(bx);
	COPY(di); COPY(si); COPY(bp); COPY(sp); COPY(bx);
	COPYR(dx); COPYR(cx); COPYR(ip);
	COPY(dx); COPY(cx); COPY(ip);
	COPY(r8);
	COPY(r8);
	COPY(r9);
	COPY(r9);
	COPY(r10);
	COPY(r10);
@@ -87,7 +86,7 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, unsigned


	{
	{
		unsigned int tmpflags;
		unsigned int tmpflags;
		err |= __get_user(tmpflags, &sc->eflags);
		err |= __get_user(tmpflags, &sc->flags);
		regs->flags = (regs->flags & ~0x40DD5) | (tmpflags & 0x40DD5);
		regs->flags = (regs->flags & ~0x40DD5) | (tmpflags & 0x40DD5);
		regs->orig_ax = -1;		/* disable syscall checks */
		regs->orig_ax = -1;		/* disable syscall checks */
	}
	}
@@ -109,7 +108,7 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, unsigned
		}
		}
	}
	}


	err |= __get_user(*prax, &sc->rax);
	err |= __get_user(*prax, &sc->ax);
	return err;
	return err;


badframe:
badframe:
@@ -166,14 +165,14 @@ setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs, unsigned lo
	err |= __put_user(0, &sc->gs);
	err |= __put_user(0, &sc->gs);
	err |= __put_user(0, &sc->fs);
	err |= __put_user(0, &sc->fs);


	err |= __put_user(regs->di, &sc->rdi);
	err |= __put_user(regs->di, &sc->di);
	err |= __put_user(regs->si, &sc->rsi);
	err |= __put_user(regs->si, &sc->si);
	err |= __put_user(regs->bp, &sc->rbp);
	err |= __put_user(regs->bp, &sc->bp);
	err |= __put_user(regs->sp, &sc->rsp);
	err |= __put_user(regs->sp, &sc->sp);
	err |= __put_user(regs->bx, &sc->rbx);
	err |= __put_user(regs->bx, &sc->bx);
	err |= __put_user(regs->dx, &sc->rdx);
	err |= __put_user(regs->dx, &sc->dx);
	err |= __put_user(regs->cx, &sc->rcx);
	err |= __put_user(regs->cx, &sc->cx);
	err |= __put_user(regs->ax, &sc->rax);
	err |= __put_user(regs->ax, &sc->ax);
	err |= __put_user(regs->r8, &sc->r8);
	err |= __put_user(regs->r8, &sc->r8);
	err |= __put_user(regs->r9, &sc->r9);
	err |= __put_user(regs->r9, &sc->r9);
	err |= __put_user(regs->r10, &sc->r10);
	err |= __put_user(regs->r10, &sc->r10);
@@ -184,8 +183,8 @@ setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs, unsigned lo
	err |= __put_user(regs->r15, &sc->r15);
	err |= __put_user(regs->r15, &sc->r15);
	err |= __put_user(me->thread.trap_no, &sc->trapno);
	err |= __put_user(me->thread.trap_no, &sc->trapno);
	err |= __put_user(me->thread.error_code, &sc->err);
	err |= __put_user(me->thread.error_code, &sc->err);
	err |= __put_user(regs->ip, &sc->rip);
	err |= __put_user(regs->ip, &sc->ip);
	err |= __put_user(regs->flags, &sc->eflags);
	err |= __put_user(regs->flags, &sc->flags);
	err |= __put_user(mask, &sc->oldmask);
	err |= __put_user(mask, &sc->oldmask);
	err |= __put_user(me->thread.cr2, &sc->cr2);
	err |= __put_user(me->thread.cr2, &sc->cr2);


Loading