2008-10-26 Michael Snyder <msnyder@vmware.com>
authorMichael Snyder <msnyder@vmware.com>
Mon, 27 Oct 2008 04:53:05 +0000 (04:53 +0000)
committerMichael Snyder <msnyder@vmware.com>
Mon, 27 Oct 2008 04:53:05 +0000 (04:53 +0000)
* infrun.c (handle_inferior_event): Handle dynamic symbol
resolution in reverse.

gdb/ChangeLog
gdb/infrun.c

index 75565484b48aaf65d392ecc3817890f3b84e5645..71d09b60fa74d980b2587ac8554b001a10bae2d0 100644 (file)
@@ -1,3 +1,8 @@
+2008-10-26  Michael Snyder  <msnyder@vmware.com>
+
+       * infrun.c (handle_inferior_event): Handle dynamic symbol
+       resolution in reverse.
+
 2008-10-25  Joel Brobecker  <brobecker@adacore.com>
 
        * infrun.c: Minor comment reformatting.
index 9fd72262b43348b32afd45d0fdeea75b44bcc56c..46b5e407afbdf24a6132c457dc95f2c6141bb89f 100644 (file)
@@ -3393,6 +3393,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);