http://sourceware.org/ml/gdb-patches/2009-10/msg00142.html Subject: [patch] Fix GNU/Linux core open: Can't read pathname for load map: Input/output error. [ New patch variant. ] Index: gdb-7.6.50.20130731-cvs/gdb/solib-svr4.c =================================================================== --- gdb-7.6.50.20130731-cvs.orig/gdb/solib-svr4.c 2013-08-02 16:27:28.831259468 +0200 +++ gdb-7.6.50.20130731-cvs/gdb/solib-svr4.c 2013-08-02 16:27:47.871284813 +0200 @@ -1359,8 +1359,17 @@ svr4_read_so_list (CORE_ADDR lm, CORE_AD SO_NAME_MAX_PATH_SIZE - 1, &errcode); if (errcode != 0) { - warning (_("Can't read pathname for load map: %s."), - safe_strerror (errcode)); + /* During the first ever DSO list reading some strings may be + unreadable as residing in the ld.so readonly memory not being + present in a dumped core file. Delay the error check after + the first pass of DSO list scanning when ld.so should be + already mapped in and all the DSO list l_name memory gets + readable. */ + + if (master_so_list () != NULL) + warning (_("Can't read pathname for load map: %s."), + safe_strerror (errcode)); + do_cleanups (old_chain); continue; } Index: gdb-7.6.50.20130731-cvs/gdb/solib.c =================================================================== --- gdb-7.6.50.20130731-cvs.orig/gdb/solib.c 2013-08-02 16:27:28.832259470 +0200 +++ gdb-7.6.50.20130731-cvs/gdb/solib.c 2013-08-02 16:28:50.421367694 +0200 @@ -669,7 +669,7 @@ solib_used (const struct so_list *const processes we've just attached to, so that's okay. */ static void -update_solib_list (int from_tty, struct target_ops *target) +update_solib_list_1 (int from_tty, struct target_ops *target) { const struct target_so_ops *ops = solib_ops (target_gdbarch ()); struct so_list *inferior = ops->current_sos(); @@ -840,6 +840,21 @@ Do you need \"set solib-search-path\" or } } +/* Wrapper for Fedora: gdb-core-open-vdso-warning.patch */ + +static void +update_solib_list (int from_tty, struct target_ops *target) +{ + struct so_list *saved_so_list_head = so_list_head; + + update_solib_list_1 (from_tty, target); + + /* If this was the very first DSO list scan and we possibly read in ld.so + recheck all the formerly unreadable DSO names strings. */ + + if (saved_so_list_head == NULL && so_list_head != NULL) + update_solib_list_1 (from_tty, target); +} /* Return non-zero if NAME is the libpthread shared library. Index: gdb-7.6.50.20130731-cvs/gdb/testsuite/gdb.base/corefile.exp =================================================================== --- gdb-7.6.50.20130731-cvs.orig/gdb/testsuite/gdb.base/corefile.exp 2013-08-02 16:27:28.833259471 +0200 +++ gdb-7.6.50.20130731-cvs/gdb/testsuite/gdb.base/corefile.exp 2013-08-02 16:27:47.872284814 +0200 @@ -285,3 +285,19 @@ if {$buildid == ""} { gdb_test "info files" "Local exec file:\r\n\[ \t\]*`[string_to_regexp $debugdir/$buildid]', file type .*" pass $wholetest } + + +# Test Linux specific vDSO warning: +# warning: Can't read pathname for load map: Input/output error. + +clean_restart ${testfile} + +set test "core-file vdso warning" +gdb_test_multiple "core-file $corefile" $test { + -re "warning: Can't read pathname for load map: Input/output error\\.\r\n.*\r\n$gdb_prompt $" { + fail $test + } + -re "\r\n$gdb_prompt $" { + pass $test + } +} Index: gdb-7.6.50.20130731-cvs/gdb/testsuite/gdb.base/solib-symbol.exp =================================================================== --- gdb-7.6.50.20130731-cvs.orig/gdb/testsuite/gdb.base/solib-symbol.exp 2013-08-02 16:27:28.833259471 +0200 +++ gdb-7.6.50.20130731-cvs/gdb/testsuite/gdb.base/solib-symbol.exp 2013-08-02 16:28:22.549330973 +0200 @@ -29,6 +29,7 @@ set testfile "solib-symbol-main" set srcfile ${srcdir}/${subdir}/${testfile}.c set binfile [standard_output_file ${testfile}] set bin_flags [list debug shlib=${binfile_lib}] +set executable ${testfile} if [get_compiler_info] { return -1 @@ -72,8 +73,26 @@ gdb_test "br foo2" \ "Breakpoint.*: foo2. .2 locations..*" \ "foo2 in mdlib" -gdb_exit +# Test GDB warns for shared libraris which have not been found. -return 0 +gdb_test "info sharedlibrary" "/${libname}.*" +clean_restart ${executable} +gdb_breakpoint "main" +gdb_run_cmd +set test "no warning for missing libraries" +gdb_test_multiple "" $test { + -re "warning: Could not load shared library symbols for \[0-9\]+ libraries,.*\r\n$gdb_prompt $" { + fail $test + } + -re "Breakpoint \[0-9\]+, main .*\r\n$gdb_prompt $" { + pass $test + } +} +clean_restart ${executable} +gdb_test_no_output "set solib-absolute-prefix /doESnotEXIST" +gdb_breakpoint "main" +gdb_run_cmd +gdb_test "" "warning: Could not load shared library symbols for \[0-9\]+ libraries,.*\r\nBreakpoint \[0-9\]+, main .*" \ + "warning for missing libraries"