diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2010-04-23 21:44:20 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2010-04-23 21:44:20 +0000 |
commit | 492928e407c9c69d0cd998a14f82cdd839c8f71a (patch) | |
tree | 003553147b635059a4ca1b7c8de71e83af533e26 /gdb/testsuite | |
parent | ef38fd8a0b29ff3e53add753ef8fe3bd6c242542 (diff) | |
download | gdb-492928e407c9c69d0cd998a14f82cdd839c8f71a.zip gdb-492928e407c9c69d0cd998a14f82cdd839c8f71a.tar.gz gdb-492928e407c9c69d0cd998a14f82cdd839c8f71a.tar.bz2 |
gdb/
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.
gdb/testsuite/
Fix deadlock on looped list of loaded shared objects.
* gdb.base/solib-corrupted.exp: New.
Diffstat (limited to 'gdb/testsuite')
-rw-r--r-- | gdb/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/solib-corrupted.exp | 46 |
2 files changed, 51 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 4442049..024054d 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-04-23 Jan Kratochvil <jan.kratochvil@redhat.com> + + Fix deadlock on looped list of loaded shared objects. + * gdb.base/solib-corrupted.exp: New. + 2010-04-23 Doug Evans <dje@google.com> * gdb.python/py-section-script.c: New file. diff --git a/gdb/testsuite/gdb.base/solib-corrupted.exp b/gdb/testsuite/gdb.base/solib-corrupted.exp new file mode 100644 index 0000000..5a0c52d --- /dev/null +++ b/gdb/testsuite/gdb.base/solib-corrupted.exp @@ -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 <http://www.gnu.org/licenses/>. + +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" |