diff options
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/symfile.c | 6 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/solib-nodir.exp | 54 | ||||
-rw-r--r-- | gdb/testsuite/lib/gdb.exp | 5 |
5 files changed, 71 insertions, 4 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 042d5f5..1e1257e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2010-07-20 Jan Kratochvil <jan.kratochvil@redhat.com> + * symfile.c (find_separate_debug_file_by_debuglink): Remove + a gdb_assert call, new comment. + +2010-07-20 Jan Kratochvil <jan.kratochvil@redhat.com> + * linux-nat.c (linux_handle_extended_wait): Handle case when event == PTRACE_EVENT_CLONE && stopping && WSTOPSIG (status) != SIGSTOP. diff --git a/gdb/symfile.c b/gdb/symfile.c index babe9cf..371db0d 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 5beecdf..41d00e4 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,4 +1,9 @@ 2010-07-20 Jan Kratochvil <jan.kratochvil@redhat.com> + + * gdb.base/solib-nodir.exp: New file. + * lib/gdb.exp (runto): New case for a GDB internal error. + +2010-07-20 Jan Kratochvil <jan.kratochvil@redhat.com> Ulrich Weigand <uweigand@de.ibm.com> Tom Tromey <tromey@redhat.com> diff --git a/gdb/testsuite/gdb.base/solib-nodir.exp b/gdb/testsuite/gdb.base/solib-nodir.exp new file mode 100644 index 0000000..5c3f46e --- /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 <http://www.gnu.org/licenses/>. */ + +# 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 032c1c6..2f57ffb 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 |