+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
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
$(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) \
--- /dev/null
+/* 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 */
#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
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");
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)