From 11003ae34025182d5fb4bfedf2fdc2427c4c54a1 Mon Sep 17 00:00:00 2001 From: Mark Kettenis Date: Sat, 21 Aug 2004 08:56:38 +0000 Subject: [PATCH] * gdb_ptrace.h: New file. * infptrace.c: Include "gdb_ptrace.h" instead of or . (PT_READ_I, PT_READ_D, PT_READ_U, PT_WRITE_I, PT_WRITE_D) (PT_WRITE_U, PT_CONTINUE, PT_STEP, PT_KILL): Remove defines. (attach): Don't define PT_ATTACH. (detach): Don't define PT_DETACH. * Makefile.in (gdb_ptrace_h): New variable. (infptrace.o): Update dependencies. --- gdb/ChangeLog | 12 +++++ gdb/Makefile.in | 3 +- gdb/gdb_ptrace.h | 114 +++++++++++++++++++++++++++++++++++++++++++++++ gdb/infptrace.c | 50 ++------------------- 4 files changed, 131 insertions(+), 48 deletions(-) create mode 100644 gdb/gdb_ptrace.h diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5863801029..0d1ecee4a0 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +2004-08-21 Mark Kettenis + + * gdb_ptrace.h: New file. + * infptrace.c: Include "gdb_ptrace.h" instead of or + . + (PT_READ_I, PT_READ_D, PT_READ_U, PT_WRITE_I, PT_WRITE_D) + (PT_WRITE_U, PT_CONTINUE, PT_STEP, PT_KILL): Remove defines. + (attach): Don't define PT_ATTACH. + (detach): Don't define PT_DETACH. + * Makefile.in (gdb_ptrace_h): New variable. + (infptrace.o): Update dependencies. + 2004-08-16 Mark Kettenis * inferior.h (PTRACE_ARG3_TYPE): Define as PTRACE_TYPE_ARG3 diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 62b7ec6492..8fd5731d58 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -684,6 +684,7 @@ gdb_h = gdb.h gdb_locale_h = gdb_locale.h gdb_obstack_h = gdb_obstack.h $(obstack_h) gdb_proc_service_h = gdb_proc_service.h $(gregset_h) +gdb_ptrace_h = gdb_ptrace.h gdb_regex_h = gdb_regex.h $(xregex_h) gdb_stabs_h = gdb-stabs.h gdb_stat_h = gdb_stat.h @@ -2050,7 +2051,7 @@ inflow.o: inflow.c $(defs_h) $(frame_h) $(inferior_h) $(command_h) \ $(inflow_h) infptrace.o: infptrace.c $(defs_h) $(frame_h) $(inferior_h) $(target_h) \ $(gdb_string_h) $(regcache_h) $(gdb_wait_h) $(command_h) \ - $(gdb_dirent_h) $(gdbcore_h) $(gdb_stat_h) + $(gdb_dirent_h) $(gdb_ptrace_h) $(gdbcore_h) $(gdb_stat_h) infrun.o: infrun.c $(defs_h) $(gdb_string_h) $(symtab_h) $(frame_h) \ $(inferior_h) $(breakpoint_h) $(gdb_wait_h) $(gdbcore_h) $(gdbcmd_h) \ $(cli_script_h) $(target_h) $(gdbthread_h) $(annotate_h) \ diff --git a/gdb/gdb_ptrace.h b/gdb/gdb_ptrace.h new file mode 100644 index 0000000000..a5f9945fde --- /dev/null +++ b/gdb/gdb_ptrace.h @@ -0,0 +1,114 @@ +/* Portable + + Copyright 2004 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 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., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef GDB_PTRACE_H +#define GDB_PTRACE_H + +/* The header was introduced with 4.4BSD, and provided + the PT_* symbolic constants for the ptrace(2) request numbers. The + ptrace(2) prototype was added later to the same header on BSD. + SunOS and Linux have slightly different symbolic names for the + constants that start with PTRACE_*. System V still doesn't have + (and probably never will have) a with symbolic + constants; the ptrace(2) prototype can be found in . + Fortunately all systems use the same numerical constants for the + common ptrace requests. */ + +#ifdef HAVE_PTRACE_H +# include +#elif defined(HAVE_SYS_PTRACE_H) +# include +#endif + +/* No need to include since it's already included by + "defs.h". */ + +#ifndef PT_READ_I +# define PT_READ_I 1 /* Read word in child's I space. */ +#endif + +#ifndef PT_READ_D +# define PT_READ_D 2 /* Read word in child's D space. */ +#endif + +#ifndef PT_READ_U +# define PT_READ_U 3 /* Read word in child's U space. */ +#endif + +#ifndef PT_WRITE_I +# define PT_WRITE_I 4 /* Write word in child's I space. */ +#endif + +#ifndef PT_WRITE_D +# define PT_WRITE_D 5 /* Write word in child's D space. */ +#endif + +#ifndef PT_WRITE_U +# define PT_WRITE_U 6 /* Write word in child's U space. */ +#endif + +/* HP-UX doesn't define PT_CONTINUE and PT_STEP. Instead of those two + ptrace requests, it has PT_CONTIN, PT_CONTIN1, PT_SINGLE and + PT_SINGLE1. PT_CONTIN1 and PT_SINGLE1 preserve pending signals, + which apparently is what is wanted by the HP-UX native code. */ + +#ifndef PT_CONTINUE +# ifdef PT_CONTIN1 +# define PT_CONTINUE PT_CONTIN1 +# else +# define PT_CONTINUE 7 /* Continue the child. */ +# endif +#endif + +#ifndef PT_KILL +# define PT_KILL 8 /* Kill the child process. */ +#endif + +#ifndef PT_STEP +# ifdef PT_SINGLE1 +# define PT_STEP PT_SINGLE1 +# else +# define PT_STEP 9 /* Single step the child. */ +# endif +#endif + +/* Not all systems support attaching and detaching. */ + +#ifndef PT_ATTCH +# ifdef PTRACE_DETACH +# define PT_ATTACH PTRACE_ATTACH +# endif +#endif + +#ifndef PT_DETACH +# ifdef PTRACE_DETACH +# define PT_DETACH PTRACE_DETACH +# endif +#endif + +/* Some systems, in particular DEC OSF/1, Digital Unix, Compaq Tru64 + or whatever it's called these days, don't provide a prototype for + ptrace. Provide one to silence compiler warnings. */ +#ifndef HAVE_DECL_PTRACE +extern PTRACE_TYPE_RET ptrace(); +#endif + +#endif /* gdb_ptrace.h */ diff --git a/gdb/infptrace.c b/gdb/infptrace.c index f95bf139dc..fb4629a7ce 100644 --- a/gdb/infptrace.c +++ b/gdb/infptrace.c @@ -40,41 +40,7 @@ #include #include -#ifdef HAVE_PTRACE_H -#include -#else -#ifdef HAVE_SYS_PTRACE_H -#include -#endif -#endif - -#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 /* Set flag for single stepping */ -#endif -#if !defined (PT_KILL) -#define PT_KILL 8 /* Send child a SIGKILL signal */ -#endif +#include "gdb_ptrace.h" #include "gdbcore.h" #ifdef HAVE_SYS_FILE_H @@ -272,13 +238,8 @@ child_resume (ptid_t ptid, int step, enum target_signal signal) int attach (int pid) { - errno = 0; -#ifndef PT_ATTACH -#ifdef PTRACE_ATTACH -#define PT_ATTACH PTRACE_ATTACH -#endif -#endif #ifdef PT_ATTACH + errno = 0; ptrace (PT_ATTACH, pid, (PTRACE_TYPE_ARG3) 0, 0); if (errno) perror_with_name ("ptrace"); @@ -296,13 +257,8 @@ attach (int pid) void detach (int signal) { - errno = 0; -#ifndef PT_DETACH -#ifdef PTRACE_DETACH -#define PT_DETACH PTRACE_DETACH -#endif -#endif #ifdef PT_DETACH + errno = 0; ptrace (PT_DETACH, PIDGET (inferior_ptid), (PTRACE_TYPE_ARG3) 1, signal); if (errno) -- 2.34.1