Add AVX512 registers support to GDB and GDBserver.
[deliverable/binutils-gdb.git] / gdb / stabsread.c
index 5fa183f678bc615786a31ff4263294ec52498e6e..592350e0feac1e2ec769a129422974516e7b35cf 100644 (file)
@@ -1,6 +1,6 @@
 /* Support routines for decoding "stabs" debugging information format.
 
-   Copyright (C) 1986-2013 Free Software Foundation, Inc.
+   Copyright (C) 1986-2014 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -24,7 +24,7 @@
    Avoid placing any object file format specific code in this file.  */
 
 #include "defs.h"
-#include "gdb_string.h"
+#include <string.h>
 #include "bfd.h"
 #include "gdb_obstack.h"
 #include "symtab.h"
@@ -207,6 +207,23 @@ static int noname_undefs_length;
     if (**(pp) == '\\' || (**(pp) == '?' && (*(pp))[1] == '\0')) \
       *(pp) = next_symbol_text (objfile);      \
   } while (0)
+
+/* Vector of types defined so far, indexed by their type numbers.
+   (In newer sun systems, dbx uses a pair of numbers in parens,
+   as in "(SUBFILENUM,NUMWITHINSUBFILE)".
+   Then these numbers must be translated through the type_translations
+   hash table to get the index into the type vector.)  */
+
+static struct type **type_vector;
+
+/* Number of elements allocated for type_vector currently.  */
+
+static int type_vector_length;
+
+/* Initial size of type vector.  Is realloc'd larger if needed, and
+   realloc'd down to the size actually used, when completed.  */
+
+#define INITIAL_TYPE_VECTOR_LENGTH 160
 \f
 
 /* Look up a dbx type-number pair.  Return the address of the slot
@@ -650,19 +667,6 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
 
   current_symbol = sym = allocate_symbol (objfile);
 
-  switch (type & N_TYPE)
-    {
-    case N_TEXT:
-      SYMBOL_SECTION (sym) = SECT_OFF_TEXT (objfile);
-      break;
-    case N_DATA:
-      SYMBOL_SECTION (sym) = SECT_OFF_DATA (objfile);
-      break;
-    case N_BSS:
-      SYMBOL_SECTION (sym) = SECT_OFF_BSS (objfile);
-      break;
-    }
-
   if (processing_gcc_compilation)
     {
       /* GCC 2.x puts the line number in desc.  SunOS apparently puts in the
@@ -859,9 +863,9 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
            /* NULL terminate the string.  */
            string_local[ind] = 0;
            range_type
-             = create_range_type (NULL,
-                                  objfile_type (objfile)->builtin_int,
-                                  0, ind);
+             = create_static_range_type (NULL,
+                                         objfile_type (objfile)->builtin_int,
+                                         0, ind);
            SYMBOL_TYPE (sym) = create_array_type (NULL,
                                  objfile_type (objfile)->builtin_char,
                                  range_type);
