public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Kevin Buettner <kevinb@redhat.com>
To: git-commits@fedoraproject.org
Subject: [rpms/gdb] gdb-17.2-rebase-f44: Backport "Exclude debuginfo files from 'outside ELF segments' warning".
Date: Sun, 28 Jun 2026 00:00:19 GMT [thread overview]
Message-ID: <178260481904.1.867892785243778966.rpms-gdb-8f22c5cbd399@fedoraproject.org> (raw)
A new commit has been pushed.
Repo : rpms/gdb
Branch : gdb-17.2-rebase-f44
Commit : 8f22c5cbd3997141cbc953f2a3266a71f700a4ff
Author : Kevin Buettner <kevinb@redhat.com>
Date : 2021-06-14T14:51:25-07:00
Stats : +514/-1 in 7 file(s)
URL : https://src.fedoraproject.org/rpms/gdb/c/8f22c5cbd3997141cbc953f2a3266a71f700a4ff?branch=gdb-17.2-rebase-f44
Log:
Backport "Exclude debuginfo files from 'outside ELF segments' warning".
(Keith Seitz, RH BZ 1898252)
Backport "Fix crash when expanding partial symtab..."
(Tom Tromey. gdb/27743)
Backport "[gdb/server] Don't overwrite fs/gs_base with -m32"
(Tom de Vries)
---
diff --git a/_gdb.spec.Patch.include b/_gdb.spec.Patch.include
index 5a3e4e4..9f233e0 100644
--- a/_gdb.spec.Patch.include
+++ b/_gdb.spec.Patch.include
@@ -372,3 +372,15 @@ Patch089: gdb-rhbz1964167-fortran-array-slices-at-prompt.patch
# problem in gdb/f-lang.c.
Patch090: gdb-rhbz1964167-fortran-fix-type-format-mismatch-in-f-lang.c.patch
+# Backport of "Exclude debuginfo files from 'outside of ELF segments'
+# warning" (Keith Seitz)
+Patch091: gdb-rhbz1898252-loadable-section-outside-ELF-segments.patch
+
+# Backport "Fix crash when expanding partial symtabs with DW_TAG_imported_unit"
+# (Tom Tromey, gdb/27743)
+Patch092: gdb-gdb27743-psymtab-imported-unit.patch
+
+# Backport "[gdb/server] Don't overwrite fs/gs_base with -m32"
+# (Tom de Vries)
+Patch093: gdb-dont-overwrite-fsgsbase-m32.patch
+
diff --git a/_gdb.spec.patch.include b/_gdb.spec.patch.include
index 3f40bb5..32f5b04 100644
--- a/_gdb.spec.patch.include
+++ b/_gdb.spec.patch.include
@@ -88,3 +88,6 @@
%patch088 -p1
%patch089 -p1
%patch090 -p1
+%patch091 -p1
+%patch092 -p1
+%patch093 -p1
diff --git a/_patch_order b/_patch_order
index 7b81df5..562074d 100644
--- a/_patch_order
+++ b/_patch_order
@@ -88,3 +88,6 @@ gdb-rhbz1964167-fortran-range_type-to-range_flag.patch
gdb-rhbz1964167-fortran-array-strides-in-expressions.patch
gdb-rhbz1964167-fortran-array-slices-at-prompt.patch
gdb-rhbz1964167-fortran-fix-type-format-mismatch-in-f-lang.c.patch
+gdb-rhbz1898252-loadable-section-outside-ELF-segments.patch
+gdb-gdb27743-psymtab-imported-unit.patch
+gdb-dont-overwrite-fsgsbase-m32.patch
diff --git a/gdb-dont-overwrite-fsgsbase-m32.patch b/gdb-dont-overwrite-fsgsbase-m32.patch
new file mode 100644
index 0000000..ee9ad49
--- /dev/null
+++ b/gdb-dont-overwrite-fsgsbase-m32.patch
@@ -0,0 +1,139 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Tom de Vries <tdevries@suse.de>
+Date: Tue, 1 Jun 2021 10:14:31 -0700
+Subject: gdb-dont-overwrite-fsgsbase-m32.patch
+
+;; Backport "[gdb/server] Don't overwrite fs/gs_base with -m32"
+;; (Tom de Vries)
+
+Consider a minimal test-case test.c:
+...
+int main (void) { return 0; }
+...
+compiled with -m32:
+...
+$ gcc test.c -m32
+...
+
+When running the exec using gdbserver on openSUSE Factory (currently running a
+linux kernel version 5.10.5):
+...
+$ gdbserver localhost:12345 a.out
+...
+to which we connect in a gdb session, we run into a segfault in the inferior:
+...
+$ gdb -batch -q -ex "target remote localhost:12345" -ex continue
+Program received signal SIGSEGV, Segmentation fault.
+0xf7dd8bd2 in init_cacheinfo () at ../sysdeps/x86/cacheinfo.c:761
+...
+
+The segfault is caused by gdbserver overwriting $gs_base with 0 using
+PTRACE_SETREGS. After it is overwritten, the next use of $gs in the inferior
+will trigger the segfault.
+
+Before linux kernel version 5.9, the value used by PTRACE_SETREGS for $gs_base
+was ignored, but starting version 5.9, the linux kernel has support for
+intel architecture extension FSGSBASE, which allows users to modify $gs_base,
+and consequently PTRACE_SETREGS can no longer ignore the $gs_base value.
+
+The overwrite of $gs_base with 0 is done by a memset in x86_fill_gregset,
+which was added in commit 9e0aa64f551 "Fix gdbserver qGetTLSAddr for
+x86_64 -m32". The memset intends to zero-extend 32-bit registers that are
+tracked in the regcache to 64-bit when writing them into the PTRACE_SETREGS
+data argument. But in addition, it overwrites other registers that are
+not tracked in the regcache, such as $gs_base.
+
+Fix the segfault by redoing the fix from commit 9e0aa64f551 in minimal form.
+
+Tested on x86_64-linux:
+- openSUSE Leap 15.2 (using kernel version 5.3.18):
+ - native
+ - gdbserver -m32
+ - -m32
+- openSUSE Factory (using kernel version 5.10.5):
+ - native
+ - m32
+
+gdbserver/ChangeLog:
+
+2021-01-20 Tom de Vries <tdevries@suse.de>
+
+ * linux-x86-low.cc (collect_register_i386): New function.
+ (x86_fill_gregset): Remove memset. Use collect_register_i386.
+
+diff --git a/gdbserver/linux-x86-low.cc b/gdbserver/linux-x86-low.cc
+--- a/gdbserver/linux-x86-low.cc
++++ b/gdbserver/linux-x86-low.cc
+@@ -397,6 +397,35 @@ x86_target::low_cannot_fetch_register (int regno)
+ return regno >= I386_NUM_REGS;
+ }
+
++static void
++collect_register_i386 (struct regcache *regcache, int regno, void *buf)
++{
++ collect_register (regcache, regno, buf);
++
++#ifdef __x86_64__
++ /* In case of x86_64 -m32, collect_register only writes 4 bytes, but the
++ space reserved in buf for the register is 8 bytes. Make sure the entire
++ reserved space is initialized. */
++
++ gdb_assert (register_size (regcache->tdesc, regno) == 4);
++
++ if (regno == RAX)
++ {
++ /* Sign extend EAX value to avoid potential syscall restart
++ problems.
++
++ See amd64_linux_collect_native_gregset() in
++ gdb/amd64-linux-nat.c for a detailed explanation. */
++ *(int64_t *) buf = *(int32_t *) buf;
++ }
++ else
++ {
++ /* Zero-extend. */
++ *(uint64_t *) buf = *(uint32_t *) buf;
++ }
++#endif
++}
++
+ static void
+ x86_fill_gregset (struct regcache *regcache, void *buf)
+ {
+@@ -411,32 +440,14 @@ x86_fill_gregset (struct regcache *regcache, void *buf)
+
+ return;
+ }
+-
+- /* 32-bit inferior registers need to be zero-extended.
+- Callers would read uninitialized memory otherwise. */
+- memset (buf, 0x00, X86_64_USER_REGS * 8);
+ #endif
+
+ for (i = 0; i < I386_NUM_REGS; i++)
+- collect_register (regcache, i, ((char *) buf) + i386_regmap[i]);
+-
+- collect_register_by_name (regcache, "orig_eax",
+- ((char *) buf) + ORIG_EAX * REGSIZE);
++ collect_register_i386 (regcache, i, ((char *) buf) + i386_regmap[i]);
+
+-#ifdef __x86_64__
+- /* Sign extend EAX value to avoid potential syscall restart
+- problems.
+-
+- See amd64_linux_collect_native_gregset() in gdb/amd64-linux-nat.c
+- for a detailed explanation. */
+- if (register_size (regcache->tdesc, 0) == 4)
+- {
+- void *ptr = ((gdb_byte *) buf
+- + i386_regmap[find_regno (regcache->tdesc, "eax")]);
+-
+- *(int64_t *) ptr = *(int32_t *) ptr;
+- }
+-#endif
++ /* Handle ORIG_EAX, which is not in i386_regmap. */
++ collect_register_i386 (regcache, find_regno (regcache->tdesc, "orig_eax"),
++ ((char *) buf) + ORIG_EAX * REGSIZE);
+ }
+
+ static void
diff --git a/gdb-gdb27743-psymtab-imported-unit.patch b/gdb-gdb27743-psymtab-imported-unit.patch
new file mode 100644
index 0000000..c129b6d
--- /dev/null
+++ b/gdb-gdb27743-psymtab-imported-unit.patch
@@ -0,0 +1,281 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Tom Tromey <tromey@adacore.com>
+Date: Fri, 23 Apr 2021 11:28:48 -0600
+Subject: gdb-gdb27743-psymtab-imported-unit.patch
+
+;; Backport "Fix crash when expanding partial symtabs with DW_TAG_imported_unit"
+;; (Tom Tromey, gdb/27743)
+
+ From e7d77ce0c408e7019f9885b8be64c9cdb46dd312 Mon Sep 17 00:00:00 2001
+ Subject: [PATCH] Fix crash when expanding partial symtabs with
+ DW_TAG_imported_unit
+
+PR gdb/27743 points out a gdb crash when expanding partial symtabs,
+where one of the compilation units uses DW_TAG_imported_unit.
+
+The bug is that partial_map_expand_apply expects only to be called for
+the outermost psymtab. However, filename searching doesn't (and
+probably shouldn't) guarantee this. The fix is to walk upward to find
+the outermost CU.
+
+A new test case is included. It is mostly copied from other test
+cases, which really sped up the effort.
+
+This bug does not occur on trunk. There,
+psym_map_symtabs_matching_filename is gone, replaced by
+psymbol_functions::expand_symtabs_matching. When this find a match,
+it calls psymtab_to_symtab, which does this same upward walk.
+
+Tested on x86-64 Fedora 32.
+
+I propose checking in this patch on the gdb-10 branch, and just the
+new test case on trunk.
+
+gdb/ChangeLog
+2021-04-23 Tom Tromey <tromey@adacore.com>
+
+ PR gdb/27743:
+ * psymtab.c (partial_map_expand_apply): Expand outermost psymtab.
+
+gdb/testsuite/ChangeLog
+2021-04-23 Tom Tromey <tromey@adacore.com>
+
+ PR gdb/27743:
+ * gdb.dwarf2/imported-unit-bp.exp: New file.
+ * gdb.dwarf2/imported-unit-bp-main.c: New file.
+ * gdb.dwarf2/imported-unit-bp-alt.c: New file.
+
+diff --git a/gdb/psymtab.c b/gdb/psymtab.c
+--- a/gdb/psymtab.c
++++ b/gdb/psymtab.c
+@@ -127,9 +127,10 @@ partial_map_expand_apply (struct objfile *objfile,
+ {
+ struct compunit_symtab *last_made = objfile->compunit_symtabs;
+
+- /* Shared psymtabs should never be seen here. Instead they should
+- be handled properly by the caller. */
+- gdb_assert (pst->user == NULL);
++ /* We may see a shared psymtab here, but we want to expand the
++ outermost symtab. */
++ while (pst->user != nullptr)
++ pst = pst->user;
+
+ /* Don't visit already-expanded psymtabs. */
+ if (pst->readin_p (objfile))
+diff --git a/gdb/testsuite/gdb.dwarf2/imported-unit-bp-alt.c b/gdb/testsuite/gdb.dwarf2/imported-unit-bp-alt.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/imported-unit-bp-alt.c
+@@ -0,0 +1,50 @@
++/* Copyright 2020-2021 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/>. */
++
++/* Used to insert labels with which we can build a fake line table. */
++#define LL(N) asm ("line_label_" #N ": .globl line_label_" #N)
++
++volatile int var;
++volatile int bar;
++
++/* Generate some code to take up some space. */
++#define FILLER do { \
++ var = 99; \
++} while (0)
++
++int
++func (void)
++{ /* func prologue */
++ asm ("func_label: .globl func_label");
++ LL (1); // F1, Ln 16
++ FILLER;
++ LL (2); // F1, Ln 17
++ FILLER;
++ LL (3); // F2, Ln 21
++ FILLER;
++ LL (4); // F2, Ln 22 // F1, Ln 18, !S
++ FILLER;
++ LL (5); // F1, Ln 19 !S
++ FILLER;
++ LL (6); // F1, Ln 20
++ FILLER;
++ LL (7);
++ FILLER;
++ return 0; /* func end */
++}
++
++#ifdef WITHMAIN
++int main () { return 0; }
++#endif
+diff --git a/gdb/testsuite/gdb.dwarf2/imported-unit-bp-main.c b/gdb/testsuite/gdb.dwarf2/imported-unit-bp-main.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/imported-unit-bp-main.c
+@@ -0,0 +1,24 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++ Copyright 2004-2021 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/>. */
++
++extern int func (void);
++
++int
++main()
++{
++ return func ();
++}
+diff --git a/gdb/testsuite/gdb.dwarf2/imported-unit-bp.exp b/gdb/testsuite/gdb.dwarf2/imported-unit-bp.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/imported-unit-bp.exp
+@@ -0,0 +1,128 @@
++# Copyright 2020-2021 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/>.
++
++# Test that "break /absolute/file:line" works ok with imported CUs.
++
++load_lib dwarf.exp
++
++# This test can only be run on targets which support DWARF-2 and use gas.
++if {![dwarf2_support]} {
++ return 0
++}
++
++# The .c files use __attribute__.
++if [get_compiler_info] {
++ return -1
++}
++if !$gcc_compiled {
++ return 0
++}
++
++standard_testfile imported-unit-bp-alt.c .S imported-unit-bp-main.c
++
++set build_options {nodebug optimize=-O1}
++
++set asm_file [standard_output_file $srcfile2]
++Dwarf::assemble $asm_file {
++ global srcdir subdir srcfile srcfile
++ global build_options
++ declare_labels lines_label callee_subprog_label cu_label
++
++ get_func_info func "$build_options additional_flags=-DWITHMAIN"
++
++ cu {} {
++ compile_unit {
++ {language @DW_LANG_C}
++ {name "<artificial>"}
++ } {
++ imported_unit {
++ {import %$cu_label}
++ }
++ }
++ }
++
++ cu {} {
++ cu_label: compile_unit {
++ {producer "gcc"}
++ {language @DW_LANG_C}
++ {name ${srcfile}}
++ {comp_dir "/tmp"}
++ {low_pc 0 addr}
++ {stmt_list ${lines_label} DW_FORM_sec_offset}
++ } {
++ callee_subprog_label: subprogram {
++ {external 1 flag}
++ {name callee}
++ {inline 3 data1}
++ }
++ subprogram {
++ {external 1 flag}
++ {name func}
++ {low_pc $func_start addr}
++ {high_pc "$func_start + $func_len" addr}
++ } {
++ }
++ }
++ }
++
++ lines {version 2 default_is_stmt 1} lines_label {
++ include_dir "/tmp"
++ file_name "$srcfile" 1
++
++ program {
++ {DW_LNE_set_address line_label_1}
++ {DW_LNS_advance_line 15}
++ {DW_LNS_copy}
++
++ {DW_LNE_set_address line_label_2}
++ {DW_LNS_advance_line 1}
++ {DW_LNS_copy}
++
++ {DW_LNE_set_address line_label_3}
++ {DW_LNS_advance_line 4}
++ {DW_LNS_copy}
++
++ {DW_LNE_set_address line_label_4}
++ {DW_LNS_advance_line 1}
++ {DW_LNS_copy}
++
++ {DW_LNS_advance_line -4}
++ {DW_LNS_negate_stmt}
++ {DW_LNS_copy}
++
++ {DW_LNE_set_address line_label_5}
++ {DW_LNS_advance_line 1}
++ {DW_LNS_copy}
++
++ {DW_LNE_set_address line_label_6}
++ {DW_LNS_advance_line 1}
++ {DW_LNS_negate_stmt}
++ {DW_LNS_copy}
++
++ {DW_LNE_set_address line_label_7}
++ {DW_LNE_end_sequence}
++ }
++ }
++}
++
++if { [prepare_for_testing "failed to prepare" ${testfile} \
++ [list $srcfile $asm_file $srcfile3] $build_options] } {
++ return -1
++}
++
++gdb_reinitialize_dir /tmp
++
++# Using an absolute path is important to see the bug.
++gdb_test "break /tmp/${srcfile}:19" "Breakpoint .* file $srcfile, line .*"
diff --git a/gdb-rhbz1898252-loadable-section-outside-ELF-segments.patch b/gdb-rhbz1898252-loadable-section-outside-ELF-segments.patch
new file mode 100644
index 0000000..1419455
--- /dev/null
+++ b/gdb-rhbz1898252-loadable-section-outside-ELF-segments.patch
@@ -0,0 +1,67 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Keith Seitz <keiths@redhat.com>
+Date: Mon, 16 Nov 2020 12:42:09 -0500
+Subject: gdb-rhbz1898252-loadable-section-outside-ELF-segments.patch
+
+;; Backport of "Exclude debuginfo files from 'outside of ELF segments'
+;; warning" (Keith Seitz)
+
+ Exclude debuginfo files from "outside of ELF segments" warning
+
+ When GDB loads an ELF file, it will warn when a section is not located
+ in an ELF segment:
+
+ $ ./gdb -q -iex "set build-id-verbose 0" --ex "b systemctl_main" -ex "r" -batch --args systemctl kexec
+ Breakpoint 1 at 0xc24d: file ../src/systemctl/systemctl.c, line 8752.
+ warning: Loadable section ".note.gnu.property" outside of ELF segments
+ in .gnu_debugdata for /lib64/libgcc_s.so.1
+ [Thread debugging using libthread_db enabled]
+ Using host libthread_db library "/lib64/libthread_db.so.1".
+ warning: Loadable section ".note.gnu.property" outside of ELF segments
+ in .gnu_debugdata for /lib64/libcap.so.2
+ warning: Loadable section ".note.gnu.property" outside of ELF segments
+ in .gnu_debugdata for /lib64/libacl.so.1
+ warning: Loadable section ".note.gnu.property" outside of ELF segments
+ in .gnu_debugdata for /lib64/libcryptsetup.so.12
+ warning: Loadable section ".note.gnu.property" outside of ELF segments
+ in .gnu_debugdata for /lib64/libgcrypt.so.20
+ warning: Loadable section ".note.gnu.property" outside of ELF segments
+ in .gnu_debugdata for /lib64/libip4tc.so.2
+ [snip]
+ This has feature has also been reported by various users, most notably
+ the Fedora-EOL'd bug 1553086.
+
+ Mark Wielaard explains the issue quite nicely in
+
+ https://sourceware.org/bugzilla/show_bug.cgi?id=24717#c2
+
+ The short of it is, the ELF program headers for debuginfo files are
+ not suited to this particular use case. Consequently, the warning
+ generated above really is useless and should be ignored.
+
+ This patch follows the same heuristic that BFD itself uses.
+
+ gdb/ChangeLog
+ 2020-11-13 Keith Seitz <keiths@redhat.com>
+
+ https://bugzilla.redhat.com/show_bug.cgi?id=1553086
+ * elfread.c (elf_symfile_segments): Omit "Loadable section ...
+ outside of ELF segments" warning for debugin
+
+diff --git a/gdb/elfread.c b/gdb/elfread.c
+--- a/gdb/elfread.c
++++ b/gdb/elfread.c
+@@ -147,7 +147,12 @@ elf_symfile_segments (bfd *abfd)
+ RealView) use SHT_NOBITS for uninitialized data. Since it is
+ uninitialized, it doesn't need a program header. Such
+ binaries are not relocatable. */
+- if (bfd_section_size (sect) > 0 && j == num_segments
++
++ /* Exclude debuginfo files from this warning, too, since those
++ are often not strictly compliant with the standard. See, e.g.,
++ ld/24717 for more discussion. */
++ if (!is_debuginfo_file (abfd)
++ && bfd_section_size (sect) > 0 && j == num_segments
+ && (bfd_section_flags (sect) & SEC_LOAD) != 0)
+ warning (_("Loadable section \"%s\" outside of ELF segments"),
+ bfd_section_name (sect));
diff --git a/gdb.spec b/gdb.spec
index a66d989..c369a35 100644
--- a/gdb.spec
+++ b/gdb.spec
@@ -37,7 +37,7 @@ Version: 10.2
# 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: 2%{?dist}
+Release: 3%{?dist}
License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and LGPLv3+ and BSD and Public Domain and GFDL
# Do not provide URL for snapshots as the file lasts there only for 2 days.
@@ -1154,6 +1154,14 @@ fi
%endif
%changelog
+* Fri Jun 11 2021 Keith Seitz <keiths@redhat.com> - 10.2-3
+- Backport "Exclude debuginfo files from 'outside ELF segments' warning".
+ (Keith Seitz, RH BZ 1898252)
+- Backport "Fix crash when expanding partial symtab..."
+ (Tom Tromey. gdb/27743)
+- Backport "[gdb/server] Don't overwrite fs/gs_base with -m32"
+- (Tom de Vries)
+
* Sun Jun 06 2021 Python Maint <python-maint@redhat.com>
- Rebuilt for Python 3.10
reply other threads:[~2026-06-28 0:00 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=178260481904.1.867892785243778966.rpms-gdb-8f22c5cbd399@fedoraproject.org \
--to=kevinb@redhat.com \
--cc=git-commits@fedoraproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox