Skip to content

Commit

Permalink
remote: call remote_check_symbols after attaching
Browse files Browse the repository at this point in the history
When debugging a remote bare-metal target with "target
extended-remote" + attach, GDB won't send a qSymbol packet to initiate
symbol lookup.  This happens because all the previous places in which
GDB might have done this are guarded by conditions that don't hold in
the said scenario: there are no shared libraries, no vsyscall page and
the binary file didn't change in the time passed between the "file"
and the "attach" commands.

To solve this problem remote_check_symbols is called in the
target_post_attach hook.

gdb/
2014-07-11  Adrian Sendroiu  <[email protected]>

	* remote.c (extended_remote_post_attach): New function.
	(init_extended_remote_ops): Install it as to_post_attach method.
  • Loading branch information
Adrian Sendroiu authored and palves committed Jul 11, 2014
1 parent 6837233 commit b9c1d48
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 0 deletions.
5 changes: 5 additions & 0 deletions gdb/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
2014-07-11 Adrian Sendroiu <[email protected]>

* remote.c (extended_remote_post_attach): New function.
(init_extended_remote_ops): Install it as to_post_attach method.

2014-07-09 Pedro Alves <[email protected]>

* infcmd.c (attach_command_post_wait): Don't call
Expand Down
15 changes: 15 additions & 0 deletions gdb/remote.c
Original file line number Diff line number Diff line change
Expand Up @@ -4484,6 +4484,20 @@ extended_remote_attach (struct target_ops *ops, const char *args, int from_tty)
extended_remote_attach_1 (ops, args, from_tty);
}

/* Implementation of the to_post_attach method. */

static void
extended_remote_post_attach (struct target_ops *ops, int pid)
{
/* In certain cases GDB might not have had the chance to start
symbol lookup up until now. This could happen if the debugged
binary is not using shared libraries, the vsyscall page is not
present (on Linux) and the binary itself hadn't changed since the
debugging process was started. */
if (symfile_objfile != NULL)
remote_check_symbols();
}


/* Check for the availability of vCont. This function should also check
the response. */
Expand Down Expand Up @@ -11530,6 +11544,7 @@ Specify the serial device it is connected to (e.g. /dev/ttya).";
extended_remote_ops.to_mourn_inferior = extended_remote_mourn;
extended_remote_ops.to_detach = extended_remote_detach;
extended_remote_ops.to_attach = extended_remote_attach;
extended_remote_ops.to_post_attach = extended_remote_post_attach;
extended_remote_ops.to_kill = extended_remote_kill;
extended_remote_ops.to_supports_disable_randomization
= extended_remote_supports_disable_randomization;
Expand Down

0 comments on commit b9c1d48

Please sign in to comment.