Bug 28483 - [gdb/tui] breakpoint creation not displayed
Summary: [gdb/tui] breakpoint creation not displayed
Status: RESOLVED FIXED
Alias: None
Product: gdb
Classification: Unclassified
Component: tui (show other bugs)
Version: 11.1
: P2 normal
Target Milestone: 11.2
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-10-21 11:20 UTC by Tom de Vries
Modified: 2021-10-21 22:29 UTC (History)
0 users

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Tom de Vries 2021-10-21 11:20:02 UTC
Test-case setup:
...
$ cat -n hello.c
     1  #include <stdio.h>
     2  #include <stdlib.h>
     3
     4  int
     5  main (void)
     6  {
     7    void *p = malloc (10);
     8    printf ("hello: %p\n", p);
     9    return 0;
    10  }
$ gcc -g hello.c
...

This command:
...
$ gdb -q a.out -ex start -ex "tui enable" -ex "b 8"
...
gets us in the tui window:
...
     2  #include <stdlib.h>
     3
     4  int
     5  main (void)
     6  {
 >   7    void *p = malloc (10);
     8    printf ("hello: %p\n", p);
     9    return 0;
    10  }
...

Using system gdb based on 10.1, we have instead:
...
     2  #include <stdlib.h>
     3
     4  int
     5  main (void)
     6  {
 >   7    void *p = malloc (10);
b+   8    printf ("hello: %p\n", p);
     9    return 0;
    10  }
...
Comment 1 Tom de Vries 2021-10-21 11:20:43 UTC
Fixed by:
...
diff --git a/gdb/tui/tui-winsource.c b/gdb/tui/tui-winsource.c
index afd51e95980..955b68901fe 100644
--- a/gdb/tui/tui-winsource.c
+++ b/gdb/tui/tui-winsource.c
@@ -460,7 +460,7 @@ tui_source_window_base::update_breakpoint_info
       for (breakpoint *bp : all_breakpoints ())
        {
          if (bp == being_deleted)
-           return false;
+           continue;
 
          for (bp_location *loc : bp->locations ())
            {
@@ -478,7 +478,6 @@ tui_source_window_base::update_breakpoint_info
                    mode |= TUI_BP_HARDWARE;
                }
            }
-         return false;
        }
 
       if (line->break_mode != mode)
...
Comment 3 cvs-commit@gcc.gnu.org 2021-10-21 22:28:18 UTC
The gdb-11-branch branch has been updated by Tom de Vries <vries@sourceware.org>:

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

commit cfd85eb3ef8d1c823daaa00783c4244089587a3a
Author: Tom de Vries <tdevries@suse.de>
Date:   Fri Oct 22 00:28:14 2021 +0200

    [gdb/tui] Fix breakpoint display functionality
    
    In commit 81e6b8eb208 "Make tui-winsource not use breakpoint_chain", a loop
    body was transformed into a lambda function body:
    ...
    -      for (bp = breakpoint_chain;
    -           bp != NULL;
    -           bp = bp->next)
    +      iterate_over_breakpoints ([&] (breakpoint *bp) -> bool
    ...
    and consequently:
    - a continue was replaced by a return, and
    - a final return was added.
    
    Then in commit 240edef62f0 "gdb: remove iterate_over_breakpoints function", we
    transformed back to a loop body:
    ...
    -      iterate_over_breakpoints ([&] (breakpoint *bp) -> bool
    +      for (breakpoint *bp : all_breakpoints ())
    ...
    but without reverting the changes that introduced the two returns.
    
    Consequently, breakpoints no longer show up in the tui source window.
    
    Fix this by reverting the changes that introduced the two returns.
    
    Build on x86_64-linux, tested with all .exp test-cases that contain
    tuiterm_env.
    
    Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28483
    
    gdb/ChangeLog:
    
    2021-10-22  Tom de Vries  <tdevries@suse.de>
    
            PR tui/28483
            * tui/tui-winsource.c (tui_source_window_base::update_breakpoint_info):
            Fix returns in loop body.
    
    gdb/testsuite/ChangeLog:
    
    2021-10-22  Tom de Vries  <tdevries@suse.de>
    
            PR tui/28483
            * gdb.tui/break.exp: New file.
Comment 4 Tom de Vries 2021-10-21 22:29:24 UTC
Fix with test-case committed to trunk and gdb-11-branch, marking resolved-fixed.