From 2897558ca739160f963e9866237b5945d64d2e8b Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: May 24 2010 19:04:48 +0000 Subject: - Fix lock up on loops in the solib chain (BZ 593926). - Import fix of TUI layout internal error (BZ 595475). --- diff --git a/gdb-7.0-upstream.patch b/gdb-7.0-upstream.patch index fbdd08e..6388ef5 100644 --- a/gdb-7.0-upstream.patch +++ b/gdb-7.0-upstream.patch @@ -227,3 +227,204 @@ http://sourceware.org/ml/gdb-cvs/2009-11/msg00034.html { language_info (1); /* Print what changed. */ } + + + +https://bugzilla.redhat.com/show_bug.cgi?id=578136 +https://bugzilla.redhat.com/show_bug.cgi?id=593926 +http://sourceware.org/ml/gdb-patches/2010-04/msg00820.html +http://sourceware.org/ml/gdb-cvs/2010-04/msg00240.html + +### src/gdb/ChangeLog 2010/04/23 18:09:16 1.11678 +### src/gdb/ChangeLog 2010/04/23 21:44:19 1.11679 +## -1,3 +1,14 @@ ++2010-04-23 Daniel Jacobowitz ++ Paul Pluzhnikov ++ Jan Kratochvil ++ ++ Fix deadlock on looped list of loaded shared objects. ++ * solib-svr4.c (LM_PREV): New function. ++ (IGNORE_FIRST_LINK_MAP_ENTRY): Use it. ++ (svr4_current_sos): Check for correct l_prev. New variables prev_lm ++ and next_lm. Clear prev_lm for solib_svr4_r_ldsomap. ++ * config/djgpp/fnchange.lst: Add translation for solib-corrupted.exp. ++ + 2010-04-23 Doug Evans + + * configure.ac (CONFIG_SRCS): Add py-auto-load.o even if not using +--- src/gdb/solib-svr4.c 2010/03/11 22:07:02 1.130 ++++ src/gdb/solib-svr4.c 2010/04/23 21:44:19 1.131 +@@ -272,6 +272,16 @@ + } + + static CORE_ADDR ++LM_PREV (struct so_list *so) ++{ ++ struct link_map_offsets *lmo = svr4_fetch_link_map_offsets (); ++ struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr; ++ ++ return extract_typed_address (so->lm_info->lm + lmo->l_prev_offset, ++ ptr_type); ++} ++ ++static CORE_ADDR + LM_NAME (struct so_list *so) + { + struct link_map_offsets *lmo = svr4_fetch_link_map_offsets (); +@@ -284,16 +294,12 @@ + static int + IGNORE_FIRST_LINK_MAP_ENTRY (struct so_list *so) + { +- struct link_map_offsets *lmo = svr4_fetch_link_map_offsets (); +- struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr; +- + /* Assume that everything is a library if the dynamic loader was loaded + late by a static executable. */ + if (exec_bfd && bfd_get_section_by_name (exec_bfd, ".dynamic") == NULL) + return 0; + +- return extract_typed_address (so->lm_info->lm + lmo->l_prev_offset, +- ptr_type) == 0; ++ return LM_PREV (so) == 0; + } + + /* Per-inferior SVR4 specific data. */ +@@ -1101,7 +1107,7 @@ + static struct so_list * + svr4_current_sos (void) + { +- CORE_ADDR lm; ++ CORE_ADDR lm, prev_lm; + struct so_list *head = 0; + struct so_list **link_ptr = &head; + CORE_ADDR ldsomap = 0; +@@ -1120,6 +1126,7 @@ + + /* Walk the inferior's link map list, and build our list of + `struct so_list' nodes. */ ++ prev_lm = 0; + lm = solib_svr4_r_map (info); + + while (lm) +@@ -1127,6 +1134,7 @@ + struct link_map_offsets *lmo = svr4_fetch_link_map_offsets (); + struct so_list *new = XZALLOC (struct so_list); + struct cleanup *old_chain = make_cleanup (xfree, new); ++ CORE_ADDR next_lm; + + new->lm_info = xmalloc (sizeof (struct lm_info)); + make_cleanup (xfree, new->lm_info); +@@ -1138,14 +1146,21 @@ + + read_memory (lm, new->lm_info->lm, lmo->link_map_size); + +- lm = LM_NEXT (new); ++ next_lm = LM_NEXT (new); ++ ++ if (LM_PREV (new) != prev_lm) ++ { ++ warning (_("Corrupted shared library list")); ++ free_so (new); ++ next_lm = 0; ++ } + + /* For SVR4 versions, the first entry in the link map is for the + inferior executable, so we must ignore it. For some versions of + SVR4, it has no name. For others (Solaris 2.3 for example), it + does have a name, so we can no longer use a missing name to + decide when to ignore it. */ +- if (IGNORE_FIRST_LINK_MAP_ENTRY (new) && ldsomap == 0) ++ else if (IGNORE_FIRST_LINK_MAP_ENTRY (new) && ldsomap == 0) + { + info->main_lm_addr = new->lm_info->lm_addr; + free_so (new); +@@ -1182,12 +1197,18 @@ + } + } + ++ prev_lm = lm; ++ lm = next_lm; ++ + /* On Solaris, the dynamic linker is not in the normal list of + shared objects, so make sure we pick it up too. Having + symbol information for the dynamic linker is quite crucial + for skipping dynamic linker resolver code. */ + if (lm == 0 && ldsomap == 0) +- lm = ldsomap = solib_svr4_r_ldsomap (info); ++ { ++ lm = ldsomap = solib_svr4_r_ldsomap (info); ++ prev_lm = 0; ++ } + + discard_cleanups (old_chain); + } +--- src/gdb/config/djgpp/fnchange.lst 2010/04/09 15:15:05 1.112 ++++ src/gdb/config/djgpp/fnchange.lst 2010/04/23 21:44:19 1.113 +@@ -397,6 +397,7 @@ + @V@/gdb/testsuite/gdb.base/siginfo-obj.c @V@/gdb/testsuite/gdb.base/si-obj.c + @V@/gdb/testsuite/gdb.base/siginfo-addr.exp @V@/gdb/testsuite/gdb.base/si-addr.exp + @V@/gdb/testsuite/gdb.base/siginfo-obj.exp @V@/gdb/testsuite/gdb.base/si-obj.exp ++@V@/gdb/testsuite/gdb.base/solib-corrupted.exp @V@/gdb/testsuite/gdb.base/so-crptd.exp + @V@/gdb/testsuite/gdb.base/solib-disc.c @V@/gdb/testsuite/gdb.base/so-disc.c + @V@/gdb/testsuite/gdb.base/solib-display-lib.c @V@/gdb/testsuite/gdb.base/so-displib.c + @V@/gdb/testsuite/gdb.base/solib-display-main.c @V@/gdb/testsuite/gdb.base/so-dispmain.c +### src/gdb/testsuite/ChangeLog 2010/04/23 18:03:31 1.2252 +### src/gdb/testsuite/ChangeLog 2010/04/23 21:44:20 1.2253 +## -1,3 +1,8 @@ ++2010-04-23 Jan Kratochvil ++ ++ Fix deadlock on looped list of loaded shared objects. ++ * gdb.base/solib-corrupted.exp: New. ++ + 2010-04-23 Doug Evans + + * gdb.python/py-section-script.c: New file. +--- src/gdb/testsuite/gdb.base/solib-corrupted.exp ++++ src/gdb/testsuite/gdb.base/solib-corrupted.exp 2010-05-24 18:00:52.057995000 +0000 +@@ -0,0 +1,46 @@ ++# 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 . ++ ++set testfile "solib-corrupted" ++set srcfile start.c ++ ++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } { ++ untested ${testfile}.exp ++ return -1 ++} ++ ++if ![runto_main] { ++ fail "Can't run to main" ++ return ++} ++ ++gdb_test "info sharedlibrary" "" "normal list" ++ ++# GDB checks there for matching L_PREV. ++set test "make solibs looping" ++gdb_test_multiple "p/x _r_debug->r_map->l_next = _r_debug->r_map" $test { ++ -re "(No symbol \"_r_debug\" in current context\\.|Attempt to extract a component of a value that is not a structure pointer\\.)\r\n$gdb_prompt $" { ++ # glibc debug info is not available and it is too difficult to find and ++ # parse it from this testcase without the gdb supporting functions. ++ verbose -log "no _r_debug symbol has been found" ++ xfail $test ++ untested ${testfile}.exp ++ return ++ } ++ -re " = 0x\[0-9a-f\]+\r\n$gdb_prompt $" { ++ pass $test ++ } ++} ++gdb_test "info sharedlibrary" "warning: Corrupted shared library list\r\n.*" "corrupted list" diff --git a/gdb-bz595475-tui-layout.patch b/gdb-bz595475-tui-layout.patch new file mode 100644 index 0000000..71742f8 --- /dev/null +++ b/gdb-bz595475-tui-layout.patch @@ -0,0 +1,79 @@ +https://bugzilla.redhat.com/show_bug.cgi?id=586566 +http://sourceware.org/ml/gdb-patches/2010-03/msg00746.html +http://sourceware.org/ml/gdb-patches/2010-05/msg00551.html +http://sourceware.org/ml/gdb-cvs/2010-03/msg00194.html + +### src/gdb/ChangeLog 2010/03/19 22:00:16 1.11508 +### src/gdb/ChangeLog 2010/03/20 05:17:10 1.11509 +## -1,3 +1,9 @@ ++2010-03-20 Daniel Jacobowitz ++ ++ * tui/tui-disasm.c (tui_get_begin_asm_address): Default to ++ get_current_arch. ++ * tui/tui-layout.c (extract_display_start_addr): Likewise. ++ + 2010-03-19 Stan Shebs + + * ax-gdb.c (gen_fetch): Handle bool. +--- src/gdb/tui/tui-disasm.c 2010/01/01 07:32:07 1.33 ++++ src/gdb/tui/tui-disasm.c 2010/03/20 05:17:10 1.34 +@@ -21,6 +21,7 @@ + along with this program. If not, see . */ + + #include "defs.h" ++#include "arch-utils.h" + #include "symtab.h" + #include "breakpoint.h" + #include "frame.h" +@@ -330,7 +331,7 @@ + { + struct tui_gen_win_info *locator; + struct tui_locator_element *element; +- struct gdbarch *gdbarch = NULL; ++ struct gdbarch *gdbarch = get_current_arch (); + CORE_ADDR addr; + + locator = tui_locator_win_info_ptr (); +--- src/gdb/tui/tui-layout.c 2010/01/01 07:32:07 1.36 ++++ src/gdb/tui/tui-layout.c 2010/03/20 05:17:10 1.37 +@@ -21,6 +21,7 @@ + along with this program. If not, see . */ + + #include "defs.h" ++#include "arch-utils.h" + #include "command.h" + #include "symtab.h" + #include "frame.h" +@@ -522,7 +523,7 @@ + extract_display_start_addr (struct gdbarch **gdbarch_p, CORE_ADDR *addr_p) + { + enum tui_layout_type cur_layout = tui_current_layout (); +- struct gdbarch *gdbarch = NULL; ++ struct gdbarch *gdbarch = get_current_arch (); + CORE_ADDR addr; + CORE_ADDR pc; + struct symtab_and_line cursal = get_current_source_symtab_and_line (); +--- /dev/null 2010-05-24 04:43:32.632794021 +0200 ++++ gdb-7.1/gdb/testsuite/gdb.base/tui-layout.exp 2010-05-24 20:13:30.000000000 +0200 +@@ -0,0 +1,21 @@ ++# 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 . ++ ++set testfile tui-layout ++if { [prepare_for_testing ${testfile}.exp ${testfile} start.c] } { ++ return -1 ++} ++ ++gdb_test "layout asm" diff --git a/gdb.spec b/gdb.spec index fda85e3..4c13247 100644 --- a/gdb.spec +++ b/gdb.spec @@ -36,7 +36,7 @@ Version: 7.0.1 # 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: 45%{?_with_upstream:.upstream}%{dist} +Release: 46%{?_with_upstream:.upstream}%{dist} License: GPLv3+ Group: Development/Debuggers @@ -497,6 +497,9 @@ Patch450: gdb-bz582052-libstdc++-compat.patch # Fix crash when using GNU IFUNC call from breakpoint condition. Patch454: gdb-bz539590-gnu-ifunc-fix-cond.patch +# Import fix of TUI layout internal error (BZ 595475). +Patch462: gdb-bz595475-tui-layout.patch + BuildRequires: ncurses-devel%{?_isa} texinfo gettext flex bison expat-devel%{?_isa} Requires: readline%{?_isa} BuildRequires: readline-devel%{?_isa} @@ -767,6 +770,7 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c %patch438 -p1 %patch450 -p1 %patch454 -p1 +%patch462 -p1 # Always verify their applicability. %patch393 -p1 %patch335 -p1 @@ -1092,6 +1096,10 @@ fi %endif %changelog +* Mon May 24 2010 Jan Kratochvil - 7.0.1-46.fc12 +- Fix lock up on loops in the solib chain (BZ 593926). +- Import fix of TUI layout internal error (BZ 595475). + * Mon Apr 26 2010 Jan Kratochvil - 7.0.1-45.fc12 - Fix crash when using GNU IFUNC call from breakpoint condition.