aboutsummaryrefslogtreecommitdiff
path: root/gdb
AgeCommit message (Collapse)AuthorFilesLines
2019-01-05GDB crash re-running program on Windows (native)Joel Brobecker3-17/+27
Running any program twice on Windows current results in GDB crashing: $ gdb -q any_program (gdb) run $ gdb dummy -batch -ex run -ex run [New Thread 684960.0xe5878] [New Thread 684960.0xd75ac] [New Thread 684960.0xddac8] [New Thread 684960.0xc1f50] [Thread 684960.0xd75ac exited with code 0] [Thread 684960.0xddac8 exited with code 0] [Thread 684960.0xc1f50 exited with code 0] [Inferior 1 (process 684960) exited normally] (gdb) run Segmentation fault The crash happens while processing the CREATE_PROCESS_DEBUG_EVENT for the second run; in particular, we have in get_windows_debug_event: | case CREATE_PROCESS_DEBUG_EVENT: | [...] | if (main_thread_id) | windows_delete_thread (ptid_t (current_event.dwProcessId, 0, | main_thread_id), | 0); The problem is that main_thread_id is the TID of the main thread from the *previous* inferior, and this code is trying to delete that thread. The problem is that it is constructing a PTID by pairing the TID of the previous inferior with the PID of the new inferior. As a result, when we dig inside windows_delete_thread to see how it would handle that, we see... | delete_thread (find_thread_ptid (ptid)); Since the PTID is bogus, we end up calling delete_thread with a NULL thread_info. It used to be harmless, turning the delete_thread into a nop, but the following change... | commit 080363310650c93ad8e93018bcb6760ba5d32d1c | Date: Thu Nov 22 16:09:14 2018 +0000 | Subject: Per-inferior thread list, thread ranges/iterators, down with ALL_THREADS, etc. ... changed delete_thread to get the list of threads from the inferior, which itself is now accessed via the given thread_info. This is the corresponding diff that shows the change: | - for (tp = thread_list; tp; tpprev = tp, tp = tp->next) | + for (tp = thr->inf->thread_list; tp; tpprev = tp, tp = tp->next) As a result of this, passing a NULL thread_info is no longer an option! Stepping back a bit, the reason behind deleting the thread late could be found in a patch from Dec 2003, which laconically explains: | commit 87a45c96062d658ca83b50aa060a648bf5f5f1ff | Date: Fri Dec 26 00:39:04 2003 +0000 | | * win32-nat.c (get_child_debug_event): Keep main thread id around | even after thread exits since Windows insists on continuing to | report events against it. A look at the gdb-patches archives did not provide any additional clues (https://www.sourceware.org/ml/gdb-patches/2003-12/msg00478.html). It is not clear whether this is still needed or not. This patch assumes that whatever isue there was, the versions of Windows we currently support no longer have it. With that in mind, this commit fixes the issue by deleting the thread when the inferior sends the exit-process event as opposed to deleting it later, while starting a new inferior. This also restores the printing of the thread-exit notification for the main thread, which was missing before. Looking at the transcript of the example shown above, we can see 4 thread creation notifications, and only 3 notifications for thread exits. Now creation and exit notifications are balanced. In the handling of EXIT_THREAD_DEBUG_EVENT, the main_thread_id check is removed because deemed unnecessary: The main thread was introduced by a CREATE_PROCESS_DEBUG_EVENT, and thus the kernel is expected to report its death via EXIT_PROCESS_DEBUG_EVENT. And finally, because the behavior of delete_thread did change (albeit when getting a value we probably never expected to receive), this patch also adds a gdb_assert. The purpose is to provide some immediate information in case there are other callers that mistakenly call delete_thread with a NULL thread info. This can be useful information when direct debugging of GDB isn't an option. gdb/ChangeLog: * thread.c (delete_thread_1): Add gdb_assert that THR is not NULL. Initialize tpprev to NULL instead of assigning it to NULL on the next statement. * windows-nat.c (windows_delete_thread): Remove check for main_thread_id before printing thread exit notifications. (get_windows_debug_event) <EXIT_THREAD_DEBUG_EVENT>: Remove thread ID check against main_thread_id. <CREATE_PROCESS_DEBUG_EVENT>: Remove call to windows_delete_thread. <EXIT_PROCESS_DEBUG_EVENT>: Add call to windows_delete_thread.
2019-01-04Use upper case for more metasyntactic variables in gdbTom Tromey6-10/+24
I noticed a few places where a Usage line in gdb did not use upper case for metasyntactic variables. This patch fixes all the instances I found. Tested on x86-64 Fedora 28. gdb/ChangeLog 2019-01-04 Tom Tromey <tom@tromey.com> * compile/compile.c (_initialize_compile): Use upper case for metasyntactic variables. * symmisc.c (_initialize_symmisc): Use upper case for metasyntactic variables. * psymtab.c (_initialize_psymtab): Use upper case for metasyntactic variables. * demangle.c (demangle_command): Use upper case for metasyntactic variables. (_initialize_demangler): Likewise. * ax-gdb.c (_initialize_ax_gdb): Use upper case for metasyntactic variables.
2019-01-03Use xstrdup in tui_set_source_contentTom Tromey2-7/+5
valgrind pointed out that the string copy in tui_set_source_content was not allocating space for the trailing \0: ==3941== Invalid write of size 1 ==3941== at 0x4C3239F: strcpy (vg_replace_strmem.c:512) ==3941== by 0x72036B: strcpy (string_fortified.h:90) ==3941== by 0x72036B: tui_set_source_content(symtab*, int, int) (tui-source.c:203) Looking closer, I don't think there's a need to check the line width here, so this patch changes it to use xstrdup. Tested by re-running the TUI under valgrind. There are still other valgrind reports from TUI code, but this one is gone. gdb/ChangeLog 2019-01-03 Tom Tromey <tom@tromey.com> * tui/tui-source.c (tui_set_source_content): Use xstrdup.
2019-01-03Avoid questionable casts in py-symtab.cTom Tromey2-16/+30
py-symtab.c has some questionable casts of Py_None to symtab_object*. This patch avoids these casts by instead using downcasts at the appropriate places. gdb/ChangeLog 2019-01-03 Tom Tromey <tom@tromey.com> * python/py-symtab.c (salpy_str): Update. (struct salpy_sal_object) <symtab>: Now a PyObject. (salpy_dealloc): Update. (del_objfile_sal): Use gdbpy_ref.
2019-01-03Improve reference counting in py-type.cTom Tromey2-32/+33
This improves the reference counting in py-type.c by using gdbpy_ref and gdbpy_ref::new_reference in more places. gdb/ChangeLog 2019-01-03 Tom Tromey <tom@tromey.com> * python/py-type.c (convert_field): Use new_reference. Return gdbpy_ref. (make_fielditem): Return gdbpy_ref. (typy_fields): Update. (typy_getitem): Update. (field_name): Return gdbpy_ref. Use new_reference. (typy_iterator_iternext): Update.
2019-01-03Simplify gdbpy_stop_recordingTom Tromey2-6/+6
This simplifies gdbpy_stop_recording, by having it use Py_RETURN_NONE rather than writing it out manually, and by usin the idiomatic GDB_PY_HANDLE_EXCEPTION. gdb/ChangeLog 2019-01-03 Tom Tromey <tom@tromey.com> * python/py-record.c (gdbpy_stop_recording): Use Py_RETURN_NONE.
2019-01-03Remove more uses of explicit reference counting in PythonTom Tromey7-57/+39
This changes some more place in the Python code to use gdbpy_ref rather than explicit reference counting. While doing this I found a latent bug in typy_fields_items -- it was not checking for errors in one spot. I also changed valpy_dealloc to use Py_XDECREF rather than an explicit "if". gdb/ChangeLog 2019-01-03 Tom Tromey <tom@tromey.com> * python/py-value.c (valpy_dealloc): Use Py_XDECREF. * python/py-type.c (typy_fields_items): Use gdbpy_ref. * python/py-progspace.c (pspy_set_printers): Use gdbpy_ref. (pspy_set_frame_filters, pspy_set_frame_unwinders) (pspy_set_type_printers): Likewise. * python/py-function.c (fnpy_init): Use gdbpy_ref. * python/py-cmd.c (cmdpy_init): Use gdbpy_ref. * python/py-objfile.c (objfpy_set_printers): Use gdbpy_ref. (objfpy_set_frame_filters, objfpy_set_frame_unwinders) (objfpy_set_type_printers): Likewise.
2019-01-03Use a wrapper for PyErr_FetchTom Tromey7-73/+121
This introduces a new class that wraps PyErr_Fetch and PyErr_Restore, and then changes all the callers in gdb to use it. This reduces the amount of explicit reference counting that is done in the Python code. I also found and fixed a latent bug in gdbpy_print_stack -- it was not correctly checking some error conditions, nor clearing the exception when needed. gdb/ChangeLog 2019-01-03 Tom Tromey <tom@tromey.com> * python/python.c (gdbpy_enter, ~gdbpy_enter): Update. (gdbpy_print_stack): Use gdbpy_err_fetch. * python/python-internal.h (class gdbpy_err_fetch): New class. (class gdbpy_enter) <m_error_type, m_error_value, m_error_traceback>: Remove. <m_error>: New member. (gdbpy_exception_to_string): Don't declare. * python/py-varobj.c (py_varobj_iter_next): Use gdbpy_err_fetch. * python/py-value.c (convert_value_from_python): Use gdbpy_err_fetch. * python/py-utils.c (gdbpy_err_fetch::to_string): Rename from gdbpy_exception_to_string. (gdbpy_handle_exception): Use gdbpy_err_fetch. * python/py-prettyprint.c (print_stack_unless_memory_error): Use gdbpy_err_fetch.
2019-01-03gdb: Remove cleanup from linux_nat_target::follow_forkAndrew Burgess2-11/+24
Remove cleanup from linux_nat_target::follow_fork, instead add a new unique_ptr specialisation for holding lwp_info pointers and use this to ensure the pointer is cleaned up when needed. gdb/ChangeLog: * linux-nat.c (delete_lwp_cleanup): Delete. (struct lwp_deleter): New struct. (lwp_info_up): New typedef. (linux_nat_target::follow_fork): Delete cleanup, and make use of lwp_info_up.
2019-01-03gdb: Remove cleanup from linux-fork.c:inferior_call_waitpidAndrew Burgess2-41/+65
Replace cleanup in linux-fork.c:inferior_call_waitpid with a RAII object. gdb/ChangeLog: * linux-fork.c (class scoped_switch_fork_info): New class. (inferior_call_waitpid): Update to use scoped_switch_fork_info.
2019-01-03gdb: Remove final cleanup from find_overload_matchAndrew Burgess2-6/+5
This patch removes the setup of a null_cleanup in valops.c:find_overload_match, and all the calls to do_cleanups. gdb/ChangeLog: * valops.c (find_overload_match): Remove use of null_cleanup, and calls to do_cleanups.
2019-01-03gdb: Remove a cleanup from find_overload_matchAndrew Burgess5-14/+23
This patch changes cp-support.c:cp_func_name to return a 'gdb::unique_xmalloc_ptr<char>' instead of a 'char *'. This allows a cleanup to be removed from valops.c:find_overload_match. gdb/ChangeLog: * compile/compile-cplus-types.c (compile_cplus_instance::decl_name): Handle changes to cp_func_name. * cp-support.c (cp_func_name): Update header comment, update return type. * cp-support.h (cp_func_name): Update return type in declaration. * valops.c (find_overload_match): Move temp_func local to top level of function and change its type. Use temp_func to hold and delete temporary string obtained from cp_func_name.
2019-01-03gdb/remote: Remove a cleanup in remote_check_symbolsAndrew Burgess2-10/+16
Convert one of the variables that requires a cleanup from a 'char *' to a 'gdb::char_vector' in remote_target::remote_check_symbols. Tested on x86-64/Linux with target_board native-gdbserver and native-extended-gdbserver. gdb/ChangeLog: * remote.c (remote_target::remote_check_symbols): Convert `msg` to gdb::char_vector, remove cleanup, and update uses of `msg`.
2019-01-03RISC-V: Fix wrong use of s0 register name.Jim Wilson2-1/+5
s0 is listed as both an int register name and an FP register name. The FP reg name is wrong. This looks like a simple editting error, and has an easy fix. Tested with riscv64-linux build and check, with no regressions. gdb/ * riscv-tdep.c (riscv_freg_feature): Drop s0 name from f8.
2019-01-02Remove a cleanup from target-descriptions.cTom Tromey4-19/+31
This removes a cleanup from target-descriptions.c, by changing it to use a unique_ptr instead. Note that a deletion adapter is used, even though target_desc is allocated with new, to avoid moving target_desc to target-descriptions.h. gdb/ChangeLog 2019-01-02 Tom Tromey <tom@tromey.com> * xml-tdesc.c (xml_cache): Hold a target_desc_up. (tdesc_parse_xml): Remove cleanups. * target-descriptions.h (make_cleanup_free_target_description): Don't declare. (target_desc_deleter): New struct. (target_desc_up): New typedef. * target-descriptions.c (target_desc_deleter::operator()): Rename from free_target_description. (make_cleanup_free_target_description): Remove.
2019-01-02Remove cleanups from linespec.cTom Tromey2-86/+66
This removes the remaining cleanups from linespec.c. This adds a constructor and destructor to linespec_parser, but in a minimal way -- the parser could still benefit from a bit more C++-ification. gdb/ChangeLog 2019-01-02 Tom Tromey <tom@tromey.com> * linespec.c (struct linespec_parser): Rename from ls_parser. Add constructor, destructor. (linespec_parser): Remove typedef. (~linespec_parser): Rename from linespec_parser_delete. (linespec_lex_to_end, linespec_complete_label) (linespec_complete): Update. (decode_line_full): Remove cleanups. (decode_line_1): Update.
2019-01-02Change inferior_to_inferior_object to return a gdbpy_refTom Tromey5-16/+31
Most callers of inferior_to_inferior_object already use a gdbpy_ref, so this changes inferior_to_inferior_object to return one. Doing this revealed that create_thread_object was not correctly handling the case where inferior_to_inferior_object failed, so this patch fixes this as well. gdb/ChangeLog 2019-01-02 Tom Tromey <tom@tromey.com> * python/python-internal.h (inferior_to_inferior_object): Change return type. * python/py-exitedevent.c (create_exited_event_object): Update. * python/py-inferior.c (inferior_to_inferior_object): Return gdbpy_ref. (python_new_inferior, python_inferior_deleted) (thread_to_thread_object, delete_thread_object) (build_inferior_list, gdbpy_selected_inferior): Update. * python/py-infthread.c (create_thread_object): Update. Also fail if inferior_to_inferior_object fails.
2019-01-02Place displaced step data directly in inferior structureSimon Marchi4-122/+91
This patch moves the per-inferior data related to displaced stepping to be directly in the inferior structure, rather than in a container on the side. On notable difference is that previously, we deleted the state on inferior exit, which guaranteed a clean state if re-using the inferior for a new run or attach. We now need to reset the state manually. At the same time, I changed step_saved_copy to be a gdb::byte_vector, so it is automatically freed on destruction (which should plug the leak reported here [1]). [1] https://sourceware.org/ml/gdb-patches/2018-11/msg00202.html gdb/ChangeLog: * inferior.h (class inferior) <displaced_step_state>: New field. * infrun.h (struct displaced_step_state): Move here from infrun.c. Initialize fields, add constructor. <inf>: Remove field. <reset>: New method. * infrun.c (struct displaced_step_inferior_state): Move to infrun.h. (displaced_step_inferior_states): Remove. (get_displaced_stepping_state): Adust. (displaced_step_in_progress_any_inferior): Adjust. (displaced_step_in_progress_thread): Adjust. (displaced_step_in_progress): Adjust. (add_displaced_stepping_state): Remove. (get_displaced_step_closure_by_addr): Adjust. (remove_displaced_stepping_state): Remove. (infrun_inferior_exit): Call displaced_step_state.reset. (use_displaced_stepping): Don't check for NULL. (displaced_step_prepare_throw): Call get_displaced_stepping_state. (displaced_step_fixup): Don't check for NULL. (prepare_for_detach): Don't check for NULL.
2019-01-02Fix leak of struct call_thread_fsm in call_function_by_hand_dummy.Philippe Waroquiers2-2/+9
When the call does not complete, the call_thread_fsm allocated by new_call_thread_fsm is not cleaned up and deleted, which causes the following leak e.g. in gdb.base/callfuncs.exp: ==29263== 560 bytes in 7 blocks are definitely lost in loss record 2,833 of 3,341 ==29263== at 0x4C2E0BC: calloc (vg_replace_malloc.c:762) ==29263== by 0x405110: xcalloc (common-utils.c:84) ==29263== by 0x4E67EB: xcnew<call_thread_fsm> (poison.h:122) ==29263== by 0x4E67EB: new_call_thread_fsm (infcall.c:516) ==29263== by 0x4E67EB: call_function_by_hand_dummy(value*, type*, gdb::array_view<value*>, void (*)(void*, int), void*) (infcall.c:1154) ==29263== by 0x4E784E: call_function_by_hand(value*, type*, gdb::array_view<value*>) (infcall.c:693) ==29263== by 0x496111: eval_call(expression*, noside, int, value**, char const*, type*) [clone .isra.5] (eval.c:835) Fix the leak by similarly doing cleanup/destroy when restoring previous state machine. Tested on debian/amd64, natively and under valgrind. 2019-01-02 Philippe Waroquiers <philippe.waroquiers@skynet.be> * infcall.c (call_function_by_hand_dummy): cleanup/destroy sm in case of call that did not complete.
2019-01-02Fix search of debug files for remote debuggeeAndrey Utkin2-3/+12
When using remote debugging server, and when debuggee filename is inferred via qXfer:exec-file:read request, or sysroot starts with "target:", this "target:" prefix of filepaths is not treated correctly during debug file search - it appears in the middle of the looked up paths. In the following example, unpatched GDB can't find separate debug files for neither the executable, nor standard libraries: $ gdb -ex 'set debug separate-debug-file 1' -ex 'set sysroot target:/' -ex 'set debug-file-directory /usr/lib/debug:/home/j/hide' -ex 'target remote :3333' -ex 'break main' -ex 'continue' -ex 'bt' -ex 'info sharedlibrary' -ex 'set confirm off' -ex 'quit' GNU gdb (Gentoo 9999 vanilla) 8.2.50.20181109-git Copyright (C) 2018 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-pc-linux-gnu". Type "show configuration" for configuration details. For bug reporting instructions, please see: <https://bugs.gentoo.org/>. Find the GDB manual and other documentation resources online at: <http://www.gnu.org/software/gdb/documentation/>. For help, type "help". Type "apropos word" to search for commands related to "word". Remote debugging using :3333 Reading /home/j/test from remote target... warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead. Reading /home/j/test from remote target... Reading symbols from target:/home/j/test... Looking for separate debug info (debug link) for target:/home/j/test Trying target:/home/j/test.debug Reading /home/j/test.debug from remote target... Trying target:/home/j/.debug/test.debug Reading /home/j/.debug/test.debug from remote target... Trying /usr/lib/debug/target:/home/j/test.debug Trying /home/j/hide/target:/home/j/test.debug (No debugging symbols found in target:/home/j/test) Reading /lib64/ld-linux-x86-64.so.2 from remote target... Reading /lib64/ld-linux-x86-64.so.2 from remote target... Reading symbols from target:/lib64/ld-linux-x86-64.so.2... Looking for separate debug info (debug link) for target:/lib64/ld-linux-x86-64.so.2 Trying target:/lib64/ld-2.27.so.debug Reading /lib64/ld-2.27.so.debug from remote target... Trying target:/lib64/.debug/ld-2.27.so.debug Reading /lib64/.debug/ld-2.27.so.debug from remote target... Trying /usr/lib/debug/target:/lib64/ld-2.27.so.debug Trying /home/j/hide/target:/lib64/ld-2.27.so.debug (No debugging symbols found in target:/lib64/ld-linux-x86-64.so.2) Looking for separate debug info (build-id) for system-supplied DSO at 0x7ffff7ffa000 Trying /usr/lib/debug/.build-id/fd/03d584bc1a90ba28be457635a02662c9f9c1f2.debug Trying /home/j/hide/.build-id/fd/03d584bc1a90ba28be457635a02662c9f9c1f2.debug 0x00007ffff7dd7000 in ?? () from target:/lib64/ld-linux-x86-64.so.2 Breakpoint 1 at 0x4005eb Continuing. Reading /lib64/libpthread.so.0 from remote target... Reading /lib64/libc.so.6 from remote target... Looking for separate debug info (debug link) for target:/lib64/libpthread.so.0 Trying target:/lib64/libpthread-2.27.so.debug Reading /lib64/libpthread-2.27.so.debug from remote target... Trying target:/lib64/.debug/libpthread-2.27.so.debug Reading /lib64/.debug/libpthread-2.27.so.debug from remote target... Trying /usr/lib/debug/target:/lib64/libpthread-2.27.so.debug Trying /home/j/hide/target:/lib64/libpthread-2.27.so.debug Looking for separate debug info (debug link) for target:/lib64/libc.so.6 Trying target:/lib64/libc-2.27.so.debug Reading /lib64/libc-2.27.so.debug from remote target... Trying target:/lib64/.debug/libc-2.27.so.debug Reading /lib64/.debug/libc-2.27.so.debug from remote target... Trying /usr/lib/debug/target:/lib64/libc-2.27.so.debug Trying /home/j/hide/target:/lib64/libc-2.27.so.debug Breakpoint 1, 0x00000000004005eb in main () #0 0x00000000004005eb in main () From To Syms Read Shared Object Library 0x00007ffff7dd6e80 0x00007ffff7df4650 Yes (*) target:/lib64/ld-linux-x86-64.so.2 0x00007ffff7bbbb70 0x00007ffff7bcbfee Yes (*) target:/lib64/libpthread.so.0 0x00007ffff780f200 0x00007ffff7962d7c Yes (*) target:/lib64/libc.so.6 (*): Shared library is missing debugging information. With current fix, the paths used always have target: in the beginning and this helps to find all debug files: $ gdb -ex 'set debug separate-debug-file 1' -ex 'set sysroot target:/' -ex 'set debug-file-directory /usr/lib/debug:/home/j/hide' -ex 'target remote :3333' -ex 'break main' -ex 'continue' -ex 'bt' -ex 'info sharedlibrary' -ex 'set confirm off' -ex 'quit' GNU gdb (Gentoo 9999 vanilla) 8.2.50.20181109-git Copyright (C) 2018 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-pc-linux-gnu". Type "show configuration" for configuration details. For bug reporting instructions, please see: <https://bugs.gentoo.org/>. Find the GDB manual and other documentation resources online at: <http://www.gnu.org/software/gdb/documentation/>. For help, type "help". Type "apropos word" to search for commands related to "word". Remote debugging using :3333 Reading /home/j/test from remote target... warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead. Reading /home/j/test from remote target... Reading symbols from target:/home/j/test... Looking for separate debug info (debug link) for target:/home/j/test Trying target:/home/j/test.debug Reading /home/j/test.debug from remote target... Trying target:/home/j/.debug/test.debug Reading /home/j/.debug/test.debug from remote target... Trying target:/usr/lib/debug//home/j/test.debug Reading /usr/lib/debug//home/j/test.debug from remote target... Trying target:/home/j/hide//home/j/test.debug Reading /home/j/hide//home/j/test.debug from remote target... Reading /home/j/hide//home/j/test.debug from remote target... Reading symbols from target:/home/j/hide//home/j/test.debug... Reading /lib64/ld-linux-x86-64.so.2 from remote target... Reading /lib64/ld-linux-x86-64.so.2 from remote target... Reading symbols from target:/lib64/ld-linux-x86-64.so.2... Looking for separate debug info (debug link) for target:/lib64/ld-linux-x86-64.so.2 Trying target:/lib64/ld-2.27.so.debug Reading /lib64/ld-2.27.so.debug from remote target... Trying target:/lib64/.debug/ld-2.27.so.debug Reading /lib64/.debug/ld-2.27.so.debug from remote target... Trying target:/usr/lib/debug//lib64/ld-2.27.so.debug Reading /usr/lib/debug//lib64/ld-2.27.so.debug from remote target... Reading /usr/lib/debug//lib64/ld-2.27.so.debug from remote target... Reading symbols from target:/usr/lib/debug//lib64/ld-2.27.so.debug... Looking for separate debug info (build-id) for system-supplied DSO at 0x7ffff7ffa000 Trying /usr/lib/debug/.build-id/fd/03d584bc1a90ba28be457635a02662c9f9c1f2.debug Trying /home/j/hide/.build-id/fd/03d584bc1a90ba28be457635a02662c9f9c1f2.debug 0x00007ffff7dd7000 in _start () from target:/lib64/ld-linux-x86-64.so.2 Breakpoint 1 at 0x4005ef: file test/test16.c, line 13. Continuing. Reading /lib64/libpthread.so.0 from remote target... Reading /lib64/libc.so.6 from remote target... Looking for separate debug info (debug link) for target:/lib64/libpthread.so.0 Trying target:/lib64/libpthread-2.27.so.debug Reading /lib64/libpthread-2.27.so.debug from remote target... Trying target:/lib64/.debug/libpthread-2.27.so.debug Reading /lib64/.debug/libpthread-2.27.so.debug from remote target... Trying target:/usr/lib/debug//lib64/libpthread-2.27.so.debug Reading /usr/lib/debug//lib64/libpthread-2.27.so.debug from remote target... Reading /usr/lib/debug//lib64/libpthread-2.27.so.debug from remote target... Looking for separate debug info (debug link) for target:/lib64/libc.so.6 Trying target:/lib64/libc-2.27.so.debug Reading /lib64/libc-2.27.so.debug from remote target... Trying target:/lib64/.debug/libc-2.27.so.debug Reading /lib64/.debug/libc-2.27.so.debug from remote target... Trying target:/usr/lib/debug//lib64/libc-2.27.so.debug Reading /usr/lib/debug//lib64/libc-2.27.so.debug from remote target... Reading /usr/lib/debug//lib64/libc-2.27.so.debug from remote target... Breakpoint 1, main () at test/test16.c:13 13 for ( i=0; i<10; ++i) #0 main () at test/test16.c:13 From To Syms Read Shared Object Library 0x00007ffff7dd6e80 0x00007ffff7df4650 Yes target:/lib64/ld-linux-x86-64.so.2 0x00007ffff7bbbb70 0x00007ffff7bcbfee Yes target:/lib64/libpthread.so.0 0x00007ffff780f200 0x00007ffff7962d7c Yes target:/lib64/libc.so.6 gdb/ChangeLog: 2018-11-09 Andrey Utkin <autkin@undo.io> * symfile.c (find_separate_debug_file): Fix search of debug files for remote debuggee. Signed-off-by: Andrey Utkin <autkin@undo.io>
2019-01-02Style improvements in gdb/pythonTom Tromey6-10/+17
This fixes a few minor style issues I found in gdb/python: some unnecessary casts, the removal of an unnecessary local variable, and one instance of incorrect formatting. Tested by rebuilding and re-running gdb.python. gdb/ChangeLog 2019-01-02 Tom Tromey <tom@tromey.com> * python/py-inferior.c (gdbpy_initialize_inferior): Fix indentation. * python/py-frame.c (frapy_older): Remove cast. (frapy_newer): Likewise. * python/py-breakpoint.c (local_setattro): Remove cast. * python/py-arch.c (archpy_name): Remove local variable. * python/py-type.c (gdbpy_lookup_type): Remove cast.
2019-01-02Fix year range in unittests/.../char/empty.cc copyright headerJoel Brobecker2-1/+6
The year range in the copyright header of that file was incorrect: // Copyright (C) 3 Free Software Foundation, Inc. Tracing the origin of this file down, I found that it was copied from GCC's libstdc++-v3 testsuite: Adapt and integrate string_view tests https://www.sourceware.org/ml/gdb-patches/2018-04/msg00113.html Looking at the version in GCC, I found the same issue, so sent a fix there: https://gcc.gnu.org/ml/gcc-patches/2019-01/msg00000.html Now that the fix is in GCC, this commit applies the same fix to our copy. gdb/ChangeLog: * unittests/basic_string_view/element_access/char/empty.cc: Fix year range in copyright header.
2019-01-01gdb/riscv: Split ISA and ABI featuresAndrew Burgess4-57/+105
The goal of this commit is to allow RV64 binaries compiled for the 'F' extension to run on a target that supports both the 'F' and 'D' extensions. The 'D' extension depends on the 'F' extension and chapter 9 of the RISC-V ISA manual implies that running a program compiled for 'F' on a 'D' target should be fine. To support this the gdbarch now holds two feature sets, one represents the features that are present on the target, and one represents the features requested in the ELF flags. The existing error checks are relaxed slightly to allow binaries compiled for 32-bit 'F' extension to run on targets with the 64-bit 'D' extension. A new set of functions called riscv_abi_{xlen,flen} are added to compliment the existing riscv_isa_{xlen,flen}, and some callers to the isa functions now call the abi functions when that is appropriate. In riscv_call_arg_struct two asserts are removed, these asserts no longer make sense. The asserts were both like this: gdb_assert (TYPE_LENGTH (ainfo->type) <= (cinfo->flen + cinfo->xlen)); And were made in two cases, when passing structures like these: struct { integer field1; float field2; }; or, struct { float field1; integer field2; }; When running on an RV64 target which only has 32-bit float then the integer field could be 64-bits, while if the float field is 32-bits the overall size of the structure can be 128-bits (with 32-bits of padding). In this case the assertion would fail, however, the code isn't incorrect, so its safe to just remove the assertion. This was tested by running on an RV64IMFDC target using a compiler configured for RV64IMFC, and comparing the results with those obtained when using a compiler configured for RV64IMFDC. The only regressions I see (now) are in gdb.base/store.exp and are related too different code generation choices GCC makes between the two targets. Finally, this commit does not make any attempt to support running binaries compiled for RV32 on an RV64 target, though nothing in here should prevent that being supported in the future. gdb/ChangeLog: * arch/riscv.h (struct riscv_gdbarch_features) <hw_float_abi>: Delete. <operator==>: Update with for removed field. <hash>: Likewise. * riscv-tdep.h (struct gdbarch_tdep) <features>: Renamed to... <isa_features>: ...this. <abi_features>: New field. (riscv_isa_flen): Update comment. (riscv_abi_xlen): New declaration. (riscv_abi_flen): New declaration. * riscv-tdep.c (riscv_isa_xlen): Update to get answer from isa_features. (riscv_abi_xlen): New function. (riscv_isa_flen): Update to get answer from isa_features. (riscv_abi_flen): New function. (riscv_has_fp_abi): Update to get answer from abi_features. (riscv_call_info::riscv_call_info): Use abi xlen and flen, not isa xlen and flen. (riscv_call_info) <xlen, flen>: Update comment. (riscv_call_arg_struct): Remove invalid assertions (riscv_features_from_gdbarch_info): Update now hw_float_abi field is removed. (riscv_gdbarch_init): Gather isa features and abi features separately, ensure both match on the gdbarch when reusing an old gdbarch. Relax an error check to allow 32-bit abi float to run on a target with 64-bit float hardware.
2019-01-01Fix 'Invalid read of size 4' in search_command_helperPhilippe Waroquiers2-0/+7
Valgrind detects the below error in gdb.base/list.exp. ==14763== Invalid read of size 4 ==14763== at 0x60B584: search_command_helper(char const*, int, bool) [clone .constprop.91] (source.c:1601) ==14763== by 0x408888: cmd_func(cmd_list_element*, char const*, int) (cli-decode.c:1892) ==14763== by 0x668550: execute_command(char const*, int) (top.c:630) ==14763== by 0x4B2F7B: command_handler(char const*) (event-top.c:583) ==14763== by 0x4B326C: command_line_handler(std::unique_ptr<char, gdb::xfree_deleter<char> >&&) (event-top.c:772) ... ==14763== Address 0x6d9f09c is 4 bytes before a block of size 156 alloc'd ==14763== at 0x4C2E2B3: realloc (vg_replace_malloc.c:836) ==14763== by 0x41904C: xrealloc (common-utils.c:62) ==14763== by 0x60A300: find_source_lines(symtab*, int) (source.c:1203) ==14763== by 0x608219: source_cache::get_plain_source_lines(symtab*, int, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) (source-cache.c:51) ==14763== by 0x60A46B: print_source_lines_base(symtab*, int, int, enum_flags<print_source_lines_flag>) (source.c:1350) ==14763== by 0x404E2D: list_command(char const*, int) (cli-cmds.c:1080) .... Add the missing condition to end the loop once line 1 has been reversed-searched. gdb/ChangeLog 2019-01-01 Philippe Waroquiers <philippe.waroquiers@skynet.be> * source.c (search_command_helper): Stop reverse search when line 1 has been searched.
2019-01-01Fix leak in record-full.cPhilippe Waroquiers2-8/+9
valgrind detects leaks in several gdb.reverse tests, such as the below in gdb.reverse/watch-precsave.exp. Fix the leak by rewriting the loop that frees record_full_core_buf_list. gdb/ChangeLog 2019-01-01 Philippe Waroquiers <philippe.waroquiers@skynet.be> * record-full.c (record_full_base_target::close): Rewrite record_full_core_buf_list free logic. ==18847== VALGRIND_GDB_ERROR_BEGIN ==18847== 4,120 (24 direct, 4,096 indirect) bytes in 1 blocks are definitely lost in loss record 3,094 of 3,199 ==18847== at 0x4C2BE6D: malloc (vg_replace_malloc.c:309) ==18847== by 0x405097: xmalloc (common-utils.c:44) ==18847== by 0x5AF8EA: xnew<record_full_core_buf_entry> (poison.h:110) ==18847== by 0x5AF8EA: record_full_core_target::xfer_partial(target_object, char const*, unsigned char*, unsigned char const*, unsigned long, unsigned long, unsigned long*) (record-full.c:2182) ==18847== by 0x64677D: raw_memory_xfer_partial(target_ops*, unsigned char*, unsigned char const*, unsigned long, long, unsigned long*) (target.c:956) ==18847== by 0x64691E: memory_xfer_partial_1(target_ops*, target_object, unsigned char*, unsigned char const*, unsigned long, unsigned long, unsigned long*) (target.c:1086)
2019-01-01Fix leak in print_one_catch_syscall.Philippe Waroquiers2-5/+11
The last text produced was not freed, causing the below leak (e.g. in gdb.base/catch-syscall.exp): ==24970== 56 bytes in 12 blocks are definitely lost in loss record 626 of 3,289 ==24970== at 0x4C2BE6D: malloc (vg_replace_malloc.c:309) ==24970== by 0x66B9C3F: __vasprintf_chk (vasprintf_chk.c:80) ==24970== by 0x405181: vasprintf (stdio2.h:210) ==24970== by 0x405181: xstrvprintf(char const*, __va_list_tag*) (common-utils.c:122) ==24970== by 0x40524B: xstrprintf(char const*, ...) (common-utils.c:113) ==24970== by 0x3B49DB: print_one_catch_syscall(breakpoint*, bp_location**) (break-catch-syscall.c:275) ==24970== by 0x3C698F: print_one_breakpoint_location(breakpoint*, bp_location*, int, bp_location**, int) (breakpoint.c:6076) ==24970== by 0x3C75B1: print_one_breakpoint(breakpoint*, bp_location**, int) (breakpoint.c:6373) ==24970== by 0x3C7D0E: breakpoint_1(char const*, int, int (*)(breakpoint const*)) (breakpoint.c:6571) ==24970== by 0x3C822C: info_breakpoints_command(char const*, int) (breakpoint.c:6625) 2019-01-01 Philippe Waroquiers <philippe.waroquiers@skynet.be> * break-catch-syscall.c (print_one_catch_syscall): xfree the last text.
2019-01-01update copyright year printed by gdb, gdbserver and gdbreplayJoel Brobecker5-3/+14
gdb/ChangeLog: * top.c (print_gdb_version): Update Copyright year in version message. gdb/gdbserver/ChangeLog: * gdbreplay.c (gdbreplay_version): Update copyright year in version message. * server.c (gdbserver_version): Likewise.
2019-01-01Update copyright year range in all GDB files.Joel Brobecker5129-5128/+5132
This commit applies all changes made after running the gdb/copyright.py script. Note that one file was flagged by the script, due to an invalid copyright header (gdb/unittests/basic_string_view/element_access/char/empty.cc). As the file was copied from GCC's libstdc++-v3 testsuite, this commit leaves this file untouched for the time being; a patch to fix the header was sent to gcc-patches first. gdb/ChangeLog: Update copyright year range in all GDB files.
2019-01-01rotate gdb/ChangeLogJoel Brobecker3-17186/+17201
2018-12-31Use gdb::unique_xmalloc_ptr<char> in command_line_input to fix a leakPhilippe Waroquiers2-5/+10
Following the change of logic where the input_handler gets a gdb::unique_xmalloc_ptr<char>, a call to readline directly followed by a call to handle_line_of_input is missing a free, and causes the below leak. Use gdb::unique_xmalloc_ptr<char> to solve the leak. ==16291== VALGRIND_GDB_ERROR_BEGIN ==16291== 64 bytes in 1 blocks are definitely lost in loss record 1,815 of 4,111 ==16291== at 0x4C2E2B3: realloc (vg_replace_malloc.c:836) ==16291== by 0x41EB1C: xrealloc (common-utils.c:62) ==16291== by 0x41DBD3: buffer_grow(buffer*, char const*, unsigned long) [clone .part.1] (buffer.c:40) ==16291== by 0x66E8FF: buffer_grow_char (buffer.h:40) ==16291== by 0x66E8FF: gdb_readline_no_editing (top.c:798) ==16291== by 0x66E8FF: command_line_input(char const*, char const*) (top.c:1249) ==16291== by 0x66EBD8: read_command_file(_IO_FILE*) (top.c:421) ==16291== by 0x412C0C: script_from_file(_IO_FILE*, char const*) (cli-script.c:1547) ==16291== by 0x40BE90: source_script_from_stream (cli-cmds.c:569) ==16291== by 0x40BE90: source_script_with_search(char const*, int, int) (cli-cmds.c:606) ==16291== by 0x54D567: catch_command_errors(void (*)(char const*, int), char const*, int) (main.c:379) ==16291== by 0x54EA84: captured_main_1 (main.c:994) ==16291== by 0x54EA84: captured_main (main.c:1167) ==16291== by 0x54EA84: gdb_main(captured_main_args*) (main.c:1193) ==16291== by 0x29DA27: main (gdb.c:32) ==16291== ==16291== VALGRIND_GDB_ERROR_END gdb/ChangeLog 2018-12-31 Philippe Waroquiers <philippe.waroquiers@skynet.be> * top.c (command_line_input): Use unique_xmalloc_ptr to manage memory allocated by readline.
2018-12-30Change input_handler to take a unique_xmalloc_ptrTom Tromey6-19/+32
This changes ui::input_handler to take a unique_xmalloc_ptr. This clarifies the ownership transfer of input_handler's argument. gdb/ChangeLog 2018-12-30 Tom Tromey <tom@tromey.com> * event-top.h (command_line_handler): Update. * top.c (class gdb_readline_wrapper_cleanup) <m_handler_orig>: Update. (gdb_readline_wrapper_line): Update. * top.h (struct ui) <input_handler>: Take a unique_xmalloc_ptr. (handle_line_of_input): Update. * event-top.c: Update. (gdb_readline_no_editing_callback): Update. (command_line_handler): Take a unique_xmalloc_ptr. (handle_line_of_input): Take a const char *. (command_line_append_input_line): Take a const char *.
2018-12-30Fix 'help set/show style' strange layouts/results.Philippe Waroquiers1-5/+5
The layout for 'help set address|variable' is strange, e.g.: (gdb) help set style address style address List of show Address display styling Configure address colors and display intensity subcommands: show Address display styling Configure address colors and display intensity background -- Set the background color for this property show Address display styling Configure address colors and display intensity foreground -- Set the foreground color for this property show Address display styling Configure address colors and display intensity intensity -- Set the display intensity color for this property Type "help show Address display styling Configure address colors and display intensity" followed by show Address display styling Configure address colors and display intensity subcommand name for full documentation. Type "apropos word" to search for commands related to "word". Command name abbreviations are allowed if unambiguous. (gdb) The help for 'set style function|filename' gives help for 'Show': (gdb) help set style filename Filename display styling Configure filename colors and display intensity. List of show style filename subcommands: show style filename background -- Set the background color for this property show style filename foreground -- Set the foreground color for this property show style filename intensity -- Set the display intensity color for this property The help for 'show style function|filename' is equally strange, as it speaks about commands, instead of sub commands: (gdb) help show style filename Filename display styling Configure filename colors and display intensity. List of commands: background -- Show the background color for this property foreground -- Show the foreground color for this property intensity -- Show the display intensity color for this property Type "help" followed by command name for full documentation. Type "apropos word" to search for commands related to "word". Command name abbreviations are allowed if unambiguous. (gdb) This patch fixes all this. Note that the 'set style' and 'show style' have the same prefix_doc: (gdb) help show style Style-specific settings Configure various style-related variables, such as colors ... (gdb) help set style Style-specific settings Configure various style-related variables, such as colors ... Other similar commands (such as set|show history) have typically a more specific prefix: (gdb) help show history Generic command for showing command history parameters. ... (gdb) help set history Generic command for setting command history parameters. ... This could be fixed by having set_prefix_doc and show_prefix_doc instead of the single prefix_doc argument to cli_style_option::add_setshow_commands. That could be improved if deemed better. 2018-12-29 Philippe Waroquiers <philippe.waroquiers@skynet.be> * cli/cli-style.c (cli_style_option::add_setshow_commands): Initialize m_set_prefix with "set", instead of re-assigning m_show_prefix. Use m_set_prefix for set_list and m_show_prefix for show_list. (_initialize_cli_style): Correct the order of arguments in variable_name_style.add_setshow_commands and address_style.add_setshow_commands calls.
2018-12-28Fix the build when GNU Source Highlight is not availableTom Tromey2-0/+8
The builder pointed out that, when GNU Source Highlight is not available, get_language_name is not used. This patch makes it conditional, fixing the build problem. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * source-cache.c (get_language_name): Conditionally compile.
2018-12-28Fix a crash in jit.cTom Tromey6-1/+115
A user at Mozilla pointed out a crash in jit.c. In his situation, an inferior using the JIT API exec'd an executable that did not use it. This caused an assertion failure when jit.c:free_objfile_data called delete_breakpoint with NULL. This patch fixes the problem in the obvious way. New test case included. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * jit.c (free_objfile_data): Only delete breakpoint if non-null. gdb/testsuite/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> Simon Marchi <simark@simark.ca> * gdb.base/jit-exec.exp: New file. * gdb.base/jit-exec.c: New file. * gdb.base/jit-execd.c: New file.
2018-12-28Document the "set style" commandsTom Tromey4-0/+103
This documents the new "set style" commands. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * NEWS: Mention terminal styling. gdb/doc/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * gdb.texinfo (Output Styling): New node.
2018-12-28Highlight source code using GNU Source HighlightTom Tromey16-203/+576
This changes gdb to highlight source using GNU Source Highlight, if it is available. This affects the output of the "list" command and also the TUI source window. No new test because I didn't see a way to make it work when Source Highlight is not found. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * utils.h (can_emit_style_escape): Declare. * utils.c (can_emit_style_escape): No longer static. * cli/cli-style.c (set_style_enabled): New function. (_initialize_cli_style): Use it. * tui/tui-winsource.c (tui_show_source_line): Use tui_puts. (tui_alloc_source_buffer): Change how source lines are allocated. * tui/tui-source.c (copy_source_line): New function. (tui_set_source_content): Use source cache. * tui/tui-io.h (tui_puts): Update. * tui/tui-io.c (tui_puts_internal): Add window parameter. (tui_puts): Likewise. (tui_redisplay_readline): Update. * tui/tui-data.c (free_content_elements): Change how source window contents are freed. * source.c (forget_cached_source_info): Clear the source cache. (print_source_lines_base): Use the source cache. * source-cache.h: New file. * source-cache.c: New file. * configure.ac: Check for GNU Source Highlight library. * configure: Update. * config.in: Update. * Makefile.in (SRCHIGH_LIBS, SRCHIGH_CFLAGS): New variables. (INTERNAL_CFLAGS_BASE): Add SRCHIGH_CFLAGS. (CLIBS): Add SRCHIGH_LIBS. (COMMON_SFILES): Add source-cache.c. (HFILES_NO_SRCDIR): Add source-cache.h.
2018-12-28Use wclrtoeol in tui_show_source_lineTom Tromey2-7/+5
This changes tui_show_source_line to use wclrtoeol rather than manually emitting a sequence of spaces. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * tui/tui-winsource.c (tui_show_source_line): Use wclrtoeol.
2018-12-28Make ANSI terminal escape sequences work in TUITom Tromey6-18/+251
PR tui/14126 notes that ANSI terminal escape sequences don't affect the colors shown in the TUI. A simple way to see this is to try the extended-prompt example from the gdb manual. Curses does not pass escape sequences through to the terminal. Instead, it replaces non-printable characters with a visible representation, for example "^[" for the ESC character. This patch fixes the problem by adding a simple ANSI terminal sequence parser to gdb. These sequences are decoded and those that are recognized are turned into the appropriate curses calls. The curses approach to color handling is unusual and so there are some oddities in the implementation. Standard curses has no notion of the default colors of the terminal. So, if you set the foreground color, it is not possible to reset it -- you have to pick some other color. ncurses provides an extension to handle this, so this patch updates configure and uses it when available. Second, in curses, colors always come in pairs: you cannot set just the foreground. This patch handles this by tracking actually-used pairs of colors and keeping a table of these for reuse. Third, there are a limited number of such pairs available. In this patch, if you try to use too many color combinations, gdb will just ignore some color changes. Finally, in addition to limiting the number of color pairs, curses also limits the number of colors. This means that, when using extended 8- or 24-bit color sequences, it may be possible to exhaust the curses color table. I am very sour on the curses design now. I do not know how to write a test for this, so I did not. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> PR tui/14126: * tui/tui.c (tui_enable): Call start_color and use_default_colors. * tui/tui-io.c (struct color_pair): New. (color_pair_map, last_color_pair, last_style): New globals. (tui_setup_io): Clean up color map when shutting down. (curses_colors): New constant. (get_color_pair, apply_ansi_escape): New functions. (tui_write): Rewrite. (tui_puts_internal): New function, from tui_puts. Add "height" parameter. (tui_puts): Use tui_puts_internal. (tui_redisplay_readline): Use tui_puts_internal. (_initialize_tui_io): New function. (color_map): New globals. (get_color): New function. * configure.ac: Check for use_default_colors. * config.in, configure: Rebuild.
2018-12-28Style addressesTom Tromey10-16/+66
This changes gdb to style addresses. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * ui-out.h (enum class ui_out_style_kind) <ADDRESS>: New constant. * ui-out.c (ui_out::field_core_addr): Add styling. * stack.c (print_frame): Add styling. * printcmd.c (print_address): Add styling. (print_address_demangle, info_address_command): Likewise. * cli/cli-style.h (address_style): Declare. * cli/cli-style.c (address_style): New global. (_initialize_cli_style): Register new commands. * cli-out.c (cli_ui_out::do_field_string): Update. gdb/testsuite/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * gdb.base/style.exp: Update test to check for address styling.
2018-12-28Style the "Reading symbols" messageTom Tromey4-1/+19
The "Reading symbols" message does not use ui-out (perhaps it should?), so this styles it using the low-level API. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * symfile.c (symbol_file_add_with_addrs): Style file name. gdb/testsuite/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * gdb.base/style.exp: Add test for styling of "Reading symbols" message.
2018-12-28Style the gdb welcome messageTom Tromey4-1/+22
This changes gdb to style the welcome message that is shown by default. The styling is only done interactively. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * top.c (print_gdb_version): Style gdb version number. gdb/testsuite/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * gdb.base/style.exp: Add test for version number styling.
2018-12-28Style print_address_symbolicTom Tromey4-4/+15
print_address_symbolic does not use ui-out, so it did not style function names. This patch changes it to use the low-level style code directly. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * printcmd.c (print_address_symbolic): Style function name. gdb/testsuite/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * gdb.base/style.exp: Add test for print_address_symbolic.
2018-12-28Style locations when setting a breakpointTom Tromey4-4/+21
say_where does not use ui-out, so function and file names printed by it were not styled. This patch changes say_where to use the low-level style code directly. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * breakpoint.c (say_where): Style file name. gdb/testsuite/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * gdb.base/style.exp: Add test for breakpoint setting.
2018-12-28Style variable namesTom Tromey9-4/+42
This adds style support for variable names. For the time being, this is only done in backtraces, not in ptype or print; those places do not use ui-out and so would need ad hoc changes. This also adds styling to the names printed for local variables in "backtrace full". This code does not use ui-out, so the styling is done using the low-level API. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * ui-out.h (enum class ui_out_style_kind) <VARIABLE>: New global. * stack.c (print_frame_arg): Style name. * printcmd.c (print_variable_and_value): Style variable name. * cli/cli-style.h (variable_name_style): Declare. * cli/cli-style.c (variable_name_style): New global. (_initialize_cli_style): Update. * cli-out.c (cli_ui_out::do_field_string): Update. gdb/testsuite/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * gdb.base/style.exp: Add test for variable names.
2018-12-28Reset terminal stylesTom Tromey5-6/+48
This adds a function that can be used to reset terminal styles, regardless of what style the low-level output routines currently think is applied. This is used to make "echo" and "printf" work properly when emitting ANSI terminal escapes -- now gdb will reset the style at the end of the command. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * utils.h (reset_terminal_style): Declare. * utils.c (can_emit_style_escape): New function. (set_output_style): Use it. (reset_terminal_style): New function. * printcmd.c (printf_command): Call reset_terminal_style. * cli/cli-cmds.c (echo_command): Call reset_terminal_style.
2018-12-28Add output styles to gdbTom Tromey25-46/+666
This adds some output styling to the CLI. A style is currently a foreground color, a background color, and an intensity (dim or bold). (This list could be expanded depending on terminal capabilities.) A style can be applied while printing. For ui-out, this is done by passing the style constant as an argument. For low-level cases, fprintf_styled and fputs_styled are provided. Users can control the style via a number of new set/show commands. In the interest of not typing many nearly-identical documentation strings, I automated this. On the down side, this is not very i18n-friendly. I've chose some default colors to use. I think it would be good to enable this by default, so that when users start the new gdb, they will see the new feature. Stylizing is done if TERM is set and is not "dumb". This could be improved when the TUI is available by using the curses has_colors call. That is, the lowest layer could call this without committing to using curses everywhere; see my other patch for TUI colorizing. I considered adding a new "set_style" method to ui_file. However, because the implementation had to interact with the pager code, I didn't take this approach. But, one idea might be to put the isatty check there and then have it defer to the lower layers. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * utils.h (set_output_style, fprintf_styled) (fputs_styled): Declare. * utils.c (applied_style, desired_style): New globals. (emit_style_escape, set_output_style): New function. (prompt_for_continue): Emit style escapes. (fputs_maybe_filtered): Likewise. (fputs_styled, fprintf_styled): New functions. * ui-out.h (enum class ui_out_style_kind): New. (class ui_out) <field_string, field_stream, do_field_string>: Add style parameter. * ui-out.c (ui_out::field_stream, ui_out::field_string): Add style parameter. * tui/tui-out.h (class tui_ui_out) <do_field_string>: Add style parameter. * tui/tui-out.c (tui_ui_out::do_field_string): Add style parameter. (tui_ui_out::do_field_string): Update. * tracepoint.c (print_one_static_tracepoint_marker): Style output. * stack.c (print_frame_info, print_frame): Style output. * source.c (print_source_lines_base): Style output. * skip.c (info_skip_command): Style output. * record-btrace.c (btrace_call_history_src_line): Style output. (btrace_call_history): Likewise. * python/py-framefilter.c (py_print_frame): Style output. * mi/mi-out.h (class mi_ui_out) <do_field_string>: Add style parameter. * mi/mi-out.c (mi_ui_out::do_table_header) (mi_ui_out::do_field_int): Update. (mi_ui_out::do_field_string): Update. * disasm.c (gdb_pretty_print_disassembler::pretty_print_insn): Style output. * cli/cli-style.h: New file. * cli/cli-style.c: New file. * cli-out.h (class cli_ui_out) <do_field_string>: Add style parameter. * cli-out.c (cli_ui_out::do_table_header) (cli_ui_out::do_field_int, cli_ui_out::do_field_skip): Update. (cli_ui_out::do_field_string): Add style parameter. Style the output. * breakpoint.c (print_breakpoint_location): Style output. (update_static_tracepoint): Likewise. * Makefile.in (SUBDIR_CLI_SRCS): Add cli-style.c. (HFILES_NO_SRCDIR): Add cli-style.h. gdb/testsuite/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * gdb.base/style.exp: New file. * gdb.base/style.c: New file.
2018-12-28Change gdb test suite's TERM settingTom Tromey3-49/+59
This changes the gdb test suite to set TERM to "dumb" by default. This setting disables terminal styling, so that the existing tests do not need to be updated. gdb/testsuite/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * lib/gdb.exp (gdb_init): Set the TERM environment variable to "dumb". * gdb.base/readline.exp (operate_and_get_next): Save and restore the TERM environment variable.
2018-12-28Introduce ui_file_styleTom Tromey6-0/+749
This introduces the new ui_file_style class and various helpers. This class represents a terminal style and provides methods for parsing and emitting the corresponding ANSI terminal escape sequences. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * unittests/style-selftests.c: New file. * ui-style.c: New file. * ui-style.h: New file. * ui-file.h: Include ui-style.h. * Makefile.in (COMMON_SFILES): Add ui-style.c. (HFILES_NO_SRCDIR): Add ui-style.h. (SUBDIR_UNITTESTS_SRCS): Add style-selftests.c.
2018-12-28Add a "context" argument to add_setshow_enum_cmdTom Tromey3-4/+15
This adds a "context" argument to add_setshow_enum_cmd. Now add_setshow_enum_cmd will call set_cmd_context on both of the new commands. This is used in a later patch. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * command.h (add_setshow_enum_cmd): Add "context" argument. * cli/cli-decode.c (add_setshow_enum_cmd): Add "context" argument. Call set_cmd_context.
2018-12-28Change wrap buffering to use a std::stringTom Tromey2-37/+35
Currently wrap buffering is implemented by allocating a string that is the same width as the window, and then writing characters into it. However, if gdb emits terminal escapes, then these could possibly overflow the buffer. To prevent this, change the wrap buffer to be a std::string and update the various uses. This also changes utils.c to always emit characters to the wrap buffer. This simplifies future patches which emit terminal escape sequences, and also makes it possible for the "echo" and "printf" commands to be used to emit terminal escapes and have these work in the TUI. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * utils.c (filter_initialized): New global. (wrap_buffer): Now a std::string. (wrap_pointer): Remove. (flush_wrap_buffer): New function. (filtered_printing_initialized, set_width, wrap_here) (fputs_maybe_filtered): Update.