X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fremote-vx.c;h=7f4ed0f3a170ff3d70fed960c892641053d5d0f1;hb=c185a355e6bf82e4f371f9f6f912b00e2c711422;hp=1162b079cada412e7d443f054e478ca053c6c08d;hpb=b6ba6518e9254bc25f88088228e93ac966ebccd1;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/remote-vx.c b/gdb/remote-vx.c index 1162b079ca..7f4ed0f3a1 100644 --- a/gdb/remote-vx.c +++ b/gdb/remote-vx.c @@ -1,6 +1,8 @@ /* Memory-access and commands for remote VxWorks processes, for GDB. - Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1997, 1998, 1999, 2000, - 2001 Free Software Foundation, Inc. + + Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1997, 1998, 1999, + 2000, 2001, 2002 Free Software Foundation, Inc. + Contributed by Wind River Systems and Cygnus Support. This file is part of GDB. @@ -65,7 +67,7 @@ extern void vx_read_register (); extern void vx_write_register (); extern void symbol_file_command (); -extern int stop_soon_quietly; /* for wait_for_inferior */ +extern enum stop_kind stop_soon; /* for wait_for_inferior */ static int net_step (); static int net_ptrace_clnt_call (); /* Forward decl */ @@ -163,7 +165,7 @@ net_break (int addr, u_long procnum) break_status = 0; ptrace_in.addr = addr; - ptrace_in.pid = inferior_pid; + ptrace_in.pid = PIDGET (inferior_ptid); status = net_clnt_call (procnum, xdr_rptrace, &ptrace_in, xdr_int, &break_status); @@ -192,7 +194,7 @@ vx_remove_breakpoint (int addr) return net_break (addr, VX_BREAK_DELETE); } -/* Start an inferior process and sets inferior_pid to its pid. +/* Start an inferior process and sets inferior_ptid to its pid. EXEC_FILE is the file to run. ALLARGS is a string containing the arguments to the program. ENV is the environment vector to pass. @@ -200,7 +202,7 @@ vx_remove_breakpoint (int addr) On VxWorks, we ignore exec_file. */ static void -vx_create_inferior (char *exec_file, char *args, char **env) +vx_create_inferior (char *exec_file, char *args, char **env, int from_tty) { enum clnt_stat status; arg_array passArgs; @@ -227,7 +229,7 @@ vx_create_inferior (char *exec_file, char *args, char **env) strlen (passArgs.arg_array_val[0])); push_target (&vx_run_ops); - inferior_pid = taskStart.pid; + inferior_ptid = pid_to_ptid (taskStart.pid); /* We will get a trace trap after one instruction. Insert breakpoints and continue. */ @@ -241,9 +243,9 @@ vx_create_inferior (char *exec_file, char *args, char **env) /* Install inferior's terminal modes. */ target_terminal_inferior (); - stop_soon_quietly = 1; + stop_soon = STOP_QUIETLY; wait_for_inferior (); /* Get the task spawn event */ - stop_soon_quietly = 0; + stop_soon = NO_STOP_QUIETLY; /* insert_step_breakpoint (); FIXME, do we need this? */ proceed (-1, TARGET_SIGNAL_DEFAULT, 0); @@ -253,11 +255,11 @@ vx_create_inferior (char *exec_file, char *args, char **env) argument string ARGSTRING. */ static void -parse_args (register char *arg_string, arg_array *arg_struct) +parse_args (char *arg_string, arg_array *arg_struct) { - register int arg_count = 0; /* number of arguments */ - register int arg_index = 0; - register char *p0; + int arg_count = 0; /* number of arguments */ + int arg_index = 0; + char *p0; memset ((char *) arg_struct, '\0', sizeof (arg_array)); @@ -293,7 +295,7 @@ parse_args (register char *arg_string, arg_array *arg_struct) to the first non-white character. */ static char * -skip_white_space (register char *p) +skip_white_space (char *p) { while (*p == ' ' || *p == '\t') p++; @@ -305,9 +307,9 @@ skip_white_space (register char *p) if no whitespace is found. */ static char * -find_white_space (register char *p) +find_white_space (char *p) { - register int c; + int c; while ((c = *p) != ' ' && c != '\t' && c) { @@ -338,7 +340,7 @@ net_wait (RDB_EVENT *pEvent) memset ((char *) pEvent, '\0', sizeof (RDB_EVENT)); - pid = inferior_pid; + pid = PIDGET (inferior_ptid); status = net_clnt_call (PROCESS_WAIT, xdr_int, &pid, xdr_RDB_EVENT, pEvent); @@ -365,7 +367,7 @@ net_quit (void) /* don't let rdbTask suspend itself by passing a pid of 0 */ - if ((pid = inferior_pid) == 0) + if ((pid = PIDGET (inferior_ptid)) == 0) return -1; status = net_clnt_call (VX_TASK_SUSPEND, xdr_int, &pid, xdr_int, @@ -390,7 +392,7 @@ net_read_registers (char *reg_buf, int len, u_long procnum) /* Initialize RPC input argument structure. */ - ptrace_in.pid = inferior_pid; + ptrace_in.pid = PIDGET (inferior_ptid); ptrace_in.info.ttype = NOINFO; /* Initialize RPC return value structure. */ @@ -438,7 +440,7 @@ net_write_registers (char *reg_buf, int len, u_long procnum) in_data.bytes = reg_buf; in_data.len = len; - ptrace_in.pid = inferior_pid; + ptrace_in.pid = PIDGET (inferior_ptid); ptrace_in.info.ttype = DATA; ptrace_in.info.more_data = (caddr_t) & in_data; @@ -464,7 +466,7 @@ static void vx_prepare_to_store (void) { /* Fetch all registers, if any of them are not yet fetched. */ - read_register_bytes (0, NULL, REGISTER_BYTES); + deprecated_read_register_bytes (0, NULL, deprecated_register_bytes ()); } /* Copy LEN bytes to or from remote inferior's memory starting at MEMADDR @@ -477,8 +479,7 @@ vx_prepare_to_store (void) static int vx_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write, - struct mem_attrib *attrib ATTRIBUTE_UNUSED, - struct target_ops *target ATTRIBUTE_UNUSED) + struct mem_attrib *attrib, struct target_ops *target) { int status; Rptrace ptrace_in; @@ -490,7 +491,7 @@ vx_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write, memset ((char *) &ptrace_in, '\0', sizeof (ptrace_in)); memset ((char *) &ptrace_out, '\0', sizeof (ptrace_out)); - ptrace_in.pid = inferior_pid; /* XXX pid unnecessary for READDATA */ + ptrace_in.pid = PIDGET (inferior_ptid); /* XXX pid unnecessary for READDATA */ ptrace_in.addr = (int) memaddr; /* Where from */ ptrace_in.data = len; /* How many bytes */ @@ -565,22 +566,22 @@ vx_run_files_info (void) { printf_unfiltered ("\tRunning %s VxWorks process %s", vx_running ? "child" : "attached", - local_hex_string (inferior_pid)); + local_hex_string (PIDGET (inferior_ptid))); if (vx_running) printf_unfiltered (", function `%s'", vx_running); printf_unfiltered (".\n"); } static void -vx_resume (int pid, int step, enum target_signal siggnal) +vx_resume (ptid_t ptid, int step, enum target_signal siggnal) { int status; Rptrace ptrace_in; Ptrace_return ptrace_out; CORE_ADDR cont_addr; - if (pid == -1) - pid = inferior_pid; + if (ptid_equal (ptid, minus_one_ptid)) + ptid = inferior_ptid; if (siggnal != 0 && siggnal != stop_signal) error ("Cannot send signals to VxWorks processes"); @@ -600,7 +601,7 @@ vx_resume (int pid, int step, enum target_signal siggnal) memset ((char *) &ptrace_in, '\0', sizeof (ptrace_in)); memset ((char *) &ptrace_out, '\0', sizeof (ptrace_out)); - ptrace_in.pid = pid; + ptrace_in.pid = PIDGET (ptid); ptrace_in.addr = cont_addr; /* Target side insists on this, or it panics. */ if (step) @@ -637,7 +638,7 @@ struct find_sect_args static void find_sect (bfd *, asection *, void *); static void -find_sect (bfd *abfd, asection *sect, PTR obj) +find_sect (bfd *abfd, asection *sect, void *obj) { struct find_sect_args *args = (struct find_sect_args *) obj; @@ -674,8 +675,11 @@ vx_add_symbols (char *name, int from_tty, CORE_ADDR text_addr, free_objfile it. */ objfile_to_front (objfile); - offs = (struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS); - memcpy (offs, objfile->section_offsets, SIZEOF_SECTION_OFFSETS); + offs = + (struct section_offsets *) + alloca (SIZEOF_N_SECTION_OFFSETS (objfile->num_sections)); + memcpy (offs, objfile->section_offsets, + SIZEOF_N_SECTION_OFFSETS (objfile->num_sections)); ss.text_start = 0; ss.data_start = 0; @@ -709,7 +713,7 @@ vx_load_command (char *arg_string, int from_tty) /* Refuse to load the module if a debugged task is running. Doing so can have a number of unpleasant consequences to the running task. */ - if (inferior_pid != 0 && target_has_execution) + if (PIDGET (inferior_ptid) != 0 && target_has_execution) { if (query ("You may not load a module while the target task is running.\n\ Kill the target task? ")) @@ -742,18 +746,9 @@ net_step (void) int step_status; SOURCE_STEP source_step; - source_step.taskId = inferior_pid; - - if (step_range_end) - { - source_step.startAddr = step_range_start; - source_step.endAddr = step_range_end; - } - else - { - source_step.startAddr = 0; - source_step.endAddr = 0; - } + source_step.taskId = PIDGET (inferior_ptid); + source_step.startAddr = 0; + source_step.endAddr = 0; status = net_clnt_call (VX_SOURCE_STEP, xdr_SOURCE_STEP, &source_step, xdr_int, &step_status); @@ -819,9 +814,6 @@ net_get_symbols (ldtabl *pLoadTable) Returns status of symbol read on target side (0=success, -1=fail) Returns -1 and complain()s if rpc fails. */ -struct complaint cant_contact_target = -{"Lost contact with VxWorks target", 0, 0}; - static int vx_lookup_symbol (char *name, /* symbol name */ CORE_ADDR *pAddr) @@ -836,7 +828,7 @@ vx_lookup_symbol (char *name, /* symbol name */ xdr_SYMBOL_ADDR, &symbolAddr); if (status != RPC_SUCCESS) { - complain (&cant_contact_target); + complaint (&symfile_complaints, "Lost contact with VxWorks target"); return -1; } @@ -930,10 +922,10 @@ sleep_ms (long ms) perror_with_name ("select"); } -static int -vx_wait (int pid_to_wait_for, struct target_waitstatus *status) +static ptid_t +vx_wait (ptid_t ptid_to_wait_for, struct target_waitstatus *status) { - register int pid; + int pid; RDB_EVENT rdbEvent; int quit_failed; @@ -977,7 +969,7 @@ vx_wait (int pid_to_wait_for, struct target_waitstatus *status) { sleep_ms (200); /* FIXME Don't kill the network too badly */ } - else if (pid != inferior_pid) + else if (pid != PIDGET (inferior_ptid)) internal_error (__FILE__, __LINE__, "Bad pid for debugged task: %s\n", local_hex_string ((unsigned long) pid)); @@ -1035,7 +1027,7 @@ vx_wait (int pid_to_wait_for, struct target_waitstatus *status) #endif break; } /* switch */ - return pid; + return pid_to_ptid (pid); } static int @@ -1138,7 +1130,7 @@ vx_open (char *args, int from_tty) pLoadFile = &loadTable.tbl_ent[i]; #ifdef WRS_ORIG { - register int desc; + int desc; struct cleanup *old_chain; char *fullname = NULL; @@ -1208,7 +1200,7 @@ vx_attach (char *args, int from_tty) /* It worked... */ - inferior_pid = pid; + inferior_ptid = pid_to_ptid (pid); push_target (&vx_run_ops); if (vx_running) @@ -1238,14 +1230,15 @@ vx_detach (char *args, int from_tty) if (from_tty) printf_unfiltered ("Detaching pid %s.\n", - local_hex_string ((unsigned long) inferior_pid)); + local_hex_string ( + (unsigned long) PIDGET (inferior_ptid))); if (args) /* FIXME, should be possible to leave suspended */ signal = atoi (args); memset ((char *) &ptrace_in, '\0', sizeof (ptrace_in)); memset ((char *) &ptrace_out, '\0', sizeof (ptrace_out)); - ptrace_in.pid = inferior_pid; + ptrace_in.pid = PIDGET (inferior_ptid); status = net_ptrace_clnt_call (PTRACE_DETACH, &ptrace_in, &ptrace_out); if (status == -1) @@ -1256,7 +1249,7 @@ vx_detach (char *args, int from_tty) perror_with_name ("Detaching VxWorks process"); } - inferior_pid = 0; + inferior_ptid = null_ptid; pop_target (); /* go back to non-executing VxWorks connection */ } @@ -1269,11 +1262,11 @@ vx_kill (void) Ptrace_return ptrace_out; int status; - printf_unfiltered ("Killing pid %s.\n", local_hex_string ((unsigned long) inferior_pid)); + printf_unfiltered ("Killing pid %s.\n", local_hex_string ((unsigned long) PIDGET (inferior_ptid))); memset ((char *) &ptrace_in, '\0', sizeof (ptrace_in)); memset ((char *) &ptrace_out, '\0', sizeof (ptrace_out)); - ptrace_in.pid = inferior_pid; + ptrace_in.pid = PIDGET (inferior_ptid); status = net_ptrace_clnt_call (PTRACE_KILL, &ptrace_in, &ptrace_out); if (status == -1) @@ -1286,7 +1279,7 @@ vx_kill (void) /* If it gives good status, the process is *gone*, no events remain. If the kill failed, assume the process is gone anyhow. */ - inferior_pid = 0; + inferior_ptid = null_ptid; pop_target (); /* go back to non-executing VxWorks connection */ } @@ -1295,7 +1288,7 @@ vx_kill (void) static void vx_proc_close (int quitting) { - inferior_pid = 0; /* No longer have a process. */ + inferior_ptid = null_ptid; /* No longer have a process. */ if (vx_running) xfree (vx_running); vx_running = 0; @@ -1333,7 +1326,6 @@ vx_close (int quitting) } /* A vxprocess target should be started via "run" not "target". */ -/*ARGSUSED */ static void vx_proc_open (char *name, int from_tty) { @@ -1399,7 +1391,7 @@ _initialize_vx (void) init_vx_run_ops (); add_target (&vx_run_ops); - add_show_from_set + deprecated_add_show_from_set (add_set_cmd ("vxworks-timeout", class_support, var_uinteger, (char *) &rpcTimeout.tv_sec, "Set seconds to wait for rpc calls to return.\n\