[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