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