You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
481 lines
11 KiB
481 lines
11 KiB
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 |
|
From: Fedora GDB patches <invalid@email.com> |
|
Date: Fri, 27 Oct 2017 21:07:50 +0200 |
|
Subject: gdb-6.8-bz466901-backtrace-full-prelinked.patch |
|
|
|
;; Fix resolving of variables at locations lists in prelinked libs (BZ 466901). |
|
;;=fedoratest |
|
|
|
Fix resolving of variables at locations lists in prelinked libs (BZ 466901). |
|
|
|
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-func.S b/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-func.S |
|
new file mode 100644 |
|
--- /dev/null |
|
+++ b/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-func.S |
|
@@ -0,0 +1,328 @@ |
|
+/* This testcase is part of GDB, the GNU debugger. |
|
+ |
|
+ Copyright 2008 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/>. */ |
|
+ |
|
+/* |
|
+#include <stdlib.h> |
|
+ |
|
+void |
|
+func (void) |
|
+{ |
|
+ int i; |
|
+ |
|
+ abort (); |
|
+} |
|
+*/ |
|
+ .file "dw2-loclist-prelinked.c" |
|
+ .section .debug_abbrev,"",@progbits |
|
+.Ldebug_abbrev0: |
|
+ .section .debug_info,"",@progbits |
|
+.Ldebug_info0: |
|
+ .section .debug_line,"",@progbits |
|
+.Ldebug_line0: |
|
+ .text |
|
+.Ltext0: |
|
+.globl func |
|
+ .type func, @function |
|
+func: |
|
+.LFB2: |
|
+ .file 1 "dw2-loclist-prelinked.c" |
|
+ .loc 1 5 0 |
|
+ pushl %ebp |
|
+.LCFI0: |
|
+ movl %esp, %ebp |
|
+.LCFI1: |
|
+ subl $24, %esp |
|
+.LCFI2: |
|
+ .loc 1 8 0 |
|
+ call abort |
|
+.LFE2: |
|
+ .size func, .-func |
|
+ .section .debug_frame,"",@progbits |
|
+.Lframe0: |
|
+ .long .LECIE0-.LSCIE0 |
|
+.LSCIE0: |
|
+ .long 0xffffffff |
|
+ .byte 0x1 |
|
+ .string "" |
|
+ .uleb128 0x1 |
|
+ .sleb128 -4 |
|
+ .byte 0x8 |
|
+ .byte 0xc |
|
+ .uleb128 0x4 |
|
+ .uleb128 0x4 |
|
+ .byte 0x88 |
|
+ .uleb128 0x1 |
|
+ .align 4 |
|
+.LECIE0: |
|
+.LSFDE0: |
|
+ .long .LEFDE0-.LASFDE0 |
|
+.LASFDE0: |
|
+ .long .Lframe0 |
|
+ .long .LFB2 |
|
+ .long .LFE2-.LFB2 |
|
+ .byte 0x4 |
|
+ .long .LCFI0-.LFB2 |
|
+ .byte 0xe |
|
+ .uleb128 0x8 |
|
+ .byte 0x85 |
|
+ .uleb128 0x2 |
|
+ .byte 0x4 |
|
+ .long .LCFI1-.LCFI0 |
|
+ .byte 0xd |
|
+ .uleb128 0x5 |
|
+ .align 4 |
|
+.LEFDE0: |
|
+ .text |
|
+.Letext0: |
|
+ .section .debug_loc,"",@progbits |
|
+.Ldebug_loc0: |
|
+.LLST0: |
|
+ .long .LFB2-.Ltext0 |
|
+ .long .LCFI0-.Ltext0 |
|
+ .value 0x2 |
|
+ .byte 0x74 |
|
+ .sleb128 4 |
|
+ .long .LCFI0-.Ltext0 |
|
+ .long .LCFI1-.Ltext0 |
|
+ .value 0x2 |
|
+ .byte 0x74 |
|
+ .sleb128 8 |
|
+ .long .LCFI1-.Ltext0 |
|
+ .long .LFE2-.Ltext0 |
|
+ .value 0x2 |
|
+ .byte 0x75 |
|
+ .sleb128 8 |
|
+ .long 0x0 |
|
+ .long 0x0 |
|
+ .section .debug_info |
|
+ .long 0x94 |
|
+ .value 0x2 |
|
+ .long .Ldebug_abbrev0 |
|
+ .byte 0x4 |
|
+ .uleb128 0x1 |
|
+ .long .LASF10 |
|
+ .byte 0x1 |
|
+ .long .LASF11 |
|
+ .long .LASF12 |
|
+ .long .Ltext0 |
|
+ .long .Letext0 |
|
+ .long .Ldebug_line0 |
|
+ .uleb128 0x2 |
|
+ .byte 0x4 |
|
+ .byte 0x7 |
|
+ .long .LASF0 |
|
+ .uleb128 0x3 |
|
+ .byte 0x4 |
|
+ .byte 0x5 |
|
+ .string "int" |
|
+ .uleb128 0x2 |
|
+ .byte 0x4 |
|
+ .byte 0x5 |
|
+ .long .LASF1 |
|
+ .uleb128 0x2 |
|
+ .byte 0x1 |
|
+ .byte 0x8 |
|
+ .long .LASF2 |
|
+ .uleb128 0x2 |
|
+ .byte 0x2 |
|
+ .byte 0x7 |
|
+ .long .LASF3 |
|
+ .uleb128 0x2 |
|
+ .byte 0x4 |
|
+ .byte 0x7 |
|
+ .long .LASF4 |
|
+ .uleb128 0x2 |
|
+ .byte 0x1 |
|
+ .byte 0x6 |
|
+ .long .LASF5 |
|
+ .uleb128 0x2 |
|
+ .byte 0x2 |
|
+ .byte 0x5 |
|
+ .long .LASF6 |
|
+ .uleb128 0x2 |
|
+ .byte 0x8 |
|
+ .byte 0x5 |
|
+ .long .LASF7 |
|
+ .uleb128 0x2 |
|
+ .byte 0x8 |
|
+ .byte 0x7 |
|
+ .long .LASF8 |
|
+ .uleb128 0x4 |
|
+ .byte 0x4 |
|
+ .byte 0x7 |
|
+ .uleb128 0x2 |
|
+ .byte 0x1 |
|
+ .byte 0x6 |
|
+ .long .LASF9 |
|
+ .uleb128 0x5 |
|
+ .byte 0x1 |
|
+ .long .LASF13 |
|
+ .byte 0x1 |
|
+ .byte 0x5 |
|
+ .byte 0x1 |
|
+ .long .LFB2 |
|
+ .long .LFE2 |
|
+ .long .LLST0 |
|
+ .uleb128 0x6 |
|
+ .string "i" |
|
+ .byte 0x1 |
|
+ .byte 0x6 |
|
+ .long 0x2c |
|
+ .byte 0x2 |
|
+ .byte 0x91 |
|
+ .sleb128 -12 |
|
+ .byte 0x0 |
|
+ .byte 0x0 |
|
+ .section .debug_abbrev |
|
+ .uleb128 0x1 |
|
+ .uleb128 0x11 |
|
+ .byte 0x1 |
|
+ .uleb128 0x25 |
|
+ .uleb128 0xe |
|
+ .uleb128 0x13 |
|
+ .uleb128 0xb |
|
+ .uleb128 0x3 |
|
+ .uleb128 0xe |
|
+ .uleb128 0x1b |
|
+ .uleb128 0xe |
|
+ .uleb128 0x11 |
|
+ .uleb128 0x1 |
|
+ .uleb128 0x12 |
|
+ .uleb128 0x1 |
|
+ .uleb128 0x10 |
|
+ .uleb128 0x6 |
|
+ .byte 0x0 |
|
+ .byte 0x0 |
|
+ .uleb128 0x2 |
|
+ .uleb128 0x24 |
|
+ .byte 0x0 |
|
+ .uleb128 0xb |
|
+ .uleb128 0xb |
|
+ .uleb128 0x3e |
|
+ .uleb128 0xb |
|
+ .uleb128 0x3 |
|
+ .uleb128 0xe |
|
+ .byte 0x0 |
|
+ .byte 0x0 |
|
+ .uleb128 0x3 |
|
+ .uleb128 0x24 |
|
+ .byte 0x0 |
|
+ .uleb128 0xb |
|
+ .uleb128 0xb |
|
+ .uleb128 0x3e |
|
+ .uleb128 0xb |
|
+ .uleb128 0x3 |
|
+ .uleb128 0x8 |
|
+ .byte 0x0 |
|
+ .byte 0x0 |
|
+ .uleb128 0x4 |
|
+ .uleb128 0x24 |
|
+ .byte 0x0 |
|
+ .uleb128 0xb |
|
+ .uleb128 0xb |
|
+ .uleb128 0x3e |
|
+ .uleb128 0xb |
|
+ .byte 0x0 |
|
+ .byte 0x0 |
|
+ .uleb128 0x5 |
|
+ .uleb128 0x2e |
|
+ .byte 0x1 |
|
+ .uleb128 0x3f |
|
+ .uleb128 0xc |
|
+ .uleb128 0x3 |
|
+ .uleb128 0xe |
|
+ .uleb128 0x3a |
|
+ .uleb128 0xb |
|
+ .uleb128 0x3b |
|
+ .uleb128 0xb |
|
+ .uleb128 0x27 |
|
+ .uleb128 0xc |
|
+ .uleb128 0x11 |
|
+ .uleb128 0x1 |
|
+ .uleb128 0x12 |
|
+ .uleb128 0x1 |
|
+ .uleb128 0x40 |
|
+ .uleb128 0x6 |
|
+ .byte 0x0 |
|
+ .byte 0x0 |
|
+ .uleb128 0x6 |
|
+ .uleb128 0x34 |
|
+ .byte 0x0 |
|
+ .uleb128 0x3 |
|
+ .uleb128 0x8 |
|
+ .uleb128 0x3a |
|
+ .uleb128 0xb |
|
+ .uleb128 0x3b |
|
+ .uleb128 0xb |
|
+ .uleb128 0x49 |
|
+ .uleb128 0x13 |
|
+ .uleb128 0x2 |
|
+ .uleb128 0xa |
|
+ .byte 0x0 |
|
+ .byte 0x0 |
|
+ .byte 0x0 |
|
+ .section .debug_pubnames,"",@progbits |
|
+ .long 0x17 |
|
+ .value 0x2 |
|
+ .long .Ldebug_info0 |
|
+ .long 0x98 |
|
+ .long 0x75 |
|
+ .string "func" |
|
+ .long 0x0 |
|
+ .section .debug_aranges,"",@progbits |
|
+ .long 0x1c |
|
+ .value 0x2 |
|
+ .long .Ldebug_info0 |
|
+ .byte 0x4 |
|
+ .byte 0x0 |
|
+ .value 0x0 |
|
+ .value 0x0 |
|
+ .long .Ltext0 |
|
+ .long .Letext0-.Ltext0 |
|
+ .long 0x0 |
|
+ .long 0x0 |
|
+ .section .debug_str,"MS",@progbits,1 |
|
+.LASF7: |
|
+ .string "long long int" |
|
+.LASF0: |
|
+ .string "unsigned int" |
|
+.LASF11: |
|
+ .string "dw2-loclist-prelinked.c" |
|
+.LASF12: |
|
+ .string "gdb-6.8/gdb/testsuite/gdb.dwarf2" |
|
+.LASF4: |
|
+ .string "long unsigned int" |
|
+.LASF8: |
|
+ .string "long long unsigned int" |
|
+.LASF2: |
|
+ .string "unsigned char" |
|
+.LASF9: |
|
+ .string "char" |
|
+.LASF1: |
|
+ .string "long int" |
|
+.LASF3: |
|
+ .string "short unsigned int" |
|
+.LASF5: |
|
+ .string "signed char" |
|
+.LASF10: |
|
+ .string "GNU C 4.3.2 20081007 (Red Hat 4.3.2-6)" |
|
+.LASF13: |
|
+ .string "func" |
|
+.LASF6: |
|
+ .string "short int" |
|
+ .ident "GCC: (GNU) 4.3.2 20081007 (Red Hat 4.3.2-6)" |
|
+ .section .note.GNU-stack,"",@progbits |
|
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-main.c b/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-main.c |
|
new file mode 100644 |
|
--- /dev/null |
|
+++ b/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-main.c |
|
@@ -0,0 +1,26 @@ |
|
+/* This testcase is part of GDB, the GNU debugger. |
|
+ |
|
+ Copyright 2008 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/>. */ |
|
+ |
|
+/* dw2-loclist-prelinked-func.S */ |
|
+extern void func (void); |
|
+ |
|
+int |
|
+main (void) |
|
+{ |
|
+ func (); |
|
+ return 0; |
|
+} |
|
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked.exp b/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked.exp |
|
new file mode 100644 |
|
--- /dev/null |
|
+++ b/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked.exp |
|
@@ -0,0 +1,102 @@ |
|
+# Copyright 2008 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 2 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, write to the Free Software |
|
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
|
+ |
|
+# Minimal DWARF-2 unit test |
|
+ |
|
+# This test can only be run on i386/x86_64 targets which support DWARF-2. |
|
+# For now pick a sampling of likely targets. |
|
+if {(![istarget *-*-linux*] |
|
+ && ![istarget *-*-gnu*] |
|
+ && ![istarget *-*-elf*] |
|
+ && ![istarget *-*-openbsd*]) |
|
+ || (![istarget "i?86-*-*"] && ![istarget "x86_64-*-*"])} { |
|
+ return 0 |
|
+} |
|
+ |
|
+set testfile "dw2-loclist-prelinked" |
|
+set srcfuncfile ${testfile}-func.S |
|
+set binsharedfuncfile [standard_output_file ${testfile}.so] |
|
+set srcmainfile ${testfile}-main.c |
|
+set binfile [standard_output_file ${testfile}] |
|
+ |
|
+remote_exec build "rm -f ${binfile}" |
|
+ |
|
+# get the value of gcc_compiled |
|
+if [get_compiler_info ${binfile}] { |
|
+ return -1 |
|
+} |
|
+ |
|
+# This test can only be run on gcc as we use additional_flags=FIXME |
|
+if {$gcc_compiled == 0} { |
|
+ return 0 |
|
+} |
|
+ |
|
+if { [gdb_compile_shlib "${srcdir}/${subdir}/${srcfuncfile}" "${binsharedfuncfile}" {debug additional_flags=-m32}] != "" } { |
|
+ untested "Couldn't compile test library" |
|
+ return -1 |
|
+} |
|
+ |
|
+# The new separate debug info file will be stored in the .debug subdirectory. |
|
+ |
|
+if [gdb_gnu_strip_debug ${binsharedfuncfile}] { |
|
+ # check that you have a recent version of strip and objcopy installed |
|
+ unsupported "cannot produce separate debug info files" |
|
+ return -1 |
|
+} |
|
+ |
|
+if {[catch "system \"/usr/sbin/prelink -qNR --no-exec-shield ${binsharedfuncfile}\""] != 0} { |
|
+ # Maybe we don't have prelink. |
|
+ return -1 |
|
+} |
|
+ |
|
+if { [gdb_compile "${srcdir}/${subdir}/${srcmainfile}" \ |
|
+ "${binfile}" executable [list debug additional_flags=-m32 shlib=${binsharedfuncfile}]] != "" } { |
|
+ return -1 |
|
+} |
|
+ |
|
+gdb_exit |
|
+gdb_start |
|
+gdb_reinitialize_dir $srcdir/$subdir |
|
+gdb_load ${binfile} |
|
+ |
|
+gdb_run_cmd |
|
+ |
|
+gdb_test "" "Program received signal SIGABRT, Aborted..*" "Enter abort()" |
|
+ |
|
+# Incorrect: |
|
+# #0 0x00110430 in __kernel_vsyscall () |
|
+# No symbol table info available. |
|
+# #1 0x003d44c0 in raise () from /lib/libc.so.6 |
|
+# No symbol table info available. |
|
+# #2 0x003d5e88 in abort () from /lib/libc.so.6 |
|
+# No symbol table info available. |
|
+# #3 0x44f10437 in func () at dw2-loclist-prelinked.c:8 |
|
+# i = Could not find the frame base for "func". |
|
+ |
|
+# Correct: |
|
+# #0 0x00110430 in __kernel_vsyscall () |
|
+# No symbol table info available. |
|
+# #1 0x003d44c0 in raise () from /lib/libc.so.6 |
|
+# No symbol table info available. |
|
+# #2 0x003d5e88 in abort () from /lib/libc.so.6 |
|
+# No symbol table info available. |
|
+# #3 0x4ae36437 in func () at dw2-loclist-prelinked.c:8 |
|
+# i = 3827288 |
|
+# #4 0x0804851a in main () at ../../../gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-main.c:24 |
|
+# No locals. |
|
+ |
|
+# `abort' can get expressed as `*__GI_abort'. |
|
+gdb_test "bt full" "in \[^ \]*abort \\(.*in func \\(.*\r\n\[\t \]+i = -?\[0-9\].*in main \\(.*" "Backtrace after abort()"
|
|
|