* remote-mips.c (gdbthread.h): Include.
(remote_mips_ptid): Declare. (mips_error): Only mourn the inferior when inferior_ptid is non-null. (common_open): Set inferior_ptid, add it as an inferior, and as a thread too. Delete FIXME comment regarding start_remote(). (mips_close): Invoke generic_mourn_inferior(). (mips_kill): Make sure that target_mourn_inferior is invoked. (mips_mourn_inferior): Don't invoke generic_mourn_inferior, as it's now invoked from mips_close(). (mips_load): Don't null out inferior_ptid. Don't call clear_symtab_users(). (mips_thread_alive, mips_pid_to_str): New functions. (_initialize_remote_mips): Initialize remote_mips_ptid. Initialize to_thread_alive and to_pid_to_str operations.
This commit is contained in:
parent
26b6f1917c
commit
8eeafb51ab
2 changed files with 70 additions and 17 deletions
|
@ -1,3 +1,21 @@
|
||||||
|
2010-03-05 Kevin Buettner <kevinb@redhat.com>
|
||||||
|
Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
|
* remote-mips.c (gdbthread.h): Include.
|
||||||
|
(remote_mips_ptid): Declare.
|
||||||
|
(mips_error): Only mourn the inferior when inferior_ptid is non-null.
|
||||||
|
(common_open): Set inferior_ptid, add it as an inferior, and
|
||||||
|
as a thread too. Delete FIXME comment regarding start_remote().
|
||||||
|
(mips_close): Invoke generic_mourn_inferior().
|
||||||
|
(mips_kill): Make sure that target_mourn_inferior is invoked.
|
||||||
|
(mips_mourn_inferior): Don't invoke generic_mourn_inferior, as
|
||||||
|
it's now invoked from mips_close().
|
||||||
|
(mips_load): Don't null out inferior_ptid. Don't call
|
||||||
|
clear_symtab_users().
|
||||||
|
(mips_thread_alive, mips_pid_to_str): New functions.
|
||||||
|
(_initialize_remote_mips): Initialize remote_mips_ptid. Initialize
|
||||||
|
to_thread_alive and to_pid_to_str operations.
|
||||||
|
|
||||||
2010-03-04 Tom Tromey <tromey@redhat.com>
|
2010-03-04 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
* dwarf2read.c (skip_one_die) <DW_FORM_ref_addr>: Use offset size
|
* dwarf2read.c (skip_one_die) <DW_FORM_ref_addr>: Use offset size
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
#include "regcache.h"
|
#include "regcache.h"
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include "mips-tdep.h"
|
#include "mips-tdep.h"
|
||||||
|
#include "gdbthread.h"
|
||||||
|
|
||||||
|
|
||||||
/* Breakpoint types. Values 0, 1, and 2 must agree with the watch
|
/* Breakpoint types. Values 0, 1, and 2 must agree with the watch
|
||||||
|
@ -440,6 +441,11 @@ struct lsi_error lsi_error_table[] =
|
||||||
of warnings returned by PMON when hardware breakpoints are used. */
|
of warnings returned by PMON when hardware breakpoints are used. */
|
||||||
static int monitor_warnings;
|
static int monitor_warnings;
|
||||||
|
|
||||||
|
/* This is the ptid we use while we're connected to the remote. Its
|
||||||
|
value is arbitrary, as the remote-mips target doesn't have a notion of
|
||||||
|
processes or threads, but we need something non-null to place in
|
||||||
|
inferior_ptid. */
|
||||||
|
static ptid_t remote_mips_ptid;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
close_ports (void)
|
close_ports (void)
|
||||||
|
@ -483,7 +489,8 @@ mips_error (char *string,...)
|
||||||
close_ports ();
|
close_ports ();
|
||||||
|
|
||||||
printf_unfiltered ("Ending remote MIPS debugging.\n");
|
printf_unfiltered ("Ending remote MIPS debugging.\n");
|
||||||
target_mourn_inferior ();
|
if (!ptid_equal (inferior_ptid, null_ptid))
|
||||||
|
target_mourn_inferior ();
|
||||||
|
|
||||||
deprecated_throw_reason (RETURN_ERROR);
|
deprecated_throw_reason (RETURN_ERROR);
|
||||||
}
|
}
|
||||||
|
@ -1563,7 +1570,9 @@ device is attached to the target board (e.g., /dev/ttya).\n"
|
||||||
/* Switch to using remote target now. */
|
/* Switch to using remote target now. */
|
||||||
push_target (ops);
|
push_target (ops);
|
||||||
|
|
||||||
/* FIXME: Should we call start_remote here? */
|
inferior_ptid = remote_mips_ptid;
|
||||||
|
inferior_appeared (current_inferior (), ptid_get_pid (inferior_ptid));
|
||||||
|
add_thread_silent (inferior_ptid);
|
||||||
|
|
||||||
/* Try to figure out the processor model if possible. */
|
/* Try to figure out the processor model if possible. */
|
||||||
deprecated_mips_set_processor_regs_hack ();
|
deprecated_mips_set_processor_regs_hack ();
|
||||||
|
@ -1639,6 +1648,8 @@ mips_close (int quitting)
|
||||||
|
|
||||||
close_ports ();
|
close_ports ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
generic_mourn_inferior ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Detach from the remote board. */
|
/* Detach from the remote board. */
|
||||||
|
@ -2140,7 +2151,10 @@ static void
|
||||||
mips_kill (struct target_ops *ops)
|
mips_kill (struct target_ops *ops)
|
||||||
{
|
{
|
||||||
if (!mips_wait_flag)
|
if (!mips_wait_flag)
|
||||||
return;
|
{
|
||||||
|
target_mourn_inferior ();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
interrupt_count++;
|
interrupt_count++;
|
||||||
|
|
||||||
|
@ -2173,6 +2187,8 @@ Give up (and stop debugging it)? ")))
|
||||||
|
|
||||||
serial_send_break (mips_desc);
|
serial_send_break (mips_desc);
|
||||||
|
|
||||||
|
target_mourn_inferior ();
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
if (mips_is_open)
|
if (mips_is_open)
|
||||||
{
|
{
|
||||||
|
@ -2210,19 +2226,17 @@ Can't pass arguments to remote MIPS board; arguments ignored.");
|
||||||
|
|
||||||
init_wait_for_inferior ();
|
init_wait_for_inferior ();
|
||||||
|
|
||||||
/* FIXME: Should we set inferior_ptid here? */
|
|
||||||
|
|
||||||
regcache_write_pc (get_current_regcache (), entry_pt);
|
regcache_write_pc (get_current_regcache (), entry_pt);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Clean up after a process. Actually nothing to do. */
|
/* Clean up after a process. The bulk of the work is done in mips_close(),
|
||||||
|
which is called when unpushing the target. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mips_mourn_inferior (struct target_ops *ops)
|
mips_mourn_inferior (struct target_ops *ops)
|
||||||
{
|
{
|
||||||
if (current_ops != NULL)
|
if (current_ops != NULL)
|
||||||
unpush_target (current_ops);
|
unpush_target (current_ops);
|
||||||
generic_mourn_inferior ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We can write a breakpoint and read the shadow contents in one
|
/* We can write a breakpoint and read the shadow contents in one
|
||||||
|
@ -3296,18 +3310,36 @@ mips_load (char *file, int from_tty)
|
||||||
}
|
}
|
||||||
if (exec_bfd)
|
if (exec_bfd)
|
||||||
regcache_write_pc (regcache, bfd_get_start_address (exec_bfd));
|
regcache_write_pc (regcache, bfd_get_start_address (exec_bfd));
|
||||||
|
|
||||||
inferior_ptid = null_ptid; /* No process now */
|
|
||||||
|
|
||||||
/* This is necessary because many things were based on the PC at the time that
|
|
||||||
we attached to the monitor, which is no longer valid now that we have loaded
|
|
||||||
new code (and just changed the PC). Another way to do this might be to call
|
|
||||||
normal_stop, except that the stack may not be valid, and things would get
|
|
||||||
horribly confused... */
|
|
||||||
|
|
||||||
clear_symtab_users ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check to see if a thread is still alive. */
|
||||||
|
|
||||||
|
static int
|
||||||
|
mips_thread_alive (struct target_ops *ops, ptid_t ptid)
|
||||||
|
{
|
||||||
|
if (ptid_equal (ptid, remote_mips_ptid))
|
||||||
|
/* The monitor's task is always alive. */
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Convert a thread ID to a string. Returns the string in a static
|
||||||
|
buffer. */
|
||||||
|
|
||||||
|
static char *
|
||||||
|
mips_pid_to_str (struct target_ops *ops, ptid_t ptid)
|
||||||
|
{
|
||||||
|
static char buf[64];
|
||||||
|
|
||||||
|
if (ptid_equal (ptid, remote_mips_ptid))
|
||||||
|
{
|
||||||
|
xsnprintf (buf, sizeof buf, "Thread <main>");
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
return normal_pid_to_str (ptid);
|
||||||
|
}
|
||||||
|
|
||||||
/* Pass the command argument as a packet to PMON verbatim. */
|
/* Pass the command argument as a packet to PMON verbatim. */
|
||||||
|
|
||||||
|
@ -3351,6 +3383,8 @@ _initialize_remote_mips (void)
|
||||||
mips_ops.to_load = mips_load;
|
mips_ops.to_load = mips_load;
|
||||||
mips_ops.to_create_inferior = mips_create_inferior;
|
mips_ops.to_create_inferior = mips_create_inferior;
|
||||||
mips_ops.to_mourn_inferior = mips_mourn_inferior;
|
mips_ops.to_mourn_inferior = mips_mourn_inferior;
|
||||||
|
mips_ops.to_thread_alive = mips_thread_alive;
|
||||||
|
mips_ops.to_pid_to_str = mips_pid_to_str;
|
||||||
mips_ops.to_log_command = serial_log_command;
|
mips_ops.to_log_command = serial_log_command;
|
||||||
mips_ops.to_stratum = process_stratum;
|
mips_ops.to_stratum = process_stratum;
|
||||||
mips_ops.to_has_all_memory = default_child_has_all_memory;
|
mips_ops.to_has_all_memory = default_child_has_all_memory;
|
||||||
|
@ -3458,4 +3492,5 @@ Use \"on\" to enable the masking and \"off\" to disable it."),
|
||||||
NULL,
|
NULL,
|
||||||
NULL, /* FIXME: i18n: */
|
NULL, /* FIXME: i18n: */
|
||||||
&setlist, &showlist);
|
&setlist, &showlist);
|
||||||
|
remote_mips_ptid = ptid_build (42000, 0, 42000);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue