Support constant DW_AT_high_pc produced by FSF GCC HEAD (Mark Wielaard).
This commit is contained in:
parent
ac0dd8df9b
commit
35031c9fb4
|
@ -0,0 +1,103 @@
|
|||
http://sourceware.org/ml/gdb-cvs/2012-04/msg00225.html
|
||||
|
||||
### src/gdb/ChangeLog 2012/04/27 18:50:35 1.14177
|
||||
### src/gdb/ChangeLog 2012/04/27 18:55:19 1.14178
|
||||
## -1,3 +1,10 @@
|
||||
+2012-04-27 Mark Wielaard <mjw@redhat.com>
|
||||
+
|
||||
+ * dwarf2read.c (dwarf2_get_pc_bounds): Check DW_AT_high_pc form to
|
||||
+ see whether it is an address or a constant offset from DW_AT_low_pc.
|
||||
+ (dwarf2_record_block_ranges): Likewise.
|
||||
+ (read_partial_die): Likewise.
|
||||
+
|
||||
2012-04-26 Mark Wielaard <mjw@redhat.com>
|
||||
|
||||
* MAINTAINERS (Write After Approval): Add myself to the list.
|
||||
--- src/gdb/dwarf2read.c 2012/04/26 20:32:30 1.640
|
||||
+++ src/gdb/dwarf2read.c 2012/04/27 18:55:19 1.641
|
||||
@@ -6706,17 +6706,23 @@
|
||||
struct partial_symtab *pst)
|
||||
{
|
||||
struct attribute *attr;
|
||||
+ struct attribute *attr_high;
|
||||
CORE_ADDR low = 0;
|
||||
CORE_ADDR high = 0;
|
||||
int ret = 0;
|
||||
|
||||
- attr = dwarf2_attr (die, DW_AT_high_pc, cu);
|
||||
- if (attr)
|
||||
+ attr_high = dwarf2_attr (die, DW_AT_high_pc, cu);
|
||||
+ if (attr_high)
|
||||
{
|
||||
- high = DW_ADDR (attr);
|
||||
attr = dwarf2_attr (die, DW_AT_low_pc, cu);
|
||||
if (attr)
|
||||
- low = DW_ADDR (attr);
|
||||
+ {
|
||||
+ low = DW_ADDR (attr);
|
||||
+ if (attr_high->form == DW_FORM_addr)
|
||||
+ high = DW_ADDR (attr_high);
|
||||
+ else
|
||||
+ high = low + DW_UNSND (attr_high);
|
||||
+ }
|
||||
else
|
||||
/* Found high w/o low attribute. */
|
||||
return 0;
|
||||
@@ -6864,16 +6870,20 @@
|
||||
{
|
||||
struct objfile *objfile = cu->objfile;
|
||||
struct attribute *attr;
|
||||
+ struct attribute *attr_high;
|
||||
|
||||
- attr = dwarf2_attr (die, DW_AT_high_pc, cu);
|
||||
- if (attr)
|
||||
+ attr_high = dwarf2_attr (die, DW_AT_high_pc, cu);
|
||||
+ if (attr_high)
|
||||
{
|
||||
- CORE_ADDR high = DW_ADDR (attr);
|
||||
-
|
||||
attr = dwarf2_attr (die, DW_AT_low_pc, cu);
|
||||
if (attr)
|
||||
{
|
||||
CORE_ADDR low = DW_ADDR (attr);
|
||||
+ CORE_ADDR high;
|
||||
+ if (attr_high->form == DW_FORM_addr)
|
||||
+ high = DW_ADDR (attr_high);
|
||||
+ else
|
||||
+ high = low + DW_UNSND (attr_high);
|
||||
|
||||
record_block_range (block, baseaddr + low, baseaddr + high - 1);
|
||||
}
|
||||
@@ -9925,6 +9935,7 @@
|
||||
struct attribute attr;
|
||||
int has_low_pc_attr = 0;
|
||||
int has_high_pc_attr = 0;
|
||||
+ int high_pc_relative = 0;
|
||||
|
||||
memset (part_die, 0, sizeof (struct partial_die_info));
|
||||
|
||||
@@ -9981,7 +9992,13 @@
|
||||
break;
|
||||
case DW_AT_high_pc:
|
||||
has_high_pc_attr = 1;
|
||||
- part_die->highpc = DW_ADDR (&attr);
|
||||
+ if (attr.form == DW_FORM_addr)
|
||||
+ part_die->highpc = DW_ADDR (&attr);
|
||||
+ else
|
||||
+ {
|
||||
+ high_pc_relative = 1;
|
||||
+ part_die->highpc = DW_UNSND (&attr);
|
||||
+ }
|
||||
break;
|
||||
case DW_AT_location:
|
||||
/* Support the .debug_loc offsets. */
|
||||
@@ -10061,6 +10078,9 @@
|
||||
}
|
||||
}
|
||||
|
||||
+ if (high_pc_relative)
|
||||
+ part_die->highpc += part_die->lowpc;
|
||||
+
|
||||
if (has_low_pc_attr && has_high_pc_attr)
|
||||
{
|
||||
/* When using the GNU linker, .gnu.linkonce. sections are used to
|
9
gdb.spec
9
gdb.spec
|
@ -35,7 +35,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: 49%{?dist}
|
||||
Release: 50%{?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
|
||||
|
@ -629,6 +629,9 @@ Patch691: gdb-ppc-watchpoint.patch
|
|||
Patch696: gdb-parameterref-1of2.patch
|
||||
Patch697: gdb-parameterref-2of2.patch
|
||||
|
||||
# Support constant DW_AT_high_pc produced by FSF GCC HEAD (Mark Wielaard).
|
||||
Patch724: gdb-highpc-const.patch
|
||||
|
||||
%if 0%{!?rhel:1} || 0%{?rhel} > 6
|
||||
# RL_STATE_FEDORA_GDB would not be found for:
|
||||
# Patch642: gdb-readline62-ask-more-rh.patch
|
||||
|
@ -951,6 +954,7 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
|
|||
%patch691 -p1
|
||||
%patch696 -p1
|
||||
%patch697 -p1
|
||||
%patch724 -p1
|
||||
|
||||
%patch393 -p1
|
||||
%if 0%{!?el5:1} || 0%{?scl:1}
|
||||
|
@ -1443,6 +1447,9 @@ fi
|
|||
%endif # 0%{!?el5:1} || "%{_target_cpu}" == "noarch"
|
||||
|
||||
%changelog
|
||||
* Wed Aug 22 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-50.fc17
|
||||
- Support constant DW_AT_high_pc produced by FSF GCC HEAD (Mark Wielaard).
|
||||
|
||||
* Thu Jun 14 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-49.fc17
|
||||
- Support DW_OP_GNU_parameter_ref for -O2 -g inferiors (BZ 827375).
|
||||
|
||||
|
|
Loading…
Reference in New Issue