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