aboutsummaryrefslogtreecommitdiff
path: root/gdb/tui
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2019-07-06 15:52:13 -0600
committerTom Tromey <tom@tromey.com>2019-08-15 12:29:28 -0600
commit002f15c27779e154856fdf281360385f4d3be671 (patch)
treef0db85371f7c826f4c2ab54b0d19da9358379f9a /gdb/tui
parentc9033fe839e37a378ff86e614a7d6e939b94f6c9 (diff)
downloadgdb-002f15c27779e154856fdf281360385f4d3be671.zip
gdb-002f15c27779e154856fdf281360385f4d3be671.tar.gz
gdb-002f15c27779e154856fdf281360385f4d3be671.tar.bz2
Remove tui_alloc_source_buffer
There is no longer any need for tui_alloc_source_buffer. The two callers of this function immediately change the contents of the window, undoing the work done by this function. This required adding a move constructor to tui_source_element -- a mildly surprising find, but without this, resizing the vector will cause crashes. This issue was masked earlier because tui_alloc_source_buffer handled this. Note that a patch for this bug was submitted here: https://sourceware.org/ml/gdb-patches/2019-08/msg00094.html That patch is better, IMO, but the author as yet hasn't responded to a request for a ChangeLog entry. gdb/ChangeLog 2019-08-15 Tom Tromey <tom@tromey.com> * tui/tui-winsource.h (tui_alloc_source_buffer): Don't declare. (struct tui_source_element): Add DISABLE_COPY_AND_ASSIGN, and move constructor. * tui/tui-winsource.c (tui_alloc_source_buffer): Remove. * tui/tui-source.c (tui_set_source_content): Update. * tui/tui-disasm.c (tui_set_disassem_content): Update.
Diffstat (limited to 'gdb/tui')
-rw-r--r--gdb/tui/tui-disasm.c2
-rw-r--r--gdb/tui/tui-source.c1
-rw-r--r--gdb/tui/tui-winsource.c20
-rw-r--r--gdb/tui/tui-winsource.h14
4 files changed, 11 insertions, 26 deletions
diff --git a/gdb/tui/tui-disasm.c b/gdb/tui/tui-disasm.c
index e55f35d..2394394 100644
--- a/gdb/tui/tui-disasm.c
+++ b/gdb/tui/tui-disasm.c
@@ -179,8 +179,6 @@ tui_set_disassem_content (tui_source_window_base *win_info,
if (pc == 0)
return TUI_FAILURE;
- tui_alloc_source_buffer (win_info);
-
win_info->gdbarch = gdbarch;
win_info->start_line_or_addr.loa = LOA_ADDRESS;
win_info->start_line_or_addr.u.addr = pc;
diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c
index 7c173f8..3d88f66 100644
--- a/gdb/tui/tui-source.c
+++ b/gdb/tui/tui-source.c
@@ -135,7 +135,6 @@ tui_set_source_content (tui_source_window_base *win_info,
int line_width, nlines;
ret = TUI_SUCCESS;
- tui_alloc_source_buffer (win_info);
line_width = win_info->width - 1;
/* Take hilite (window border) into account, when
calculating the number of lines. */
diff --git a/gdb/tui/tui-winsource.c b/gdb/tui/tui-winsource.c
index a852696..121f19a 100644
--- a/gdb/tui/tui-winsource.c
+++ b/gdb/tui/tui-winsource.c
@@ -620,23 +620,3 @@ tui_source_window_base::update_exec_info ()
}
execution_info->refresh_window ();
}
-
-
-void
-tui_alloc_source_buffer (struct tui_source_window_base *win_info)
-{
- int i, line_width, max_lines;
-
- /* The window width/height includes the highlight box. Determine actual
- content dimensions, including string null-terminators. */
- max_lines = win_info->height - 2;
- line_width = win_info->width - 2 + 1;
-
- /* Allocate the buffer for the source lines. */
- win_info->content.resize (max_lines);
- for (i = 0; i < max_lines; i++)
- {
- if (win_info->content[i].line == nullptr)
- win_info->content[i].line = (char *) xmalloc (line_width);
- }
-}
diff --git a/gdb/tui/tui-winsource.h b/gdb/tui/tui-winsource.h
index 237c4da..bff2560 100644
--- a/gdb/tui/tui-winsource.h
+++ b/gdb/tui/tui-winsource.h
@@ -69,6 +69,17 @@ struct tui_source_element
xfree (line);
}
+ DISABLE_COPY_AND_ASSIGN (tui_source_element);
+
+ tui_source_element (tui_source_element &&other)
+ : line (other.line),
+ line_or_addr (other.line_or_addr),
+ is_exec_point (other.is_exec_point),
+ break_mode (other.break_mode)
+ {
+ other.line = nullptr;
+ }
+
char *line = nullptr;
struct tui_line_or_address line_or_addr;
bool is_exec_point = false;
@@ -173,9 +184,6 @@ extern void tui_update_source_windows_with_line (struct symtab *,
extern void tui_clear_source_content (struct tui_source_window_base *);
extern void tui_erase_source_content (struct tui_source_window_base *);
-extern void tui_alloc_source_buffer (struct tui_source_window_base *);
-
-
/* Constant definitions. */
#define SCROLL_THRESHOLD 2 /* Threshold for lazy scroll. */