X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fproc-api.c;h=2d4fe814c943f73ebeda2081e6ae13192679869e;hb=2fbce69179c6c47b68e24e3bca6c729fec4a918d;hp=8a28b0061f6e5d2f0d8d8a5f5a82f870503ec15c;hpb=fba45db2faf619e71856ee38ec63949c0ef6903e;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/proc-api.c b/gdb/proc-api.c index 8a28b0061f..2d4fe814c9 100644 --- a/gdb/proc-api.c +++ b/gdb/proc-api.c @@ -1,5 +1,7 @@ /* Machine independent support for SVR4 /proc (process file system) for GDB. - Copyright 1999 Free Software Foundation, Inc. + + Copyright 1999, 2000, 2001, 2003 Free Software Foundation, Inc. + Written by Michael Snyder at Cygnus Solutions. Based on work by Fred Fish, Stu Grossman, Geoff Noer, and others. @@ -27,6 +29,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "defs.h" #include "gdbcmd.h" +#include "completer.h" #if defined (NEW_PROC_API) #define _STRUCTURED_PROC 1 @@ -35,12 +38,14 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include +#ifdef HAVE_SYS_PROC_H #include /* for struct proc */ +#endif #ifdef HAVE_SYS_USER_H #include /* for struct user */ #endif #include /* for O_RDWR etc. */ -#include +#include "gdb_wait.h" #include "proc-utils.h" @@ -219,7 +224,9 @@ static struct trans ioctl_table[] = { int ioctl_with_trace (int fd, long opcode, void *ptr, char *file, int line) { - int i, ret, arg1; + int i = 0; + int ret; + int arg1; prepare_to_trace (); @@ -392,9 +399,13 @@ static struct trans rw_table[] = { #ifdef PCCSIG /* solaris */ { PCCSIG, "PCCSIG", "clear current signal" }, #endif +#ifdef PCDSTOP /* solaris */ { PCDSTOP, "PCDSTOP", "post stop request" }, +#endif { PCKILL, "PCKILL", "post a signal" }, +#ifdef PCNICE /* solaris */ { PCNICE, "PCNICE", "set nice priority" }, +#endif #ifdef PCREAD /* solaris */ { PCREAD, "PCREAD", "read from the address space" }, { PCWRITE, "PCWRITE", "write to the address space" }, @@ -414,7 +425,9 @@ static struct trans rw_table[] = { { PCSEXIT, "PCSEXIT", "set traced syscall exit set" }, { PCSFAULT, "PCSFAULT", "set traced fault set" }, { PCSFPREG, "PCSFPREG", "set floating point registers" }, +#ifdef PCSHOLD /* solaris */ { PCSHOLD, "PCSHOLD", "set signal mask" }, +#endif { PCSREG, "PCSREG", "set general registers" }, { PCSSIG, "PCSSIG", "set current signal" }, { PCSTOP, "PCSTOP", "post stop request and wait" }, @@ -428,7 +441,9 @@ static struct trans rw_table[] = { #ifdef PCTWSTOP /* solaris */ { PCTWSTOP, "PCTWSTOP", "wait for stop, with timeout arg" }, #endif +#ifdef PCUNKILL /* solaris */ { PCUNKILL, "PCUNKILL", "delete a pending signal" }, +#endif #ifdef PCUNSET /* solaris */ { PCUNSET, "PCUNSET", "unset modes" }, #endif @@ -446,12 +461,12 @@ write_with_trace (int fd, void *varg, size_t len, char *file, int line) { int i; int ret; - long *arg = (long *) varg; + procfs_ctl_t *arg = (procfs_ctl_t *) varg; prepare_to_trace (); if (procfs_trace) { - long opcode = arg[0]; + procfs_ctl_t opcode = arg[0]; for (i = 0; rw_table[i].name != NULL; i++) if (rw_table[i].value == opcode) break; @@ -475,7 +490,9 @@ write_with_trace (int fd, void *varg, size_t len, char *file, int line) case PCUNSET: #endif #ifdef PCRESET +#if PCRESET != PCUNSET case PCRESET: +#endif #endif fprintf (procfs_file ? procfs_file : stdout, "write (PCRESET, %s) %s\n", @@ -511,12 +528,14 @@ write_with_trace (int fd, void *varg, size_t len, char *file, int line) proc_prettyfprint_syscalls (procfs_file ? procfs_file : stdout, (sysset_t *) &arg[1], 0); break; +#ifdef PCSHOLD case PCSHOLD: fprintf (procfs_file ? procfs_file : stdout, "write (PCSHOLD) "); proc_prettyfprint_signalset (procfs_file ? procfs_file : stdout, (sigset_t *) &arg[1], 0); break; +#endif case PCSSIG: fprintf (procfs_file ? procfs_file : stdout, "write (PCSSIG) "); @@ -535,10 +554,14 @@ write_with_trace (int fd, void *varg, size_t len, char *file, int line) fprintf (procfs_file ? procfs_file : stdout, "clearFlt "); if (arg[1] & PRSTEP) fprintf (procfs_file ? procfs_file : stdout, "step "); +#ifdef PRSABORT if (arg[1] & PRSABORT) fprintf (procfs_file ? procfs_file : stdout, "syscallAbort "); +#endif +#ifdef PRSTOP if (arg[1] & PRSTOP) fprintf (procfs_file ? procfs_file : stdout, "stopReq "); +#endif fprintf (procfs_file ? procfs_file : stdout, "\n"); break; @@ -551,6 +574,7 @@ write_with_trace (int fd, void *varg, size_t len, char *file, int line) break; default: { +#ifdef BREAKPOINT static unsigned char break_insn[] = BREAKPOINT; if (len == sizeof (break_insn) && @@ -558,7 +582,9 @@ write_with_trace (int fd, void *varg, size_t len, char *file, int line) fprintf (procfs_file ? procfs_file : stdout, "write () \n", (unsigned long) lseek_offset); - else if (rw_table[i].name) + else +#endif + if (rw_table[i].name) fprintf (procfs_file ? procfs_file : stdout, "write (%s) %s\n", rw_table[i].name, @@ -769,12 +795,13 @@ _initialize_proc_api (void) "Set tracing for /proc api calls.\n", &setlist); add_show_from_set (c, &showlist); - c->function.sfunc = set_procfs_trace_cmd; + set_cmd_sfunc (c, set_procfs_trace_cmd); + set_cmd_completer (c, filename_completer); c = add_set_cmd ("procfs-file", no_class, var_filename, (char *) &procfs_filename, "Set filename for /proc tracefile.\n", &setlist); add_show_from_set (c, &showlist); - c->function.sfunc = set_procfs_file_cmd; + set_cmd_sfunc (c, set_procfs_file_cmd); }