diff options
Diffstat (limited to 'arch/m68k/kernel')
| -rw-r--r-- | arch/m68k/kernel/asm-offsets.c | 12 | ||||
| -rw-r--r-- | arch/m68k/kernel/ptrace.c | 51 | 
2 files changed, 26 insertions, 37 deletions
| diff --git a/arch/m68k/kernel/asm-offsets.c b/arch/m68k/kernel/asm-offsets.c index 73e5e581245b..78e59b82ebc3 100644 --- a/arch/m68k/kernel/asm-offsets.c +++ b/arch/m68k/kernel/asm-offsets.c @@ -22,13 +22,9 @@  int main(void)  {  	/* offsets into the task struct */ -	DEFINE(TASK_STATE, offsetof(struct task_struct, state)); -	DEFINE(TASK_FLAGS, offsetof(struct task_struct, flags)); -	DEFINE(TASK_PTRACE, offsetof(struct task_struct, ptrace));  	DEFINE(TASK_THREAD, offsetof(struct task_struct, thread));  	DEFINE(TASK_INFO, offsetof(struct task_struct, thread.info));  	DEFINE(TASK_MM, offsetof(struct task_struct, mm)); -	DEFINE(TASK_ACTIVE_MM, offsetof(struct task_struct, active_mm));  #ifdef CONFIG_MMU  	DEFINE(TASK_TINFO, offsetof(struct task_struct, thread.info));  #endif @@ -64,14 +60,6 @@ int main(void)  	/* bitfields are a bit difficult */  	DEFINE(PT_OFF_FORMATVEC, offsetof(struct pt_regs, pc) + 4); -	/* offsets into the irq_handler struct */ -	DEFINE(IRQ_HANDLER, offsetof(struct irq_node, handler)); -	DEFINE(IRQ_DEVID, offsetof(struct irq_node, dev_id)); -	DEFINE(IRQ_NEXT, offsetof(struct irq_node, next)); - -	/* offsets into the kernel_stat struct */ -	DEFINE(STAT_IRQ, offsetof(struct kernel_stat, irqs)); -  	/* offsets into the irq_cpustat_t struct */  	DEFINE(CPUSTAT_SOFTIRQ_PENDING, offsetof(irq_cpustat_t, __softirq_pending)); diff --git a/arch/m68k/kernel/ptrace.c b/arch/m68k/kernel/ptrace.c index 616e59752c29..0b252683cefb 100644 --- a/arch/m68k/kernel/ptrace.c +++ b/arch/m68k/kernel/ptrace.c @@ -156,55 +156,57 @@ void user_disable_single_step(struct task_struct *child)  	singlestep_disable(child);  } -long arch_ptrace(struct task_struct *child, long request, long addr, long data) +long arch_ptrace(struct task_struct *child, long request, +		 unsigned long addr, unsigned long data)  {  	unsigned long tmp;  	int i, ret = 0; +	int regno = addr >> 2; /* temporary hack. */ +	unsigned long __user *datap = (unsigned long __user *) data;  	switch (request) {  	/* read the word at location addr in the USER area. */  	case PTRACE_PEEKUSR:  		if (addr & 3)  			goto out_eio; -		addr >>= 2;	/* temporary hack. */ -		if (addr >= 0 && addr < 19) { -			tmp = get_reg(child, addr); -		} else if (addr >= 21 && addr < 49) { -			tmp = child->thread.fp[addr - 21]; +		if (regno >= 0 && regno < 19) { +			tmp = get_reg(child, regno); +		} else if (regno >= 21 && regno < 49) { +			tmp = child->thread.fp[regno - 21];  			/* Convert internal fpu reg representation  			 * into long double format  			 */ -			if (FPU_IS_EMU && (addr < 45) && !(addr % 3)) +			if (FPU_IS_EMU && (regno < 45) && !(regno % 3))  				tmp = ((tmp & 0xffff0000) << 15) |  				      ((tmp & 0x0000ffff) << 16);  		} else  			goto out_eio; -		ret = put_user(tmp, (unsigned long *)data); +		ret = put_user(tmp, datap);  		break; -	case PTRACE_POKEUSR:	/* write the word at location addr in the USER area */ +	case PTRACE_POKEUSR: +	/* write the word at location addr in the USER area */  		if (addr & 3)  			goto out_eio; -		addr >>= 2;	/* temporary hack. */ -		if (addr == PT_SR) { +		if (regno == PT_SR) {  			data &= SR_MASK;  			data |= get_reg(child, PT_SR) & ~SR_MASK;  		} -		if (addr >= 0 && addr < 19) { -			if (put_reg(child, addr, data)) +		if (regno >= 0 && regno < 19) { +			if (put_reg(child, regno, data))  				goto out_eio; -		} else if (addr >= 21 && addr < 48) { +		} else if (regno >= 21 && regno < 48) {  			/* Convert long double format  			 * into internal fpu reg representation  			 */ -			if (FPU_IS_EMU && (addr < 45) && !(addr % 3)) { -				data = (unsigned long)data << 15; +			if (FPU_IS_EMU && (regno < 45) && !(regno % 3)) { +				data <<= 15;  				data = (data & 0xffff0000) |  				       ((data & 0x0000ffff) >> 1);  			} -			child->thread.fp[addr - 21] = data; +			child->thread.fp[regno - 21] = data;  		} else  			goto out_eio;  		break; @@ -212,16 +214,16 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)  	case PTRACE_GETREGS:	/* Get all gp regs from the child. */  		for (i = 0; i < 19; i++) {  			tmp = get_reg(child, i); -			ret = put_user(tmp, (unsigned long *)data); +			ret = put_user(tmp, datap);  			if (ret)  				break; -			data += sizeof(long); +			datap++;  		}  		break;  	case PTRACE_SETREGS:	/* Set all gp regs in the child. */  		for (i = 0; i < 19; i++) { -			ret = get_user(tmp, (unsigned long *)data); +			ret = get_user(tmp, datap);  			if (ret)  				break;  			if (i == PT_SR) { @@ -229,25 +231,24 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)  				tmp |= get_reg(child, PT_SR) & ~SR_MASK;  			}  			put_reg(child, i, tmp); -			data += sizeof(long); +			datap++;  		}  		break;  	case PTRACE_GETFPREGS:	/* Get the child FPU state. */ -		if (copy_to_user((void *)data, &child->thread.fp, +		if (copy_to_user(datap, &child->thread.fp,  				 sizeof(struct user_m68kfp_struct)))  			ret = -EFAULT;  		break;  	case PTRACE_SETFPREGS:	/* Set the child FPU state. */ -		if (copy_from_user(&child->thread.fp, (void *)data, +		if (copy_from_user(&child->thread.fp, datap,  				   sizeof(struct user_m68kfp_struct)))  			ret = -EFAULT;  		break;  	case PTRACE_GET_THREAD_AREA: -		ret = put_user(task_thread_info(child)->tp_value, -			       (unsigned long __user *)data); +		ret = put_user(task_thread_info(child)->tp_value, datap);  		break;  	default: |