Blob Blame History Raw
Index: gdb-6.8.50.20090210/gdb/dwarf2read.c
===================================================================
--- gdb-6.8.50.20090210.orig/gdb/dwarf2read.c	2009-02-11 01:25:45.000000000 +0100
+++ gdb-6.8.50.20090210/gdb/dwarf2read.c	2009-02-11 01:26:25.000000000 +0100
@@ -1845,6 +1845,7 @@ scan_partial_symbols (struct partial_die
 	      add_partial_subprogram (pdi, lowpc, highpc, need_pc, cu);
 	      break;
 	    case DW_TAG_variable:
+	    case DW_TAG_constant:
 	    case DW_TAG_typedef:
 	    case DW_TAG_union_type:
 	      if (!pdi->is_declaration)
@@ -2030,6 +2031,7 @@ add_partial_symbol (struct partial_die_i
 	}
       break;
     case DW_TAG_variable:
+    case DW_TAG_constant:
       if (pdi->is_external)
 	{
 	  /* Global Variable.
@@ -2895,6 +2897,7 @@ dwarf2_full_name (struct die_info *die, 
   if (!pdi_needs_namespace (die->tag)
       && die->tag != DW_TAG_subprogram
       && die->tag != DW_TAG_variable
+      && die->tag != DW_TAG_constant
       && die->tag != DW_TAG_member)
     return name;
 
@@ -3735,7 +3738,8 @@ dwarf2_add_field (struct field_info *fip
 	  fip->non_public_fields = 1;
 	}
     }
-  else if (die->tag == DW_TAG_member || die->tag == DW_TAG_variable)
+  else if (die->tag == DW_TAG_member || die->tag == DW_TAG_variable
+	   || die->tag == DW_TAG_constant)
     {
       /* C++ static member.  */
 
@@ -4213,7 +4217,8 @@ read_structure_type (struct die_info *di
       while (child_die && child_die->tag)
 	{
 	  if (child_die->tag == DW_TAG_member
-	      || child_die->tag == DW_TAG_variable)
+	      || child_die->tag == DW_TAG_variable
+	      || child_die->tag == DW_TAG_constant)
 	    {
 	      /* NOTE: carlton/2002-11-05: A C++ static data member
 		 should be a DW_TAG_member that is a declaration, but
@@ -4332,6 +4337,7 @@ process_structure_scope (struct die_info
     {
       if (child_die->tag == DW_TAG_member
 	  || child_die->tag == DW_TAG_variable
+	  || child_die->tag == DW_TAG_constant
 	  || child_die->tag == DW_TAG_inheritance)
 	{
 	  /* Do nothing.  */
@@ -5862,6 +5868,7 @@ load_partial_dies (bfd *abfd, gdb_byte *
 	  && abbrev->tag != DW_TAG_subprogram
 	  && abbrev->tag != DW_TAG_lexical_block
 	  && abbrev->tag != DW_TAG_variable
+	  && abbrev->tag != DW_TAG_constant
 	  && abbrev->tag != DW_TAG_namespace
 	  && abbrev->tag != DW_TAG_member)
 	{
@@ -5969,6 +5976,7 @@ load_partial_dies (bfd *abfd, gdb_byte *
       if (load_all
 	  || abbrev->tag == DW_TAG_subprogram
 	  || abbrev->tag == DW_TAG_variable
+	  || abbrev->tag == DW_TAG_constant
 	  || abbrev->tag == DW_TAG_namespace
 	  || part_die->is_declaration)
 	{
@@ -7759,6 +7767,11 @@ new_symbol (struct die_info *die, struct
 	  /* Do not add the symbol to any lists.  It will be found via
 	     BLOCK_FUNCTION from the blockvector.  */
 	  break;
+	case DW_TAG_constant:
+	  SYMBOL_TYPE (sym) = make_cv_type (1,
+					    TYPE_VOLATILE (SYMBOL_TYPE (sym)),
+					    SYMBOL_TYPE (sym), NULL);
+	  /* PASSTHRU */
 	case DW_TAG_variable:
 	  /* Compilation with minimal debug info may result in variables
 	     with missing type entries. Change the misleading `void' type