PERFORCE change 77421 for review

Peter Wemm peter at FreeBSD.org
Tue May 24 22:44:02 GMT 2005


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

Change 77421 by peter at peter_melody on 2005/05/24 22:43:09

	Commit something that actually works

Affected files ...

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

Differences ...

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

@@ -469,6 +469,9 @@
 	int proctree_locked = 0;
 	lwpid_t tid = 0, *buf;
 	pid_t saved_pid = pid;
+#ifdef COMPAT_IA32
+	int wrap32 = 0;
+#endif
 
 	curp = td->td_proc;
 
@@ -544,6 +547,11 @@
 		tid = td2->td_tid;
 	}
 
+#ifdef COMPAT_IA32
+	if (td->td_proc->p_sysent == &ia32_freebsd_sysvec &&
+	    td2->td_proc->p_sysent == &ia32_freebsd_sysvec)
+		wrap32 = 1;
+#endif
 	/*
 	 * Permissions check
 	 */
@@ -849,42 +857,72 @@
 
 	case PT_SETREGS:
 		_PHOLD(p);
-		error = proc_write_regs(td2, addr);
+#ifdef COMPAT_IA32
+		if (wrap32)
+			error = proc_write_regs32(td2, addr);
+		else
+#endif
+			error = proc_write_regs(td2, addr);
 		_PRELE(p);
 		PROC_UNLOCK(p);
 		return (error);
 
 	case PT_GETREGS:
 		_PHOLD(p);
-		error = proc_read_regs(td2, addr);
+#ifdef COMPAT_IA32
+		if (wrap32)
+			error = proc_read_regs32(td2, addr);
+		else
+#endif
+			error = proc_read_regs(td2, addr);
 		_PRELE(p);
 		PROC_UNLOCK(p);
 		return (error);
 
 	case PT_SETFPREGS:
 		_PHOLD(p);
-		error = proc_write_fpregs(td2, addr);
+#ifdef COMPAT_IA32
+		if (wrap32)
+			error = proc_write_fpregs32(td2, addr);
+		else
+#endif
+			error = proc_write_fpregs(td2, addr);
 		_PRELE(p);
 		PROC_UNLOCK(p);
 		return (error);
 
 	case PT_GETFPREGS:
 		_PHOLD(p);
-		error = proc_read_fpregs(td2, addr);
+#ifdef COMPAT_IA32
+		if (wrap32)
+			error = proc_read_fpregs32(td2, addr);
+		else
+#endif
+			error = proc_read_fpregs(td2, addr);
 		_PRELE(p);
 		PROC_UNLOCK(p);
 		return (error);
 
 	case PT_SETDBREGS:
 		_PHOLD(p);
-		error = proc_write_dbregs(td2, addr);
+#ifdef COMPAT_IA32
+		if (wrap32)
+			error = proc_write_dbregs32(td2, addr);
+		else
+#endif
+			error = proc_write_dbregs(td2, addr);
 		_PRELE(p);
 		PROC_UNLOCK(p);
 		return (error);
 
 	case PT_GETDBREGS:
 		_PHOLD(p);
-		error = proc_read_dbregs(td2, addr);
+#ifdef COMPAT_IA32
+		if (wrap32)
+			error = proc_read_dbregs32(td2, addr);
+		else
+#endif
+			error = proc_read_dbregs(td2, addr);
 		_PRELE(p);
 		PROC_UNLOCK(p);
 		return (error);


More information about the p4-projects mailing list