- Fix failed gdb_assert due to the PIE patchset (BZ 559414).
This commit is contained in:
parent
45f79714b9
commit
a04bc95fa3
@ -1,17 +0,0 @@
|
||||
--- gdb-7.0.50.20100121/gdb/solib-svr4.c-orig 2010-01-21 21:09:54.000000000 +0100
|
||||
+++ gdb-7.0.50.20100121/gdb/solib-svr4.c 2010-01-21 21:10:01.000000000 +0100
|
||||
@@ -596,7 +596,14 @@ scan_dyntag (int dyntag, bfd *abfd, CORE
|
||||
target_section++)
|
||||
if (sect == target_section->the_bfd_section)
|
||||
break;
|
||||
+ /* FIXME: https://bugzilla.redhat.com/show_bug.cgi?id=556310
|
||||
+ It may crash here but it is not understood why. */
|
||||
+#if 0
|
||||
gdb_assert (target_section < current_target_sections->sections_end);
|
||||
+#else
|
||||
+ if (target_section == current_target_sections->sections_end)
|
||||
+ return 0;
|
||||
+#endif
|
||||
|
||||
/* Read in .dynamic from the BFD. We will get the actual value
|
||||
from memory later. */
|
172
gdb-bz559414-pie-assert-fix.patch
Normal file
172
gdb-bz559414-pie-assert-fix.patch
Normal file
@ -0,0 +1,172 @@
|
||||
http://sourceware.org/ml/gdb-patches/2010-01/msg00661.html
|
||||
Subject: [patch] Fix failed gdb_assert due to the PIE patchset
|
||||
|
||||
Hi,
|
||||
|
||||
the PIE patchset brought in an occasionally failing gdb_assert (according to
|
||||
Fedora ABRT bugreports).
|
||||
solib-svr4.c:600: internal-error: scan_dyntag: Assertion `target_section < current_target_sections->sections_end' failed.
|
||||
|
||||
Now I understand it as generally current_target_sections are about target-side
|
||||
data while symbols are the GDB side and there is only loose relation of those.
|
||||
|
||||
ABFD can be from multiple places acting for multiple purposes as parsed by
|
||||
elf_lookup_lib_symbol:
|
||||
|
||||
exec_bfd:
|
||||
It cannot be from exec_one - this BFD has no associated objfile to
|
||||
pass to symfile_objfile. OK.
|
||||
symfile_objfile:
|
||||
It gets translated by elf_lookup_lib_symbol into exec_bfd which
|
||||
represents the target data. OK.
|
||||
so_list's objfile's separate_debug_objfile file:
|
||||
gdb_assert-forbidden as input to elf_lookup_lib_symbol. OK.
|
||||
so_list's objfile's main file:
|
||||
update_solib_list must have called add_target_sections. OK.
|
||||
objfile's separate_debug_objfile file:
|
||||
gdb_assert-forbidden as input to elf_lookup_lib_symbol. OK.
|
||||
objfile's main file (if it has no associated so_list):
|
||||
Such ABFD from add_symbol_file_command has no add_target_sections
|
||||
called. Still it can have current context BLOCK which crashes
|
||||
scan_dyntag. BUG.
|
||||
|
||||
|
||||
No regressions on {x86_64,x86_64-m32,i686}-fedora12-linux-gnu.
|
||||
|
||||
The patch mostly reverts the PIE part there.
|
||||
|
||||
OK to check in?
|
||||
|
||||
|
||||
Sorry,
|
||||
Jan
|
||||
|
||||
|
||||
gdb/
|
||||
2010-01-31 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* solib-svr4.c (scan_dyntag): New variable dyn_addr. Replace gdb_assert
|
||||
by a conditional setting DYN_ADDR. Use DYN_ADDR.
|
||||
* config/djgpp/fnchange.lst: Add translations for
|
||||
symbol-without-target_section.exp and symbol-without-target_section.c.
|
||||
|
||||
gdb/testsuite/
|
||||
2010-01-31 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb.base/symbol-without-target_section.exp,
|
||||
gdb.base/symbol-without-target_section.c: New.
|
||||
|
||||
--- a/gdb/config/djgpp/fnchange.lst
|
||||
+++ b/gdb/config/djgpp/fnchange.lst
|
||||
@@ -394,6 +394,8 @@
|
||||
@V@/gdb/testsuite/gdb.base/solib-symbol-main.c @V@/gdb/testsuite/gdb.base/so-symmain.c
|
||||
@V@/gdb/testsuite/gdb.base/solib-overlap-lib.c @V@/gdb/testsuite/gdb.base/so-ovrlib.c
|
||||
@V@/gdb/testsuite/gdb.base/solib-overlap-main.c @V@/gdb/testsuite/gdb.base/so-ovrmain.c
|
||||
+@V@/gdb/testsuite/gdb.base/gdb.base/symbol-without-target_section.exp @V@/gdb/testsuite/gdb.base/symnosec.exp
|
||||
+@V@/gdb/testsuite/gdb.base/gdb.base/symbol-without-target_section.c @V@/gdb/testsuite/gdb.base/symnosec.c
|
||||
@V@/gdb/testsuite/gdb.base/type-opaque-lib.c @V@/gdb/testsuite/gdb.base/ty-opqlib.c
|
||||
@V@/gdb/testsuite/gdb.base/type-opaque-main.c @V@/gdb/testsuite/gdb.base/ty-opqmain.c
|
||||
@V@/gdb/testsuite/gdb.base/watchpoint-hw.c @V@/gdb/testsuite/gdb.base/wp-hw.c
|
||||
--- a/gdb/solib-svr4.c
|
||||
+++ b/gdb/solib-svr4.c
|
||||
@@ -570,7 +570,7 @@ scan_dyntag (int dyntag, bfd *abfd, CORE_ADDR *ptr)
|
||||
{
|
||||
int arch_size, step, sect_size;
|
||||
long dyn_tag;
|
||||
- CORE_ADDR dyn_ptr;
|
||||
+ CORE_ADDR dyn_ptr, dyn_addr;
|
||||
gdb_byte *bufend, *bufstart, *buf;
|
||||
Elf32_External_Dyn *x_dynp_32;
|
||||
Elf64_External_Dyn *x_dynp_64;
|
||||
@@ -597,7 +597,17 @@ scan_dyntag (int dyntag, bfd *abfd, CORE_ADDR *ptr)
|
||||
target_section++)
|
||||
if (sect == target_section->the_bfd_section)
|
||||
break;
|
||||
- gdb_assert (target_section < current_target_sections->sections_end);
|
||||
+ if (target_section < current_target_sections->sections_end)
|
||||
+ dyn_addr = target_section->addr;
|
||||
+ else
|
||||
+ {
|
||||
+ /* ABFD may come from OBJFILE acting only as a symbol file without being
|
||||
+ loaded into the target (see add_symbol_file_command). This case is
|
||||
+ such fallback to the file VMA address without the possibility of
|
||||
+ having the section relocated to its actual in-memory address. */
|
||||
+
|
||||
+ dyn_addr = bfd_section_vma (abfd, sect);
|
||||
+ }
|
||||
|
||||
/* Read in .dynamic from the BFD. We will get the actual value
|
||||
from memory later. */
|
||||
@@ -639,7 +649,7 @@ scan_dyntag (int dyntag, bfd *abfd, CORE_ADDR *ptr)
|
||||
CORE_ADDR ptr_addr;
|
||||
|
||||
ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
|
||||
- ptr_addr = target_section->addr + (buf - bufstart) + arch_size / 8;
|
||||
+ ptr_addr = dyn_addr + (buf - bufstart) + arch_size / 8;
|
||||
if (target_read_memory (ptr_addr, ptr_buf, arch_size / 8) == 0)
|
||||
dyn_ptr = extract_typed_address (ptr_buf, ptr_type);
|
||||
*ptr = dyn_ptr;
|
||||
--- /dev/null
|
||||
+++ b/gdb/testsuite/gdb.base/symbol-without-target_section.c
|
||||
@@ -0,0 +1,18 @@
|
||||
+/* This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
+ Copyright 2010 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/>. */
|
||||
+
|
||||
+int symbol_without_target_section;
|
||||
--- /dev/null
|
||||
+++ b/gdb/testsuite/gdb.base/symbol-without-target_section.exp
|
||||
@@ -0,0 +1,39 @@
|
||||
+# Copyright 2010 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/>.
|
||||
+
|
||||
+# Exploit formerly failed assertion in scan_dyntag when it got called for
|
||||
+# objfile having ".dynamic" section but without having data loaded in target.
|
||||
+# Such file is ${binmainfile} through add-symbol-file here. Set context first
|
||||
+# by "list main" to have some local BLOCK set in lookup_symbol_global.
|
||||
+
|
||||
+set testfile symbol-without-target_section
|
||||
+set srclibfile ${testfile}.c
|
||||
+set binlibfile ${testfile}.x
|
||||
+set srcmainfile start.c
|
||||
+set binmainfile ${testfile}
|
||||
+if { [gdb_compile "${srcdir}/${subdir}/${srclibfile}" \
|
||||
+ "${objdir}/${subdir}/${binlibfile}" object {debug}] != "" } {
|
||||
+ untested ${testfile}.exp
|
||||
+ return -1
|
||||
+}
|
||||
+if {[build_executable ${testfile}.exp ${binmainfile} ${srcmainfile} {debug}] == -1} {
|
||||
+ return -1
|
||||
+}
|
||||
+clean_restart ${binlibfile}
|
||||
+
|
||||
+gdb_test "add-symbol-file ${objdir}/${subdir}/${binmainfile} 0" "" "add-symbol-file" \
|
||||
+ "add symbol table from file \".*\" at.*\\(y or n\\) " "y"
|
||||
+gdb_test "list main"
|
||||
+gdb_test "print symbol_without_target_section"
|
||||
|
12
gdb.spec
12
gdb.spec
@ -36,7 +36,7 @@ Version: 7.0.50.20100128
|
||||
|
||||
# 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: 10%{?_with_upstream:.upstream}%{dist}
|
||||
Release: 11%{?_with_upstream:.upstream}%{dist}
|
||||
|
||||
License: GPLv3+
|
||||
Group: Development/Debuggers
|
||||
@ -427,8 +427,8 @@ Patch408: gdb-ppc-power7-test.patch
|
||||
# Revert: Add -Wunused-function to compile flags.
|
||||
Patch412: gdb-unused-revert.patch
|
||||
|
||||
# It may crash here but it is not understood why.
|
||||
Patch414: gdb-archer-pie-assert-temp-workaround.patch
|
||||
# Fix failed gdb_assert due to the PIE patchset (BZ 559414).
|
||||
Patch414: gdb-bz559414-pie-assert-fix.patch
|
||||
|
||||
BuildRequires: ncurses-devel%{?_isa} texinfo gettext flex bison expat-devel%{?_isa}
|
||||
Requires: readline%{?_isa}
|
||||
@ -682,13 +682,10 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
|
||||
%patch415 -p1
|
||||
%patch393 -p1
|
||||
%patch335 -p1
|
||||
# Patch414: gdb-archer-pie-assert-temp-workaround.patch
|
||||
# It may crash here but it is not understood why.
|
||||
# Patch415: gdb-6.6-buildid-locate-core-as-arg.patch
|
||||
# Currently disabled for RHEL as it is a new experimental feature not present
|
||||
# in FSF GDB and possibly affecting new user scripts.
|
||||
%if 0%{!?rhel:1}
|
||||
%patch414 -p1 -R
|
||||
%patch415 -p1 -R
|
||||
%endif
|
||||
%if 0%{!?el5:1}
|
||||
@ -1013,6 +1010,9 @@ fi
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Sun Jan 31 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.50.20100128-11.fc13
|
||||
- Fix failed gdb_assert due to the PIE patchset (BZ 559414).
|
||||
|
||||
* Thu Jan 28 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.50.20100128-10.fc13
|
||||
- Upgrade to the FSF GDB snapshot: 7.0.50.20100128
|
||||
- archer-jankratochvil-fedora13 commit: 39c5a8b75fad3acd7204903db5dee025055a4594
|
||||
|
Loading…
Reference in New Issue
Block a user