2010-01-12 22:15:57 +00:00
|
|
|
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.
|
|
|
|
|
2012-06-19 20:30:55 +00:00
|
|
|
[ New patch variant. ]
|
2010-01-12 22:15:57 +00:00
|
|
|
|
2012-06-19 20:30:55 +00:00
|
|
|
diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
|
|
|
|
index 307e483..ba70764 100644
|
|
|
|
--- a/gdb/solib-svr4.c
|
|
|
|
+++ b/gdb/solib-svr4.c
|
|
|
|
@@ -1221,8 +1221,17 @@ svr4_read_so_list (CORE_ADDR lm, struct so_list ***link_ptr_ptr,
|
2012-01-03 15:00:12 +00:00
|
|
|
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. */
|
2010-01-12 22:15:57 +00:00
|
|
|
+
|
2012-01-03 15:00:12 +00:00
|
|
|
+ if (master_so_list () != NULL)
|
|
|
|
+ warning (_("Can't read pathname for load map: %s."),
|
|
|
|
+ safe_strerror (errcode));
|
|
|
|
+
|
|
|
|
do_cleanups (old_chain);
|
|
|
|
continue;
|
|
|
|
}
|
2012-06-19 20:30:55 +00:00
|
|
|
diff --git a/gdb/solib.c b/gdb/solib.c
|
|
|
|
index 90439ba..36e4d2a 100644
|
|
|
|
--- a/gdb/solib.c
|
|
|
|
+++ b/gdb/solib.c
|
|
|
|
@@ -669,7 +669,7 @@ solib_used (const struct so_list *const known)
|
|
|
|
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)
|
|
|
|
{
|
2010-01-12 22:15:57 +00:00
|
|
|
struct target_so_ops *ops = solib_ops (target_gdbarch);
|
|
|
|
struct so_list *inferior = ops->current_sos();
|
2012-06-19 20:30:55 +00:00
|
|
|
@@ -840,6 +840,21 @@ Do you need \"set solib-search-path\" or \"set sysroot\"?"),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
+/* Wrapper for Fedora: gdb-core-open-vdso-warning.patch */
|
|
|
|
+
|
|
|
|
+static void
|
|
|
|
+update_solib_list (int from_tty, struct target_ops *target)
|
|
|
|
+{
|
2010-01-12 22:15:57 +00:00
|
|
|
+ struct so_list *saved_so_list_head = so_list_head;
|
2012-06-19 20:30:55 +00:00
|
|
|
+
|
|
|
|
+ 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);
|
|
|
|
+}
|
2010-01-12 22:15:57 +00:00
|
|
|
|
2012-06-19 20:30:55 +00:00
|
|
|
/* Return non-zero if NAME is the libpthread shared library.
|
|
|
|
|
|
|
|
diff --git a/gdb/testsuite/gdb.base/corefile.exp b/gdb/testsuite/gdb.base/corefile.exp
|
|
|
|
index 027eb2c..ab686f0 100644
|
|
|
|
--- a/gdb/testsuite/gdb.base/corefile.exp
|
|
|
|
+++ b/gdb/testsuite/gdb.base/corefile.exp
|
|
|
|
@@ -256,3 +256,18 @@ if ![is_remote target] {
|
2010-07-21 21:30:20 +00:00
|
|
|
|
2012-06-19 20:30:55 +00:00
|
|
|
gdb_exit
|
|
|
|
}
|
2010-01-12 22:15:57 +00:00
|
|
|
+
|
2012-06-19 20:30:55 +00:00
|
|
|
+# Test Linux specific vDSO warning:
|
|
|
|
+# warning: Can't read pathname for load map: Input/output error.
|
2010-01-12 22:15:57 +00:00
|
|
|
+
|
2012-06-19 20:30:55 +00:00
|
|
|
+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
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
diff --git a/gdb/testsuite/gdb.base/solib-symbol.exp b/gdb/testsuite/gdb.base/solib-symbol.exp
|
|
|
|
index 3c03317..0fc38d9 100644
|
|
|
|
--- a/gdb/testsuite/gdb.base/solib-symbol.exp
|
|
|
|
+++ b/gdb/testsuite/gdb.base/solib-symbol.exp
|
|
|
|
@@ -27,7 +27,8 @@ set lib_flags [list debug ldflags=-Wl,-Bsymbolic]
|
|
|
|
# Binary file.
|
|
|
|
set testfile "solib-symbol-main"
|
|
|
|
set srcfile ${srcdir}/${subdir}/${testfile}.c
|
|
|
|
-set binfile ${objdir}/${subdir}/${testfile}
|
|
|
|
+set executable ${testfile}
|
|
|
|
+set binfile ${objdir}/${subdir}/${executable}
|
|
|
|
set bin_flags [list debug shlib=${binfile_lib}]
|
|
|
|
|
|
|
|
if [get_compiler_info ${binfile}] {
|
|
|
|
@@ -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"
|