remote: call remote_check_symbols after attaching
authorAdrian Sendroiu <adrian.sendroiu@freescale.com>
Fri, 11 Jul 2014 09:51:48 +0000 (10:51 +0100)
committerPedro Alves <palves@redhat.com>
Fri, 11 Jul 2014 09:51:48 +0000 (10:51 +0100)
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  <adrian.sendroiu@freescale.com>

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

gdb/ChangeLog
gdb/remote.c

index 56f29095d619e592a80988e524616137468a6871..9aea5a9ab556e9c59c7d022def15b971272aeb1e 100644 (file)
@@ -1,3 +1,8 @@
+2014-07-11  Adrian Sendroiu  <adrian.sendroiu@freescale.com>
+
+       * remote.c (extended_remote_post_attach): New function.
+       (init_extended_remote_ops): Install it as to_post_attach method.
+
 2014-07-09  Pedro Alves  <palves@redhat.com>
 
        * infcmd.c (attach_command_post_wait): Don't call
index 3aa030cf39050b2c1944e87941db8352c5466a2f..76efefa32b62d9d5867650a33de5ce5da4727604 100644 (file)
@@ -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();
+}
+
 \f
 /* Check for the availability of vCont.  This function should also check
    the response.  */
@@ -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;