@@ -1164,17 +1168,17 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
                                            SYMBOL_LINKAGE_NAME (sym))
             != SYMBOL_LINKAGE_NAME (sym))
        {
-         struct minimal_symbol *msym;
+         struct bound_minimal_symbol msym;
 
          msym = lookup_minimal_symbol (SYMBOL_LINKAGE_NAME (sym),
                                        NULL, objfile);
-         if (msym != NULL)
+         if (msym.minsym != NULL)
            {
              const char *new_name = gdbarch_static_transform_name
                (gdbarch, SYMBOL_LINKAGE_NAME (sym));
 
              SYMBOL_SET_LINKAGE_NAME (sym, new_name);
-             SYMBOL_VALUE_ADDRESS (sym) = SYMBOL_VALUE_ADDRESS (msym);
+             SYMBOL_VALUE_ADDRESS (sym) = BMSYMBOL_VALUE_ADDRESS (msym);
            }
        }
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
@@ -1356,17 +1360,17 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
                                            SYMBOL_LINKAGE_NAME (sym))
             != SYMBOL_LINKAGE_NAME (sym))
        {
-         struct minimal_symbol *msym;
+         struct bound_minimal_symbol msym;
 
          msym = lookup_minimal_symbol (SYMBOL_LINKAGE_NAME (sym), 
                                        NULL, objfile);
-         if (msym != NULL)
+         if (msym.minsym != NULL)
            {
              const char *new_name = gdbarch_static_transform_name
                (gdbarch, SYMBOL_LINKAGE_NAME (sym));
 
              SYMBOL_SET_LINKAGE_NAME (sym, new_name);
-             SYMBOL_VALUE_ADDRESS (sym) = SYMBOL_VALUE_ADDRESS (msym);
+             SYMBOL_VALUE_ADDRESS (sym) = BMSYMBOL_VALUE_ADDRESS (msym);
            }
        }
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
@@ -3528,7 +3532,10 @@ read_struct_type (char **pp, struct type *type, enum type_code type_code,
 
     TYPE_LENGTH (type) = read_huge_number (pp, 0, &nbits, 0);
     if (nbits != 0)
-      return error_type (pp, objfile);
+      {
+       do_cleanups (back_to);
+       return error_type (pp, objfile);
+      }
     set_length_in_type_chain (type);
   }
 
@@ -3608,7 +3615,7 @@ read_array_type (char **pp, struct type *type,
     }
 
   range_type =
-    create_range_type ((struct type *) NULL, index_type, lower, upper);
+    create_static_range_type ((struct type *) NULL, index_type, lower, upper);
   type = create_array_type (type, element_type, range_type);
 
   return type;
@@ -4238,7 +4245,8 @@ handle_true_range:
       index_type = objfile_type (objfile)->builtin_int;
     }
 
-  result_type = create_range_type ((struct type *) NULL, index_type, n2, n3);
+  result_type
+    = create_static_range_type ((struct type *) NULL, index_type, n2, n3);
   return (result_type);
 }
 
@@ -4647,11 +4655,11 @@ scan_file_globals (struct objfile *objfile)
          /* Get the hash index and check all the symbols
             under that hash index.  */
 
-         hash = hashname (SYMBOL_LINKAGE_NAME (msymbol));
+         hash = hashname (MSYMBOL_LINKAGE_NAME (msymbol));
 
          for (sym = global_sym_chain[hash]; sym;)
            {
-             if (strcmp (SYMBOL_LINKAGE_NAME (msymbol),
+             if (strcmp (MSYMBOL_LINKAGE_NAME (msymbol),
                          SYMBOL_LINKAGE_NAME (sym)) == 0)
                {
                  /* Splice this symbol out of the hash chain and
@@ -4673,14 +4681,15 @@ scan_file_globals (struct objfile *objfile)
                      if (SYMBOL_CLASS (sym) == LOC_BLOCK)
                        {
                          fix_common_block (sym,
-                                           SYMBOL_VALUE_ADDRESS (msymbol));
+                                           MSYMBOL_VALUE_ADDRESS (resolve_objfile,
+                                                                  msymbol));
                        }
                      else
                        {
                          SYMBOL_VALUE_ADDRESS (sym)
-                           = SYMBOL_VALUE_ADDRESS (msymbol);
+                           = MSYMBOL_VALUE_ADDRESS (resolve_objfile, msymbol);
                        }
-                     SYMBOL_SECTION (sym) = SYMBOL_SECTION (msymbol);
+                     SYMBOL_SECTION (sym) = MSYMBOL_SECTION (msymbol);
                    }
 
                  if (prev)
@@ -4725,7 +4734,7 @@ scan_file_globals (struct objfile *objfile)
            complaint (&symfile_complaints,
                       _("%s: common block `%s' from "
                         "global_sym_chain unresolved"),
-                      objfile->name, SYMBOL_PRINT_NAME (prev));
+                      objfile_name (objfile), SYMBOL_PRINT_NAME (prev));
        }
     }
   memset (global_sym_chain, 0, sizeof (global_sym_chain));
This page took 0.028292 seconds and 4 git commands to generate.