Configure zlib with --enable-host-shared for shared bfd
[deliverable/binutils-gdb.git] / gdb / dwarf2read.c
index 4946b4808eeadc1d60aa0b846e8194148de4297e..b91fbf5d34fd317b5eb5e0dc906ca730d65dcfa3 100644 (file)
@@ -1105,6 +1105,9 @@ struct partial_die_info
     /* Flag set if the DIE has a byte_size attribute.  */
     unsigned int has_byte_size : 1;
 
+    /* Flag set if the DIE has a DW_AT_const_value attribute.  */
+    unsigned int has_const_value : 1;
+
     /* Flag set if any of the DIE's children are template arguments.  */
     unsigned int has_template_arguments : 1;
 
@@ -3872,6 +3875,8 @@ dw2_expand_symtabs_matching
          struct quick_file_names *file_data;
          void **slot;
 
+         QUIT;
+
          per_cu->v.quick->mark = 0;
 
          /* We only need to look at symtabs not already expanded.  */
@@ -3932,6 +3937,8 @@ dw2_expand_symtabs_matching
       offset_type *vec, vec_len, vec_idx;
       int global_seen = 0;
 
+      QUIT;
+
       if (index->symbol_table[idx] == 0 && index->symbol_table[idx + 1] == 0)
        continue;
 
@@ -6956,19 +6963,24 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
        }
       else
        {
-         /* Static Variable.  Skip symbols without location descriptors.  */
-         if (pdi->d.locdesc == NULL)
+         int has_loc = pdi->d.locdesc != NULL;
+
+         /* Static Variable.  Skip symbols whose value we cannot know (those
+            without location descriptors or constant values).  */
+         if (!has_loc && !pdi->has_const_value)
            {
              xfree (built_actual_name);
              return;
            }
+
          /* prim_record_minimal_symbol (actual_name, addr + baseaddr,
             mst_file_data, objfile); */
          add_psymbol_to_list (actual_name, strlen (actual_name),
                               built_actual_name != NULL,
                               VAR_DOMAIN, LOC_STATIC,
                               &objfile->static_psymbols,
-                              0, addr + baseaddr,
+                              0,
+                              has_loc ? addr + baseaddr : (CORE_ADDR) 0,
                               cu->language, objfile);
        }
       break;
@@ -15851,6 +15863,9 @@ read_partial_die (const struct die_reader_specs *reader,
         case DW_AT_byte_size:
           part_die->has_byte_size = 1;
           break;
+        case DW_AT_const_value:
+          part_die->has_const_value = 1;
+          break;
        case DW_AT_calling_convention:
          /* DWARF doesn't provide a way to identify a program's source-level
             entry point.  DW_AT_calling_convention attributes are only meant
@@ -22102,7 +22117,7 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
   /* Read DW_AT_data_location and set in type.  */
   attr = dwarf2_attr (die, DW_AT_data_location, cu);
   if (attr_to_dynamic_prop (attr, die, cu, &prop))
-    add_dyn_prop (DYN_ATTR_DATA_LOCATION, prop, type, objfile);
+    add_dyn_prop (DYN_PROP_DATA_LOCATION, prop, type, objfile);
 
   if (dwarf2_per_objfile->die_type_hash == NULL)
     {
This page took 0.037223 seconds and 4 git commands to generate.