From: Fred Fish Date: Thu, 4 Jan 1996 21:09:59 +0000 (+0000) Subject: Changes to hexdump "struct user" for child process on some configurations X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7531f36e8e7f241cdf8d03ceb99af99f1a784ec0;p=binutils-gdb.git Changes to hexdump "struct user" for child process on some configurations that use ptrace(). This is not as useful as doing a full dump in a human readable format, but is better than nothing when you are trying to verify what is actually in the user struct. * infptrace.c (udot_info): New function. (PT_*): Define each individually if that one is not defined. Update copyright to 1996. * rs6000-nat.c (kernel_u_size): New function Include for "struct user" Update copyright to 1996. * alpha-nat.c (kernel_u_size): New function. Include for "struct user" Update copyright to 1996. * sparc-nat.c (kernel_u_size): New function. Include for "struct user" Update copyright to 1996. * i386b-nat.c (kernel_u_size): New function. Update copyright to 1996. * i386v-nat.c (kernel_u_size): New function. Update copyright to 1996. * config/i386/nm-fbsd.h (KERNEL_U_SIZE): Define. (kernel_u_size): Declare. Update copyright to 1996. * config/i386/nm-linux.h (KERNEL_U_SIZE): Define. (kernel_u_size): Declare. Update copyright to 1996. * config/sparc/nm-sun4os4.h (KERNEL_U_SIZE): Define. (kernel_u_size): Declare. Update copyright to 1996. * config/alpha/nm-osf2.h (KERNEL_U_SIZE): Define. (kernel_u_size): Declare. Update copyright to 1996. * config/rs6000/nm-rs6000.h (KERNEL_U_SIZE): Define. (kernel_u_size): Declare. Update copyright to 1996. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 97b776977a2..dc2ab8f1be4 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,37 @@ +Thu Jan 4 10:44:17 1996 Fred Fish + + * infptrace.c (udot_info): New function. + (PT_*): Define each individually if that one is not defined. + Update copyright to 1996. + * rs6000-nat.c (kernel_u_size): New function + Include for "struct user" + Update copyright to 1996. + * alpha-nat.c (kernel_u_size): New function. + Include for "struct user" + Update copyright to 1996. + * sparc-nat.c (kernel_u_size): New function. + Include for "struct user" + Update copyright to 1996. + * i386b-nat.c (kernel_u_size): New function. + Update copyright to 1996. + * i386v-nat.c (kernel_u_size): New function. + Update copyright to 1996. + * config/i386/nm-fbsd.h (KERNEL_U_SIZE): Define. + (kernel_u_size): Declare. + Update copyright to 1996. + * config/i386/nm-linux.h (KERNEL_U_SIZE): Define. + (kernel_u_size): Declare. + Update copyright to 1996. + * config/sparc/nm-sun4os4.h (KERNEL_U_SIZE): Define. + (kernel_u_size): Declare. + Update copyright to 1996. + * config/alpha/nm-osf2.h (KERNEL_U_SIZE): Define. + (kernel_u_size): Declare. + Update copyright to 1996. + * config/rs6000/nm-rs6000.h (KERNEL_U_SIZE): Define. + (kernel_u_size): Declare. + Update copyright to 1996. + Thu Jan 4 11:00:01 1996 steve chamberlain * mdebugread.c (mylookup_symbol): enum namespace becomes diff --git a/gdb/alpha-nat.c b/gdb/alpha-nat.c index 874a43e4c3e..6e05781f8d2 100644 --- a/gdb/alpha-nat.c +++ b/gdb/alpha-nat.c @@ -1,5 +1,5 @@ /* Low level Alpha interface, for GDB when running native. - Copyright 1993, 1995 Free Software Foundation, Inc. + Copyright 1993, 1995, 1996 Free Software Foundation, Inc. This file is part of GDB. @@ -23,6 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "target.h" #include #include +#include /* Size of elements in jmpbuf */ @@ -143,6 +144,12 @@ register_addr (regno, blockend) return REGISTER_PTRACE_ADDR (regno); } +int +kernel_u_size () +{ + return (sizeof (struct user)); +} + #ifdef USE_PROC_FS #include diff --git a/gdb/config/sparc/nm-sun4os4.h b/gdb/config/sparc/nm-sun4os4.h index d34b733c8f7..1b7fabb60c4 100644 --- a/gdb/config/sparc/nm-sun4os4.h +++ b/gdb/config/sparc/nm-sun4os4.h @@ -1,5 +1,5 @@ /* Macro definitions for running gdb on a Sun 4 running sunos 4. - Copyright (C) 1989, 1992, Free Software Foundation, Inc. + Copyright (C) 1989, 1992, 1996 Free Software Foundation, Inc. This file is part of GDB. @@ -25,3 +25,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #define FETCH_INFERIOR_REGISTERS +/* Return sizeof user struct to callers in less machine dependent routines */ + +#define KERNEL_U_SIZE kernel_u_size() +extern int kernel_u_size PARAMS ((void)); diff --git a/gdb/i386b-nat.c b/gdb/i386b-nat.c index da82f07fff4..2e235aa9a50 100644 --- a/gdb/i386b-nat.c +++ b/gdb/i386b-nat.c @@ -1,5 +1,5 @@ /* Native-dependent code for BSD Unix running on i386's, for GDB. - Copyright 1988, 1989, 1991, 1992, 1994 Free Software Foundation, Inc. + Copyright 1988, 1989, 1991, 1992, 1994, 1996 Free Software Foundation, Inc. This file is part of GDB. @@ -222,4 +222,10 @@ i386_float_info () print_387_status (0, (struct env387 *)buf); } +int +kernel_u_size () +{ + return (sizeof (struct user)); +} + #endif diff --git a/gdb/i386v-nat.c b/gdb/i386v-nat.c index e2ca8326c86..38468a90277 100644 --- a/gdb/i386v-nat.c +++ b/gdb/i386v-nat.c @@ -1,5 +1,5 @@ /* Intel 386 native support for SYSV systems (pre-SVR4). - Copyright (C) 1988, 1989, 1991, 1992, 1994 Free Software Foundation, Inc. + Copyright (C) 1988, 1989, 1991, 1992, 1994, 1996 Free Software Foundation, Inc. This file is part of GDB. @@ -93,6 +93,12 @@ i386_register_u_addr (blockend, regnum) } +int +kernel_u_size () +{ + return (sizeof (struct user)); +} + #ifdef TARGET_HAS_HARDWARE_WATCHPOINTS #if !defined (offsetof) diff --git a/gdb/infptrace.c b/gdb/infptrace.c index 0013e91b97c..9f6e7fb2d78 100644 --- a/gdb/infptrace.c +++ b/gdb/infptrace.c @@ -1,6 +1,5 @@ /* Low level Unix child interface to ptrace, for GDB when running under Unix. - Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995 - Free Software Foundation, Inc. + Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. This file is part of GDB. @@ -16,7 +15,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "defs.h" #include "frame.h" @@ -41,20 +40,33 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #endif #endif /* NO_PTRACE_H */ -#if !defined (PT_KILL) -#define PT_KILL 8 +#if !defined (PT_READ_I) +#define PT_READ_I 1 /* Read word from text space */ +#endif +#if !defined (PT_READ_D) +#define PT_READ_D 2 /* Read word from data space */ +#endif +#if !defined (PT_READ_U) +#define PT_READ_U 3 /* Read word from kernel user struct */ +#endif +#if !defined (PT_WRITE_I) +#define PT_WRITE_I 4 /* Write word to text space */ +#endif +#if !defined (PT_WRITE_D) +#define PT_WRITE_D 5 /* Write word to data space */ +#endif +#if !defined (PT_WRITE_U) +#define PT_WRITE_U 6 /* Write word to kernel user struct */ +#endif +#if !defined (PT_CONTINUE) +#define PT_CONTINUE 7 /* Continue after signal */ #endif - #if !defined (PT_STEP) -#define PT_STEP 9 -#define PT_CONTINUE 7 -#define PT_READ_U 3 -#define PT_WRITE_U 6 -#define PT_READ_I 1 -#define PT_READ_D 2 -#define PT_WRITE_I 4 -#define PT_WRITE_D 5 -#endif /* No PT_STEP. */ +#define PT_STEP 9 /* Set flag for single stepping */ +#endif +#if !defined (PT_KILL) +#define PT_KILL 8 /* Send child a SIGKILL signal */ +#endif #ifndef PT_ATTACH #define PT_ATTACH PTRACE_ATTACH @@ -460,4 +472,59 @@ child_xfer_memory (memaddr, myaddr, len, write, target) } return len; } + + +static void +udot_info () +{ + int udot_off; /* Offset into user struct */ + int udot_val; /* Value from user struct at udot_off */ + char mess[128]; /* For messages */ + + if (!target_has_execution) + { + error ("The program is not being run."); + } + +#if !defined (KERNEL_U_SIZE) + + /* Adding support for this command is easy. Typically you just add a + routine, called "kernel_u_size" that returns the size of the user + struct, to the appropriate *-nat.c file and then add to the native + config file "#define KERNEL_U_SIZE kernel_u_size()" */ + error ("Don't know how large ``struct user'' is in this version of gdb."); + +#else + + for (udot_off = 0; udot_off < KERNEL_U_SIZE; udot_off += sizeof (udot_val)) + { + if ((udot_off % 24) == 0) + { + if (udot_off > 0) + { + printf_filtered ("\n"); + } + printf_filtered ("%04x:", udot_off); + } + udot_val = ptrace (PT_READ_U, inferior_pid, (PTRACE_ARG3_TYPE) udot_off, 0); + if (errno != 0) + { + sprintf (mess, "\nreading user struct at offset 0x%x", udot_off); + perror_with_name (mess); + } + /* Avoid using nonportable (?) "*" in print specs */ + printf_filtered (sizeof (int) == 4 ? " 0x%08x" : " 0x%16x", udot_val); + } + printf_filtered ("\n"); + +#endif +} + +void +_initialize_infptrace () +{ + add_info ("udot", udot_info, + "Print contents of kernel ``struct user'' for current child."); + +} #endif /* !defined (CHILD_XFER_MEMORY). */ diff --git a/gdb/rs6000-nat.c b/gdb/rs6000-nat.c index 51ddf44e2dc..436fa04793c 100644 --- a/gdb/rs6000-nat.c +++ b/gdb/rs6000-nat.c @@ -1,5 +1,5 @@ /* IBM RS/6000 native-dependent code for GDB, the GNU debugger. - Copyright 1986, 1987, 1989, 1991, 1992, 1994, 1995 + Copyright 1986, 1987, 1989, 1991, 1992, 1994, 1995, 1996 Free Software Foundation, Inc. This file is part of GDB. @@ -787,3 +787,10 @@ xcoff_relocate_core (target) breakpoint_re_set (); do_cleanups (old); } + +int +kernel_u_size () +{ + return (sizeof (struct user)); +} + diff --git a/gdb/sparc-nat.c b/gdb/sparc-nat.c index 981cb9ea3c1..7b072cf8f46 100644 --- a/gdb/sparc-nat.c +++ b/gdb/sparc-nat.c @@ -1,5 +1,5 @@ /* Functions specific to running gdb native on a SPARC running SunOS4. - Copyright 1989, 1992, 1993, 1994 Free Software Foundation, Inc. + Copyright 1989, 1992, 1993, 1994, 1996 Free Software Foundation, Inc. This file is part of GDB. @@ -25,6 +25,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include +#include /* We don't store all registers immediately when requested, since they get sent over in large chunks anyway. Instead, we accumulate most @@ -295,3 +296,8 @@ fetch_core_registers (core_reg_sect, core_reg_size, which, ignore) } } +int +kernel_u_size () +{ + return (sizeof (struct user)); +}