[gdb/f17] Fix inferior calls, particularly uncaught thrown exceptions (BZ 799531).
Jan Kratochvil
jankratochvil at fedoraproject.org
Thu Mar 8 23:17:22 UTC 2012
commit d8e4a58344fb0e261d91b26ad3246abcd5061a13
Author: Jan Kratochvil <jan.kratochvil at redhat.com>
Date: Fri Mar 9 00:17:10 2012 +0100
Fix inferior calls, particularly uncaught thrown exceptions (BZ 799531).
- Fix DWARF DIEs CU vs. section relative offsets (Joel Brobecker, me).
gdb-die-cu-offset-1of2.patch | 99 ++++++++++++++++++++++++++++++++++++++++++
gdb-die-cu-offset-2of2.patch | 26 +++++++++++
gdb-x86-onstack.patch | 36 +++++++++++++++
gdb.spec | 16 ++++++-
4 files changed, 176 insertions(+), 1 deletions(-)
---
diff --git a/gdb-die-cu-offset-1of2.patch b/gdb-die-cu-offset-1of2.patch
new file mode 100644
index 0000000..2b0e91f
--- /dev/null
+++ b/gdb-die-cu-offset-1of2.patch
@@ -0,0 +1,99 @@
+[commit] [patch] Fix CU relative vs. absolute offsets [Re: RFC: problem with DW_OP_GNU_deref_type and dwarf's get_base_type callback]
+http://sourceware.org/ml/gdb-patches/2012-03/msg00284.html
+http://sourceware.org/ml/gdb-cvs/2012-03/msg00134.html
+
+### src/gdb/ChangeLog 2012/03/08 19:08:09 1.13979
+### src/gdb/ChangeLog 2012/03/08 19:37:04 1.13980
+## -1,5 +1,15 @@
+ 2012-03-08 Jan Kratochvil <jan.kratochvil at redhat.com>
+
++ Fix CU relative vs. absolute DIE offsets.
++ * dwarf2loc.h (dwarf2_fetch_die_location_block): Rename parameter
++ offset to offset_in_cu.
++ * dwarf2read.c (process_enumeration_scope): Add CU offset to
++ TYPE_OFFSET.
++ (dwarf2_fetch_die_location_block): Rename parameter offset to
++ offset_in_cu. New variable offset, add CU offset to OFFSET_IN_CU.
++
++2012-03-08 Jan Kratochvil <jan.kratochvil at redhat.com>
++
+ * libunwind-frame.c: Rename to ...
+ * ia64-libunwind-tdep.c: ... here.
+ * libunwind-frame.h: Rename to ...
+--- src/gdb/dwarf2loc.h 2012/01/05 21:53:14 1.29
++++ src/gdb/dwarf2loc.h 2012/03/08 19:37:07 1.30
+@@ -61,7 +61,7 @@
+ CORE_ADDR pc);
+
+ struct dwarf2_locexpr_baton dwarf2_fetch_die_location_block
+- (unsigned int offset, struct dwarf2_per_cu_data *per_cu,
++ (unsigned int offset_in_cu, struct dwarf2_per_cu_data *per_cu,
+ CORE_ADDR (*get_frame_pc) (void *baton),
+ void *baton);
+
+--- src/gdb/dwarf2read.c 2012/03/06 23:41:50 1.619
++++ src/gdb/dwarf2read.c 2012/03/08 19:37:07 1.620
+@@ -8031,7 +8031,8 @@
+ = lookup_signatured_type_at_offset (dwarf2_per_objfile->objfile,
+ cu->per_cu->debug_types_section,
+ cu->per_cu->offset);
+- if (type_sig->type_offset != die->offset)
++ if (type_sig->per_cu.offset + type_sig->type_offset
++ != die->offset)
+ return;
+ }
+
+@@ -14202,11 +14203,12 @@
+ dwarf2_locexpr_baton->data has lifetime of PER_CU->OBJFILE. */
+
+ struct dwarf2_locexpr_baton
+-dwarf2_fetch_die_location_block (unsigned int offset,
++dwarf2_fetch_die_location_block (unsigned int offset_in_cu,
+ struct dwarf2_per_cu_data *per_cu,
+ CORE_ADDR (*get_frame_pc) (void *baton),
+ void *baton)
+ {
++ unsigned int offset = per_cu->offset + offset_in_cu;
+ struct dwarf2_cu *cu;
+ struct die_info *die;
+ struct attribute *attr;
+### src/gdb/testsuite/ChangeLog 2012/03/08 07:42:50 1.3127
+### src/gdb/testsuite/ChangeLog 2012/03/08 19:37:07 1.3128
+## -1,5 +1,11 @@
+ 2012-03-08 Jan Kratochvil <jan.kratochvil at redhat.com>
+
++ Fix CU relative vs. absolute DIE offsets.
++ * gdb.dwarf2/dw2-op-call.S: New compilation unit preceding the existing
++ one.
++
++2012-03-08 Jan Kratochvil <jan.kratochvil at redhat.com>
++
+ Fix false FAIL on distros with relro linkage as default.
+ * gdb.reverse/solib-precsave.exp: Try to compile the test using
+ -Wl,-z,norelro first.
+--- src/gdb/testsuite/gdb.dwarf2/dw2-op-call.S 2012/01/04 08:17:51 1.5
++++ src/gdb/testsuite/gdb.dwarf2/dw2-op-call.S 2012/03/08 19:37:08 1.6
+@@ -23,6 +23,23 @@
+ array3: .2byte 3
+
+ .section .debug_info
++.Lcu0_begin:
++ /* CU header */
++ .4byte .Lcu0_end - .Lcu0_start /* Length of Compilation Unit */
++.Lcu0_start:
++ .2byte 2 /* DWARF Version */
++ .4byte .Labbrev1_begin /* Offset into abbrev section */
++ .byte 4 /* Pointer size */
++
++ /* CU die */
++ .uleb128 1 /* Abbrev: DW_TAG_compile_unit */
++ .ascii "file0.txt\0" /* DW_AT_name */
++ .ascii "GNU C 3.3.3\0" /* DW_AT_producer */
++ .byte 2 /* DW_LANG_C (C) */
++
++ .byte 0 /* End of children of CU */
++.Lcu0_end:
++
+ .Lcu1_begin:
+ /* CU header */
+ .4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */
diff --git a/gdb-die-cu-offset-2of2.patch b/gdb-die-cu-offset-2of2.patch
new file mode 100644
index 0000000..057088c
--- /dev/null
+++ b/gdb-die-cu-offset-2of2.patch
@@ -0,0 +1,26 @@
+RFC: problem with DW_OP_GNU_deref_type and dwarf's get_base_type callback
+http://sourceware.org/ml/gdb-patches/2012-03/msg00166.html
+http://sourceware.org/ml/gdb-cvs/2012-03/msg00118.html
+
+### src/gdb/ChangeLog 2012/03/06 22:48:49 1.13968
+### src/gdb/ChangeLog 2012/03/06 23:41:47 1.13969
+## -1,3 +1,8 @@
++2012-03-06 Joel Brobecker <brobecker at adacore.com>
++
++ * dwarf2read.c (dwarf2_get_die_type): Pass absolute offset
++ in call to get_die_type_at_offset.
++
+ 2012-03-06 Stan Shebs <stan at codesourcery.com>
+
+ * mi/mi-cmd-break.c: Enforce coding standards, fix comments.
+--- src/gdb/dwarf2read.c 2012/03/02 01:55:15 1.618
++++ src/gdb/dwarf2read.c 2012/03/06 23:41:50 1.619
+@@ -14269,7 +14269,7 @@
+ struct dwarf2_per_cu_data *per_cu)
+ {
+ dw2_setup (per_cu->objfile);
+- return get_die_type_at_offset (die_offset, per_cu);
++ return get_die_type_at_offset (per_cu->offset + die_offset, per_cu);
+ }
+
+ /* Follow the signature attribute ATTR in SRC_DIE.
diff --git a/gdb-x86-onstack.patch b/gdb-x86-onstack.patch
new file mode 100755
index 0000000..c141c10
--- /dev/null
+++ b/gdb-x86-onstack.patch
@@ -0,0 +1,36 @@
+--- a/gdb/i386-tdep.c
++++ b/gdb/i386-tdep.c
+@@ -2326,6 +2326,24 @@ i386_16_byte_align_p (struct type *type)
+ return 0;
+ }
+
++/* Implementation for set_gdbarch_push_dummy_code. */
++
++static CORE_ADDR
++i386_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp, CORE_ADDR funaddr,
++ struct value **args, int nargs, struct type *value_type,
++ CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
++ struct regcache *regcache)
++{
++ int bplen;
++ CORE_ADDR bppc = sp;
++
++ gdbarch_breakpoint_from_pc (gdbarch, &bppc, &bplen);
++ *bp_addr = sp - bplen;
++ *real_pc = funaddr;
++
++ return *bp_addr;
++}
++
+ static CORE_ADDR
+ i386_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+ struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
+@@ -7372,6 +7390,8 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
+ set_gdbarch_get_longjmp_target (gdbarch, i386_get_longjmp_target);
+
+ /* Call dummy code. */
++ set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
++ set_gdbarch_push_dummy_code (gdbarch, i386_push_dummy_code);
+ set_gdbarch_push_dummy_call (gdbarch, i386_push_dummy_call);
+ set_gdbarch_frame_align (gdbarch, i386_frame_align);
+
diff --git a/gdb.spec b/gdb.spec
index 78e7ea3..5927107 100644
--- a/gdb.spec
+++ b/gdb.spec
@@ -33,7 +33,7 @@ Version: 7.4.50.%{snap}
# The release always contains a leading reserved number, start it at 1.
# `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
-Release: 28%{?dist}
+Release: 29%{?dist}
License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and BSD and Public Domain
Group: Development/Debuggers
@@ -560,6 +560,13 @@ Patch651: gdb-attach-fail-reasons-3of5.patch
Patch652: gdb-attach-fail-reasons-4of5.patch
Patch653: gdb-attach-fail-reasons-5of5.patch
+# Fix inferior calls, particularly uncaught thrown exceptions (BZ 799531).
+Patch654: gdb-x86-onstack.patch
+
+# Fix DWARF DIEs CU vs. section relative offsets (Joel Brobecker, me).
+Patch655: gdb-die-cu-offset-1of2.patch
+Patch656: gdb-die-cu-offset-2of2.patch
+
%if 0%{!?rhel:1} || 0%{?rhel} > 6
# RL_STATE_FEDORA_GDB would not be found for:
# Patch642: gdb-readline62-ask-more-rh.patch
@@ -843,6 +850,9 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
%patch651 -p1
%patch652 -p1
%patch653 -p1
+%patch654 -p1
+%patch655 -p1
+%patch656 -p1
%patch393 -p1
%if 0%{!?el5:1} || 0%{?scl:1}
@@ -1309,6 +1319,10 @@ fi
%endif # 0%{!?el5:1} || "%{_target_cpu}" == "noarch"
%changelog
+* Tue Mar 6 2012 Jan Kratochvil <jan.kratochvil at redhat.com> - 7.4.50.20120120-29.fc17
+- Fix inferior calls, particularly uncaught thrown exceptions (BZ 799531).
+- Fix DWARF DIEs CU vs. section relative offsets (Joel Brobecker, me).
+
* Tue Mar 6 2012 Jan Kratochvil <jan.kratochvil at redhat.com> - 7.4.50.20120120-28.fc17
- Print reasons for failed attach/spawn incl. SELinux deny_ptrace (BZ 786878).
More information about the scm-commits
mailing list