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