]> git.pld-linux.org Git - packages/gdb.git/blame - gdb-6.6-buildid-locate-solib-missing-ids.patch
- updated to 14.1 + rebased Fedora buildid patches set
[packages/gdb.git] / gdb-6.6-buildid-locate-solib-missing-ids.patch
CommitLineData
4b0e5c1b
AM
1From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
2From: Fedora GDB patches <invalid@email.com>
3Date: Fri, 27 Oct 2017 21:07:50 +0200
4Subject: gdb-6.6-buildid-locate-solib-missing-ids.patch
5
4b0e5c1b
AM
6;; Fix loading of core files without build-ids but with build-ids in executables.
7;; Load strictly build-id-checked core files only if no executable is specified
8;; (Jan Kratochvil, RH BZ 1339862).
9;;=push+jan
10
140f8057
JR
11gdb returns an incorrect back trace when applying a debuginfo
12https://bugzilla.redhat.com/show_bug.cgi?id=1339862
13
4b0e5c1b 14diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
4b0e5c1b
AM
15--- a/gdb/solib-svr4.c
16+++ b/gdb/solib-svr4.c
5673f127 17@@ -1320,14 +1320,28 @@ svr4_read_so_list (svr4_info *info, CORE_ADDR lm, CORE_ADDR prev_lm,
a7de96f0
PS
18 }
19
20 {
324d13e1
JR
21- struct bfd_build_id *build_id;
22+ struct bfd_build_id *build_id = NULL;
a7de96f0 23
ed003b1c 24 strncpy (newobj->so_original_name, buffer.get (), SO_NAME_MAX_PATH_SIZE - 1);
324d13e1 25 newobj->so_original_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
a7de96f0 26 /* May get overwritten below. */
324d13e1 27 strcpy (newobj->so_name, newobj->so_original_name);
a7de96f0 28
ed003b1c 29- build_id = build_id_addr_get (((lm_info_svr4 *) newobj->lm_info)->l_ld);
a7de96f0
PS
30+ /* In the case the main executable was found according to its build-id
31+ (from a core file) prevent loading a different build of a library
32+ with accidentally the same SO_NAME.
33+
34+ It suppresses bogus backtraces (and prints "??" there instead) if
35+ the on-disk files no longer match the running program version.
36+
37+ If the main executable was not loaded according to its build-id do
38+ not do any build-id checking of the libraries. There may be missing
39+ build-ids dumped in the core file and we would map all the libraries
40+ to the only existing file loaded that time - the executable. */
1d2a824d
JP
41+ if (current_program_space->symfile_object_file != NULL
42+ && (current_program_space->symfile_object_file->flags
43+ & OBJF_BUILD_ID_CORE_LOADED) != 0)
4b0e5c1b 44+ build_id = build_id_addr_get (li->l_ld);
a7de96f0
PS
45 if (build_id != NULL)
46 {
47 char *name, *build_id_filename;
5673f127 48@@ -1342,23 +1356,7 @@ svr4_read_so_list (svr4_info *info, CORE_ADDR lm, CORE_ADDR prev_lm,
a7de96f0
PS
49 xfree (name);
50 }
51 else
52- {
324d13e1 53- debug_print_missing (newobj->so_name, build_id_filename);
a7de96f0
PS
54-
55- /* In the case the main executable was found according to
56- its build-id (from a core file) prevent loading
57- a different build of a library with accidentally the
58- same SO_NAME.
59-
60- It suppresses bogus backtraces (and prints "??" there
61- instead) if the on-disk files no longer match the
62- running program version. */
63-
1d2a824d
JP
64- if (current_program_space->symfile_object_file != NULL
65- && (current_program_space->symfile_object_file->flags
a7de96f0 66- & OBJF_BUILD_ID_CORE_LOADED) != 0)
324d13e1 67- newobj->so_name[0] = 0;
a7de96f0 68- }
324d13e1 69+ debug_print_missing (newobj->so_name, build_id_filename);
a7de96f0
PS
70
71 xfree (build_id_filename);
72 xfree (build_id);
4b0e5c1b
AM
73diff --git a/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib-lib.c b/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib-lib.c
74new file mode 100644
4b0e5c1b
AM
75--- /dev/null
76+++ b/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib-lib.c
77@@ -0,0 +1,21 @@
78+/* Copyright 2010 Free Software Foundation, Inc.
79+
80+ This file is part of GDB.
81+
82+ This program is free software; you can redistribute it and/or modify
83+ it under the terms of the GNU General Public License as published by
84+ the Free Software Foundation; either version 3 of the License, or
85+ (at your option) any later version.
86+
87+ This program is distributed in the hope that it will be useful,
88+ but WITHOUT ANY WARRANTY; without even the implied warranty of
89+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
90+ GNU General Public License for more details.
91+
92+ You should have received a copy of the GNU General Public License
93+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
94+
95+void
96+lib (void)
97+{
98+}
99diff --git a/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib-main.c b/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib-main.c
100new file mode 100644
4b0e5c1b
AM
101--- /dev/null
102+++ b/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib-main.c
103@@ -0,0 +1,25 @@
104+/* Copyright 2010 Free Software Foundation, Inc.
105+
106+ This file is part of GDB.
107+
108+ This program is free software; you can redistribute it and/or modify
109+ it under the terms of the GNU General Public License as published by
110+ the Free Software Foundation; either version 3 of the License, or
111+ (at your option) any later version.
112+
113+ This program is distributed in the hope that it will be useful,
114+ but WITHOUT ANY WARRANTY; without even the implied warranty of
115+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
116+ GNU General Public License for more details.
117+
118+ You should have received a copy of the GNU General Public License
119+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
120+
121+extern void lib (void);
122+
123+int
124+main (void)
125+{
126+ lib ();
127+ return 0;
128+}
129diff --git a/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib.exp b/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib.exp
130new file mode 100644
4b0e5c1b
AM
131--- /dev/null
132+++ b/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib.exp
140f8057
JR
133@@ -0,0 +1,105 @@
134+# Copyright 2016 Free Software Foundation, Inc.
135+
136+# This program is free software; you can redistribute it and/or modify
137+# it under the terms of the GNU General Public License as published by
138+# the Free Software Foundation; either version 3 of the License, or
139+# (at your option) any later version.
140+#
141+# This program is distributed in the hope that it will be useful,
142+# but WITHOUT ANY WARRANTY; without even the implied warranty of
143+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
144+# GNU General Public License for more details.
145+#
146+# You should have received a copy of the GNU General Public License
147+# along with this program. If not, see <http://www.gnu.org/licenses/>.
148+
149+if {[skip_shlib_tests]} {
150+ return 0
151+}
152+
153+set testfile "gcore-buildid-exec-but-not-solib"
154+set srcmainfile ${testfile}-main.c
155+set srclibfile ${testfile}-lib.c
156+set libfile [standard_output_file ${testfile}-lib.so]
157+set objfile [standard_output_file ${testfile}-main.o]
158+set executable ${testfile}-main
159+set binfile [standard_output_file ${executable}]
160+set gcorefile [standard_output_file ${executable}.gcore]
161+set outdir [file dirname $binfile]
162+
163+if { [gdb_compile_shlib ${srcdir}/${subdir}/${srclibfile} ${libfile} "debug additional_flags=-Wl,--build-id"] != ""
164+ || [gdb_compile ${srcdir}/${subdir}/${srcmainfile} ${objfile} object {debug}] != "" } {
165+ unsupported "-Wl,--build-id compilation failed"
166+ return -1
167+}
168+set opts [list debug shlib=${libfile} "additional_flags=-Wl,--build-id"]
169+if { [gdb_compile ${objfile} ${binfile} executable $opts] != "" } {
170+ unsupported "-Wl,--build-id compilation failed"
171+ return -1
172+}
173+
174+clean_restart $executable
175+gdb_load_shlib $libfile
176+
177+# Does this gdb support gcore?
178+set test "help gcore"
179+gdb_test_multiple $test $test {
180+ -re "Undefined command: .gcore.*\r\n$gdb_prompt $" {
181+ # gcore command not supported -- nothing to test here.
182+ unsupported "gdb does not support gcore on this target"
183+ return -1;
184+ }
185+ -re "Save a core file .*\r\n$gdb_prompt $" {
186+ pass $test
187+ }
188+}
189+
190+if { ![runto lib] } then {
191+ return -1
192+}
193+
194+set escapedfilename [string_to_regexp ${gcorefile}]
195+
196+set test "save a corefile"
197+gdb_test_multiple "gcore ${gcorefile}" $test {
198+ -re "Saved corefile ${escapedfilename}\r\n$gdb_prompt $" {
199+ pass $test
200+ }
201+ -re "Can't create a corefile\r\n$gdb_prompt $" {
202+ unsupported $test
203+ return -1
204+ }
205+}
206+
207+# Now restart gdb and load the corefile.
208+
209+clean_restart $executable
210+gdb_load_shlib $libfile
211+
212+set buildid [build_id_debug_filename_get $libfile]
213+
214+regsub {\.debug$} $buildid {} buildid
215+
216+set debugdir [standard_output_file ${testfile}-debugdir]
217+file delete -force -- $debugdir
218+
219+file mkdir $debugdir/[file dirname $libfile]
220+file copy $libfile $debugdir/${libfile}
221+
222+file mkdir $debugdir/[file dirname $buildid]
223+file copy $libfile $debugdir/${buildid}
224+
225+remote_exec build "ln -s /lib ${debugdir}/"
226+remote_exec build "ln -s /lib64 ${debugdir}/"
227+# /usr is not needed, all the libs are in /lib64: libm.so.6 libc.so.6 ld-linux-x86-64.so.2
228+
229+gdb_test "set solib-absolute-prefix $debugdir"
230+
231+gdb_test_no_output "set debug-file-directory $debugdir" "set debug-file-directory"
232+
233+gdb_test "core ${gcorefile}" "Core was generated by .*" "re-load generated corefile"
234+
235+gdb_test "frame" "#0 \[^\r\n\]* lib .*" "library got loaded"
236+
237+gdb_test "bt"
238+gdb_test "info shared"
This page took 0.215714 seconds and 4 git commands to generate.