public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/gdb] gdb-17.2-rebase-f44: Fix attachment of JIT-debug-enabled inf. (7.11.1 regression, RH BZ 1375553).
@ 2026-06-27 23:57 Jan Kratochvil
  0 siblings, 0 replies; only message in thread
From: Jan Kratochvil @ 2026-06-27 23:57 UTC (permalink / raw)
  To: git-commits

            A new commit has been pushed.

            Repo   : rpms/gdb
            Branch : gdb-17.2-rebase-f44
            Commit : 4ca26b1f0355e26a791a477e8d128caefb9d2c34
            Author : Jan Kratochvil <jan.kratochvil@redhat.com>
            Date   : 2016-09-28T17:34:37+02:00
            Stats  : +351/-4 in 4 file(s)
            URL    : https://src.fedoraproject.org/rpms/gdb/c/4ca26b1f0355e26a791a477e8d128caefb9d2c34?branch=gdb-17.2-rebase-f44

            Log:
            Fix attachment of JIT-debug-enabled inf. (7.11.1 regression, RH BZ 1375553).

- Rebase to FSF GDB 7.11.90.20160928 (pre-7.12 branch snapshot).

---
diff --git a/.gitignore b/.gitignore
index 7f9ef28..7fc5a32 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,3 @@
 /gdb-libstdc++-v3-python-6.1.1-20160817.tar.xz
 /v1.5.tar.gz
-/gdb-7.11.90.20160907.tar.xz
+/gdb-7.11.90.20160928.tar.xz

