rpms/gdb/F-11 gdb-archer.patch,1.18,1.19 gdb.spec,1.356,1.357
Jan Kratochvil
jkratoch at fedoraproject.org
Mon Jul 6 14:55:57 UTC 2009
Author: jkratoch
Update of /cvs/pkgs/rpms/gdb/F-11
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv1380
Modified Files:
gdb-archer.patch gdb.spec
Log Message:
* Mon Jul 6 2009 Jan Kratochvil <jan.kratochvil at redhat.com> - 6.8.50.20090302-33
- Archer update to the snapshot: 17bfc0488f54aeeb7a9e20ef3caa7e31e8e985fb
- Archer backport: de9c5190034b84b0a5fb4b98b05b304cda187700
- [vla] Fix a crash regression on constant DW_AT_data_member_location.
gdb-archer.patch:
Index: gdb-archer.patch
===================================================================
RCS file: /cvs/pkgs/rpms/gdb/F-11/gdb-archer.patch,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -p -r1.18 -r1.19
--- gdb-archer.patch 16 Jun 2009 14:31:55 -0000 1.18
+++ gdb-archer.patch 6 Jul 2009 14:55:56 -0000 1.19
@@ -2,7 +2,7 @@ http://sourceware.org/gdb/wiki/ProjectAr
http://sourceware.org/gdb/wiki/ArcherBranchManagement
GIT snapshot:
-commit 05c402a02716177c4ddd272a6e312cbd2908ed68
+commit 17bfc0488f54aeeb7a9e20ef3caa7e31e8e985fb
branch `archer' - the merge of branches:
archer-jankratochvil-merge-expr
@@ -14616,7 +14616,7 @@ index 76577f1..bf46761 100644
#endif /* dwarf2loc.h */
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
-index 55868da..b4720e8 100644
+index 55868da..9bc1386 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -1,8 +1,7 @@
@@ -14818,13 +14818,13 @@ index 55868da..b4720e8 100644
static unsigned int dwarf2_get_ref_die_offset (struct attribute *);
-static int dwarf2_get_attr_constant_value (struct attribute *, int);
-+enum dwarf2_get_attr_constant_value
++enum get_attr_constant_value
+ {
+ dwarf2_attr_unknown,
+ dwarf2_attr_const,
+ dwarf2_attr_block
+ };
-+static enum dwarf2_get_attr_constant_value dwarf2_get_attr_constant_value
++static enum get_attr_constant_value get_attr_constant_value
+ (struct attribute *attr, int *val_return);
static struct die_info *follow_die_ref (struct die_info *,
@@ -16011,7 +16011,21 @@ index 55868da..b4720e8 100644
{
best_low = current_low;
best_high = current_high;
-@@ -3750,8 +4277,14 @@ dwarf2_add_field (struct field_info *fip, struct die_info *die,
+@@ -3667,7 +4194,12 @@ dwarf2_add_field (struct field_info *fip, struct die_info *die,
+ byte_offset = 0;
+ }
+ else if (attr_form_is_constant (attr))
+- byte_offset = dwarf2_get_attr_constant_value (attr, 0);
++ {
++ enum get_attr_constant_value type;
++
++ type = get_attr_constant_value (attr, &byte_offset);
++ gdb_assert (type == dwarf2_attr_const);
++ }
+ else
+ byte_offset = decode_locdesc (DW_BLOCK (attr), cu);
+
+@@ -3750,8 +4282,14 @@ dwarf2_add_field (struct field_info *fip, struct die_info *die,
if (fieldname == NULL)
return;
@@ -16027,7 +16041,7 @@ index 55868da..b4720e8 100644
/* The name is already allocated along with this objfile, so we don't
need to duplicate it for the type. */
-@@ -3881,8 +4414,14 @@ dwarf2_add_member_fn (struct field_info *fip, struct die_info *die,
+@@ -3881,8 +4419,14 @@ dwarf2_add_member_fn (struct field_info *fip, struct die_info *die,
if (fieldname == NULL)
return;
@@ -16043,7 +16057,7 @@ index 55868da..b4720e8 100644
/* Look up member function name in fieldlist. */
for (i = 0; i < fip->nfnfields; i++)
-@@ -3926,7 +4465,7 @@ dwarf2_add_member_fn (struct field_info *fip, struct die_info *die,
+@@ -3926,7 +4470,7 @@ dwarf2_add_member_fn (struct field_info *fip, struct die_info *die,
/* The name is already allocated along with this objfile, so we don't
need to duplicate it for the type. */
fnp->physname = physname ? physname : "";
@@ -16052,7 +16066,7 @@ index 55868da..b4720e8 100644
this_type = read_type_die (die, cu);
if (this_type && TYPE_CODE (this_type) == TYPE_CODE_FUNC)
{
-@@ -4110,7 +4649,7 @@ quirk_gcc_member_function_pointer (struct die_info *die, struct dwarf2_cu *cu)
+@@ -4110,7 +4654,7 @@ quirk_gcc_member_function_pointer (struct die_info *die, struct dwarf2_cu *cu)
return NULL;
domain_type = TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (pfn_type, 0));
@@ -16061,7 +16075,7 @@ index 55868da..b4720e8 100644
smash_to_method_type (type, domain_type, TYPE_TARGET_TYPE (pfn_type),
TYPE_FIELDS (pfn_type), TYPE_NFIELDS (pfn_type),
TYPE_VARARGS (pfn_type));
-@@ -4147,7 +4686,7 @@ read_structure_type (struct die_info *die, struct dwarf2_cu *cu)
+@@ -4147,7 +4691,7 @@ read_structure_type (struct die_info *die, struct dwarf2_cu *cu)
if (type)
return type;
@@ -16070,7 +16084,7 @@ index 55868da..b4720e8 100644
INIT_CPLUS_SPECIFIC (type);
name = dwarf2_name (die, cu);
if (name != NULL)
-@@ -4360,7 +4899,7 @@ read_enumeration_type (struct die_info *die, struct dwarf2_cu *cu)
+@@ -4360,7 +4904,7 @@ read_enumeration_type (struct die_info *die, struct dwarf2_cu *cu)
struct attribute *attr;
const char *name;
@@ -16079,7 +16093,7 @@ index 55868da..b4720e8 100644
TYPE_CODE (type) = TYPE_CODE_ENUM;
name = dwarf2_full_name (die, cu);
-@@ -4410,10 +4949,15 @@ determine_class_name (struct die_info *die, struct dwarf2_cu *cu)
+@@ -4410,10 +4954,15 @@ determine_class_name (struct die_info *die, struct dwarf2_cu *cu)
{
if (child->tag == DW_TAG_subprogram)
{
@@ -16098,7 +16112,7 @@ index 55868da..b4720e8 100644
if (phys_prefix != NULL)
{
-@@ -4510,6 +5054,29 @@ process_enumeration_scope (struct die_info *die, struct dwarf2_cu *cu)
+@@ -4510,6 +5059,29 @@ process_enumeration_scope (struct die_info *die, struct dwarf2_cu *cu)
new_symbol (die, this_type, cu);
}
@@ -16128,7 +16142,7 @@ index 55868da..b4720e8 100644
/* Extract all information from a DW_TAG_array_type DIE and put it in
the DIE's type field. For now, this only handles one dimensional
arrays. */
-@@ -4523,7 +5090,7 @@ read_array_type (struct die_info *die, struct dwarf2_cu *cu)
+@@ -4523,7 +5095,7 @@ read_array_type (struct die_info *die, struct dwarf2_cu *cu)
struct type *element_type, *range_type, *index_type;
struct type **range_types = NULL;
struct attribute *attr;
@@ -16137,7 +16151,7 @@ index 55868da..b4720e8 100644
struct cleanup *back_to;
char *name;
-@@ -4570,16 +5137,11 @@ read_array_type (struct die_info *die, struct dwarf2_cu *cu)
+@@ -4570,16 +5142,11 @@ read_array_type (struct die_info *die, struct dwarf2_cu *cu)
type = element_type;
if (read_array_order (die, cu) == DW_ORD_col_major)
@@ -16159,7 +16173,7 @@ index 55868da..b4720e8 100644
/* Understand Dwarf2 support for vector types (like they occur on
the PowerPC w/ AltiVec). Gcc just adds another attribute to the
-@@ -4646,12 +5208,14 @@ read_set_type (struct die_info *die, struct dwarf2_cu *cu)
+@@ -4646,12 +5213,14 @@ read_set_type (struct die_info *die, struct dwarf2_cu *cu)
return set_die_type (die, set_type, cu);
}
@@ -16176,7 +16190,7 @@ index 55868da..b4720e8 100644
struct attribute *attr;
struct symbol *sym;
CORE_ADDR base = (CORE_ADDR) 0;
-@@ -4676,10 +5240,40 @@ read_common_block (struct die_info *die, struct dwarf2_cu *cu)
+@@ -4676,10 +5245,40 @@ read_common_block (struct die_info *die, struct dwarf2_cu *cu)
}
if (die->child != NULL)
{
@@ -16217,7 +16231,7 @@ index 55868da..b4720e8 100644
attr = dwarf2_attr (child_die, DW_AT_data_member_location, cu);
if (attr)
{
-@@ -4687,8 +5281,25 @@ read_common_block (struct die_info *die, struct dwarf2_cu *cu)
+@@ -4687,8 +5286,25 @@ read_common_block (struct die_info *die, struct dwarf2_cu *cu)
base + decode_locdesc (DW_BLOCK (attr), cu);
add_symbol_to_list (sym, &global_symbols);
}
@@ -16243,7 +16257,7 @@ index 55868da..b4720e8 100644
}
}
-@@ -4756,9 +5367,7 @@ read_namespace (struct die_info *die, struct dwarf2_cu *cu)
+@@ -4756,9 +5372,7 @@ read_namespace (struct die_info *die, struct dwarf2_cu *cu)
if (is_anonymous)
{
const char *previous_prefix = determine_prefix (die, cu);
@@ -16254,7 +16268,7 @@ index 55868da..b4720e8 100644
}
}
-@@ -4774,20 +5383,155 @@ read_namespace (struct die_info *die, struct dwarf2_cu *cu)
+@@ -4774,20 +5388,155 @@ read_namespace (struct die_info *die, struct dwarf2_cu *cu)
}
}
@@ -16267,9 +16281,10 @@ index 55868da..b4720e8 100644
{
- struct die_info *child_die = die->child;
+ struct type *type;
-+
+
+- /* FIXME: Support the separate Fortran module namespaces. */
+ type = read_module_type (die, cu);
-+
+
+ if (type)
+ new_symbol (die, type, cu);
+}
@@ -16300,10 +16315,9 @@ index 55868da..b4720e8 100644
+ complaint (&symfile_complaints, _("DW_TAG_module has no name, offset 0x%x"),
+ die->offset);
+ type = init_type (TYPE_CODE_MODULE, 0, 0, module_name, objfile);
-
-- /* FIXME: Support the separate Fortran module namespaces. */
++
+ /* Create a context for reading the module variables. */
-
++
+ new = push_context (0, 0);
+
+ save_file_symbols = file_symbols;
@@ -16413,7 +16427,7 @@ index 55868da..b4720e8 100644
}
/* Return the name of the namespace represented by DIE. Set
-@@ -4951,29 +5695,95 @@ read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu)
+@@ -4951,29 +5700,95 @@ read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu)
struct objfile *objfile = cu->objfile;
struct type *type, *range_type, *index_type, *char_type;
struct attribute *attr;
@@ -16438,7 +16452,7 @@ index 55868da..b4720e8 100644
- else
- {
- /* check for the DW_AT_byte_size attribute */
-+ switch (dwarf2_get_attr_constant_value (attr, &length))
++ switch (get_attr_constant_value (attr, &length))
+ {
+ case dwarf2_attr_const:
+ /* We currently do not support a constant address where the location
@@ -16455,7 +16469,7 @@ index 55868da..b4720e8 100644
- {
- length = 1;
- }
-+ switch (dwarf2_get_attr_constant_value (attr, &length))
++ switch (get_attr_constant_value (attr, &length))
+ {
+ case dwarf2_attr_unknown:
+ length = 1;
@@ -16527,7 +16541,7 @@ index 55868da..b4720e8 100644
type = create_string_type (NULL, range_type);
return set_die_type (die, type, cu);
-@@ -5067,7 +5877,6 @@ static struct type *
+@@ -5067,7 +5882,6 @@ static struct type *
read_typedef (struct die_info *die, struct dwarf2_cu *cu)
{
struct objfile *objfile = cu->objfile;
@@ -16535,18 +16549,18 @@ index 55868da..b4720e8 100644
const char *name = NULL;
struct type *this_type;
-@@ -5175,8 +5984,8 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
+@@ -5175,8 +5989,8 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
struct type *base_type;
struct type *range_type;
struct attribute *attr;
- int low = 0;
- int high = -1;
+ int low, high, byte_stride_int;
-+ enum dwarf2_get_attr_constant_value high_type;
++ enum get_attr_constant_value high_type;
char *name;
base_type = die_type (die, cu);
-@@ -5189,42 +5998,90 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
+@@ -5189,42 +6003,90 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
0, NULL, cu->objfile);
}
@@ -16564,7 +16578,7 @@ index 55868da..b4720e8 100644
attr = dwarf2_attr (die, DW_AT_lower_bound, cu);
- if (attr)
- low = dwarf2_get_attr_constant_value (attr, 0);
-+ switch (dwarf2_get_attr_constant_value (attr, &low))
++ switch (get_attr_constant_value (attr, &low))
+ {
+ case dwarf2_attr_unknown:
+ if (cu->language == language_fortran)
@@ -16614,11 +16628,11 @@ index 55868da..b4720e8 100644
- }
- else
- high = dwarf2_get_attr_constant_value (attr, 1);
-+ high_type = dwarf2_get_attr_constant_value (attr, &high);
++ high_type = get_attr_constant_value (attr, &high);
+ if (high_type == dwarf2_attr_unknown)
+ {
+ attr = dwarf2_attr (die, DW_AT_count, cu);
-+ high_type = dwarf2_get_attr_constant_value (attr, &high);
++ high_type = get_attr_constant_value (attr, &high);
+ /* It does not hurt but it is needlessly ineffective in check_typedef. */
+ if (high_type != dwarf2_attr_unknown)
+ {
@@ -16647,7 +16661,7 @@ index 55868da..b4720e8 100644
- range_type = create_range_type (NULL, base_type, low, high);
+ /* DW_AT_bit_stride is currently unsupported as we count in bytes. */
+ attr = dwarf2_attr (die, DW_AT_byte_stride, cu);
-+ switch (dwarf2_get_attr_constant_value (attr, &byte_stride_int))
++ switch (get_attr_constant_value (attr, &byte_stride_int))
+ {
+ case dwarf2_attr_unknown:
+ break;
@@ -16667,7 +16681,7 @@ index 55868da..b4720e8 100644
name = dwarf2_name (die, cu);
if (name)
-@@ -5386,10 +6243,13 @@ read_die_and_siblings (gdb_byte *info_ptr, bfd *abfd,
+@@ -5386,10 +6248,13 @@ read_die_and_siblings (gdb_byte *info_ptr, bfd *abfd,
}
/* Decompress a section that was compressed using zlib. Store the
@@ -16683,7 +16697,7 @@ index 55868da..b4720e8 100644
gdb_byte **outbuf, bfd_size_type *outsize)
{
bfd *abfd = objfile->obfd;
-@@ -5405,6 +6265,7 @@ zlib_decompress_section (struct objfile *objfile, asection *sectp,
+@@ -5405,6 +6270,7 @@ zlib_decompress_section (struct objfile *objfile, asection *sectp,
z_stream strm;
int rc;
int header_size = 12;
@@ -16691,7 +16705,7 @@ index 55868da..b4720e8 100644
if (bfd_seek (abfd, sectp->filepos, SEEK_SET) != 0
|| bfd_bread (compressed_buffer, compressed_size, abfd) != compressed_size)
-@@ -5434,8 +6295,13 @@ zlib_decompress_section (struct objfile *objfile, asection *sectp,
+@@ -5434,8 +6300,13 @@ zlib_decompress_section (struct objfile *objfile, asection *sectp,
strm.avail_in = compressed_size - header_size;
strm.next_in = (Bytef*) compressed_buffer + header_size;
strm.avail_out = uncompressed_size;
@@ -16707,7 +16721,7 @@ index 55868da..b4720e8 100644
rc = inflateInit (&strm);
while (strm.avail_in > 0)
{
-@@ -5456,6 +6322,8 @@ zlib_decompress_section (struct objfile *objfile, asection *sectp,
+@@ -5456,6 +6327,8 @@ zlib_decompress_section (struct objfile *objfile, asection *sectp,
error (_("Dwarf Error: concluding DWARF uncompression in '%s': %d"),
bfd_get_filename (abfd), rc);
@@ -16716,7 +16730,7 @@ index 55868da..b4720e8 100644
xfree (compressed_buffer);
*outbuf = uncompressed_buffer;
*outsize = uncompressed_size;
-@@ -5463,17 +6331,20 @@ zlib_decompress_section (struct objfile *objfile, asection *sectp,
+@@ -5463,17 +6336,20 @@ zlib_decompress_section (struct objfile *objfile, asection *sectp,
}
@@ -16742,7 +16756,7 @@ index 55868da..b4720e8 100644
if (size == 0)
return NULL;
-@@ -5486,30 +6357,49 @@ dwarf2_read_section (struct objfile *objfile, asection *sectp)
+@@ -5486,30 +6362,49 @@ dwarf2_read_section (struct objfile *objfile, asection *sectp)
/* Upon decompression, update the buffer and its size. */
if (strncmp (header, "ZLIB", sizeof (header)) == 0)
{
@@ -16795,7 +16809,7 @@ index 55868da..b4720e8 100644
/* In DWARF version 2, the description of the debugging information is
stored in a separate .debug_abbrev section. Before we read any
dies from a section we read in all abbreviations and install them
-@@ -5749,6 +6639,7 @@ load_partial_dies (bfd *abfd, gdb_byte *info_ptr, int building_psymtab,
+@@ -5749,6 +6644,7 @@ load_partial_dies (bfd *abfd, gdb_byte *info_ptr, int building_psymtab,
&& abbrev->tag != DW_TAG_lexical_block
&& abbrev->tag != DW_TAG_variable
&& abbrev->tag != DW_TAG_namespace
@@ -16803,7 +16817,7 @@ index 55868da..b4720e8 100644
&& abbrev->tag != DW_TAG_member)
{
/* Otherwise we skip to the next sibling, if any. */
-@@ -5914,15 +6805,6 @@ read_partial_die (struct partial_die_info *part_die,
+@@ -5914,15 +6810,6 @@ read_partial_die (struct partial_die_info *part_die,
struct attribute attr;
int has_low_pc_attr = 0;
int has_high_pc_attr = 0;
@@ -16819,7 +16833,7 @@ index 55868da..b4720e8 100644
memset (part_die, 0, sizeof (struct partial_die_info));
-@@ -5945,47 +6827,35 @@ read_partial_die (struct partial_die_info *part_die,
+@@ -5945,47 +6832,35 @@ read_partial_die (struct partial_die_info *part_die,
switch (attr.name)
{
case DW_AT_name:
@@ -16885,7 +16899,7 @@ index 55868da..b4720e8 100644
case DW_AT_location:
/* Support the .debug_loc offsets */
if (attr_form_is_block (&attr))
-@@ -6002,9 +6872,6 @@ read_partial_die (struct partial_die_info *part_die,
+@@ -6002,9 +6877,6 @@ read_partial_die (struct partial_die_info *part_die,
"partial symbol information");
}
break;
@@ -16895,7 +16909,7 @@ index 55868da..b4720e8 100644
case DW_AT_external:
part_die->is_external = DW_UNSND (&attr);
break;
-@@ -6029,10 +6896,6 @@ read_partial_die (struct partial_die_info *part_die,
+@@ -6029,10 +6901,6 @@ read_partial_die (struct partial_die_info *part_die,
part_die->sibling = dwarf2_per_objfile->info_buffer
+ dwarf2_get_ref_die_offset (&attr);
break;
@@ -16906,7 +16920,7 @@ index 55868da..b4720e8 100644
case DW_AT_byte_size:
part_die->has_byte_size = 1;
break;
-@@ -6074,13 +6937,6 @@ read_partial_die (struct partial_die_info *part_die,
+@@ -6074,13 +6942,6 @@ read_partial_die (struct partial_die_info *part_die,
|| dwarf2_per_objfile->has_section_at_zero))
part_die->has_pc_info = 1;
@@ -16920,7 +16934,7 @@ index 55868da..b4720e8 100644
return info_ptr;
}
-@@ -6173,7 +7029,9 @@ fixup_partial_die (struct partial_die_info *part_die,
+@@ -6173,7 +7034,9 @@ fixup_partial_die (struct partial_die_info *part_die,
/* If we found a reference attribute and the DIE has no name, try
to find a name in the referred to DIE. */
@@ -16931,7 +16945,7 @@ index 55868da..b4720e8 100644
{
struct partial_die_info *spec_die;
-@@ -6189,6 +7047,9 @@ fixup_partial_die (struct partial_die_info *part_die,
+@@ -6189,6 +7052,9 @@ fixup_partial_die (struct partial_die_info *part_die,
if (spec_die->is_external)
part_die->is_external = spec_die->is_external;
}
@@ -16941,7 +16955,7 @@ index 55868da..b4720e8 100644
}
/* Set default names for some unnamed DIEs. */
-@@ -7512,10 +8373,12 @@ var_decode_location (struct attribute *attr, struct symbol *sym,
+@@ -7512,10 +8378,12 @@ var_decode_location (struct attribute *attr, struct symbol *sym,
(i.e. when the value of a register or memory location is
referenced, or a thread-local block, etc.). Then again, it might
not be worthwhile. I'm assuming that it isn't unless performance
@@ -16956,7 +16970,7 @@ index 55868da..b4720e8 100644
}
/* Given a pointer to a DWARF information entry, figure out if we need
-@@ -7538,20 +8401,49 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
+@@ -7538,20 +8406,49 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
if (die->tag != DW_TAG_namespace)
@@ -17009,7 +17023,7 @@ index 55868da..b4720e8 100644
/* Default assumptions.
Use the passed type or decode it from the die. */
-@@ -7637,9 +8529,28 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
+@@ -7637,9 +8534,28 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
if (attr)
{
var_decode_location (attr, sym, cu);
@@ -17039,7 +17053,7 @@ index 55868da..b4720e8 100644
else
add_symbol_to_list (sym, cu->list_in_scope);
}
-@@ -7656,7 +8567,7 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
+@@ -7656,7 +8572,7 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
&& dwarf2_attr (die, DW_AT_type, cu) != NULL)
{
SYMBOL_CLASS (sym) = LOC_UNRESOLVED;
@@ -17048,7 +17062,7 @@ index 55868da..b4720e8 100644
}
}
break;
-@@ -7780,6 +8691,16 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
+@@ -7780,6 +8696,16 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
SYMBOL_CLASS (sym) = LOC_TYPEDEF;
add_symbol_to_list (sym, &global_symbols);
break;
@@ -17065,7 +17079,7 @@ index 55868da..b4720e8 100644
default:
/* Not a tag we recognize. Hopefully we aren't processing
trash data, but since we must specifically ignore things
-@@ -7826,6 +8747,7 @@ dwarf2_const_value (struct attribute *attr, struct symbol *sym,
+@@ -7826,6 +8752,7 @@ dwarf2_const_value (struct attribute *attr, struct symbol *sym,
DW_ADDR (attr));
SYMBOL_CLASS (sym) = LOC_CONST_BYTES;
break;
@@ -17073,7 +17087,7 @@ index 55868da..b4720e8 100644
case DW_FORM_strp:
/* DW_STRING is already allocated on the obstack, point directly
to it. */
-@@ -8042,12 +8964,18 @@ read_type_die (struct die_info *die, struct dwarf2_cu *cu)
+@@ -8042,12 +8969,18 @@ read_type_die (struct die_info *die, struct dwarf2_cu *cu)
case DW_TAG_namespace:
this_type = read_namespace_type (die, cu);
break;
@@ -17092,7 +17106,7 @@ index 55868da..b4720e8 100644
return this_type;
}
-@@ -8113,9 +9041,18 @@ determine_prefix (struct die_info *die, struct dwarf2_cu *cu)
+@@ -8113,9 +9046,18 @@ determine_prefix (struct die_info *die, struct dwarf2_cu *cu)
switch (parent->tag)
{
case DW_TAG_namespace:
@@ -17114,7 +17128,7 @@ index 55868da..b4720e8 100644
case DW_TAG_class_type:
case DW_TAG_interface_type:
case DW_TAG_structure_type:
-@@ -8128,6 +9065,19 @@ determine_prefix (struct die_info *die, struct dwarf2_cu *cu)
+@@ -8128,6 +9070,19 @@ determine_prefix (struct die_info *die, struct dwarf2_cu *cu)
members; no typedefs, no member functions, et cetera.
So it does not need a prefix. */
return "";
@@ -17134,7 +17148,7 @@ index 55868da..b4720e8 100644
default:
return determine_prefix (parent, cu);
}
-@@ -8192,12 +9142,64 @@ dwarf2_linkage_name (struct die_info *die, struct dwarf2_cu *cu)
+@@ -8192,12 +9147,64 @@ dwarf2_linkage_name (struct die_info *die, struct dwarf2_cu *cu)
attr = dwarf2_attr (die, DW_AT_MIPS_linkage_name, cu);
if (attr && DW_STRING (attr))
return DW_STRING (attr);
@@ -17202,7 +17216,7 @@ index 55868da..b4720e8 100644
/* Get name of a die, return NULL if not found. */
static char *
-@@ -8206,9 +9208,29 @@ dwarf2_name (struct die_info *die, struct dwarf2_cu *cu)
+@@ -8206,9 +9213,29 @@ dwarf2_name (struct die_info *die, struct dwarf2_cu *cu)
struct attribute *attr;
attr = dwarf2_attr (die, DW_AT_name, cu);
@@ -17235,7 +17249,7 @@ index 55868da..b4720e8 100644
}
/* Return the die that this die in an extension of, or NULL if there
-@@ -8703,6 +9725,8 @@ dwarf_form_name (unsigned form)
+@@ -8703,6 +9730,8 @@ dwarf_form_name (unsigned form)
return "DW_FORM_ref_udata";
case DW_FORM_indirect:
return "DW_FORM_indirect";
@@ -17244,7 +17258,7 @@ index 55868da..b4720e8 100644
default:
return "DW_FORM_<unknown>";
}
-@@ -9353,26 +10377,35 @@ dwarf2_get_ref_die_offset (struct attribute *attr)
+@@ -9353,26 +10382,35 @@ dwarf2_get_ref_die_offset (struct attribute *attr)
return result;
}
@@ -17254,8 +17268,8 @@ index 55868da..b4720e8 100644
-static int
-dwarf2_get_attr_constant_value (struct attribute *attr, int default_value)
-+static enum dwarf2_get_attr_constant_value
-+dwarf2_get_attr_constant_value (struct attribute *attr, int *val_return)
++static enum get_attr_constant_value
++get_attr_constant_value (struct attribute *attr, int *val_return)
{
+ if (attr == NULL)
+ return dwarf2_attr_unknown;
@@ -17295,7 +17309,7 @@ index 55868da..b4720e8 100644
}
/* THIS_CU has a reference to PER_CU. If necessary, load the new compilation
-@@ -9963,6 +10996,17 @@ dwarf_decode_macros (struct line_header *lh, unsigned int offset,
+@@ -9963,6 +11001,17 @@ dwarf_decode_macros (struct line_header *lh, unsigned int offset,
{
gdb_byte *mac_ptr, *mac_end;
struct macro_source_file *current_file = 0;
@@ -17313,7 +17327,7 @@ index 55868da..b4720e8 100644
if (dwarf2_per_objfile->macinfo_buffer == NULL)
{
-@@ -9970,19 +11014,24 @@ dwarf_decode_macros (struct line_header *lh, unsigned int offset,
+@@ -9970,19 +11019,24 @@ dwarf_decode_macros (struct line_header *lh, unsigned int offset,
return;
}
@@ -17342,7 +17356,7 @@ index 55868da..b4720e8 100644
}
macinfo_type = read_1_byte (abfd, mac_ptr);
-@@ -9993,7 +11042,81 @@ dwarf_decode_macros (struct line_header *lh, unsigned int offset,
+@@ -9993,7 +11047,81 @@ dwarf_decode_macros (struct line_header *lh, unsigned int offset,
/* A zero macinfo type indicates the end of the macro
information. */
case 0:
@@ -17425,7 +17439,7 @@ index 55868da..b4720e8 100644
case DW_MACINFO_define:
case DW_MACINFO_undef:
-@@ -10008,19 +11131,31 @@ dwarf_decode_macros (struct line_header *lh, unsigned int offset,
+@@ -10008,19 +11136,31 @@ dwarf_decode_macros (struct line_header *lh, unsigned int offset,
mac_ptr += bytes_read;
if (! current_file)
@@ -17468,7 +17482,7 @@ index 55868da..b4720e8 100644
}
break;
-@@ -10034,9 +11169,22 @@ dwarf_decode_macros (struct line_header *lh, unsigned int offset,
+@@ -10034,9 +11174,22 @@ dwarf_decode_macros (struct line_header *lh, unsigned int offset,
file = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
mac_ptr += bytes_read;
@@ -17494,7 +17508,7 @@ index 55868da..b4720e8 100644
}
break;
-@@ -10090,7 +11238,7 @@ dwarf_decode_macros (struct line_header *lh, unsigned int offset,
+@@ -10090,7 +11243,7 @@ dwarf_decode_macros (struct line_header *lh, unsigned int offset,
}
break;
}
@@ -17503,7 +17517,16 @@ index 55868da..b4720e8 100644
}
/* Check if the attribute's form is a DW_FORM_block*
-@@ -10150,6 +11298,34 @@ attr_form_is_constant (struct attribute *attr)
+@@ -10123,7 +11276,7 @@ attr_form_is_section_offset (struct attribute *attr)
+
+ /* Return non-zero if ATTR's value falls in the 'constant' class, or
+ zero otherwise. When this function returns true, you can apply
+- dwarf2_get_attr_constant_value to it.
++ get_attr_constant_value to it.
+
+ However, note that for some attributes you must check
+ attr_form_is_section_offset before using this test. DW_FORM_data4
+@@ -10150,6 +11303,34 @@ attr_form_is_constant (struct attribute *attr)
}
}
@@ -17538,7 +17561,7 @@ index 55868da..b4720e8 100644
static void
dwarf2_symbol_mark_computed (struct attribute *attr, struct symbol *sym,
struct dwarf2_cu *cu)
-@@ -10179,35 +11355,24 @@ dwarf2_symbol_mark_computed (struct attribute *attr, struct symbol *sym,
+@@ -10179,35 +11360,24 @@ dwarf2_symbol_mark_computed (struct attribute *attr, struct symbol *sym,
SYMBOL_OPS (sym) = &dwarf2_loclist_funcs;
SYMBOL_LOCATION_BATON (sym) = baton;
}
@@ -17588,7 +17611,7 @@ index 55868da..b4720e8 100644
}
}
-@@ -10482,6 +11647,31 @@ offset_and_type_eq (const void *item_lhs, const void *item_rhs)
+@@ -10482,6 +11652,31 @@ offset_and_type_eq (const void *item_lhs, const void *item_rhs)
return ofs_lhs->offset == ofs_rhs->offset;
}
@@ -17620,7 +17643,7 @@ index 55868da..b4720e8 100644
/* Set the type associated with DIE to TYPE. Save it in CU's hash
table if necessary. For convenience, return TYPE. */
-@@ -10490,6 +11680,8 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
+@@ -10490,6 +11685,8 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
{
struct dwarf2_offset_and_type **slot, ofs;
@@ -39154,6 +39177,138 @@ index 2201d30..41620a4 100644
+
+gdb_test "p a_string2" " = \"hello world2\\\\n\""
+gdb_test "ptype a_string2" "type = char \\\[14\\\]"
+diff --git a/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.S b/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.S
+new file mode 100644
+index 0000000..5fcdd84
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.S
+@@ -0,0 +1,83 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++ Copyright 2009 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/>. */
++
++/* Debug information */
++
++ .section .debug_info
++.Lcu1_begin:
++ /* CU header */
++ .4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */
++.Lcu1_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 "dw2-struct-member-data-location.c\0" /* DW_AT_name */
++ .ascii "GNU C 4.3.2\0" /* DW_AT_producer */
++ .byte 1 /* DW_AT_language (C) */
++
++.Ltype_uchar:
++ .uleb128 2 /* Abbrev: DW_TAG_structure_type */
++ .ascii "some_struct\0" /* DW_AT_name */
++
++ .uleb128 3 /* Abbrev: DW_TAG_member */
++ .ascii "field\0" /* DW_AT_name */
++ .byte 0 /* DW_AT_data_member_location */
++
++ .byte 0 /* End of children of some_struct */
++
++ .byte 0 /* End of children of CU */
++
++.Lcu1_end:
++
++/* Abbrev table */
++ .section .debug_abbrev
++.Labbrev1_begin:
++ .uleb128 1 /* Abbrev code */
++ .uleb128 0x11 /* DW_TAG_compile_unit */
++ .byte 1 /* has_children */
++ .uleb128 0x3 /* DW_AT_name */
++ .uleb128 0x8 /* DW_FORM_string */
++ .uleb128 0x25 /* DW_AT_producer */
++ .uleb128 0x8 /* DW_FORM_string */
++ .uleb128 0x13 /* DW_AT_language */
++ .uleb128 0xb /* DW_FORM_data1 */
++ .byte 0x0 /* Terminator */
++ .byte 0x0 /* Terminator */
++
++ .uleb128 2 /* Abbrev code */
++ .uleb128 0x13 /* DW_TAG_structure_type */
++ .byte 1 /* has_children */
++ .uleb128 0x3 /* DW_AT_name */
++ .uleb128 0x8 /* DW_FORM_string */
++ .byte 0x0 /* Terminator */
++ .byte 0x0 /* Terminator */
++
++ .uleb128 3 /* Abbrev code */
++ .uleb128 0x0d /* DW_TAG_member */
++ .byte 0 /* has_children */
++ .uleb128 0x3 /* DW_AT_name */
++ .uleb128 0x8 /* DW_FORM_string */
++ .uleb128 0x38 /* DW_AT_data_member_location */
++ .uleb128 0x0b /* DW_FORM_data1 */
++ .byte 0x0 /* Terminator */
++ .byte 0x0 /* Terminator */
++
++ .byte 0x0 /* Terminator */
++ .byte 0x0 /* Terminator */
+diff --git a/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.exp b/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.exp
+new file mode 100644
+index 0000000..c41151c
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.exp
+@@ -0,0 +1,37 @@
++# Copyright 2009 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/>.
++
++# This test can only be run on targets which support DWARF-2 and use gas.
++# For now pick a sampling of likely targets.
++if {![istarget *-*-linux*]
++ && ![istarget *-*-gnu*]
++ && ![istarget *-*-elf*]
++ && ![istarget *-*-openbsd*]
++ && ![istarget arm-*-eabi*]
++ && ![istarget powerpc-*-eabi*]} {
++ return 0
++}
++
++set testfile "dw2-struct-member-data-location"
++set srcfile ${testfile}.S
++set binfile ${testfile}.x
++
++if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objdir}/${subdir}/${binfile}" object {nodebug}] != "" } {
++ return -1
++}
++
++clean_restart $binfile
++
++gdb_test "ptype struct some_struct" "type = struct some_struct {\[\r\n \t\]*void field;\[\r\n \t\]*}"
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-unresolved-main.c b/gdb/testsuite/gdb.dwarf2/dw2-unresolved-main.c
new file mode 100644
index 0000000..c24eb96
Index: gdb.spec
===================================================================
RCS file: /cvs/pkgs/rpms/gdb/F-11/gdb.spec,v
retrieving revision 1.356
retrieving revision 1.357
diff -u -p -r1.356 -r1.357
--- gdb.spec 29 Jun 2009 20:18:08 -0000 1.356
+++ gdb.spec 6 Jul 2009 14:55:57 -0000 1.357
@@ -14,7 +14,7 @@ Version: 6.8.50.20090302
# 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: 32%{?_with_upstream:.upstream}%{?dist}
+Release: 33%{?_with_upstream:.upstream}%{?dist}
License: GPLv3+
Group: Development/Debuggers
@@ -387,7 +387,7 @@ Patch369: gdb-varobj-revalidate-prep.pat
Patch370: gdb-varobj-revalidate-core.patch
# Accelerate sorting blocks on reading a file (found on WebKit) (BZ 507267).
-patch374: gdb-bz507267-block-sort-fast.patch
+Patch374: gdb-bz507267-block-sort-fast.patch
BuildRequires: ncurses-devel texinfo gettext flex bison expat-devel
Requires: readline
@@ -880,6 +880,11 @@ fi
%endif
%changelog
+* Mon Jul 6 2009 Jan Kratochvil <jan.kratochvil at redhat.com> - 6.8.50.20090302-33
+- Archer update to the snapshot: 17bfc0488f54aeeb7a9e20ef3caa7e31e8e985fb
+- Archer backport: de9c5190034b84b0a5fb4b98b05b304cda187700
+ - [vla] Fix a crash regression on constant DW_AT_data_member_location.
+
* Mon Jun 29 2009 Jan Kratochvil <jan.kratochvil at redhat.com> - 6.8.50.20090302-32
- Replace the fix of cloned-TIDs with no pthread from upstream (BZ 471819).
- Fix a parallel testsuite runs incompatibility in gdb.base/gcore-shmid0.exp.
More information about the fedora-extras-commits
mailing list