This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Fix problems with finishing a dummy function call on simulators.


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=66c4b3e8a628a207bc6aafef6af0c4128195f56e

commit 66c4b3e8a628a207bc6aafef6af0c4128195f56e
Author: Luis Machado <lgustavo@codesourcery.com>
Date:   Mon Jul 6 16:09:21 2015 -0300

    Fix problems with finishing a dummy function call on simulators.
    
    This fixes regressions introduced with the original change to not
    consider permanent breakpoints always inserted:
    
      6ae8866180bf90e9ec76c2dd34c07fd826d11a83 is the first bad commit
      commit 6ae8866180bf90e9ec76c2dd34c07fd826d11a83
      Author: Luis Machado <lgustavo@codesourcery.com>
      Date:   Wed Jun 17 16:50:57 2015 -0300
    
          Fix problems with finishing a dummy function call on simulators.
    
    Some checks were mistakenly left out of the original patch, which
    caused the following failures:
    
    -PASS: gdb.base/shlib-call.exp: print mainshr1(1)
    -PASS: gdb.base/shlib-call.exp: step into mainshr1
    +FAIL: gdb.base/shlib-call.exp: print mainshr1(1)
    +FAIL: gdb.base/shlib-call.exp: step into mainshr1
    
    -PASS: gdb.cp/chained-calls.exp: q(p())
    +FAIL: gdb.cp/chained-calls.exp: q(p())
    
    -PASS: gdb.cp/chained-calls.exp: q(p() + r())
    +FAIL: gdb.cp/chained-calls.exp: q(p() + r())
    
    -PASS: gdb.cp/chained-calls.exp: g(f(g(f() + f())) + f())
    +FAIL: gdb.cp/chained-calls.exp: g(f(g(f() + f())) + f())
    
    -PASS: gdb.cp/chained-calls.exp: *c
    -PASS: gdb.cp/chained-calls.exp: *c + *c
    -PASS: gdb.cp/chained-calls.exp: q(*c + *c)
    +FAIL: gdb.cp/chained-calls.exp: *c
    +FAIL: gdb.cp/chained-calls.exp: *c + *c
    +FAIL: gdb.cp/chained-calls.exp: q(*c + *c)
    
    -PASS: gdb.cp/classes.exp: calling method for small class
    +FAIL: gdb.cp/classes.exp: calling method for small class
    
    The above is likely caused by GDB not removing the permanent
    breakpoints from the target, leading to the inferior executing
    the breakpoint instruction and tripping on a SIGSEGV.
    
    gdb/ChangeLog:
    2015-07-06  Luis Machado  <lgustavo@codesourcery.com>
    
    	* breakpoint.c (remove_breakpoint_1): Don't handle permanent
    	breakpoints in a special way.
    	(remove_breakpoint): Likewise.
    	(mark_breakpoints_out): Likewise.

Diff:
---
 gdb/ChangeLog    |  7 +++++++
 gdb/breakpoint.c | 11 +----------
 2 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index dc3973f..0e92bf5 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,10 @@
+2015-07-06  Luis Machado  <lgustavo@codesourcery.com>
+
+	* breakpoint.c (remove_breakpoint_1): Don't handle permanent
+	breakpoints in a special way.
+	(remove_breakpoint): Likewise.
+	(mark_breakpoints_out): Likewise.
+
 2015-07-06  Andrew Burgess  <andrew.burgess@embecosm.com>
 
 	* doc/gdb.texinfo (TUI): Add comma after @xref.
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 1481112..af0d167 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -3892,10 +3892,6 @@ remove_breakpoint_1 (struct bp_location *bl, insertion_state_t is)
   /* BL is never in moribund_locations by our callers.  */
   gdb_assert (bl->owner != NULL);
 
-  if (bl->permanent)
-    /* Permanent breakpoints cannot be inserted or removed.  */
-    return 0;
-
   /* The type of none suggests that owner is actually deleted.
      This should not ever happen.  */
   gdb_assert (bl->owner->type != bp_none);
@@ -4042,10 +4038,6 @@ remove_breakpoint (struct bp_location *bl, insertion_state_t is)
   /* BL is never in moribund_locations by our callers.  */
   gdb_assert (bl->owner != NULL);
 
-  if (bl->permanent)
-    /* Permanent breakpoints cannot be inserted or removed.  */
-    return 0;
-
   /* The type of none suggests that owner is actually deleted.
      This should not ever happen.  */
   gdb_assert (bl->owner->type != bp_none);
@@ -4068,8 +4060,7 @@ mark_breakpoints_out (void)
   struct bp_location *bl, **blp_tmp;
 
   ALL_BP_LOCATIONS (bl, blp_tmp)
-    if (bl->pspace == current_program_space
-	&& !bl->permanent)
+    if (bl->pspace == current_program_space)
       bl->inserted = 0;
 }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]