summaryrefslogtreecommitdiff
path: root/debian/patches/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch')
-rw-r--r--debian/patches/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch286
1 files changed, 286 insertions, 0 deletions
diff --git a/debian/patches/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch b/debian/patches/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch
new file mode 100644
index 0000000..c8f97d3
--- /dev/null
+++ b/debian/patches/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch
@@ -0,0 +1,286 @@
+From: Jan Kratochvil <jan.kratochvil@redhat.com>
+Date: Wed, 20 Feb 2019 13:25:36 +0100
+Subject: gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2
+
+Bug-Debian: http://bugs.debian.org/581707
+Bug-Redhat: https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=185337
+Origin: vendor, http://pkgs.fedoraproject.org/cgit/gdb.git/tree/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch
+
+https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=185337
+
+2008-02-24 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Port to GDB-6.8pre.
+
+currently for trivial nonthreaded helloworld with no debug info up to -ggdb2 you
+will get:
+ (gdb) p errno
+ [some error]
+
+* with -ggdb2 and less "errno" in fact does not exist anywhere as it was
+ compiled to "(*__errno_location ())" and the macro definition is not present.
+ Unfortunately gdb will find the TLS symbol and it will try to access it but
+ as the program has been compiled without -lpthread the TLS base register
+ (%gs on i386) is not setup and it will result in:
+ Cannot access memory at address 0x8
+
+Attached suggestion patch how to deal with the most common "errno" symbol
+for the most common under-ggdb3 compiled programs.
+
+Original patch hooked into target_translate_tls_address. But its inferior
+call invalidates `struct frame *' in the callers - RH BZ 690908.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1166549
+
+
+2007-11-03 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * ./gdb/dwarf2read.c (read_partial_die, dwarf2_linkage_name): Prefer
+ DW_AT_MIPS_linkage_name over DW_AT_name now only for non-C.
+
+glibc-debuginfo-2.7-2.x86_64: /usr/lib/debug/lib64/libc.so.6.debug:
+ <81a2> DW_AT_name : (indirect string, offset: 0x280e): __errno_location
+ <81a8> DW_AT_MIPS_linkage_name: (indirect string, offset: 0x2808): *__GI___errno_location
+---
+ gdb/printcmd.c | 6 ++-
+ gdb/testsuite/gdb.dwarf2/dw2-errno.c | 28 +++++++++++++
+ gdb/testsuite/gdb.dwarf2/dw2-errno.exp | 60 ++++++++++++++++++++++++++++
+ gdb/testsuite/gdb.dwarf2/dw2-errno2.c | 28 +++++++++++++
+ gdb/testsuite/gdb.dwarf2/dw2-errno2.exp | 71 +++++++++++++++++++++++++++++++++
+ 5 files changed, 192 insertions(+), 1 deletion(-)
+ create mode 100644 gdb/testsuite/gdb.dwarf2/dw2-errno.c
+ create mode 100644 gdb/testsuite/gdb.dwarf2/dw2-errno.exp
+ create mode 100644 gdb/testsuite/gdb.dwarf2/dw2-errno2.c
+ create mode 100644 gdb/testsuite/gdb.dwarf2/dw2-errno2.exp
+
+Index: gdb/gdb/printcmd.c
+===================================================================
+--- gdb.orig/gdb/printcmd.c 2019-02-22 11:22:04.575563176 +0100
++++ gdb/gdb/printcmd.c 2019-02-22 11:22:04.571563128 +0100
+@@ -1183,6 +1183,10 @@
+
+ if (exp && *exp)
+ {
++ /* '*((int *(*) (void)) __errno_location) ()' is incompatible with
++ function descriptors. */
++ if (target_has_execution && strcmp (exp, "errno") == 0)
++ exp = "*(*(int *(*)(void)) __errno_location) ()";
+ expression_up expr = parse_expression (exp);
+ val = evaluate_expression (expr.get ());
+ }
+@@ -1190,7 +1194,7 @@
+ val = access_value_history (0);
+
+ if (voidprint || (val && value_type (val) &&
+- TYPE_CODE (value_type (val)) != TYPE_CODE_VOID))
++ TYPE_CODE (value_type (val)) != TYPE_CODE_VOID))
+ print_value (val, &fmt);
+ }
+
+Index: gdb/gdb/testsuite/gdb.dwarf2/dw2-errno.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gdb/gdb/testsuite/gdb.dwarf2/dw2-errno.c 2019-02-22 11:22:04.571563128 +0100
+@@ -0,0 +1,28 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++ Copyright 2005, 2007 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/>.
++
++ Please email any bugs, comments, and/or additions to this file to:
++ bug-gdb@prep.ai.mit.edu */
++
++#include <errno.h>
++
++int main()
++{
++ errno = 42;
++
++ return 0; /* breakpoint */
++}
+Index: gdb/gdb/testsuite/gdb.dwarf2/dw2-errno.exp
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gdb/gdb/testsuite/gdb.dwarf2/dw2-errno.exp 2019-02-22 11:22:04.571563128 +0100
+@@ -0,0 +1,60 @@
++# Copyright 2007 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/>.
++
++set testfile dw2-errno
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}]
++
++proc prep {} {
++ global srcdir subdir binfile
++ gdb_exit
++ gdb_start
++ gdb_reinitialize_dir $srcdir/$subdir
++ gdb_load ${binfile}
++
++ runto_main
++
++ gdb_breakpoint [gdb_get_line_number "breakpoint"]
++ gdb_continue_to_breakpoint "breakpoint"
++}
++
++if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "additional_flags=-g2"] != "" } {
++ untested "Couldn't compile test program"
++ return -1
++}
++prep
++gdb_test "print errno" ".* = 42" "errno with macros=N threads=N"
++
++if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "additional_flags=-g3"] != "" } {
++ untested "Couldn't compile test program"
++ return -1
++}
++prep
++gdb_test "print errno" ".* = 42" "errno with macros=Y threads=N"
++
++if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "additional_flags=-g2"] != "" } {
++ return -1
++}
++prep
++gdb_test "print errno" ".* = 42" "errno with macros=N threads=Y"
++
++if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "additional_flags=-g3"] != "" } {
++ return -1
++}
++prep
++gdb_test "print errno" ".* = 42" "errno with macros=Y threads=Y"
++
++# TODO: Test the error on resolving ERRNO with only libc loaded.
++# Just how to find the current libc filename?
+Index: gdb/gdb/testsuite/gdb.dwarf2/dw2-errno2.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gdb/gdb/testsuite/gdb.dwarf2/dw2-errno2.c 2019-02-22 11:22:04.571563128 +0100
+@@ -0,0 +1,28 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++ Copyright 2005, 2007 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/>.
++
++ Please email any bugs, comments, and/or additions to this file to:
++ bug-gdb@prep.ai.mit.edu */
++
++#include <errno.h>
++
++int main()
++{
++ errno = 42;
++
++ return 0; /* breakpoint */
++}
+Index: gdb/gdb/testsuite/gdb.dwarf2/dw2-errno2.exp
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gdb/gdb/testsuite/gdb.dwarf2/dw2-errno2.exp 2019-02-22 11:22:04.571563128 +0100
+@@ -0,0 +1,71 @@
++# Copyright 2007 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/>.
++
++set testfile dw2-errno2
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}]
++
++proc prep { message {do_xfail 0} } { with_test_prefix $message {
++ global srcdir subdir binfile variant
++ gdb_exit
++ gdb_start
++ gdb_reinitialize_dir $srcdir/$subdir
++ gdb_load ${binfile}${variant}
++
++ runto_main
++
++ gdb_breakpoint [gdb_get_line_number "breakpoint"]
++ gdb_continue_to_breakpoint "breakpoint"
++
++ gdb_test "gcore ${binfile}${variant}.core" "\r\nSaved corefile .*" "gcore $variant"
++
++ gdb_test "print errno" ".* = 42"
++
++ gdb_test "kill" ".*" "kill" {Kill the program being debugged\? \(y or n\) } "y"
++ gdb_test "core-file ${binfile}${variant}.core" "\r\nCore was generated by .*" "core-file"
++ if $do_xfail {
++ setup_xfail "*-*-*"
++ }
++ gdb_test "print errno" ".* = 42" "print errno for core"
++}}
++
++set variant g2thrN
++if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}${variant}" executable "additional_flags=-g2"] != "" } {
++ untested "Couldn't compile test program"
++ return -1
++}
++prep "macros=N threads=N" 1
++
++set variant g3thrN
++if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}${variant}" executable "additional_flags=-g3"] != "" } {
++ untested "Couldn't compile test program"
++ return -1
++}
++prep "macros=Y threads=N" 1
++
++set variant g2thrY
++if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}${variant}" executable "additional_flags=-g2"] != "" } {
++ return -1
++}
++prep "macros=N threads=Y"
++
++set variant g3thrY
++if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}${variant}" executable "additional_flags=-g3"] != "" } {
++ return -1
++}
++prep "macros=Y threads=Y" 1
++
++# TODO: Test the error on resolving ERRNO with only libc loaded.
++# Just how to find the current libc filename?