From: callum.gibson_at_db.com
Date: Wed Mar 27 2002 - 00:11:57 GMT
Hi all,
A followup on my previous post in late Feb regarding ups on FreeBSD 4.5...
This is the patch you need to apply to a FreeBSD 4.5-RELEASE kernel for
ups to work/compile correctly. You can either use ups compiled on a
previous release (as I am doing) or recompile on 4.5 as this reportedly
works now too. Patch kindly supplied by Bakul Shah and Julian Elischer.
Some non-trivial work will need to be done on ups for it to work on
the 5.X series systems as it (ups) uses a deprecated interface. Bakul
has said he will try to work on this soon.
C
Callum Gibson callum.gibson_at_db.com
Global Markets IT, Deutsche Bank, Australia 61 2 9258 1620
### The opinions in this message are mine and not Deutsche's ###
Index: sys/ptrace.h
===================================================================
RCS file: /home/ncvs/src/sys/sys/ptrace.h,v
retrieving revision 1.10.2.1
diff -u -r1.10.2.1 ptrace.h
--- sys/ptrace.h 3 Oct 2001 06:55:43 -0000 1.10.2.1
+++ sys/ptrace.h 1 Mar 2002 21:52:57 -0000
@@ -40,7 +40,7 @@
#define PT_TRACE_ME 0 /* child declares it's being traced */
#define PT_READ_I 1 /* read word in child's I space */
#define PT_READ_D 2 /* read word in child's D space */
-/* was PT_READ_U 3 * read word in child's user structure */
+#define PT_READ_U 3 /* read word in child's user structure */
#define PT_WRITE_I 4 /* write word in child's I space */
#define PT_WRITE_D 5 /* write word in child's D space */
/* was PT_WRITE_U 6 * write word in child's user structure */
Index: kern/sys_process.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/sys_process.c,v
retrieving revision 1.51.2.3
diff -u -r1.51.2.3 sys_process.c
--- kern/sys_process.c 22 Jan 2002 17:22:59 -0000 1.51.2.3
+++ kern/sys_process.c 1 Mar 2002 23:45:18 -0000
@@ -257,6 +257,7 @@
case PT_READ_I:
case PT_READ_D:
+ case PT_READ_U:
case PT_WRITE_I:
case PT_WRITE_D:
case PT_CONTINUE:
@@ -413,6 +417,33 @@
}
return (error);
+ case PT_READ_U:
+ if ((uintptr_t)uap->addr > UPAGES * PAGE_SIZE -
+ sizeof(int)) {
+ return EFAULT;
+ }
+ if ((uintptr_t)uap->addr & (sizeof(int) - 1)) {
+ return EFAULT;
+ }
+ if (ptrace_read_u_check(p,(vm_offset_t) uap->addr,
+ sizeof(int))) {
+ return EFAULT;
+ }
+ error = 0;
+ PHOLD(p); /* user had damn well better be incore!*/
+ if (p->p_flag & P_INMEM) {
+ p->p_addr->u_kproc.kp_proc = *p;
+ fill_eproc (p, &p->p_addr->u_kproc.kp_eproc);
+ curp->p_retval[0] = *(int *)
+ ((uintptr_t)p->p_addr +
+ (uintptr_t)uap->addr);
+ } else {
+ curp->p_retval[0] = 0;
+ error = EFAULT;
+ }
+ PRELE(p);
+ return error;
+
case PT_KILL:
uap->data = SIGKILL;
goto sendsig; /* in PT_CONTINUE above */
This archive was generated by hypermail 2.1.4 : Thu May 23 2002 - 15:53:57 BST