From 569b05a56052fbdf2fa18ac7b3f4f210257f6eee Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Tue, 20 Jul 2010 22:19:07 +0000 Subject: [PATCH] gdb/ * symfile.c (find_separate_debug_file_by_debuglink): Remove a gdb_assert call, new comment. gdb/testsuite/ * gdb.base/solib-nodir.exp: New file. * lib/gdb.exp (runto): New case for a GDB internal error. --- gdb/ChangeLog | 5 +++ gdb/symfile.c | 6 +-- gdb/testsuite/ChangeLog | 5 +++ gdb/testsuite/gdb.base/solib-nodir.exp | 54 ++++++++++++++++++++++++++ gdb/testsuite/lib/gdb.exp | 5 +++ 5 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 gdb/testsuite/gdb.base/solib-nodir.exp diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 042d5f5f2e..1e1257ef00 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2010-07-20 Jan Kratochvil + + * symfile.c (find_separate_debug_file_by_debuglink): Remove + a gdb_assert call, new comment. + 2010-07-20 Jan Kratochvil * linux-nat.c (linux_handle_extended_wait): Handle case when diff --git a/gdb/symfile.c b/gdb/symfile.c index babe9cf578..371db0dbc5 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -1374,15 +1374,13 @@ find_separate_debug_file_by_debuglink (struct objfile *objfile) dir = xstrdup (objfile->name); /* Strip off the final filename part, leaving the directory name, - followed by a slash. Objfile names should always be absolute and - tilde-expanded, so there should always be a slash in there - somewhere. */ + followed by a slash. The directory can be relative or absolute. */ for (i = strlen(dir) - 1; i >= 0; i--) { if (IS_DIR_SEPARATOR (dir[i])) break; } - gdb_assert (i >= 0 && IS_DIR_SEPARATOR (dir[i])); + /* If I is -1 then no directory is present there and DIR will be "". */ dir[i+1] = '\0'; /* Set I to max (strlen (canon_name), strlen (dir)). */ diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 5beecdf435..41d00e46b4 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-07-20 Jan Kratochvil + + * gdb.base/solib-nodir.exp: New file. + * lib/gdb.exp (runto): New case for a GDB internal error. + 2010-07-20 Jan Kratochvil Ulrich Weigand Tom Tromey diff --git a/gdb/testsuite/gdb.base/solib-nodir.exp b/gdb/testsuite/gdb.base/solib-nodir.exp new file mode 100644 index 0000000000..5c3f46e1a3 --- /dev/null +++ b/gdb/testsuite/gdb.base/solib-nodir.exp @@ -0,0 +1,54 @@ +# 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 . */ + +# are we on a target board +if {![isnative] || [skip_shlib_tests]} { + return +} + +set testfile "solib-nodir" +# Arbitrary file, possibly not containing main, even an empty one. +set srclibfile foo.c +# Arbitrary file containing main. +set srcfile start.c +set binlibfilebase ${testfile}.so +set binlibfiledir ${objdir}/${subdir} +set binlibfile ${binlibfiledir}/${binlibfilebase} +set executable ${testfile} +set objfile ${objdir}/${subdir}/${executable}.o +set binfile ${objdir}/${subdir}/${executable} + +# build the first test case +if { [get_compiler_info unused] + || [gdb_compile_shlib "${srcdir}/${subdir}/${srclibfile}" "${binlibfile}" [list debug additional_flags=-Wl,-soname,${binlibfilebase}]] != "" + || [gdb_gnu_strip_debug $binlibfile] + || [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" + || [gdb_compile "${objfile} ${binlibfile}" "${binfile}" executable {}] != "" } { + untested ${testfile}.exp + return -1 +} + +clean_restart $executable +gdb_load_shlibs ${binlibfile} + +gdb_test_no_output "set env LD_LIBRARY_PATH=:" +gdb_test "cd ${binlibfiledir}" "Working directory [string_to_regexp ${binlibfiledir}]\\." + +set test "library loaded" +if [runto_main] { + pass $test +} else { + fail $test +} diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index 032c1c6d4f..2f57ffb1c6 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -423,6 +423,11 @@ proc runto { function args } { unsupported "Non-stop mode not supported" return 0 } + -re ".*A problem internal to GDB has been detected" { + fail "running to $function in runto (GDB internal error)" + gdb_internal_error_resync + return 0 + } -re "$gdb_prompt $" { fail "running to $function in runto" return 0