diff --git a/SOURCES/_gdb.spec.Patch.include b/SOURCES/_gdb.spec.Patch.include index 811d8a5..49428b9 100644 --- a/SOURCES/_gdb.spec.Patch.include +++ b/SOURCES/_gdb.spec.Patch.include @@ -803,3 +803,7 @@ Patch196: gdb-rhbz2012818-ibmz-update-4of5.patch # (Andreas Krebbel, RHBZ 2012818) Patch197: gdb-rhbz2012818-ibmz-update-5of5.patch +# Backport gdb/20948 (--write option to GDB causes segfault) +# (Jozef Lawrynowicz, RHBZ 2018504) +Patch198: gdb-rhbz2018504-do-not-update-elf-headers.patch + diff --git a/SOURCES/_gdb.spec.patch.include b/SOURCES/_gdb.spec.patch.include index 98f081d..c1d18ac 100644 --- a/SOURCES/_gdb.spec.patch.include +++ b/SOURCES/_gdb.spec.patch.include @@ -195,3 +195,4 @@ %patch195 -p1 %patch196 -p1 %patch197 -p1 +%patch198 -p1 diff --git a/SOURCES/gdb-rhbz2018504-do-not-update-elf-headers.patch b/SOURCES/gdb-rhbz2018504-do-not-update-elf-headers.patch new file mode 100644 index 0000000..631fac9 --- /dev/null +++ b/SOURCES/gdb-rhbz2018504-do-not-update-elf-headers.patch @@ -0,0 +1,114 @@ +From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 +From: Jozef Lawrynowicz +Date: Mon, 6 Dec 2021 12:56:59 -0500 +Subject: gdb-rhbz2018504-do-not-update-elf-headers.patch + +;; Backport gdb/20948 (--write option to GDB causes segfault) +;; (Jozef Lawrynowicz, RHBZ 2018504) + +Fix PR gdb/20948: --write option to GDB causes segmentation fault + +When opening a BFD for update, as gdb --write does, modifications to +anything but the contents of sections is restricted. + +Do not try to write back any ELF headers in this case. + +diff --git a/bfd/elf.c b/bfd/elf.c +--- a/bfd/elf.c ++++ b/bfd/elf.c +@@ -6418,6 +6418,18 @@ _bfd_elf_write_object_contents (bfd *abfd) + if (! abfd->output_has_begun + && ! _bfd_elf_compute_section_file_positions (abfd, NULL)) + return FALSE; ++ /* Do not rewrite ELF data when the BFD has been opened for update. ++ abfd->output_has_begun was set to TRUE on opening, so creation of new ++ sections, and modification of existing section sizes was restricted. ++ This means the ELF header, program headers and section headers can't have ++ changed. ++ If the contents of any sections has been modified, then those changes have ++ already been written to the BFD. */ ++ else if (abfd->direction == both_direction) ++ { ++ BFD_ASSERT (abfd->output_has_begun); ++ return TRUE; ++ } + + i_shdrp = elf_elfsections (abfd); + +diff --git a/gdb/testsuite/gdb.base/write_mem.c b/gdb/testsuite/gdb.base/write_mem.c +new file mode 100644 +--- /dev/null ++++ b/gdb/testsuite/gdb.base/write_mem.c +@@ -0,0 +1,20 @@ ++/* Copyright (C) 2018 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 . */ ++ ++int main (void) ++{ ++ while (1); ++ return 0; ++} +diff --git a/gdb/testsuite/gdb.base/write_mem.exp b/gdb/testsuite/gdb.base/write_mem.exp +new file mode 100644 +--- /dev/null ++++ b/gdb/testsuite/gdb.base/write_mem.exp +@@ -0,0 +1,47 @@ ++# Copyright (C) 2018 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 . ++ ++# Contributed by Jozef Lawrynowicz (jozef.l@mittosystems.com) ++ ++# Test for PR gdb/20948 ++# Verify that invoking gdb with the --write argument works as expected ++ ++global GDBFLAGS ++standard_testfile ++ ++if {[build_executable $testfile.exp $testfile \ ++ $srcfile [list debug nowarnings] ] == -1} { ++ untested $testfile.exp ++ return -1 ++} ++ ++set old_gdbflags $GDBFLAGS ++ ++# Expect a failure before --write has been added to the command line ++set GDBFLAGS "$old_gdbflags $binfile" ++clean_restart ++test_print_reject "set {int}main = 0x4242" "Cannot access memory at address" ++ ++# Setting memory should now work correctly after adding --write ++set GDBFLAGS "$old_gdbflags --write $binfile" ++clean_restart ++gdb_test_no_output "set {int}main = 0x4242" ++ ++# Check that memory write persists after quitting GDB ++gdb_exit ++gdb_start ++gdb_test "x /xh main" "
:.*4242" ++ ++set GDBFLAGS $old_gdbflags diff --git a/SPECS/gdb.spec b/SPECS/gdb.spec index 2ac80c3..7da614e 100644 --- a/SPECS/gdb.spec +++ b/SPECS/gdb.spec @@ -26,7 +26,7 @@ Version: 8.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: 17%{?dist} +Release: 18%{?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 Group: Development/Debuggers @@ -1062,6 +1062,10 @@ fi %endif %changelog +* Wed Dec 8 2021 Keith Seitz - 8.2-18.el8 +- Backport "Fix avx512 -m32 support in gdbserver" +- (Tom de Vries, RH BZ 2011520) + * Mon Nov 1 2021 Keith Seitz - 8.2-17.el8 - Backport IBM arch14 updates. (Andreas Krebbel, RHBZ 2012818)