Add end_psymtab_common, have all debug info readers call it.
[deliverable/binutils-gdb.git] / gdb / valops.c
index 50082c97ba201ad4e3ef7d81c506ffe27c7339e0..acaf027d9d2fa893bfd7a3d2c6bfbe073f8910db 100644 (file)
@@ -127,21 +127,21 @@ show_overload_resolution (struct ui_file *file, int from_tty,
 struct value *
 find_function_in_inferior (const char *name, struct objfile **objf_p)
 {
-  struct symbol *sym;
+  struct block_symbol sym;
 
   sym = lookup_symbol (name, 0, VAR_DOMAIN, 0);
-  if (sym != NULL)
+  if (sym.symbol != NULL)
     {
-      if (SYMBOL_CLASS (sym) != LOC_BLOCK)
+      if (SYMBOL_CLASS (sym.symbol) != LOC_BLOCK)
        {
          error (_("\"%s\" exists in this program but is not a function."),
                 name);
        }
 
       if (objf_p)
-       *objf_p = symbol_objfile (sym);
+       *objf_p = symbol_objfile (sym.symbol);
 
-      return value_of_variable (sym, NULL);
+      return value_of_variable (sym.symbol, sym.block);
     }
   else
     {
@@ -381,7 +381,7 @@ value_cast (struct type *type, struct value *arg2)
     /* We deref the value and then do the cast.  */
     return value_cast (type, coerce_ref (arg2)); 
 
-  CHECK_TYPEDEF (type);
+  type = check_typedef (type);
   code1 = TYPE_CODE (type);
   arg2 = coerce_ref (arg2);
   type2 = check_typedef (value_type (arg2));
@@ -958,30 +958,33 @@ read_value_memory (struct value *val, int embedded_offset,
                   int stack, CORE_ADDR memaddr,
                   gdb_byte *buffer, size_t length)
 {
-  ULONGEST xfered = 0;
+  ULONGEST xfered_total = 0;
+  struct gdbarch *arch = get_value_arch (val);
+  int unit_size = gdbarch_addressable_memory_unit_size (arch);
 
-  while (xfered < length)
+  while (xfered_total < length)
     {
       enum target_xfer_status status;
-      ULONGEST xfered_len;
+      ULONGEST xfered_partial;
 
       status = target_xfer_partial (current_target.beneath,
                                    TARGET_OBJECT_MEMORY, NULL,
-                                   buffer + xfered, NULL,
-                                   memaddr + xfered, length - xfered,
-                                   &xfered_len);
+                                   buffer + xfered_total * unit_size, NULL,
+                                   memaddr + xfered_total,
+                                   length - xfered_total,
+                                   &xfered_partial);
 
       if (status == TARGET_XFER_OK)
        /* nothing */;
       else if (status == TARGET_XFER_UNAVAILABLE)
-       mark_value_bytes_unavailable (val, embedded_offset + xfered,
-                                     xfered_len);
+       mark_value_bytes_unavailable (val, embedded_offset + xfered_total,
+                                     xfered_partial);
       else if (status == TARGET_XFER_EOF)
-       memory_error (TARGET_XFER_E_IO, memaddr + xfered);
+       memory_error (TARGET_XFER_E_IO, memaddr + xfered_total);
       else
-       memory_error (status, memaddr + xfered);
+       memory_error (status, memaddr + xfered_total);
 
-      xfered += xfered_len;
+      xfered_total += xfered_partial;
       QUIT;
     }
 }
@@ -1012,7 +1015,7 @@ value_assign (struct value *toval, struct value *fromval)
        fromval = coerce_array (fromval);
     }
 
-  CHECK_TYPEDEF (type);
+  type = check_typedef (type);
 
   /* Since modifying a register can trash the frame chain, and
      modifying memory can trash the frame cache, we save the old frame
@@ -1089,7 +1092,7 @@ value_assign (struct value *toval, struct value *fromval)
        else
          {
            changed_addr = value_address (toval);
-           changed_len = TYPE_LENGTH (type);
+           changed_len = type_length_units (type);
            dest_buffer = value_contents (fromval);
          }
 
@@ -1170,8 +1173,6 @@ value_assign (struct value *toval, struct value *fromval)
          }
 
        observer_notify_register_changed (frame, value_reg);
-       if (deprecated_register_changed_hook)
-         deprecated_register_changed_hook (-1);
        break;
       }
 
@@ -1282,7 +1283,7 @@ value_repeat (struct value *arg1, int count)
 
   read_value_memory (val, 0, value_stack (val), value_address (val),
                     value_contents_all_raw (val),
-                    TYPE_LENGTH (value_enclosing_type (val)));
+                    type_length_units (value_enclosing_type (val)));
 
   return val;
 }
@@ -1608,10 +1609,11 @@ value_array (int lowbound, int highbound, struct value **elemvec)
     {
       error (_("bad array bounds (%d, %d)"), lowbound, highbound);
     }
-  typelength = TYPE_LENGTH (value_enclosing_type (elemvec[0]));
+  typelength = type_length_units (value_enclosing_type (elemvec[0]));
   for (idx = 1; idx < nelem; idx++)
     {
-      if (TYPE_LENGTH (value_enclosing_type (elemvec[idx])) != typelength)
+      if (type_length_units (value_enclosing_type (elemvec[idx]))
+         != typelength)
        {
          error (_("array elements must all be the same size"));
        }
@@ -1804,7 +1806,7 @@ do_search_struct_field (const char *name, struct value *arg1, int offset,
   int i;
   int nbases;
 
-  CHECK_TYPEDEF (type);
+  type = check_typedef (type);
   nbases = TYPE_N_BASECLASSES (type);
 
   if (!looking_for_baseclass)
@@ -1985,7 +1987,7 @@ search_struct_method (const char *name, struct value **arg1p,
   int name_matched = 0;
   char dem_opname[64];
 
-  CHECK_TYPEDEF (type);
+  type = check_typedef (type);
   for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; i--)
     {
       const char *t_field_name = TYPE_FN_FIELDLIST_NAME (type, i);
@@ -2287,7 +2289,7 @@ find_method_list (struct value **argp, const char *method,
   VEC (xmethod_worker_ptr) *worker_vec = NULL, *new_vec = NULL;
 
   gdb_assert (fn_list != NULL && xm_worker_vec != NULL);
-  CHECK_TYPEDEF (type);
+  type = check_typedef (type);
 
   /* First check in object itself.
      This function is called recursively to search through base classes.
@@ -3455,7 +3457,7 @@ value_struct_elt_for_reference (struct type *domain, int offset,
            {
              struct symbol *s = 
                lookup_symbol (TYPE_FN_FIELD_PHYSNAME (f, j),
-                              0, VAR_DOMAIN, 0);
+                              0, VAR_DOMAIN, 0).symbol;
 
              if (s == NULL)
                return NULL;
@@ -3486,7 +3488,7 @@ value_struct_elt_for_reference (struct type *domain, int offset,
            {
              struct symbol *s = 
                lookup_symbol (TYPE_FN_FIELD_PHYSNAME (f, j),
-                              0, VAR_DOMAIN, 0);
+                              0, VAR_DOMAIN, 0).symbol;
 
              if (s == NULL)
                return NULL;
@@ -3562,19 +3564,19 @@ value_maybe_namespace_elt (const struct type *curtype,
                           enum noside noside)
 {
   const char *namespace_name = TYPE_TAG_NAME (curtype);
-  struct symbol *sym;
+  struct block_symbol sym;
   struct value *result;
 
   sym = cp_lookup_symbol_namespace (namespace_name, name,
                                    get_selected_block (0), VAR_DOMAIN);
 
-  if (sym == NULL)
+  if (sym.symbol == NULL)
     return NULL;
   else if ((noside == EVAL_AVOID_SIDE_EFFECTS)
-          && (SYMBOL_CLASS (sym) == LOC_TYPEDEF))
-    result = allocate_value (SYMBOL_TYPE (sym));
+          && (SYMBOL_CLASS (sym.symbol) == LOC_TYPEDEF))
+    result = allocate_value (SYMBOL_TYPE (sym.symbol));
   else
-    result = value_of_variable (sym, get_selected_block (0));
+    result = value_of_variable (sym.symbol, sym.block);
 
   if (want_address)
     result = value_addr (result);
@@ -3738,7 +3740,7 @@ value_of_this (const struct language_defn *lang)
 
   b = get_frame_block (frame, NULL);
 
-  sym = lookup_language_this (lang, b);
+  sym = lookup_language_this (lang, b).symbol;
   if (sym == NULL)
     error (_("current stack frame does not contain a variable named `%s'"),
           lang->la_name_of_this);
@@ -3814,7 +3816,7 @@ value_slice (struct value *array, int lowbound, int length)
       {
        slice = allocate_value (slice_type);
        value_contents_copy (slice, 0, array, offset,
-                            TYPE_LENGTH (slice_type));
+                            type_length_units (slice_type));
       }
 
     set_value_component_location (slice, array);
This page took 0.028383 seconds and 4 git commands to generate.