PERFORCE change 103544 for review
Marcel Moolenaar
marcel at FreeBSD.org
Thu Aug 10 01:35:56 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=103544
Change 103544 by marcel at marcel_nfs on 2006/08/10 01:35:24
Use defaults when sv_reg, sv_fpreg and/or sv_dbreg are NULL
pointers. This allows most struct sysentvec definitions to
leave these undefined.
Affected files ...
.. //depot/projects/gdb/sys/kern/sys_process.c#12 edit
Differences ...
==== //depot/projects/gdb/sys/kern/sys_process.c#12 (text+ko) ====
@@ -61,10 +61,6 @@
#include <vm/vm_page.h>
#ifdef COMPAT_IA32
-#include <sys/procfs.h>
-#include <machine/fpu.h>
-#include <compat/ia32/ia32_reg.h>
-
extern struct sysentvec ia32_freebsd_sysvec;
struct ptrace_io_desc32 {
@@ -300,15 +296,18 @@
switch (uap->req) {
case PT_GETREGS:
case PT_SETREGS:
- bufsz = sv->sv_reg->rs_size;
+ bufsz = (sv->sv_reg != NULL) ? sv->sv_reg->rs_size :
+ sizeof(struct reg);
break;
case PT_GETFPREGS:
case PT_SETFPREGS:
- bufsz = sv->sv_fpreg->rs_size;
+ bufsz = (sv->sv_fpreg != NULL) ? sv->sv_fpreg->rs_size :
+ sizeof(struct fpreg);
break;
case PT_GETDBREGS:
case PT_SETDBREGS:
- bufsz = sv->sv_dbreg->rs_size;
+ bufsz = (sv->sv_dbreg != NULL) ? sv->sv_dbreg->rs_size :
+ sizeof(struct dbreg);
break;
case PT_GETXREGSIZE:
bufsz = sizeof(size_t);
@@ -396,6 +395,8 @@
struct thread *td2 = NULL;
struct ptrace_io_desc *piod = NULL;
struct ptrace_lwpinfo *pl;
+ ptregset_readf fread;
+ ptregset_writef fwrite;
int error, write, tmp, num;
int proctree_locked = 0;
lwpid_t *buf;
@@ -790,33 +791,45 @@
goto sendsig; /* in PT_CONTINUE above */
case PT_SETREGS:
- error = ptrace_write_regf(td2, addr, sv->sv_reg->rs_write);
+ fwrite = (sv->sv_reg != NULL) ? sv->sv_reg->rs_write :
+ (ptregset_writef)set_regs;
+ error = ptrace_write_regf(td2, addr, fwrite);
break;
case PT_GETREGS:
- error = ptrace_read_regf(td2, addr, sv->sv_reg->rs_read);
+ fread = (sv->sv_reg != NULL) ? sv->sv_reg->rs_read :
+ (ptregset_readf)fill_regs;
+ error = ptrace_read_regf(td2, addr, fread);
break;
case PT_SETFPREGS:
- error = ptrace_write_regf(td2, addr, sv->sv_fpreg->rs_write);
+ fwrite = (sv->sv_fpreg != NULL) ? sv->sv_fpreg->rs_write :
+ (ptregset_writef)set_fpregs;
+ error = ptrace_write_regf(td2, addr, fwrite);
break;
case PT_GETFPREGS:
- error = ptrace_read_regf(td2, addr, sv->sv_fpreg->rs_read);
+ fread = (sv->sv_fpreg != NULL) ? sv->sv_fpreg->rs_read :
+ (ptregset_readf)fill_fpregs;
+ error = ptrace_read_regf(td2, addr, fread);
break;
case PT_SETDBREGS:
- error = ptrace_write_regf(td2, addr, sv->sv_dbreg->rs_write);
+ fwrite = (sv->sv_dbreg != NULL) ? sv->sv_dbreg->rs_write :
+ (ptregset_writef)set_dbregs;
+ error = ptrace_write_regf(td2, addr, fwrite);
break;
case PT_GETDBREGS:
- error = ptrace_read_regf(td2, addr, sv->sv_dbreg->rs_read);
+ fread = (sv->sv_dbreg != NULL) ? sv->sv_dbreg->rs_read :
+ (ptregset_readf)fill_dbregs;
+ error = ptrace_read_regf(td2, addr, fread);
break;
case PT_SETXREGS:
if (data >= 0 && data < sv->sv_nxregs) {
- error = ptrace_write_regf(td2, addr,
- sv->sv_xregs[data].rs_write);
+ fwrite = sv->sv_xregs[data].rs_write;
+ error = ptrace_write_regf(td2, addr, fwrite);
} else
error = EINVAL;
break;
@@ -832,8 +845,8 @@
case PT_GETXREGS:
if (data >= 0 && data < sv->sv_nxregs) {
- error = ptrace_read_regf(td2, addr,
- sv->sv_xregs[data].rs_read);
+ fread = sv->sv_xregs[data].rs_read;
+ error = ptrace_read_regf(td2, addr, fread);
} else
error = EINVAL;
break;
More information about the p4-projects
mailing list