* gdb_ptrace.h: New file.
authorMark Kettenis <kettenis@gnu.org>
Sat, 21 Aug 2004 08:56:38 +0000 (08:56 +0000)
committerMark Kettenis <kettenis@gnu.org>
Sat, 21 Aug 2004 08:56:38 +0000 (08:56 +0000)
* infptrace.c: Include "gdb_ptrace.h" instead of <ptrace.h> or
<sys/ptrace.h>.
(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
gdb/Makefile.in
gdb/gdb_ptrace.h [new file with mode: 0644]
gdb/infptrace.c

index 5863801..0d1ecee 100644 (file)
@@ -1,3 +1,15 @@
+2004-08-21  Mark Kettenis  <kettenis@gnu.org>
+
+       * gdb_ptrace.h: New file.
+       * infptrace.c: Include "gdb_ptrace.h" instead of <ptrace.h> or
+       <sys/ptrace.h>.
+       (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  <kettenis@gnu.org>
 
        * inferior.h (PTRACE_ARG3_TYPE): Define as PTRACE_TYPE_ARG3
index 62b7ec6..8fd5731 100644 (file)
@@ -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 (file)
index 0000000..a5f9945
--- /dev/null
@@ -0,0 +1,114 @@
+/* Portable <sys/ptrace.h>
+
+   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 <sys/ptrace.h> 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 <sys/ptrace.h> with symbolic
+   constants; the ptrace(2) prototype can be found in <unistd.h>.
+   Fortunately all systems use the same numerical constants for the
+   common ptrace requests.  */
+
+#ifdef HAVE_PTRACE_H
+# include <ptrace.h>
+#elif defined(HAVE_SYS_PTRACE_H)
+# include <sys/ptrace.h>
+#endif
+
+/* No need to include <unistd.h> 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 */
index f95bf13..fb4629a 100644 (file)
 #include <signal.h>
 #include <sys/ioctl.h>
 
-#ifdef HAVE_PTRACE_H
-#include <ptrace.h>
-#else
-#ifdef HAVE_SYS_PTRACE_H
-#include <sys/ptrace.h>
-#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)