aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2025-02-25Automatic date update in version.inGDB Administrator1-1/+1
2025-02-24Automatic date update in version.inGDB Administrator1-1/+1
2025-02-23Automatic date update in version.inGDB Administrator1-1/+1
2025-02-22Automatic date update in version.inGDB Administrator1-1/+1
2025-02-21Automatic date update in version.inGDB Administrator1-1/+1
2025-02-20Automatic date update in version.inGDB Administrator1-1/+1
2025-02-19Automatic date update in version.inGDB Administrator1-1/+1
2025-02-18Automatic date update in version.inGDB Administrator1-1/+1
2025-02-17Automatic date update in version.inGDB Administrator1-1/+1
2025-02-16Automatic date update in version.inGDB Administrator1-1/+1
2025-02-15Automatic date update in version.inGDB Administrator1-1/+1
2025-02-14Automatic date update in version.inGDB Administrator1-1/+1
2025-02-13Automatic date update in version.inGDB Administrator1-1/+1
2025-02-12Automatic date update in version.inGDB Administrator1-1/+1
2025-02-11Automatic date update in version.inGDB Administrator1-1/+1
2025-02-10Automatic date update in version.inGDB Administrator1-1/+1
2025-02-09Automatic date update in version.inGDB Administrator1-1/+1
2025-02-08gdb/tui: use wrefresh if output is not surpressedAndrew Burgess3-1/+126
Recent work in the TUI has improved GDB's use of the curses wnoutrefresh and doupdate mechanism, which improves performance by batching together updates and then doing a single set of writes to the screen when doupdate is finally called. The tui_batch_rendering type is a RAII class which, in its destructor, calls doupdate to send the batched updates to the screen. However, if there is no tui_batch_rendering active on the call stack then any wnoutrefresh calls will remain batched but undisplayed until the next time doupdate happens to be called. This problem can be seen in PR gdb/32623. When an inferior is started the 'Starting program' message is not immediately displayed to the user. The 'Starting program' message originates from run_command_1 in infcmd.c, the message is sent to the current_uiout, which will be the TUI ui_out. After the message is sent, ui_out::flush() is called, here's the backtrace when that happens: #0 tui_file::flush (this=0x36e4ab0) at ../../src/gdb/tui/tui-file.c:42 #1 0x0000000001004f4b in pager_file::flush (this=0x36d35f0) at ../../src/gdb/utils.c:1531 #2 0x0000000001004f71 in gdb_flush (stream=0x36d35f0) at ../../src/gdb/utils.c:1539 #3 0x00000000006975ab in cli_ui_out::do_flush (this=0x35a50b0) at ../../src/gdb/cli-out.c:250 #4 0x00000000009fd1f9 in ui_out::flush (this=0x35a50b0) at ../../src/gdb/ui-out.h:263 #5 0x00000000009f56ad in run_command_1 (args=0x0, from_tty=1, run_how=RUN_NORMAL) at ../../src/gdb/infcmd.c:449 #6 0x00000000009f599a in run_command (args=0x0, from_tty=1) at ../../src/gdb/infcmd.c:511 And if we check out tui_file::flush (tui-file.c) we can see that this just calls tui_win_info::refresh_window(), which in turn, just uses wnoutrefresh to batch any pending output. The problem is that, in the above backtrace, there is no tui_batch_rendering active, and so there will be no doupdate call to flush the output to the screen. We could add a tui_batch_rendering into tui_file::flush. And tui_file::write. And tui_file::puts ..... ... but that all seems a bit unnecessary. Instead, I propose that tui_win_info::refresh_window() should be changed. If suppress_output is true (i.e. a tui_batch_rendering is active) then we should continue to call wnoutrefresh(). But if suppress_output is false, meaning that no tui_batch_rendering is in place, then we should call wrefresh(), which immediately writes the output to the screen. Testing but PR gdb/32623 was a little involved. We need to 'run' the inferior and check for the 'Starting program' message. But DejaGNUU can only check for the message once it knows the message should have appeared. But, as the bug is that output is not displayed, we don't have any output hints that the inferior is started yet... In the end, I have the inferior create a file in the test's output directory. Now DejaGNU can send the 'run' command, and wait for the file to appear. Once that happens, we know that the 'Starting program' message should have appeared. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32623 Approved-By: Tom Tromey <tom@tromey.com>
2025-02-08Automatic date update in version.inGDB Administrator1-1/+1
2025-02-07[gdb/corefiles] Fix segfault in core_target_openTom de Vries1-3/+3
On x86_64-freebsd, with test-case gdb.arch/i386-biarch-core.exp I run into a segfault here in corelow.c:core_target_open: ... { gdb::unique_xmalloc_ptr<char> failing_command = make_unique_xstrdup (bfd_core_file_failing_command (current_program_space->core_bfd ())); if (failing_command != nullptr) gdb_printf (_("Core was generated by `%s'.\n"), failing_command.get ()); } ... where bfd_core_file_failing_command returns nullptr, so the segfault happens somewhere during "strdup (nullptr)". There doesn't seem to be a need to make a copy of the string, so fix this by dropping the make_unique_xstrdup. Tested on x86_64-linux. Tested the test-case on x86_64-freebsd. Approved-By: Tom Tromey <tom@tromey.com> PR corefiles/32634 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32634 (cherry picked from commit 9dd3d66b79a2907726f407039234ad8677e9df16)
2025-02-07Automatic date update in version.inGDB Administrator1-1/+1
2025-02-06Automatic date update in version.inGDB Administrator1-1/+1
2025-02-05Automatic date update in version.inGDB Administrator1-1/+1
2025-02-04Automatic date update in version.inGDB Administrator1-1/+1
2025-02-03Automatic date update in version.inGDB Administrator1-1/+1
2025-02-02Automatic date update in version.inGDB Administrator1-1/+1
2025-02-01Bump GDB's version number to 16.2.90.DATE-git.Joel Brobecker2-2/+2
This commit changes gdb/version.in to 16.2.90.DATE-git. This commit also makes the following changes in gdb/testsuite: * gdb.base/default.exp: Change $_gdb_minor to 3.
2025-02-01Set GDB version number to 16.2.gdb-16.2-releaseJoel Brobecker1-1/+1
This commit changes gdb/version.in to 16.2.
2025-02-01Automatic date update in version.inGDB Administrator1-1/+1
2025-01-31Automatic date update in version.inGDB Administrator1-1/+1
2025-01-30Automatic date update in version.inGDB Administrator1-1/+1
2025-01-29gdb: include cli/cli-style.h in darwin-nat.cSimon Marchi1-0/+1
PR 32610 says: File gdb/darwin-nat.c is missing an #include statement of "cli/cli-style.h". It is needed because there is a reference to class object command_style in the .c file. I'm not able to build-test this change (I only have access to arm64 macos machines, which GDB doesn't support yet), but I don't think I'm doing things worse by adding this. Change-Id: I2a169664ff91b92caf27cb084334f2eb4df46aa5 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32610
2025-01-29[gdb/tui] Fix assert in tui_source_window_base::refresh_windowTom de Vries2-0/+6
Say we use the executable of test-case gdb.tui/tui-missing-src.exp like this: ... $ gdb.sh -q -tui outputs/gdb.tui/tui-missing-src/tui-missing-src \ -ex "b f2"\ -ex run ... (from a directory not containing a file called main.c to make sure that the missing source stays missing) and then issue finish: ... (gdb) finish Run till exit from #0 f2 (x=4) at f2.c:5 0x0000000000400570 in main () at main.c:7 Value returned is $1 = 13 (gdb) ... and use control-<minus> to decrease the font size (IOW increase the $LINES and $COLUMNS) on the terminal, we get: ... gdb/tui/tui-winsource.c:340: internal-error: refresh_window: \ Assertion `pad_x + view_width <= pad_width || m_pad.get () == nullptr' failed. A problem internal to GDB has been detected, further debugging may prove unreliable. ... The tui_source_window_base class has variable m_pad which keeps track of a curses pad that is used to display the source code or disassembly efficiently. The assert in tui_source_window_base::refresh_window triggers while preparing to display part of the pad. The problem is that the window is in a state in which the pad is not used, because m_content.empty () == true. Instead, it simply shows "[ No Source Available ]". Fix this by bailing out of tui_source_window_base::refresh_window before accessing the m_pad variable, if m_content.empty () == true. Tested on x86_64-linux. Approved-By: Tom Tromey <tom@tromey.com> PR tui/32592 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32592 (cherry picked from commit 1c525b0e037b895f6d21deaf32dd922dfdd9c822)
2025-01-29Automatic date update in version.inGDB Administrator1-1/+1
2025-01-28gdb/remote: add 'binary-upload' feature to guard 'x' packet useAndrew Burgess4-1/+20
This mailing list discussion: https://inbox.sourceware.org/gdb-patches/CAOp6jLYD0g-GUsx7jhO3g8H_4pHkB6dkh51cbyDT-5yMfQwu+A@mail.gmail.com highlighted the following issue with GDB's 'x' packet implementation. Unfortunately, LLDB also has an 'x' packet, but their implementation is different to GDB's and so targets that have implemented LLDB's 'x' packet are incompatible with GDB. The above thread is specifically about the 'rr' tool, but there could be other remote targets out there that have this problem. The difference between LLDB and GDB is that GDB expects a 'b' prefix on the reply data, while LLDB does not. The 'b' is important as it allows GDB to distinguish between an empty reply (which will be a 'b' prefix with no trailing data) and an unsupported packet (which will be a completely empty packet). It is not clear to me how LLDB distinguishes these two cases. See for discussion of the 'x' packet: https://inbox.sourceware.org/gdb-patches/cover.1710343840.git.tankut.baris.aktemur@intel.com/#r with the part specific to the 'b' marker in: https://inbox.sourceware.org/gdb-patches/87msq82ced.fsf@redhat.com/ I propose that we add a new feature 'binary-upload' which can be reported by a stub in its qSupported reply. By default this feature is "off", meaning GDB will not use the 'x' packet unless a stub advertises this feature. I have updated gdbserver to send 'binary-upload+', and when I examine the gdbserver log I can see this feature being sent back, and then GDB will use the 'x' packet. When connecting to an older gdbserver, the feature is not sent, and GDB does not try to use the 'x' packet at all. I also built the latest version of `rr` and tested using current HEAD of master, where I see problems like this: (rr) x/10i main 0x401106 <main>: Cannot access memory at address 0x401106 Then tested using this patched version of GDB, and now I see: (rr) x/10i main 0x401106 <main>: push %rbp 0x401107 <main+1>: mov %rsp,%rbp 0x40110a <main+4>: mov 0x2f17(%rip),%rax # 0x404028 <global_ptr> ... etc ... and looking in the remote log I see GDB is now using the 'm' packet instead of the 'x' packet. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32593 Reviewed-By: Eli Zaretskii <eliz@gnu.org> Reviewed-By: Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
2025-01-28Automatic date update in version.inGDB Administrator1-1/+1
2025-01-27Automatic date update in version.inGDB Administrator1-1/+1
2025-01-26Automatic date update in version.inGDB Administrator1-1/+1
2025-01-25Automatic date update in version.inGDB Administrator1-1/+1
2025-01-24Automatic date update in version.inGDB Administrator1-1/+1
2025-01-23Automatic date update in version.inGDB Administrator1-1/+1
2025-01-22bfd/doc: use abs_srcdir when creating symlinksAndrew Burgess2-2/+2
After commit: commit bd32be01c997f686ab0b53f0640eaa0aeb61fbd3 Date: Fri Dec 3 00:23:20 2021 -0500 bfd: merge doc subdir up a level And the follow-up commit: commit 98b1464bdf6306a8ab4614b5e9f76cdb2dd00b33 Date: Wed Oct 2 22:58:08 2024 +0300 bfd: fix unnecessary bfd.info regen There is still a problem building the bfd docs from a release tar file. As the release tar file contains the pre-generated .texi files we expect the bfd/doc build stage to symlink to the pre-existing .texi files in the source tree. However, this is still not working as expected if $(srcdir) is relative. The problem is this line in REGEN_TEXI: test -e $$texi || test ! -f $(srcdir)/$$texi || $(LN_S) $(srcdir)/$$texi $$texi; \ This is executed from the build/bfd/ directory, so if $(srcdir) is relative, then this will get you from the bfd/ directory in the build tree to the corresponding bfd/ directory in the src tree. However, the symlink is created in the bfd/doc/ build directory. The relative path will then fail to take you to the bfd/ directory in the src tree. Fix this by using $(abs_srcdir) when creating the symlink. Approved-By: Nick Clifton <nickc@redhat.com>
2025-01-22Automatic date update in version.inGDB Administrator1-1/+1
2025-01-21Automatic date update in version.inGDB Administrator1-1/+1
2025-01-20Automatic date update in version.inGDB Administrator1-1/+1
2025-01-19Automatic date update in version.inGDB Administrator1-1/+1
2025-01-18Bump GDB's version number to 16.1.90.DATE-git.Joel Brobecker2-2/+2
This commit changes gdb/version.in to 16.1.90.DATE-git. This commit also makes the following changes in gdb/testsuite: * gdb.base/default.exp: Change $_gdb_minor to 2.
2025-01-18Set GDB version number to 16.1.gdb-16.1-releaseJoel Brobecker1-1/+1
This commit changes gdb/version.in to 16.1.
2025-01-18Automatic date update in version.inGDB Administrator1-1/+1
2025-01-17gdb: quote inferior arguments, if needed, when opening a core fileAndrew Burgess2-14/+30
This commit fixes an issue with the commit: commit d3d13bf876aae425ae0eff2ab0f1af9f7da0264a Date: Thu Apr 25 09:36:43 2024 +0100 gdb: add gdbarch method to get execution context from core file The above commit improves GDB's ability to display inferior arguments when opening a core file, however, if an argument includes white space, then this is not displayed as well as it should be. For example: (gdb) core-file /tmp/corefile-exec-context.2.core [New LWP 4069711] Reading symbols from /tmp/corefile-exec-context... Core was generated by `/tmp/corefile-exec-context aaaaa bbbbb ccccc ddddd e e e e e'. Program terminated with signal SIGABRT, Aborted. #0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 50 return ret; (gdb) show args Argument list to give program being debugged when it is started is "aaaaa bbbbb ccccc ddddd e\ e\ e\ e\ e". (gdb) Notice the 'Core was generated by ...' line. In this case it is not clear if the "e e e e e" is a single argument containing white space, or 5 single arguments. But when we 'show args' it is immediately clear that this is a single argument, as the white space is now escaped. This problem was caused by the above commit building the argument string itself, and failing to consider white space escaping. This commit changes things around, first we place the arguments into the inferior, then, to print the 'Core was generated by ...' line, we ask the inferior for the argument string. In this way the quoting is handled just as it is for 'show args'. The initial output is now: (gdb) core-file /tmp/corefile-exec-context.2.core [New LWP 4069711] Reading symbols from /tmp/corefile-exec-context... Core was generated by `/tmp/corefile-exec-context aaaaa bbbbb ccccc ddddd e\ e\ e\ e\ e'. Program terminated with signal SIGABRT, Aborted. #0 0x00007f4f007af625 in raise () from /lib64/libc.so.6 (gdb) Much better. The existing test is extended to cover this case. Reviewed-By: Guinevere Larsen <guinevere@redhat.com> Approved-By: Tom Tromey <tom@tromey.com>