diff --git a/gdb-rhbz1375553-attach-jit-debug.patch b/gdb-rhbz1375553-attach-jit-debug.patch
new file mode 100644
index 0000000..65594be
--- /dev/null
+++ b/gdb-rhbz1375553-attach-jit-debug.patch
@@ -0,0 +1,339 @@
+Regression: gdb --pid $(pidof qemu-system-x86_64) stopped working with gdb 7.11.1
+https://bugzilla.redhat.com/show_bug.cgi?id=1375553
+
+http://sourceware.org/ml/gdb-patches/2016-09/msg00387.html
+Subject: [patch+7.12] PR gdb/20609 - attach of JIT-debug-enabled inf 7.11.1 regression
+
+
+--cNdxnHkX5QqsyA0e
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+
+Hi,
+
+Regression: gdb --pid $(pidof qemu-system-x86_64) stopped working with gdb 7.11.1
+https://sourceware.org/bugzilla/show_bug.cgi?id=20609
+
+It was reported for qemu-system-x86_64 but it happens for any multithreaded
+inferior with a JIT debugging hook.
+
+136613ef0c6850427317e57be1b644080ff6decb is the first bad commit
+Author: Pedro Alves <palves@redhat.com>
+    Fix PR gdb/19828: gdb -p <process from a container>: internal error
+Message-ID: <cbdf2e04-4fa8-872a-2a23-08c9c1b26e00@redhat.com>
+https://sourceware.org/ml/gdb-patches/2016-05/msg00450.html
+
+jit_breakpoint_re_set() is specific by trying to insert a breakpoint into the
+main executable, not into a shared library.  During attachment GDB thinks it
+needs to use 'breakpoint always-inserted' from
+breakpoints_should_be_inserted_now() as a newly attached thread is
+'thread_info->executing' due to 'lwp_info->must_set_ptrace_flags' enabled and
+the task not yet stopped.  This did not happen before the 'bad commit' above
+which adds tracking of such thread.
+
+GDB then fails to insert the breakpoints to invalid address as PIE executable
+gets properly relocated during later phase of attachment.  One can see in the
+backtraces below:
+#11 in setup_inferior (from_tty=0) at infcmd.c:2663
+ -> jit_breakpoint_re_set_internal()
+later:
+#5  in setup_inferior (from_tty=0) at infcmd.c:2673
+ -> svr4_exec_displacement()
+
+One can suppress the initial breakpoint_re_set() call as there will be another
+breakpoint_re_set() done from the final post_create_inferior() call in
+setup_inferior().
+
+BTW additionally 'threads_executing' cache bool is somehow stale (somewhere is
+missing update_threads_executing()).  I was trying to deal with that in my
+first/second attempt below but in my final third attempt (attached) I have
+left it as it is.
+
+First attempt trying not to falsely require 'breakpoint always-inserted':
+  https://people.redhat.com/jkratoch/rhbz1375553-fix1.patch
+Reduced first attempt:
+  https://people.redhat.com/jkratoch/rhbz1375553-fix2.patch
+
+The third attempt suppresses breakpoint insertion until PIE executable gets
+relocated by svr4_exec_displacement().  Attached.
+
+No regressions on {x86_64,x86_64-m32,i686}-fedora26pre-linux-gnu.
+
+OK for check-in for trunk + 7.12?
+
+
+Jan
+
+
+#0  jit_breakpoint_re_set_internal (gdbarch=0x25befe0, ps_data=0x23b37e0) at jit.c:1045
+#1  in jit_breakpoint_re_set () at jit.c:1408
+#2  in breakpoint_re_set () at breakpoint.c:14665
+#3  in clear_symtab_users (add_flags=4) at symfile.c:2970
+#4  in finish_new_objfile (objfile=0x25b6d10, add_flags=4) at symfile.c:1109
+#5  in symbol_file_add_with_addrs (abfd=0x25b4bd0, name=0x25b3970 "/tmp/a.out", add_flags=4, addrs=0x0, flags=0, parent=0x0) at symfile.c:1233
+#6  in symbol_file_add_from_bfd (abfd=0x25b4bd0, name=0x25b3970 "/tmp/a.out", add_flags=4, addrs=0x0, flags=0, parent=0x0) at symfile.c:1276
+#7  in symbol_file_add (name=0x25b3970 "/tmp/a.out", add_flags=4, addrs=0x0, flags=0) at symfile.c:1290
+#8  in symbol_file_add_main_1 (args=0x25b3970 "/tmp/a.out", from_tty=0, flags=0) at symfile.c:1315
+#9  in symbol_file_add_main (args=0x25b3970 "/tmp/a.out", from_tty=0) at symfile.c:1306
+#10 in exec_file_locate_attach (pid=2502, from_tty=0) at exec.c:235
+#11 in setup_inferior (from_tty=0) at infcmd.c:2663
+#12 in stop_all_threads () at infrun.c:4630
+#13 in stop_waiting (ecs=0x7fffffffd400) at infrun.c:7710
+#14 in handle_signal_stop (ecs=0x7fffffffd400) at infrun.c:5765
+#15 in handle_inferior_event_1 (ecs=0x7fffffffd400) at infrun.c:5395
+#16 in handle_inferior_event (ecs=0x7fffffffd400) at infrun.c:5426
+#17 in fetch_inferior_event (client_data=0x0) at infrun.c:3972
+#18 in inferior_event_handler (event_type=INF_REG_EVENT, client_data=0x0) at inf-loop.c:44
+#19 in handle_target_event (error=0, client_data=0x0) at linux-nat.c:4523
+#20 in handle_file_event (file_ptr=0x25ad330, ready_mask=1) at event-loop.c:733
+#21 in gdb_wait_for_event (block=0) at event-loop.c:859
+#22 in gdb_do_one_event () at event-loop.c:322
+#23 in wait_sync_command_done () at top.c:568
+#24 in maybe_wait_sync_command_done (was_sync=0) at top.c:587
+#25 in catch_command_errors (command=0x745e0c <attach_command(char*, int)>, arg=0x7fffffffdd08 "2502", from_tty=1) at main.c:377
+#26 in captured_main (data=0x7fffffffd800) at main.c:1065
+#27 in gdb_main (args=0x7fffffffd800) at main.c:1159
+#28 in main (argc=10, argv=0x7fffffffd908) at gdb.c:32
+
+#0  svr4_exec_displacement (displacementp=0x7fffffffced0) at solib-svr4.c:2634
+#1  in svr4_relocate_main_executable () at solib-svr4.c:3031
+#2  in svr4_solib_create_inferior_hook (from_tty=0) at solib-svr4.c:3092
+#3  in solib_create_inferior_hook (from_tty=0) at solib.c:1276
+#4  in post_create_inferior (target=0x21ee980 <current_target>, from_tty=0) at infcmd.c:445
+#5  in setup_inferior (from_tty=0) at infcmd.c:2673
+#6  in stop_all_threads () at infrun.c:4630
+#7  in stop_waiting (ecs=0x7fffffffd400) at infrun.c:7710
+#8  in handle_signal_stop (ecs=0x7fffffffd400) at infrun.c:5765
+#9  in handle_inferior_event_1 (ecs=0x7fffffffd400) at infrun.c:5395
+#10 in handle_inferior_event (ecs=0x7fffffffd400) at infrun.c:5426
+#11 in fetch_inferior_event (client_data=0x0) at infrun.c:3972
+#12 in inferior_event_handler (event_type=INF_REG_EVENT, client_data=0x0) at inf-loop.c:44
+#13 in handle_target_event (error=0, client_data=0x0) at linux-nat.c:4523
+#14 in handle_file_event (file_ptr=0x25ad330, ready_mask=1) at event-loop.c:733
+#15 in gdb_wait_for_event (block=0) at event-loop.c:859
+#16 in gdb_do_one_event () at event-loop.c:322
+#17 in wait_sync_command_done () at top.c:568
+#18 in maybe_wait_sync_command_done (was_sync=0) at top.c:587
+#19 in catch_command_errors (command=0x745e0c <attach_command(char*, int)>, arg=0x7fffffffdd08 "2502", from_tty=1) at main.c:377
+#20 in captured_main (data=0x7fffffffd800) at main.c:1065
+#21 in gdb_main (args=0x7fffffffd800) at main.c:1159
+#22 in main (argc=10, argv=0x7fffffffd908) at gdb.c:32
+
+--cNdxnHkX5QqsyA0e
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline; filename="jitbp.patch"
+
+gdb/ChangeLog
+2016-09-27  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	PR gdb/20609 - attach of JIT-debug-enabled inf 7.11.1 regression
+	* exec.c (exec_file_locate_attach): Add parameter defer_bp_reset.
+	Use it.
+	* gdbcore.h (exec_file_locate_attach): Add parameter defer_bp_reset.
+	* infcmd.c (setup_inferior): Update caller.
+	* remote.c (remote_add_inferior): Likewise.
+
+gdb/testsuite/ChangeLog
+2016-09-27  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	PR gdb/20609 - attach of JIT-debug-enabled inf 7.11.1 regression
+	* gdb.base/jit-attach-pie.c: New file.
+	* gdb.base/jit-attach-pie.exp: New file.
+
+diff --git a/gdb/exec.c b/gdb/exec.c
+index 00c31d3..f16cb4b 100644
+--- a/gdb/exec.c
++++ b/gdb/exec.c
+@@ -157,7 +157,7 @@ exception_print_same (struct gdb_exception e1, struct gdb_exception e2)
+ /* See gdbcore.h.  */
+ 
+ void
+-exec_file_locate_attach (int pid, int from_tty)
++exec_file_locate_attach (int pid, int defer_bp_reset, int from_tty)
+ {
+   char *exec_file, *full_exec_path = NULL;
+   struct cleanup *old_chain;
+@@ -232,6 +232,8 @@ exec_file_locate_attach (int pid, int from_tty)
+ 
+   TRY
+     {
++      if (defer_bp_reset)
++	current_inferior ()->symfile_flags |= SYMFILE_DEFER_BP_RESET;
+       symbol_file_add_main (full_exec_path, from_tty);
+     }
+   CATCH (err, RETURN_MASK_ERROR)
+@@ -240,6 +242,7 @@ exec_file_locate_attach (int pid, int from_tty)
+ 	warning ("%s", err.message);
+     }
+   END_CATCH
++  current_inferior ()->symfile_flags &= ~SYMFILE_DEFER_BP_RESET;
+ 
+   do_cleanups (old_chain);
+ }
+diff --git a/gdb/gdbcore.h b/gdb/gdbcore.h
+index 8b101bc..6aa9afa 100644
+--- a/gdb/gdbcore.h
++++ b/gdb/gdbcore.h
+@@ -154,9 +154,10 @@ extern void exec_file_attach (const char *filename, int from_tty);
+ /* If the filename of the main executable is unknown, attempt to
+    determine it.  If a filename is determined, proceed as though
+    it was just specified with the "file" command.  Do nothing if
+-   the filename of the main executable is already known.  */
++   the filename of the main executable is already known.
++   DEFER_BP_RESET uses SYMFILE_DEFER_BP_RESET for the main symbol file.  */
+ 
+-extern void exec_file_locate_attach (int pid, int from_tty);
++extern void exec_file_locate_attach (int pid, int defer_bp_reset, int from_tty);
+ 
+ extern void exec_file_clear (int from_tty);
+ 
+diff --git a/gdb/infcmd.c b/gdb/infcmd.c
+index 44a1fd1..8e34b7e 100644
+--- a/gdb/infcmd.c
++++ b/gdb/infcmd.c
+@@ -2660,7 +2660,7 @@ setup_inferior (int from_tty)
+   /* If no exec file is yet known, try to determine it from the
+      process itself.  */
+   if (get_exec_file (0) == NULL)
+-    exec_file_locate_attach (ptid_get_pid (inferior_ptid), from_tty);
++    exec_file_locate_attach (ptid_get_pid (inferior_ptid), 1, from_tty);
+   else
+     {
+       reopen_exec_file ();
+diff --git a/gdb/remote.c b/gdb/remote.c
+index 910ac81..b460bb1 100644
+--- a/gdb/remote.c
++++ b/gdb/remote.c
+@@ -1799,7 +1799,7 @@ remote_add_inferior (int fake_pid_p, int pid, int attached,
+   /* If no main executable is currently open then attempt to
+      open the file that was executed to create this inferior.  */
+   if (try_open_exec && get_exec_file (0) == NULL)
+-    exec_file_locate_attach (pid, 1);
++    exec_file_locate_attach (pid, 0, 1);
+ 
+   return inf;
+ }
+diff --git a/gdb/testsuite/gdb.base/jit-attach-pie.c b/gdb/testsuite/gdb.base/jit-attach-pie.c
+new file mode 100644
+index 0000000..5080bde
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/jit-attach-pie.c
+@@ -0,0 +1,61 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2016 Free Software Foundation, Inc.
++
++   This program is free software; you can redistribute it and/or modify
++   it under the terms of the GNU General Public License as published by
++   the Free Software Foundation; either version 3 of the License, or
++   (at your option) any later version.
++
++   This program is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++   GNU General Public License for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
++
++#include <unistd.h>
++#include <stdint.h>
++#include <pthread.h>
++
++struct jit_code_entry
++{
++  struct jit_code_entry *next_entry;
++  struct jit_code_entry *prev_entry;
++  const char *symfile_addr;
++  uint64_t symfile_size;
++};
++
++struct jit_descriptor
++{
++  uint32_t version;
++  /* This type should be jit_actions_t, but we use uint32_t
++     to be explicit about the bitwidth.  */
++  uint32_t action_flag;
++  struct jit_code_entry *relevant_entry;
++  struct jit_code_entry *first_entry;
++};
++
++struct jit_descriptor __jit_debug_descriptor = { 1, 0, 0, 0 };
++
++void __jit_debug_register_code()
++{
++}
++
++static void *
++thread_proc (void *arg)
++{
++  sleep (60);
++  return arg;
++}
++
++int
++main (void)
++{
++  pthread_t thread;
++
++  pthread_create (&thread, NULL, thread_proc, 0);
++  pthread_join (thread, NULL);
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.base/jit-attach-pie.exp b/gdb/testsuite/gdb.base/jit-attach-pie.exp
+new file mode 100644
+index 0000000..2c25733
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/jit-attach-pie.exp
+@@ -0,0 +1,48 @@
++# Copyright (C) 2016 Free Software Foundation, Inc.
++#
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++
++if {![can_spawn_for_attach]} {
++    return 0
++}
++
++standard_testfile .c
++set executable ${testfile}
++
++if { [build_executable ${testfile}.exp $executable $srcfile \
++			  [list debug pthreads "additional_flags=-fPIE -pie"]] } {
++    return -1
++}
++
++# Start the program running and then wait for a bit, to be sure
++# that it can be attached to.
++
++set test_spawn_id [spawn_wait_for_attach $binfile]
++set testpid [spawn_id_get_pid $test_spawn_id]
++
++# gdb_load ("file" command) must not be executed for the bug reproducibility.
++# That includes prepare_for_testing or clean_restart.
++gdb_start
++
++set test "attach"
++gdb_test_multiple "attach $testpid" $test {
++    -re "Attaching to process $testpid\r\n.*Cannot insert breakpoint .*\r\n$gdb_prompt $" {
++	fail $test
++    }
++    -re "Attaching to process $testpid\r\n.*\r\n$gdb_prompt $" {
++	pass $test
++    }
++}
++
++kill_wait_spawned_process $test_spawn_id
+
+--cNdxnHkX5QqsyA0e--
+

diff --git a/gdb.spec b/gdb.spec
index 60a6930..3e6aa06 100644
--- a/gdb.spec
+++ b/gdb.spec
@@ -21,13 +21,13 @@ Name: %{?scl_prefix}gdb
 %global snapsrc    20160801
 # See timestamp of source gnulib installed into gdb/gnulib/ .
 %global snapgnulib 20150822
-%global tardate 20160907
+%global tardate 20160928
 %global tarname gdb-7.11.90.%{tardate}
 Version: 7.12
 
 # The release always contains a leading reserved number, start it at 1.
 # `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
-Release: 0.17.%{tardate}%{?dist}
+Release: 0.18.%{tardate}%{?dist}
 
 License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and BSD and Public Domain and GFDL
 Group: Development/Debuggers
@@ -598,6 +598,9 @@ Patch1144: gdb-bison-old.patch
 Patch1145: gdb-testsuite-casts.patch
 Patch1146: gdb-testsuite-m-static.patch
 
+# Fix attachment of JIT-debug-enabled inf. (7.11.1 regression, RH BZ 1375553).
+Patch1147: gdb-rhbz1375553-attach-jit-debug.patch
+
 %if 0%{!?rhel:1} || 0%{?rhel} > 6
 # RL_STATE_FEDORA_GDB would not be found for:
 # Patch642: gdb-readline62-ask-more-rh.patch
@@ -933,6 +936,7 @@ done
 %patch1144 -p1
 %patch1145 -p1
 %patch1146 -p1
+%patch1147 -p1
 
 %patch1075 -p1
 %if 0%{?rhel:1} && 0%{?rhel} <= 7
@@ -1490,6 +1494,10 @@ then
 fi
 
 %changelog
+* Wed Sep 28 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-0.18.20160928.fc25
+- Fix attachment of JIT-debug-enabled inf. (7.11.1 regression, RH BZ 1375553).
+- Rebase to FSF GDB 7.11.90.20160928 (pre-7.12 branch snapshot).
+
 * Wed Sep 14 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-0.17.20160907.fc25
 - Fix description empty lines.
 

diff --git a/sources b/sources
index 6a0b0f0..9cbbbbd 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,3 @@
 131d0dfd20cd6014c168fbcab9be2c43  gdb-libstdc++-v3-python-6.1.1-20160817.tar.xz
 29efc08219d9d6a0536d58f9807c8722  v1.5.tar.gz
-731f09d7e3b5d40af3318a2970db0cc5  gdb-7.11.90.20160907.tar.xz
+c9585e011f46f8be9ca1b2c4d05cf6dc  gdb-7.11.90.20160928.tar.xz

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-06-27 23:57 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-06-27 23:57 [rpms/gdb] gdb-17.2-rebase-f44: Fix attachment of JIT-debug-enabled inf. (7.11.1 regression, RH BZ 1375553) Jan Kratochvil

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox