diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 28ffae7207..514f578a28 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,25 @@ +Fri Jan 21 08:20:18 1994 Jeffrey A. Law (law@snake.cs.utah.edu) + + * infptrace.c (child_xfer_memory): Only use if CHILD_XFER_MEMORY + is not defined. + + * hppab-nat.c (call_ptrace): Delete redundant function. + (kill_inferior, attach, detach, child_resume): Likewise. + (child_xfer_memory): Likewise. + + * hppah-nat.c (call_ptrace): Delete redundant function. + (kill_inferior, attach, detach, child_resume): Likewise. + + * config/pa/hppabsd.mh (NATDEPFILES): Add infptrace.o. + + * config/pa/hppahpux.mh (NATDEPFILES): Add infptrace.o. + + * config/pa/nm-hppab.h (FETCH_INFERIOR_REGISTERS): Define. + + * config/pa/nm-hppah.h (FETCH_INFERIOR_REGISTERS): define. + (CHILD_XFER_MEMORY): Define. + (PT_*): Define so that generic infptrace.c code can be used. + Fri Jan 21 09:23:33 1994 Jim Kingdon (kingdon@lioth.cygnus.com) * xcoffread.c (xcoff_symfile_read): Make second parameter a diff --git a/gdb/hppab-nat.c b/gdb/hppab-nat.c index dc63120c63..990c952660 100644 --- a/gdb/hppab-nat.c +++ b/gdb/hppab-nat.c @@ -27,27 +27,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "target.h" #include -#ifndef PT_ATTACH -#define PT_ATTACH PTRACE_ATTACH -#endif - -#ifndef PT_DETACH -#define PT_DETACH PTRACE_DETACH -#endif - -/* This function simply calls ptrace with the given arguments. - It exists so that all calls to ptrace are isolated in this - machine-dependent file. */ - -int -call_ptrace (request, pid, addr, data) - int request, pid; - PTRACE_ARG3_TYPE addr; - int data; -{ - return ptrace (request, pid, addr, data, 0); -} - /* Use an extra level of indirection for ptrace calls. This lets us breakpoint usefully on call_ptrace. It also allows us to pass an extra argument to ptrace without @@ -55,49 +34,6 @@ call_ptrace (request, pid, addr, data) #define ptrace call_ptrace -void -kill_inferior () -{ - if (inferior_pid == 0) - return; - ptrace (PT_KILL, inferior_pid, (PTRACE_ARG3_TYPE) 0, 0); - wait ((int *)0); - target_mourn_inferior (); -} - -#ifdef ATTACH_DETACH - -/* Start debugging the process whose number is PID. */ -int -attach (pid) - int pid; -{ - errno = 0; - ptrace (PT_ATTACH, pid, (PTRACE_ARG3_TYPE) 0, 0); - if (errno) - perror_with_name ("ptrace"); - attach_flag = 1; - return pid; -} - -/* Stop debugging the process whose number is PID - and continue it with signal number SIGNAL. - SIGNAL = 0 means just continue it. */ - -void -detach (signal) - int signal; -{ - errno = 0; - ptrace (PT_DETACH, inferior_pid, (PTRACE_ARG3_TYPE) 1, signal); - if (errno) - perror_with_name ("ptrace"); - attach_flag = 0; -} -#endif /* ATTACH_DETACH */ - - - #if !defined (offsetof) #define offsetof(TYPE, MEMBER) ((unsigned long) &((TYPE *)0)->MEMBER) #endif @@ -204,123 +140,3 @@ store_inferior_registers (regno) return; } -/* Resume execution of process PID. - If STEP is nonzero, single-step it. - If SIGNAL is nonzero, give it that signal. */ - -void -child_resume (pid, step, signal) - int pid; - int step; - enum target_signal signal; -{ - errno = 0; - - if (pid == -1) - pid = inferior_pid; - - /* An address of (PTRACE_ARG3_TYPE) 1 tells ptrace to continue from where - it was. (If GDB wanted it to start some other way, we have already - written a new PC value to the child.) */ - - if (step) - ptrace (PT_STEP, pid, (PTRACE_ARG3_TYPE) 1, signal); - else - ptrace (PT_CONTINUE, pid, (PTRACE_ARG3_TYPE) 1, signal); - - if (errno) - perror_with_name ("ptrace"); -} - -/* NOTE! I tried using PTRACE_READDATA, etc., to read and write memory - in the NEW_SUN_PTRACE case. - It ought to be straightforward. But it appears that writing did - not write the data that I specified. I cannot understand where - it got the data that it actually did write. */ - -/* Copy LEN bytes to or from inferior's memory starting at MEMADDR - to debugger memory starting at MYADDR. Copy to inferior if - WRITE is nonzero. - - Returns the length copied, which is either the LEN argument or zero. - This xfer function does not do partial moves, since child_ops - doesn't allow memory operations to cross below us in the target stack - anyway. */ - -int -child_xfer_memory (memaddr, myaddr, len, write, target) - CORE_ADDR memaddr; - char *myaddr; - int len; - int write; - struct target_ops *target; /* ignored */ -{ - register int i; - /* Round starting address down to longword boundary. */ - register CORE_ADDR addr = memaddr & - sizeof (int); - /* Round ending address up; get number of longwords that makes. */ - register int count - = (((memaddr + len) - addr) + sizeof (int) - 1) / sizeof (int); - /* Allocate buffer of that many longwords. */ - register int *buffer = (int *) alloca (count * sizeof (int)); - - if (write) - { - /* Fill start and end extra bytes of buffer with existing memory data. */ - - if (addr != memaddr || len < (int)sizeof (int)) { - /* Need part of initial word -- fetch it. */ - buffer[0] = ptrace (PT_READ_I, inferior_pid, (PTRACE_ARG3_TYPE) addr, - 0); - } - - if (count > 1) /* FIXME, avoid if even boundary */ - { - buffer[count - 1] - = ptrace (PT_READ_I, inferior_pid, - (PTRACE_ARG3_TYPE) (addr + (count - 1) * sizeof (int)), - 0); - } - - /* Copy data to be written over corresponding part of buffer */ - - memcpy ((char *) buffer + (memaddr & (sizeof (int) - 1)), myaddr, len); - - /* Write the entire buffer. */ - - for (i = 0; i < count; i++, addr += sizeof (int)) - { - errno = 0; - ptrace (PT_WRITE_D, inferior_pid, (PTRACE_ARG3_TYPE) addr, - buffer[i]); - if (errno) - { - /* Using the appropriate one (I or D) is necessary for - Gould NP1, at least. */ - errno = 0; - ptrace (PT_WRITE_I, inferior_pid, (PTRACE_ARG3_TYPE) addr, - buffer[i]); - } - if (errno) - return 0; - } - } - else - { - /* Read all the longwords */ - for (i = 0; i < count; i++, addr += sizeof (int)) - { - errno = 0; - buffer[i] = ptrace (PT_READ_I, inferior_pid, - (PTRACE_ARG3_TYPE) addr, 0); - if (errno) - return 0; - QUIT; - } - - /* Copy appropriate bytes out of the buffer. */ - memcpy (myaddr, (char *) buffer + (memaddr & (sizeof (int) - 1)), len); - } - return len; -} - diff --git a/gdb/hppah-nat.c b/gdb/hppah-nat.c index 3dc6d4225b..5681658654 100644 --- a/gdb/hppah-nat.c +++ b/gdb/hppah-nat.c @@ -32,58 +32,6 @@ extern CORE_ADDR text_end; static void fetch_register (); -/* This function simply calls ptrace with the given arguments. - It exists so that all calls to ptrace are isolated in this - machine-dependent file. */ -int -call_ptrace (request, pid, addr, data) - int request, pid; - PTRACE_ARG3_TYPE addr; - int data; -{ - return ptrace (request, pid, addr, data, 0); -} - -void -kill_inferior () -{ - if (inferior_pid == 0) - return; - ptrace (PT_EXIT, inferior_pid, (PTRACE_ARG3_TYPE) 0, 0, 0); - wait ((int *)0); - target_mourn_inferior (); -} - -/* Start debugging the process whose number is PID. */ -int -attach (pid) - int pid; -{ - errno = 0; - ptrace (PT_ATTACH, pid, (PTRACE_ARG3_TYPE) 0, 0, 0); - if (errno) - perror_with_name ("ptrace"); - attach_flag = 1; - return pid; -} - -/* Stop debugging the process whose number is PID - and continue it with signal number SIGNAL. - SIGNAL = 0 means just continue it. */ - -void -detach (signal) - int signal; -{ - errno = 0; - ptrace (PT_DETACH, inferior_pid, (PTRACE_ARG3_TYPE) 1, signal, 0); - if (errno) - perror_with_name ("ptrace"); - attach_flag = 0; -} - -/* Fetch all registers, or just one, from the child process. */ - void fetch_inferior_registers (regno) int regno; @@ -200,34 +148,6 @@ fetch_register (regno) error_exit:; } -/* Resume execution of process PID. - If STEP is nonzero, single-step it. - If SIGNAL is nonzero, give it that signal. */ - -void -child_resume (pid, step, signal) - int pid; - int step; - enum target_signal signal; -{ - errno = 0; - - if (pid == -1) - pid = inferior_pid; - - /* An address of (PTRACE_ARG3_TYPE) 1 tells ptrace to continue from where - it was. (If GDB wanted it to start some other way, we have already - written a new PC value to the child.) */ - - if (step) - ptrace (PT_SINGLE, pid, (PTRACE_ARG3_TYPE) 1, signal, 0); - else - ptrace (PT_CONTIN, pid, (PTRACE_ARG3_TYPE) 1, signal, 0); - - if (errno) - perror_with_name ("ptrace"); -} - /* Copy LEN bytes to or from inferior's memory starting at MEMADDR to debugger memory starting at MYADDR. Copy to inferior if WRITE is nonzero. diff --git a/gdb/infptrace.c b/gdb/infptrace.c index 26f7be33ce..011224e4ae 100644 --- a/gdb/infptrace.c +++ b/gdb/infptrace.c @@ -125,14 +125,19 @@ void child_resume (pid, step, signal) int pid; int step; - int signal; + enum target_signal signal; { errno = 0; if (pid == -1) -#ifdef PIDGET /* XXX Lynx */ + /* Resume all threads. */ +#ifdef PIDGET + /* This is for Lynx, and should be cleaned up by having Lynx be + a separate debugging target, with its own target_resume function. */ pid = PIDGET (inferior_pid); #else + /* I think this only gets used in the non-threaded case, where "resume + all threads" and "resume inferior_pid" are the same. */ pid = inferior_pid; #endif @@ -146,9 +151,11 @@ child_resume (pid, step, signal) instructions), so we don't have to worry about that here. */ if (step) - ptrace (PT_STEP, pid, (PTRACE_ARG3_TYPE) 1, signal); + ptrace (PT_STEP, pid, (PTRACE_ARG3_TYPE) 1, + target_signal_to_host (signal)); else - ptrace (PT_CONTINUE, pid, (PTRACE_ARG3_TYPE) 1, signal); + ptrace (PT_CONTINUE, pid, (PTRACE_ARG3_TYPE) 1, + target_signal_to_host (signal)); if (errno) perror_with_name ("ptrace"); @@ -342,6 +349,8 @@ store_inferior_registers (regno) } #endif /* !defined (FETCH_INFERIOR_REGISTERS). */ + +#if !defined (CHILD_XFER_MEMORY) /* NOTE! I tried using PTRACE_READDATA, etc., to read and write memory in the NEW_SUN_PTRACE case. It ought to be straightforward. But it appears that writing did @@ -440,3 +449,4 @@ child_xfer_memory (memaddr, myaddr, len, write, target) } return len; } +#endif /* !defined (CHILD_XFER_MEMORY). */