aboutsummaryrefslogtreecommitdiff
path: root/gdb
AgeCommit message (Collapse)AuthorFilesLines
2019-07-23[gdb/testsuite] Add missing initial prompt read in multidictionary.expTom de Vries2-0/+12
When running multidictionary.exp in conjunction with: ... $ stress -c $(($(cat /proc/cpuinfo | grep -c "^processor") + 1)) ... we get: ... Running gdb/testsuite/gdb.dwarf2/multidictionary.exp ... ERROR: Couldn't load multidictionary into gdb. === gdb Summary === nr of unresolved testcases 1 ... The multidictionary test-case needs -readnow, and achieves this using: ... gdb_spawn_with_cmdline_opts "-readnow" gdb_load ... but the initial gdb prompt is not read. Usually, the following gdb_load command accidentally consumes that initial prompt (at the gdb_expect for the kill command in gdb_file_cmd). But under high load, that doesn't happen and we run into the error. Fix this by consuming the initial gdb prompt after spawning gdb. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2019-07-23 Tom de Vries <tdevries@suse.de> PR testsuite/24842 * gdb.dwarf2/multidictionary.exp: Consume initial prompt after gdb_spawn_with_cmdline_opts.
2019-07-23[gdb][Arm]: gdb cannot step across CMSE secure entry function code.Srinath Parvathaneni5-0/+167
GDB is not able to execute "step" command on function calls of Armv8-M cmse secure entry functions. Everytime GNU linker come across definition of any cmse secure entry function in object file(s), it creates two new instructions secure gateway (sg) and original branch destination (b.w), place those two instructions in ".gnu.sgstubs" section of executable. Any function calls to these cmse secure entry functions is re-directed through secure gateway (sg) present in ".gnu.sgstubs" section. Example: Following is a function call to cmse secure entry function "foo": ... bl xxxx <foo> --->(a) ... <foo> xxxx: push {r7, lr} GNU linker on finding out "foo" is a cmse secure entry function, created sg and b.w instructions and place them in ".gnu.sgstubs" section (marked by c). The "bl" instruction (marked by a) which is a call to cmse secure entry function is modified by GNU linker (as marked by b) and call flow is re-directly through secure gateway (sg) in ".gnu.sgstubs" section. ... bl yyyy <foo> ---> (b) ... section .gnu.sgstubs: ---> (c) yyyy <foo> yyyy: sg // secure gateway b.w xxxx <__acle_se_foo> // original_branch_dest ... 0000xxxx <__acle_se_foo> xxxx: push {r7, lr} ---> (d) On invoking GDB, when the control is at "b" and we pass "step" command, the pc returns "yyyy" (sg address) which is a trampoline and which does not exist in source code. So GDB jumps to next line without jumping to "__acle_se_foo" (marked by d). The above details are published on the Arm website [1], please refer to section 5.4 (Entry functions) and section 3.4.4 (C level development flow of secure code). [1] https://developer.arm.com/architectures/cpu-architecture/m-profile/docs/ecm0359818/latest/armv8-m-security-extensions-requirements-on-development-tools-engineering-specification This patch fixes above problem by returning target pc "xxxx" to GDB on executing "step" command at "b", so that the control jumps to "__acle_se_foo" (marked by d). gdb/ChangeLog: * arm-tdep.c (arm_skip_cmse_entry): New function. (arm_is_sgstubs_section): New function. (arm_skip_stub): Add call to arm_skip_cmse_entry function. gdb/testsuite/ChangeLog: * gdb.arch/arm-cmse-sgstubs.c: New test. * gdb.arch/arm-cmse-sgstubs.exp: New file.
2019-07-23[gdb/testsuite] Fix command result testing in mi-complete.expTom de Vries2-2/+10
When running gdb.mi/mi-complete.exp in conjunction with: ... $ stress -c $(($(cat /proc/cpuinfo | grep -c "^processor") + 1)) ... we get less than 50% full passes: ... $ for n in $(seq 1 100); do \ make V=1 -O check \ 'RUNTESTFLAGS=gdb.mi/mi-complete.exp --target_board=unix'; \ done 2>&1 \ | grep "expected passes" | sort | uniq -c 45 # of expected passes 7 9 # of expected passes 8 46 # of expected passes 9 ... A diff between a passing and failing gdb.log shows this difference: ... -&"set max-completions 1\n" 2-complete br +&"set max-completions 1\n" ... The problem is that the test-case issues the "set max-completion <n>" command, and without waiting for the output issues a next command, and tries to parse the results of both commands, expecting a specific interleaving of the various output streams. Fix the FAIL by waiting for the result of the "set max-completion <n>" command before issuing another command. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2019-07-23 Tom de Vries <tdevries@suse.de> PR testsuite/24711 * gdb.mi/mi-complete.exp: Wait for "set max-completions" result before issuing next command.
2019-07-22Remove self-assign from make_invisible_and_set_new_heightTom Tromey2-2/+7
In https://sourceware.org/ml/gdb-patches/2019-07/msg00509.html, Jan pointed out that clang points out that make_invisible_and_set_new_height self-assigns "height". This patch fixes the bug by renaming the formal parameter. gdb/ChangeLog 2019-07-22 Tom Tromey <tom@tromey.com> * tui/tui-win.c (tui_win_info::make_invisible_and_set_new_height): Don't self-assign.
2019-07-22gdb: Show type summary for anonymous structures from c_print_typedefAndrew Burgess6-8/+73
Currently each language has a la_print_typedef method, this is only used for the "info types" command. The documentation for "info types" says: Print a brief description of all types whose names match the regular expression @var{regexp} (or all types in your program, if you supply no argument). However, if we consider this C code: typedef struct { int a; } my_type; Then currently with "info types" this will be printed like this: 3: typedef struct { int a; } my_type; I see two problems with this, first the indentation is clearly broken, second, if the struct contained more fields then it feels like the actual type names could easily get lost in the noise. Given that "info types" is about discovering type names, I think there is an argument to be made that we should focus on giving _only_ the briefest summary for "info types", and if the user wants to know more they can take the type name and plug it into "ptype". As such, I propose that a better output would be: 3: typedef struct {...} my_type; The user understands that there is a type called `my_type`, and that it's an alias for an anonymous structure type. The change to achieve this turns out to be pretty simple, but only effects languages that make use of c_print_typedef, which are C, C++, asm, minimal, d, go, objc, and opencl. Other languages will for now do whatever they used to do. The patch to change how anonymous structs are displayed also changes the display of anonymous enums, consider this code sample: typedef enum { AA, BB, CC } anon_enum_t; This used to be displayed like this: 3: typedef enum {AA, BB, CC} anon_enum_t; Which will quickly become cluttered for enums with a large number of values. The modified output looks like this: 3: typedef enum {...} anon_enum_t; Again, the user can always make use of ptype if they want to see the details of the anon_enum_t type. It is worth pointing out that this change (to use {...}) only effects anonymous structs and enums, named types don't change with this patch, consider this code: struct struct_t { int i; }; enum enum_t { AA, BB, CC }; The output from 'info types' remains unchanged, like this: 4: enum enum_t; 1: struct struct_t; An additional area of interest is how C++ handles anonymous types used within a typedef; enums are handled basically inline with how C handles them, but structs (and classes) are slightly different. The behaviour before the patch is different, and is unchanged by this patch. Consider this code compiled for C++: typedef struct { int i; } struct_t; Both before and after this patch, this is show by 'info types' as: 3: typedef struct_t struct_t; Unions are displayed similarly to structs in both C and C++, the handling of anonymous unions changes for C in the same way that it changes for anonymous structs. I did look at ada, as this is the only language to actually have some tests for "info types", however, as I understand it ada doesn't really support typedefs, however, by forcing the language we can see what ada would print. So, if we 'set language ada', then originally we printed this: 3: record a: int; end record Again the indentation is clearly broken, but we also have no mention of the type name at all, which is odd, but understandable given the lack of typedefs. If I make a similar change as I'm proposing for C, then we now get this output: 3: record ... end record Which is even less informative I think. However, the original output _is_ tested for in gdb.ada/info_auto_lang.exp, and its not clear to me if the change is a good one or not, so for now I have left this out. gdb/ChangeLog: * c-typeprint.c (c_print_typedef): Pass -1 instead of 0 to type_print. gdb/testsuite/ChangeLog: * gdb.ada/info_auto_lang.exp: Update expected results. * gdb.base/info-types.c: Add additional types to check. * gdb.base/info-types.exp: Update expected results.
2019-07-22gdb: Improve output from "info types" commadAndrew Burgess5-13/+222
This commit makes two changes to the "info types" command: First, only use typedef_print for printing typedefs, and use type_print for printing non-typedef scalar (non-struct) types. The result of this is the output for builtin types goes from this: typedef double; typedef float; typedef int; to this: double; float; int; which seems to make more sense. Next GDB no longer matches msymbols as possible type names. When looking for function symbols it makes sense to report matching msymbols from the text sections, and for variables msymbols from the data/bss sections, but when reporting types GDB would match msymbols of type absolute. But I don't see why these are likely to indicate type names. As such I've updated the msymbol matching lists in symtab.c:search_symbols so that when searching in the TYPES_DOMAIN, we never match any msymbols. gdb/ChangeLog: * symtab.c (search_symbols): Adjust msymbol matching type arrays so that GDB doesn't match any msymbols when searching in the TYPES_DOMAIN. (print_symbol_info): Print using typedef_print or type_print based on the type of the symbol. Add updated FIXME comment moved from... (_initialize_symtab): ... move and update FIXME comment to above. gdb/testsuite/ChangeLog: * gdb.base/info-types.c: New file. * gdb.base/info-types.exp: New file.
2019-07-22gdb: Switch "info types" over to use the gdb::options frameworkAndrew Burgess5-6/+85
Adds a new -q flag to "info types" using the gdb::option framework. This -q flag is similar to the -q flag already present for "info variables" and "info functions". gdb/ChangeLog: * NEWS: Mention adding -q option to "info types". * symtab.c (struct info_types_options): New struct. (info_types_options_defs): New variable. (make_info_types_options_def_group): New function. (info_types_command): Use gdb::option framework to parse options. (info_types_command_completer): New function. (_initialize_symtab): Extend the help text on "info types" and register command completer. gdb/doc/ChangeLog: * gdb.texinfo (Symbols): Add information about -q flag to "info types".
2019-07-21Add ChangeLog entry for the last commitChristian Biesinger1-0/+6
Forgot to commit before pushing :(
2019-07-21Use block_enum instead of int for better typesafetyChristian Biesinger1-4/+8
gdb/ChangeLog: 2019-07-21 Christian Biesinger <cbiesinger@google.com> * symtab.c (lookup_symbol_in_objfile_symtabs): Change int to block_enum. (lookup_symbol_in_objfile): Change int to block_enum and add a gdb_assert to make sure block_index is GLOBAL_BLOCK or STATIC_BLOCK.
2019-07-21[FYI] Add myself to gdb/MAINTAINERSChristian Biesinger2-0/+5
gdb/Changelog: * MAINTAINERS (Write After Approval): Add myself.
2019-07-20Make documentation of "python" command match actual behaviorKevin Buettner2-2/+5
The example in the documentation for the "python" command shows GDB outputting instructions for how to terminate a sequence of python commands entered from the command line. The documentation shows that the following two lines are being output, though this does not occur when actually using the "python" command from GDB: Type python script End with a line saying just "end". While display of this text might be helpful, GDB has several other commands which also use the "end" terminator that offer no such text. Examples include the "if" and "while" commands. For example, (gdb) if 1==1 >print "a" >end $1 = "a" This seems similar to doing: (gdb) python >print 23 >end 23 If we decide that we want the "python" command to print such a message, we should also adjust the behavior for other GDB commands which also use "end" to terminate a command list. I.e, if this decision is made, the "if" and "while" commands ought to also print similar messages. So, for the moment anyway, this commit adjusts the documentation of the python command to match its implementation. This patch was taken from a larger body of work originating from the Archer project. I haven't been able to determine its original author, though I did find a commit log from Jan Kratochvil (in the Archer repository) which suggests that the change had originally been made to gdb.texinfo, but got inadvertently dropped when the python related documentation was split out to python.texi. gdb/doc/ChangeLog: * python.texi (python command): Revise example to match command behavior.
2019-07-19gdb/riscv: Write 4-byte nop to dummy code region before inferior callsAndrew Burgess5-1/+129
When making inferior function calls GDB sets up a dummy code region on the stack, and places a breakpoint within that region. If the random stack contents appear to be a compressed instruction then GDB will place a compressed breakpoint, which can cause problems if the target doesn't support compressed instructions. This commit prevents this issue by writing a 4-byte nop instruction to the dummy region at the time the region is allocated. With this nop instruction in place, when we come to insert the breakpoint then an uncompressed breakpoint will be used. This is similar to other targets, for example mips. gdb/ChangeLog: * riscv-tdep.c (riscv_push_dummy_code): Write a 4-byte nop instruction to the dummy code region. gdb/testsuite/ChangeLog: * gdb.arch/riscv-bp-infcall.c: New file. * gdb.arch/riscv-bp-infcall.exp: New file.
2019-07-19Change ARI to mention C++11, and remove some rulesTom Tromey2-36/+11
I noticed that ARI mentions "ISO C 90", but now gdb uses C++11. This patch updates some text to reflect this change. I also noticed that a few rules can be removed now. ARGSUSED doesn't seem to be an issue any more (there's no code mentioning this and I doubt most of us even remember this convention); PARAMS was specific to K&R C; and __func__ is available in C++11. gdb/ChangeLog 2019-07-19 Tom Tromey <tromey@adacore.com> * contrib/ari/gdb_ari.sh: Mention C++11, not ISO C 90. (ARGSUSED, PARAMS, __func__): Remove rules.
2019-07-19Arm: Remove unused feature files and testsAlan Hayward18-575/+22
Remove the xml tests. Now that it has been proven the new descriptions are identical, there is no need to keep testing that. Also, it would prevent the old xml files from being removed. Remove the old xml files from gdbserver and delete them. gdb/ChangeLog: * arm-tdep.c (_initialize_arm_tdep): Remove xml tests. * features/arm/arm-with-iwmmxt.c: Remove. * features/arm/arm-with-iwmmxt.xml: Remove. * features/arm/arm-with-m-fpa-layout.c: Remove. * features/arm/arm-with-m-fpa-layout.xml: Remove. * features/arm/arm-with-m-vfp-d16.c: Remove. * features/arm/arm-with-m-vfp-d16.xml: Remove. * features/arm/arm-with-m.c: Remove. * features/arm/arm-with-m.xml: Remove. * features/arm/arm-with-neon.c: Remove. * features/arm/arm-with-neon.xml: Remove. * features/arm/arm-with-vfpv2.c: Remove. * features/arm/arm-with-vfpv2.xml: Remove. * features/arm/arm-with-vfpv3.c: Remove. * features/arm/arm-with-vfpv3.xml: Remove. gdb/gdbserver/ChangeLog: 2019-07-05 Alan Hayward <alan.hayward@arm.com> * configure.srv: Remove Arm xml files.
2019-07-19Arm: Use read_description funcs in gdbserverAlan Hayward10-53/+232
Switch gdbserver over to using feature target descriptions. Add a function for determining the type of a given target description, and use where required. gdb/gdbserver/ChangeLog: * configure.srv: Add new files. Remove xml generated files. * linux-aarch32-low.c (initialize_low_arch_aarch32): Don't init registers. * linux-aarch32-low.h (tdesc_arm_with_neon): Remove. * linux-aarch32-tdesc.c: New file. * linux-aarch32-tdesc.h: New file. * linux-aarch64-low.c (aarch64_arch_setup): Call aarch32_linux_read_description. * linux-arm-low.c (init_registers_arm, tdesc_arm) (init_registers_arm_with_iwmmxt, tdesc_arm_with_iwmmxt) (init_registers_arm_with_vfpv2, tdesc_arm_with_vfpv2) (init_registers_arm_with_vfpv3, tdesc_arm_with_vfpv3): Remove. (arm_fill_wmmxregset, arm_store_wmmxregset, arm_fill_vfpregset) (arm_store_vfpregset): Call arm_linux_get_tdesc_fp_type. (arm_read_description): Call arm_linux_read_description. (initialize_low_arch): Don't init registers. * linux-arm-tdesc.c: New file. * linux-arm-tdesc.h: New file.
2019-07-19Arm: Add xml unit testsAlan Hayward2-0/+22
Use the record_xml_tdesc tests to prove the new target descriptions are identical to the previous xml file ones. This is tested as part of gdb.gdb/unittest.exp. gdb/ChangeLog: * arm-tdep.c (_initialize_arm_tdep): Add xml regression tests.
2019-07-19Arm: Use feature target descriptionsAlan Hayward4-43/+72
In arm arm_create_target_description and aarch32_create_target_description create feature based target descriptions instead of returning the old style descriptions. Ensure the descriptions are created in exactly the same way as the old xml files. Remove the old initialize calls. gdb/ChangeLog: * arch/aarch32.c (aarch32_create_target_description): Create target descriptions using features. * arch/arm.c (arm_create_target_description) (arm_create_mprofile_target_description): Likewise. * arm-tdep.c (_initialize_arm_tdep): Remove tdesc init calls.
2019-07-19Arm: Add read_description read funcs and use in GDBAlan Hayward15-31/+309
Switch the Arm target to get target descriptions via arm_read_description and aarch32_read_description, in the same style as other feature targets. Add an enum to specify the different types - this will also be of use to gdbserver in a later patch. Under the hood return the same existing pre-feature target descriptions. gdb/ChangeLog: * Makefile.in: Add new files. * aarch32-tdep.c: New file. * aarch32-tdep.h: New file. * aarch64-linux-nat.c (aarch64_linux_nat_target::read_description): Call aarch32_read_description. * arch/aarch32.c: New file. * arch/aarch32.h: New file. * arch/arm.c (arm_create_target_description) (arm_create_mprofile_target_description): New function. * arch/arm.h (arm_fp_type, arm_m_profile_type): New enum. (arm_create_target_description) (arm_create_mprofile_target_description): New declaration. * arm-fbsd-tdep.c (arm_fbsd_read_description_auxv): Call read_description functions. * arm-linux-nat.c (arm_linux_nat_target::read_description): Likewise. * arm-linux-tdep.c (arm_linux_core_read_description): Likewise. * arm-tdep.c (tdesc_arm_list): New variable. (arm_register_g_packet_guesses): Call create description functions. (arm_read_description) (arm_read_mprofile_description): New function. * arm-tdep.h (arm_read_description) (arm_read_mprofile_description): Add declaration. * configure.tgt: Add new files.
2019-07-18Fix for using named pipes on WindowsGuillaume LABARTHE2-11/+11
On Windows, passing a named pipe as terminal argument to the new-ui command does not work. The problem is that the new_ui_command function in top.c opens the same tty three times, for stdin, stdout and stderr. With Windows named pipes, the second and third calls to open fail. Opening the file only once and passing the same stream for stdin, stdout and stderr makes it work. Pedro says: I tried it on GNU/Linux and things still work. I ran all the MI tests with forced new-ui, with: $ make check TESTS="gdb.mi/*.exp" RUNTESTFLAGS="FORCE_MI_SEPARATE_UI=1" and saw no regressions. gdb/ChangeLog: 2019-07-18 Guillaume LABARTHE <guillaume.labarthe@gmail.com> * top.c (new_ui_command): Open specified terminal just once.
2019-07-18Constify main_nameTom Tromey4-8/+13
This patch constifies the return type of main_name. There is a comment indicating that this wasn't possible at some point in the past, but whatever the barrier was, it is gone now. Tested by rebuilding. gdb/ChangeLog 2019-07-18 Tom Tromey <tromey@adacore.com> * symtab.c (main_name): Constify return type. * symfile.c (set_initial_language): Update. * symtab.h (main_name): Constify return type.
2019-07-17Remove unnecessary "return"sTom Tromey5-14/+11
The TUI has some "return;" statements at the end of void-returning functions. There's no need for these, so this patch removes them. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-winsource.c (tui_update_source_window) (tui_update_source_window_as_is) (tui_update_source_windows_with_line): Remove return. * tui/tui-disasm.c (tui_show_disassem) (tui_show_disassem_and_update_source): Remove return. * tui/tui.c (tui_reset): Remove return. * tui/tui-wingeneral.c (tui_check_and_display_highlight_if_needed): Remove return.
2019-07-17Fix an error in parse_scrolling_argsTom Tromey2-4/+8
parse_scrolling_args combines two errors into one message, which also happens to end with a newline. This separates the errors and fixes the message. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-win.c (parse_scrolling_args): Throw separate errors.
2019-07-17Move source window common to code to tui-winsource.[ch]Tom Tromey10-233/+256
Like the previous rearranging patches, this moves the source and disassembly window base class code to tui-winsource.[ch]. The execution info window is also moved, because it is associated with this base class. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-winsource.h (struct tui_exec_info_window) (struct tui_source_window_base): Move from tui-data.h. * tui/tui-winsource.c: Move many method definitions from elsewhere. Remove "structuring" comments. * tui/tui-wingeneral.c (tui_source_window_base::make_visible) (tui_source_window_base::refresh_window): Move to tui-winsource.c. * tui/tui-win.c (tui_source_window_base::refresh_all) (tui_source_window_base::update_tab_width) (tui_source_window_base::set_new_height) (tui_source_window_base::do_make_visible_with_new_height): Move to tui-winsource.c. * tui/tui-source.h: Update. * tui/tui-source.c (tui_source_window_base::reset): Move to tui-winsource.c. * tui/tui-disasm.h: Update. * tui/tui-data.h (struct tui_exec_info_window): Move to tui-winsource.h. (struct tui_source_window_base): Likewise. * tui/tui-data.c (tui_source_window_base::clear_detail) (tui_source_window_base, ~tui_source_window_base): Move to tui-winsource.c.
2019-07-17Change make_invisible_and_set_new_height to be a methodTom Tromey3-43/+50
This changes make_invisible_and_set_new_height to be a method on tui_win_info. I felt that this was cleaner. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-win.c (tui_resize_all) (tui_source_window_base::update_tab_width) (tui_adjust_win_heights): Update. (tui_win_info::make_invisible_and_set_new_height): Rename from make_invisible_and_set_new_height. * tui/tui-data.h (struct tui_win_info) <make_invisible_and_set_new_height>: New method.
2019-07-17Move tui_source_window to tui-source.hTom Tromey6-31/+44
This moves tui_source_window to tui-source.h. In this case there were no method definitions to be moved. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui.c: Update. * tui/tui-source.h (struct tui_source_window): Move from tui-data.h. * tui/tui-layout.c: Update. * tui/tui-disasm.c: Update. * tui/tui-data.h (struct tui_source_window): Move to tui-source.h.
2019-07-17Move tui_disasm_window to tui-disasm.hTom Tromey3-25/+32
This moves tui_disasm_window to tui-disasm.h. In this case there were no method definitions to be moved. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-disasm.h (struct tui_disasm_window): Move from tui-data.h. * tui/tui-data.h (struct tui_disasm_window): Move to tui-disasm.h.
2019-07-17Move TUI data item window to tui-regs.hTom Tromey5-30/+37
The TUI data item window is only used by the TUI register window. So, this patch moves the relevant code to tui-regs.[ch]. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-regs.h (struct tui_data_item_window): Move from tui-data.h. * tui/tui-regs.c (tui_data_item_window): Move from tui-data.c. * tui/tui-data.h (struct tui_data_item_window): Move to tui-regs.h. * tui/tui-data.c (~tui_data_item_window): Move to tui-regs.c.
2019-07-17Move TUI command window codeTom Tromey8-81/+96
Like the earlier change to the data window, this moves the TUI command window code to tui-command.[ch], and removes the old "structuring" comments from tui-command.c. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui.c: Update. * tui/tui-win.c (tui_cmd_window::do_make_visible_with_new_height) (tui_cmd_window::max_height): Move to tui-command.c. * tui/tui-layout.c: Update. * tui/tui-data.h (struct tui_cmd_window): Move to tui-command.h. * tui/tui-data.c (tui_cmd_window::clear_detail): Move to tui-command.c. * tui/tui-command.h (struct tui_cmd_window): Move from tui-data.h. * tui/tui-command.c: Remove "structuring" comments. (tui_cmd_window::clear_detail) (tui_cmd_window::do_make_visible_with_new_height) (tui_cmd_window::max_height): Move from elsewhere.
2019-07-17Move tui_dispatch_ctrl_char to tui-io.cTom Tromey4-53/+58
tui_dispatch_ctrl_char is only called from a single spot in tui-io.c, so move the function to that file and make it static. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-io.c (tui_dispatch_ctrl_char): Move from tui-command.c. Now static. * tui/tui-command.h (tui_dispatch_ctrl_char): Don't declare. * tui/tui-command.c (tui_dispatch_ctrl_char): Move to tui-io.c.
2019-07-17Rearrange TUI data window codeTom Tromey13-354/+291
An earlier patch caused tui-windata.h to be essentially empty. And, other earlier patches implemented TUI data window methods in any spot that happened to be convenient at the time. This patch rearranges all the data window code to be somewhat more organized. It moves tui_data_window to tui-regs.h, and moves the implementation of all methods to tui-regs.c. It then removes tui-windata.h and tui-windata.c. It also removes the "structuring" comments from tui-regs.c; these are not the usual gdb style, and were out of date anyhow. Finally, it moves _initialize_tui_regs to the end of the file, per the usual gdb convention. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui.c: Update. * tui/tui-wingeneral.c (tui_data_window::refresh_window): Move to tui-regs.c. * tui/tui-windata.h: Remove file. * tui/tui-windata.c: Remove file. * tui/tui-win.c (tui_data_window::set_new_height) (tui_data_window::do_make_visible_with_new_height): Move to tui-regs.c. * tui/tui-regs.h (struct tui_data_window): Move from tui-data.h. * tui/tui-regs.c: Remove "structuring" comments. (tui_data_window::first_data_item_displayed) (tui_data_window::delete_data_content_windows) (tui_data_window::erase_data_content) (tui_data_window::display_all_data) (tui_data_window::refresh_all) (tui_data_window::do_scroll_vertical) (tui_data_window::clear_detail, tui_data_window::set_new_height) (tui_data_window::do_make_visible_with_new_height) (tui_data_window::refresh_window): Move from elsewhere. (_initialize_tui_regs): Move to end of file. * tui/tui-layout.c: Update. * tui/tui-hooks.c: Update. * tui/tui-data.h (struct tui_data_window): Move to tui-regs.h. * tui/tui-data.c (tui_data_window::clear_detail): Move to tui-regs.c. * Makefile.in (SUBDIR_TUI_SRCS): Remove tui-windata.c.
2019-07-17Fix flushing bug in tui_puts_internalTom Tromey2-0/+11
A while back I changed gdb not to flush in some places. It turned out that this broke the TUI a little. An easy way to see it is to run "gdb -tui -nx", then "file gdb" at the gdb prompt. gdb will print the usual "Reading symbols..." message -- but it won't appear on-screen until the reading is complete. This patch changes the TUI to do the equivalent of line buffering in tui_puts_internal. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-io.c (tui_puts_internal): Call wrefresh if newline is seen.
2019-07-17Remove has_locator methodTom Tromey3-14/+11
Earlier changes made it obvious that the has_locator method can only be called for source/disassembly windows. Because the only reference to this now occurs in methods on this object, we can remove the has_locator method entirely, in favor of using the member directly. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-win.c (tui_source_window_base::set_new_height) (tui_source_window_base::do_make_visible_with_new_height): Use m_has_locator field directly. * tui/tui-data.h (struct tui_win_info) <has_locator>: Remove method. (struct tui_source_window_base) <has_locator>: Likewise.
2019-07-17Remove tui_make_visible and tui_make_invisibleTom Tromey5-27/+29
tui_make_visible and tui_make_invisible are just wrappers for a method call, so remove them and have the callers simply make the method call themselves. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-wingeneral.h (tui_make_visible, tui_make_invisible): Don't declare. * tui/tui-wingeneral.c (tui_make_visible, tui_make_invisible): Remove. * tui/tui-win.c (tui_source_window_base::set_new_height) (tui_source_window_base::set_new_height) (make_invisible_and_set_new_height) (tui_source_window_base::do_make_visible_with_new_height) (tui_source_window_base::do_make_visible_with_new_height): Update. * tui/tui-layout.c (show_source_disasm_command, show_data) (show_source_or_disasm_and_command): Update. * tui/tui-layout.c (show_layout): Update.
2019-07-17Remove make_data_windowTom Tromey2-15/+7
As with the previous patches, unifying the creation and re-initialization cases for the data window lets us remove make_data_window in favor of simply using "new". gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-layout.c (make_data_window): Remove. (show_data): Unify creation and re-initialization cases.
2019-07-17Remove make_source_window and make_disasm_windowTom Tromey2-51/+21
This unifies the remaining creation and re-initialization cases for the source and disassembly windows. Once this is done, it's clear that make_source_window and make_disasm_window aren't needed any more, so remove them. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-layout.c (make_source_window, make_disasm_window): Remove. (show_data): Unify creation and re-initialization cases.
2019-07-17Remove make_command_windowTom Tromey2-34/+22
This unifies the creation and re-initialization cases for the command window. When this is done, it becomes clear that make_command_window isn't needed -- it can be replaced with a simple "new", so this is removed as well. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-layout.c (make_command_window): Remove. (show_source_disasm_command, show_source_or_disasm_and_command): Unify creation and re-initialization cases.
2019-07-17Simplify show_source_or_disasm_and_commandTom Tromey2-29/+25
This changes show_source_or_disasm_and_command to unify the creation and re-initialization cases. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-layout.c (show_source_or_disasm_and_command): Unify creation and re-initialization cases.
2019-07-17Change tui_get_register to return voidTom Tromey2-9/+8
tui_get_register returns a tui_status, but nothing checks this, so it can return void instead. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-regs.c (tui_get_register): Return void.
2019-07-17Simplify tui_gen_win_info::make_visibleTom Tromey2-12/+12
I noticed that tui_gen_win_info::make_visible was much wordier than it needed to be. This simplifies it. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-wingeneral.c (tui_gen_win_info::make_visible): Simplify.
2019-07-17Simplify show_source_disasm_commandTom Tromey2-31/+22
This is the first of a few patches to further simplify window (re-)initialization in tui-layout.c. When changing the layout, a window may be created or, if it already exists, simply resized. These two cases normally are identical, but this was obscured by the way the code was written. This patch changes show_source_disasm_command to unify the creation and re-initialization cases. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-layout.c (show_source_disasm_command): Simplify window resetting.
2019-07-17Clean up tui_layout_commandTom Tromey4-64/+61
tui_layout_command is a simple wrapper for tui_set_layout_by_name. This removes the extra layer and cleans up the resulting function a bit -- changing it to call error rather than return a result. This necessitated a small change to tui-regs.c, to avoid calling the function that is being removed. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui.h (tui_set_layout_by_name): Don't declare. * tui/tui-regs.c (tui_reg_layout): New function. (tui_show_registers, tui_reg_command): Use it. * tui/tui-layout.c (LAYOUT_USAGE): Remove. (tui_layout_command): Rename from tui_set_layout_by_name. Change parameters. (tui_layout_command): Remove.
2019-07-17Change tui_set_layout to return voidTom Tromey3-88/+86
tui_set_layout can't meaningfully be called with UNDEFINED_LAYOUT; and instead of trying to handle this case, simply assert and have the function return void. No caller was checking the return value anyway. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-layout.h (tui/tui-layout): Return void. * tui/tui-layout.c (tui_set_layout): Return void. Add assert.
2019-07-17Remove reset_locatorTom Tromey2-27/+19
reset_locator was introduced just a few patches ago, but it's already time to remove it. It consists of a call to the locator's "reset" method, plus a call to tui_make_window; but the latter is redundant at all the places that call reset_locator. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-layout.c (show_source_disasm_command, show_data): Update. (reset_locator): Remove. (show_source_or_disasm_and_command): Update.
2019-07-17Remove the win_type parameter from tui_gen_win_info::resetTom Tromey4-38/+34
tui_gen_win_info::reset has a window type parameter that is only used for an assertion. This made sense as a defensive measure when window creation was more dynamic -- it ensured that one did not make mistakes. However, there's no need for it any more, so this removes it. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-source.c (tui_source_window_base::reset): Remove win_type parameter. * tui/tui-layout.c (make_command_window, make_source_window) (make_disasm_window, make_data_window) (show_source_disasm_command, show_data, tui_gen_win_info::reset) (reset_locator, show_source_or_disasm_and_command): Update. * tui/tui-data.h (struct tui_gen_win_info) <reset>: Remove win_type parameter. (struct tui_source_window_base) <reset>: Likewise.
2019-07-17Introduce reset_locator function in tui-layout.cTom Tromey2-66/+31
init_and_make_win in tui-layout.c is now only called for the locator -- earlier changes have made most of the cases here obsolete. This patch removes init_and_make_win and introduces a reset_locator function. Window creation is now much simpler to follow, because it is no longer quite so dynamic. (Though it will become even simpler in coming patches.) gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-layout.c (show_source_disasm_command): Use reset_locator. (reset_locator): New function. (init_and_make_win): Remove. (show_source_or_disasm_and_command): Use reset_locator.
2019-07-17Always create an execution info window for a source windowTom Tromey7-126/+105
A source or disassembly window will always have an "execution info" window (the window along the side that displays breakpoint info), but this isn't immediately clear from the source. As a result, some code has checks to see whether the execution_info is NULL. This changes the source window base class to always instantiate an execution_info window, then updates the rest of the code. It also simplifies window creation in tui-layout.c. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-winsource.c (tui_set_exec_info_content): Remove condition. * tui/tui-wingeneral.c (tui_source_window_base::make_visible): Remove condition. * tui/tui-source.c (tui_source_window_base::reset): New method. * tui/tui-layout.c (make_command_window): Don't call init_and_make_win. (make_source_window, make_disasm_window): Don't call make_source_or_disasm_window. (make_data_window): Don't call init_and_make_win. Change calling convention. (show_source_disasm_command, show_data): Simplify. (make_source_or_disasm_window): Remove. (show_source_or_disasm_and_command): Simplify. * tui/tui-data.h (struct tui_gen_win_info) <reset>: Now virtual. (struct tui_source_window_base) <reset>: Likewise. <execution_info>: Remove initializer. * tui/tui-data.c (tui_source_window_base): Initialize execution_info.
2019-07-17Remove some dead code from tui_set_layoutTom Tromey2-13/+9
tui_set_layout sets regs_populate using: regs_populate = (new_layout == SRC_DATA_COMMAND || new_layout == DISASSEM_DATA_COMMAND); Then later it checks this variable: if (!regs_populate && (new_layout == SRC_DATA_COMMAND || new_layout == DISASSEM_DATA_COMMAND)) However, this is equivalent to "!regs_populate && regs_populate", which can never be true. So, remove the dead code and the variable. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-layout.c (tui_set_layout): Remove regs_populate variable.
2019-07-17Remove TUI data window special caseTom Tromey4-13/+15
The TUI has a couple of special cases for updating the data window: one in tui_rl_other_windowand one in tui_set_focus_command. As part of the project to remove references to globals, I wanted to remove these calls; but when I did, some simple operations (like "C-x o") would cause the register window to blank. This fixes the underlying problem by arranging for the data window's refresh_window method to call the superclass method first, and then to refresh the child windows. Then the special cases can be removed. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui.c (tui_rl_other_window): Update. * tui/tui-wingeneral.c (tui_data_window::refresh_window): Call superclass method first. Always iterate over regs_content. (tui_unhighlight_win, tui_highlight_win): Use refresh_window method. * tui/tui-win.c (tui_set_focus_command): Update.
2019-07-17Remove tui_set_focusTom Tromey2-11/+9
tui_set_focus_command is a simple wrapper for tui_set_focus, so rename the latter and remove the wrapper function. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-win.c (tui_set_focus_command): Rename from tui_set_focus. Call tui_enable. (tui_set_focus_command): Remove.
2019-07-17Merge refresh and refresh_window methodsTom Tromey5-29/+29
Earlier refactorings introduced the refresh and refresh_window methods, following the previous TUI code. However, these methods are essentially the same, so this patch merges them. It also removes some redundant refresh_window calls, because the execution window is updated automatically by the corresponding source (or disassembly) window. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-winsource.c (tui_show_exec_info_content): Don't call refresh_window. * tui/tui-wingeneral.c (tui_gen_win_info::refresh_window): Call touchwin. (tui_data_window::refresh_window): Call refresh_window on data items. Always call superclass refresh_window. (tui_win_info::refresh): Remove. (tui_source_window_base::refresh_window): Update. (tui_refresh_all): Update. * tui/tui-layout.c (show_source_disasm_command): Remove call to refresh_window. (show_source_or_disasm_and_command): Likewise. * tui/tui-data.h (struct tui_win_info) <refresh>: Remove. (struct tui_source_window_base) <refresh>: Likewise.