This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Introduce gdb_ptrace.h


Since I got only positive reactions, I've checked this in.  It's got a
few more tweaks.  At least it should suppress some compiler warnings
on Alpha OSF/1.

Committed,

Mark

Index: ChangeLog
from  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.

Index: gdb_ptrace.h
===================================================================
RCS file: gdb_ptrace.h
diff -N gdb_ptrace.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ gdb_ptrace.h 21 Aug 2004 08:54:01 -0000
@@ -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: infptrace.c
===================================================================
RCS file: /cvs/src/src/gdb/infptrace.c,v
retrieving revision 1.40
diff -u -p -r1.40 infptrace.c
--- infptrace.c 16 Aug 2004 15:27:54 -0000 1.40
+++ infptrace.c 21 Aug 2004 08:54:01 -0000
@@ -40,41 +40,7 @@
 #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, enu
 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)
Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.608
diff -u -p -r1.608 Makefile.in
--- Makefile.in 14 Aug 2004 20:40:14 -0000 1.608
+++ Makefile.in 21 Aug 2004 08:54:04 -0000
@@ -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) 
 	$(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) \


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]