]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
2008-10-24 Michael Snyder <msnyder@vmware.com>
authorMichael Snyder <msnyder@vmware.com>
Mon, 27 Oct 2008 04:50:17 +0000 (04:50 +0000)
committerMichael Snyder <msnyder@vmware.com>
Mon, 27 Oct 2008 04:50:17 +0000 (04:50 +0000)
* infrun.c (handle_inferior_event): Handle dynamic symbol
resolution in reverse.

gdb/ChangeLog
gdb/infrun.c

index 12c46d0ef128311a15ae7a12b203f58b95b33a77..060a27b7649187d5cc8370bd9b102383f5899e88 100644 (file)
@@ -1,3 +1,8 @@
+2008-10-24  Michael Snyder  <msnyder@vmware.com>
+
+       * infrun.c (handle_inferior_event): Handle dynamic symbol
+       resolution in reverse.
+
 2008-10-19  Hui Zhu  <teawater@gmail.com>
  
        * infcmd.c (kill_if_already_running): Remove process record
index 78fc8710b1697fe29e607846ec6068cddda58470..5e792b5f2821d0e68e172de867b42be460a857f4 100644 (file)
@@ -3212,6 +3212,22 @@ infrun: BPSTAT_WHAT_SET_LONGJMP_RESUME (!gdbarch_get_longjmp_target)\n");
          if (execution_direction == EXEC_REVERSE)
            {
              struct symtab_and_line sr_sal;
+
+             if (ecs->stop_func_start == 0 
+                 && in_solib_dynsym_resolve_code (stop_pc))
+               {
+                 /* Stepped into runtime loader dynamic symbol
+                    resolution code.  Since we're in reverse, 
+                    we have already backed up through the runtime
+                    loader and the dynamic function.  This is just
+                    the trampoline (jump table).
+
+                    Just keep stepping, we'll soon be home.
+                 */
+                 keep_going (ecs);
+                 return;
+               }
+             /* Normal (staticly linked) function call return.  */
              init_sal (&sr_sal);
              sr_sal.pc = ecs->stop_func_start;
              insert_step_resume_breakpoint_at_sal (sr_sal, null_frame_id);