PERFORCE change 77422 for review

Peter Wemm peter at FreeBSD.org
Tue May 24 23:02:25 GMT 2005


http://perforce.freebsd.org/chv.cgi?CH=77422

Change 77422 by peter at peter_melody on 2005/05/24 23:01:26

	Hide the evil a bit better

Affected files ...

.. //depot/projects/hammer/sys/kern/sys_process.c#25 edit

Differences ...

==== //depot/projects/hammer/sys/kern/sys_process.c#25 (text+ko) ====

@@ -344,6 +344,15 @@
 };
 #endif
 
+#ifdef COMPAT_IA32
+#define	COPYIN(u, k, s)		wrap32 ? \
+	copyin(u, k ## 32, s ##32) : copyin(u, k, s)
+#define	COPYOUT(k, u, s)	wrap32 ? \
+	copyout(k ## 32, u, s ##32) : copyout(u, k, s)
+#else
+#define	COPYIN(u, k, s)		copyin(u, k, s)
+#define	COPYOUT(k, u, s)	copyout(k, u, s)
+#endif
 /*
  * MPSAFE
  */
@@ -383,28 +392,13 @@
 	case PT_LWPINFO:
 		break;
 	case PT_SETREGS:
-#ifdef COMPAT_IA32
-		if (wrap32)
-			error = copyin(uap->addr, &r.reg32, sizeof r.reg32);
-		else
-#endif
-			error = copyin(uap->addr, &r.reg, sizeof r.reg);
+		error = COPYIN(uap->addr, &r.reg, sizeof r.reg);
 		break;
 	case PT_SETFPREGS:
-#ifdef COMPAT_IA32
-		if (wrap32)
-			error = copyin(uap->addr, &r.fpreg32, sizeof r.fpreg32);
-		else
-#endif
-			error = copyin(uap->addr, &r.fpreg, sizeof r.fpreg);
+		error = COPYIN(uap->addr, &r.fpreg, sizeof r.fpreg);
 		break;
 	case PT_SETDBREGS:
-#ifdef COMPAT_IA32
-		if (wrap32)
-			error = copyin(uap->addr, &r.dbreg32, sizeof r.dbreg32);
-		else
-#endif
-			error = copyin(uap->addr, &r.dbreg, sizeof r.dbreg);
+		error = COPYIN(uap->addr, &r.dbreg, sizeof r.dbreg);
 		break;
 	case PT_IO:
 		error = copyin(uap->addr, &r.piod, sizeof r.piod);
@@ -425,28 +419,13 @@
 		(void)copyout(&r.piod, uap->addr, sizeof r.piod);
 		break;
 	case PT_GETREGS:
-#ifdef COMPAT_IA32
-		if (wrap32)
-			error = copyout(&r.reg32, uap->addr, sizeof r.reg32);
-		else
-#endif
-			error = copyout(&r.reg, uap->addr, sizeof r.reg);
+		error = COPYOUT(&r.reg, uap->addr, sizeof r.reg);
 		break;
 	case PT_GETFPREGS:
-#ifdef COMPAT_IA32
-		if (wrap32)
-			error = copyout(&r.fpreg32, uap->addr, sizeof r.fpreg32);
-		else
-#endif
-			error = copyout(&r.fpreg, uap->addr, sizeof r.fpreg);
+		error = COPYOUT(&r.fpreg, uap->addr, sizeof r.fpreg);
 		break;
 	case PT_GETDBREGS:
-#ifdef COMPAT_IA32
-		if (wrap32)
-			error = copyout(&r.dbreg32, uap->addr, sizeof r.dbreg32);
-		else
-#endif
-			error = copyout(&r.dbreg, uap->addr, sizeof r.dbreg);
+		error = COPYOUT(&r.dbreg, uap->addr, sizeof r.dbreg);
 		break;
 	case PT_LWPINFO:
 		error = copyout(&r.pl, uap->addr, uap->data);
@@ -455,7 +434,19 @@
 
 	return (error);
 }
+#undef COPYIN
+#undef COPYOUT
 
+#ifdef COMPAT_IA32
+#define	PROC_READ(w, t, a)	wrap32 ? \
+	 proc_read_ ## w ## 32(t, a) : proc_read_ ## w (t, a)
+#define	PROC_WRITE(w, t, a)	wrap32 ? \
+	proc_write_ ## w ## 32(t, a) : proc_write_ ## w (t, a)
+#else
+#define	PROC_READ(w, t, a)	proc_read_ ## w (t, a)
+#define	PROC_WRITE(w, t, a)	proc_write_ ## w (t, a)
+#endif
+
 int
 kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data)
 {
@@ -857,72 +848,42 @@
 
 	case PT_SETREGS:
 		_PHOLD(p);
-#ifdef COMPAT_IA32
-		if (wrap32)
-			error = proc_write_regs32(td2, addr);
-		else
-#endif
-			error = proc_write_regs(td2, addr);
+		error = PROC_WRITE(regs, td2, addr);
 		_PRELE(p);
 		PROC_UNLOCK(p);
 		return (error);
 
 	case PT_GETREGS:
 		_PHOLD(p);
-#ifdef COMPAT_IA32
-		if (wrap32)
-			error = proc_read_regs32(td2, addr);
-		else
-#endif
-			error = proc_read_regs(td2, addr);
+		error = PROC_READ(regs, td2, addr);
 		_PRELE(p);
 		PROC_UNLOCK(p);
 		return (error);
 
 	case PT_SETFPREGS:
 		_PHOLD(p);
-#ifdef COMPAT_IA32
-		if (wrap32)
-			error = proc_write_fpregs32(td2, addr);
-		else
-#endif
-			error = proc_write_fpregs(td2, addr);
+		error = PROC_WRITE(fpregs, td2, addr);
 		_PRELE(p);
 		PROC_UNLOCK(p);
 		return (error);
 
 	case PT_GETFPREGS:
 		_PHOLD(p);
-#ifdef COMPAT_IA32
-		if (wrap32)
-			error = proc_read_fpregs32(td2, addr);
-		else
-#endif
-			error = proc_read_fpregs(td2, addr);
+		error = PROC_READ(fpregs, td2, addr);
 		_PRELE(p);
 		PROC_UNLOCK(p);
 		return (error);
 
 	case PT_SETDBREGS:
 		_PHOLD(p);
-#ifdef COMPAT_IA32
-		if (wrap32)
-			error = proc_write_dbregs32(td2, addr);
-		else
-#endif
-			error = proc_write_dbregs(td2, addr);
+		error = PROC_WRITE(dbregs, td2, addr);
 		_PRELE(p);
 		PROC_UNLOCK(p);
 		return (error);
 
 	case PT_GETDBREGS:
 		_PHOLD(p);
-#ifdef COMPAT_IA32
-		if (wrap32)
-			error = proc_read_dbregs32(td2, addr);
-		else
-#endif
-			error = proc_read_dbregs(td2, addr);
+		error = PROC_READ(dbregs, td2, addr);
 		_PRELE(p);
 		PROC_UNLOCK(p);
 		return (error);
@@ -1005,6 +966,8 @@
 		sx_xunlock(&proctree_lock);
 	return (error);
 }
+#undef PROC_READ
+#undef PROC_WRITE
 
 /*
  * Stop a process because of a debugging event;


More information about the p4-projects mailing list