Fix crash with DW_FORM_implicit_const
[binutils-gdb.git] / gdb / value.h
index 80c92c4753e3096d64d5bb99cd88a193f76e4344..e5c63dccbe21c41bdf6fa72a78c2a43b892978ad 100644 (file)
@@ -111,28 +111,12 @@ struct range
   }
 };
 
-/* Increase VAL's reference count.  */
-
-extern void value_incref (struct value *val);
-
-/* Decrease VAL's reference count.  When the reference count drops to
-   0, VAL will be freed.  */
-
-extern void value_decref (struct value *val);
-
 /* A policy class to interface gdb::ref_ptr with struct value.  */
 
 struct value_ref_policy
 {
-  static void incref (struct value *ptr)
-  {
-    value_incref (ptr);
-  }
-
-  static void decref (struct value *ptr)
-  {
-    value_decref (ptr);
-  }
+  static void incref (struct value *ptr);
+  static void decref (struct value *ptr);
 };
 
 /* A gdb:;ref_ptr pointer to a struct value.  */
@@ -144,11 +128,14 @@ typedef gdb::ref_ptr<struct value, value_ref_policy> value_ref_ptr;
 
 struct value
 {
+private:
+
+  /* Values can only be created via "static constructors".  */
   explicit value (struct type *type_)
-    : m_modifiable (1),
-      m_lazy (1),
-      m_initialized (1),
-      m_stack (0),
+    : m_modifiable (true),
+      m_lazy (true),
+      m_initialized (true),
+      m_stack (false),
       m_is_zero (false),
       m_in_history (false),
       m_type (type_),
@@ -156,24 +143,486 @@ struct value
   {
   }
 
+  /* Values can only be destroyed via the reference-counting
+     mechanism.  */
   ~value ();
 
   DISABLE_COPY_AND_ASSIGN (value);
 
+public:
+
+  /* Allocate a lazy value for type TYPE.  Its actual content is
+     "lazily" allocated too: the content field of the return value is
+     NULL; it will be allocated when it is fetched from the target.  */
+  static struct value *allocate_lazy (struct type *type);
+
+  /* Allocate a value and its contents for type TYPE.  */
+  static struct value *allocate (struct type *type);
+
+  /* Create a computed lvalue, with type TYPE, function pointers
+     FUNCS, and closure CLOSURE.  */
+  static struct value *allocate_computed (struct type *type,
+                                         const struct lval_funcs *funcs,
+                                         void *closure);
+
+  /* Allocate NOT_LVAL value for type TYPE being OPTIMIZED_OUT.  */
+  static struct value *allocate_optimized_out (struct type *type);
+
+  /* Create a value of type TYPE that is zero, and return it.  */
+  static struct value *zero (struct type *type, enum lval_type lv);
+
+  /* Return a copy of the value.  It contains the same contents, for
+     the same memory address, but it's a different block of
+     storage.  */
+  struct value *copy () const;
+
   /* Type of the value.  */
   struct type *type () const
   { return m_type; }
 
+  /* This is being used to change the type of an existing value, that
+     code should instead be creating a new value with the changed type
+     (but possibly shared content).  */
+  void deprecated_set_type (struct type *type)
+  { m_type = type; }
+
+  /* Return the gdbarch associated with the value. */
+  struct gdbarch *arch () const;
+
+  /* Only used for bitfields; number of bits contained in them.  */
+  LONGEST bitsize () const
+  { return m_bitsize; }
+
+  void set_bitsize (LONGEST bit)
+  { m_bitsize = bit; }
+
+  /* Only used for bitfields; position of start of field.  For
+     little-endian targets, it is the position of the LSB.  For
+     big-endian targets, it is the position of the MSB.  */
+  LONGEST bitpos () const
+  { return m_bitpos; }
+
+  void set_bitpos (LONGEST bit)
+  { m_bitpos = bit; }
+
+  /* Only used for bitfields; the containing value.  This allows a
+     single read from the target when displaying multiple
+     bitfields.  */
+  value *parent () const
+  { return m_parent.get (); }
+
+  void set_parent (struct value *parent)
+  {  m_parent = value_ref_ptr::new_reference (parent); }
+
+  /* Describes offset of a value within lval of a structure in bytes.
+     If lval == lval_memory, this is an offset to the address.  If
+     lval == lval_register, this is a further offset from
+     location.address within the registers structure.  Note also the
+     member embedded_offset below.  */
+  LONGEST offset () const
+  { return m_offset; }
+
+  void set_offset (LONGEST offset)
+  { m_offset = offset; }
+
+  /* The comment from "struct value" reads: ``Is it modifiable?  Only
+     relevant if lval != not_lval.''.  Shouldn't the value instead be
+     not_lval and be done with it?  */
+  bool deprecated_modifiable () const
+  { return m_modifiable; }
+
+  /* Set or clear the modifiable flag.  */
+  void set_modifiable (bool val)
+  { m_modifiable = val; }
+
+  LONGEST pointed_to_offset () const
+  { return m_pointed_to_offset; }
+
+  void set_pointed_to_offset (LONGEST val)
+  { m_pointed_to_offset = val; }
+
+  LONGEST embedded_offset () const
+  { return m_embedded_offset; }
+
+  void set_embedded_offset (LONGEST val)
+  { m_embedded_offset = val; }
+
+  /* If false, contents of this value are in the contents field.  If
+     true, contents are in inferior.  If the lval field is lval_memory,
+     the contents are in inferior memory at location.address plus offset.
+     The lval field may also be lval_register.
+
+     WARNING: This field is used by the code which handles watchpoints
+     (see breakpoint.c) to decide whether a particular value can be
+     watched by hardware watchpoints.  If the lazy flag is set for some
+     member of a value chain, it is assumed that this member of the
+     chain doesn't need to be watched as part of watching the value
+     itself.  This is how GDB avoids watching the entire struct or array
+     when the user wants to watch a single struct member or array
+     element.  If you ever change the way lazy flag is set and reset, be
+     sure to consider this use as well!  */
+
+  bool lazy () const
+  { return m_lazy; }
+
+  void set_lazy (bool val)
+  { m_lazy = val; }
+
+  /* If a value represents a C++ object, then the `type' field gives the
+     object's compile-time type.  If the object actually belongs to some
+     class derived from `type', perhaps with other base classes and
+     additional members, then `type' is just a subobject of the real
+     thing, and the full object is probably larger than `type' would
+     suggest.
+
+     If `type' is a dynamic class (i.e. one with a vtable), then GDB can
+     actually determine the object's run-time type by looking at the
+     run-time type information in the vtable.  When this information is
+     available, we may elect to read in the entire object, for several
+     reasons:
+
+     - When printing the value, the user would probably rather see the
+     full object, not just the limited portion apparent from the
+     compile-time type.
+
+     - If `type' has virtual base classes, then even printing `type'
+     alone may require reaching outside the `type' portion of the
+     object to wherever the virtual base class has been stored.
+
+     When we store the entire object, `enclosing_type' is the run-time
+     type -- the complete object -- and `embedded_offset' is the offset
+     of `type' within that larger type, in bytes.  The contents()
+     method takes `embedded_offset' into account, so most GDB code
+     continues to see the `type' portion of the value, just as the
+     inferior would.
+
+     If `type' is a pointer to an object, then `enclosing_type' is a
+     pointer to the object's run-time type, and `pointed_to_offset' is
+     the offset in bytes from the full object to the pointed-to object
+     -- that is, the value `embedded_offset' would have if we followed
+     the pointer and fetched the complete object.  (I don't really see
+     the point.  Why not just determine the run-time type when you
+     indirect, and avoid the special case?  The contents don't matter
+     until you indirect anyway.)
+
+     If we're not doing anything fancy, `enclosing_type' is equal to
+     `type', and `embedded_offset' is zero, so everything works
+     normally.  */
+
+  struct type *enclosing_type  () const
+  { return m_enclosing_type; }
+
+  void set_enclosing_type (struct type *new_type);
+
+  bool stack () const
+  { return m_stack; }
+
+  void set_stack (bool val)
+  { m_stack = val; }
+
+  /* If this value is lval_computed, return its lval_funcs
+     structure.  */
+  const struct lval_funcs *computed_funcs () const;
+
+  /* If this value is lval_computed, return its closure.  The meaning
+     of the returned value depends on the functions this value
+     uses.  */
+  void *computed_closure () const;
+
+  enum lval_type lval () const
+  { return m_lval; }
+
+  /* Set the 'lval' of this value.  */
+  void set_lval (lval_type val)
+  { m_lval = val; }
+
+  /* Set or return field indicating whether a variable is initialized or
+     not, based on debugging information supplied by the compiler.
+     true = initialized; false = uninitialized.  */
+  bool initialized () const
+  { return m_initialized; }
+
+  void set_initialized (bool value)
+  { m_initialized = value; }
+
+  /* If lval == lval_memory, return the address in the inferior.  If
+     lval == lval_register, return the byte offset into the registers
+     structure.  Otherwise, return 0.  The returned address
+     includes the offset, if any.  */
+  CORE_ADDR address () const;
+
+  /* Like address, except the result does not include value's
+     offset.  */
+  CORE_ADDR raw_address () const;
+
+  /* Set the address of a value.  */
+  void set_address (CORE_ADDR);
+
+  struct internalvar **deprecated_internalvar_hack ()
+  { return &m_location.internalvar; }
+
+  struct frame_id *deprecated_next_frame_id_hack ();
+
+  int *deprecated_regnum_hack ();
+
+  /* contents() and contents_raw() both return the address of the gdb
+     buffer used to hold a copy of the contents of the lval.
+     contents() is used when the contents of the buffer are needed --
+     it uses fetch_lazy() to load the buffer from the process being
+     debugged if it hasn't already been loaded (contents_writeable()
+     is used when a writeable but fetched buffer is required)..
+     contents_raw() is used when data is being stored into the buffer,
+     or when it is certain that the contents of the buffer are valid.
+
+     Note: The contents pointer is adjusted by the offset required to
+     get to the real subobject, if the value happens to represent
+     something embedded in a larger run-time object.  */
+  gdb::array_view<gdb_byte> contents_raw ();
+
+  /* Actual contents of the value.  For use of this value; setting it
+     uses the stuff above.  Not valid if lazy is nonzero.  Target
+     byte-order.  We force it to be aligned properly for any possible
+     value.  Note that a value therefore extends beyond what is
+     declared here.  */
+  gdb::array_view<const gdb_byte> contents ();
+
+  /* The ALL variants of the above two methods do not adjust the
+     returned pointer by the embedded_offset value.  */
+  gdb::array_view<const gdb_byte> contents_all ();
+  gdb::array_view<gdb_byte> contents_all_raw ();
+
+  gdb::array_view<gdb_byte> contents_writeable ();
+
+  /* Like contents_all, but does not require that the returned bits be
+     valid.  This should only be used in situations where you plan to
+     check the validity manually.  */
+  gdb::array_view<const gdb_byte> contents_for_printing ();
+
+  /* Like contents_for_printing, but accepts a constant value pointer.
+     Unlike contents_for_printing however, the pointed value must
+     _not_ be lazy.  */
+  gdb::array_view<const gdb_byte> contents_for_printing () const;
+
+  /* Load the actual content of a lazy value.  Fetch the data from the
+     user's process and clear the lazy flag to indicate that the data in
+     the buffer is valid.
+
+     If the value is zero-length, we avoid calling read_memory, which
+     would abort.  We mark the value as fetched anyway -- all 0 bytes of
+     it.  */
+  void fetch_lazy ();
+
+  /* Compare LENGTH bytes of this value's contents starting at OFFSET1
+     with LENGTH bytes of VAL2's contents starting at OFFSET2.
+
+     Note that "contents" refers to the whole value's contents
+     (value_contents_all), without any embedded offset adjustment.  For
+     example, to compare a complete object value with itself, including
+     its enclosing type chunk, you'd do:
+
+     int len = check_typedef (val->enclosing_type ())->length ();
+     val->contents_eq (0, val, 0, len);
+
+     Returns true iff the set of available/valid contents match.
+
+     Optimized-out contents are equal to optimized-out contents, and are
+     not equal to non-optimized-out contents.
+
+     Unavailable contents are equal to unavailable contents, and are not
+     equal to non-unavailable contents.
+
+     For example, if 'x's represent an unavailable byte, and 'V' and 'Z'
+     represent different available/valid bytes, in a value with length
+     16:
+
+     offset:   0   4   8   12  16
+     contents: xxxxVVVVxxxxVVZZ
+
+     then:
+
+     val->contents_eq(0, val, 8, 6) => true
+     val->contents_eq(0, val, 4, 4) => false
+     val->contents_eq(0, val, 8, 8) => false
+     val->contents_eq(4, val, 12, 2) => true
+     val->contents_eq(4, val, 12, 4) => true
+     val->contents_eq(3, val, 4, 4) => true
+
+     If 'x's represent an unavailable byte, 'o' represents an optimized
+     out byte, in a value with length 8:
+
+     offset:   0   4   8
+     contents: xxxxoooo
+
+     then:
+
+     val->contents_eq(0, val, 2, 2) => true
+     val->contents_eq(4, val, 6, 2) => true
+     val->contents_eq(0, val, 4, 4) => true
+
+     We only know whether a value chunk is unavailable or optimized out
+     if we've tried to read it.  As this routine is used by printing
+     routines, which may be printing values in the value history, long
+     after the inferior is gone, it works with const values.  Therefore,
+     this routine must not be called with lazy values.  */
+
+  bool contents_eq (LONGEST offset1, const struct value *val2, LONGEST offset2,
+                   LONGEST length) const;
+
+  /* An overload of contents_eq that compares the entirety of both
+     values.  */
+  bool contents_eq (const struct value *val2) const;
+
+  /* Given a value, determine whether the bits starting at OFFSET and
+     extending for LENGTH bits are a synthetic pointer.  */
+
+  bool bits_synthetic_pointer (LONGEST offset, LONGEST length) const;
+
+  /* Increase this value's reference count.  */
+  void incref ()
+  { ++m_reference_count; }
+
+  /* Decrease this value's reference count.  When the reference count
+     drops to 0, it will be freed.  */
+  void decref ();
+
+  /* Given a value, determine whether the contents bytes starting at
+     OFFSET and extending for LENGTH bytes are available.  This returns
+     true if all bytes in the given range are available, false if any
+     byte is unavailable.  */
+  bool bytes_available (LONGEST offset, ULONGEST length) const;
+
+  /* Given a value, determine whether the contents bits starting at
+     OFFSET and extending for LENGTH bits are available.  This returns
+     true if all bits in the given range are available, false if any
+     bit is unavailable.  */
+  bool bits_available (LONGEST offset, ULONGEST length) const;
+
+  /* Like bytes_available, but return false if any byte in the
+     whole object is unavailable.  */
+  bool entirely_available ();
+
+  /* Like entirely_available, but return false if any byte in the
+     whole object is available.  */
+  bool entirely_unavailable ()
+  { return entirely_covered_by_range_vector (m_unavailable); }
+
+  /* Mark this value's content bytes starting at OFFSET and extending
+     for LENGTH bytes as unavailable.  */
+  void mark_bytes_unavailable (LONGEST offset, ULONGEST length);
+
+  /* Mark this value's content bits starting at OFFSET and extending
+     for LENGTH bits as unavailable.  */
+  void mark_bits_unavailable (LONGEST offset, ULONGEST length);
+
+  /* If true, this is the value of a variable which does not actually
+     exist in the program, at least partially.  If the value is lazy,
+     this may fetch it now.  */
+  bool optimized_out ();
+
+  /* Given a value, return true if any of the contents bits starting at
+     OFFSET and extending for LENGTH bits is optimized out, false
+     otherwise.  */
+  bool bits_any_optimized_out (int bit_offset, int bit_length) const;
+
+  /* Like optimized_out, but return true iff the whole value is
+     optimized out.  */
+  bool entirely_optimized_out ()
+  {
+    return entirely_covered_by_range_vector (m_optimized_out);
+  }
+
+  /* Mark this value's content bytes starting at OFFSET and extending
+     for LENGTH bytes as optimized out.  */
+  void mark_bytes_optimized_out (int offset, int length);
+
+  /* Mark this value's content bits starting at OFFSET and extending
+     for LENGTH bits as optimized out.  */
+  void mark_bits_optimized_out (LONGEST offset, LONGEST length);
+
+  /* Return a version of this that is non-lvalue.  */
+  struct value *non_lval ();
+
+  /* Write contents of this value at ADDR and set its lval type to be
+     LVAL_MEMORY.  */
+  void force_lval (CORE_ADDR);
+
+  /* Set this values's location as appropriate for a component of
+     WHOLE --- regardless of what kind of lvalue WHOLE is.  */
+  void set_component_location (const struct value *whole);
+
+  /* Build a value wrapping and representing WORKER.  The value takes
+     ownership of the xmethod_worker object.  */
+  static struct value *from_xmethod (xmethod_worker_up &&worker);
+
+  /* Return the type of the result of TYPE_CODE_XMETHOD value METHOD.  */
+  struct type *result_type_of_xmethod (gdb::array_view<value *> argv);
+
+  /* Call the xmethod corresponding to the TYPE_CODE_XMETHOD value
+     METHOD.  */
+  struct value *call_xmethod (gdb::array_view<value *> argv);
+
+  /* Update this value before discarding OBJFILE.  COPIED_TYPES is
+     used to prevent cycles / duplicates.  */
+  void preserve (struct objfile *objfile, htab_t copied_types);
+
+  /* Unpack a bitfield of BITSIZE bits found at BITPOS in the object
+     at VALADDR + EMBEDDEDOFFSET that has the type of DEST_VAL and
+     store the contents in DEST_VAL, zero or sign extending if the
+     type of DEST_VAL is wider than BITSIZE.  VALADDR points to the
+     contents of this value.  If this value's contents required to
+     extract the bitfield from are unavailable/optimized out, DEST_VAL
+     is correspondingly marked unavailable/optimized out.  */
+  void unpack_bitfield (struct value *dest_val,
+                       LONGEST bitpos, LONGEST bitsize,
+                       const gdb_byte *valaddr, LONGEST embedded_offset)
+    const;
+
+  /* Copy LENGTH bytes of this value's (all) contents
+     (value_contents_all) starting at SRC_OFFSET byte, into DST
+     value's (all) contents, starting at DST_OFFSET.  If unavailable
+     contents are being copied from this value, the corresponding DST
+     contents are marked unavailable accordingly.  DST must not be
+     lazy.  If this value is lazy, it will be fetched now.
+
+     It is assumed the contents of DST in the [DST_OFFSET,
+     DST_OFFSET+LENGTH) range are wholly available.  */
+  void contents_copy (struct value *dst, LONGEST dst_offset,
+                     LONGEST src_offset, LONGEST length);
+
+  /* Given a value (offset by OFFSET bytes)
+     of a struct or union type ARG_TYPE,
+     extract and return the value of one of its (non-static) fields.
+     FIELDNO says which field.  */
+  struct value *primitive_field (LONGEST offset, int fieldno,
+                                struct type *arg_type);
+
+  /* Create a new value by extracting it from this value.  TYPE is the
+     type of the new value.  BIT_OFFSET and BIT_LENGTH describe the
+     offset and field width of the value to extract from this value --
+     BIT_LENGTH may differ from TYPE's length in the case where this
+     value's type is packed.
+
+     When the value does come from a non-byte-aligned offset or field
+     width, it will be marked non_lval.  */
+  struct value *from_component_bitsize (struct type *type,
+                                       LONGEST bit_offset,
+                                       LONGEST bit_length);
+
+  /* Record this value on the value history, and return its location
+     in the history.  The value is removed from the value chain.  */
+  int record_latest ();
+
+private:
 
   /* Type of value; either not an lval, or one of the various
      different possible kinds of lval.  */
   enum lval_type m_lval = not_lval;
 
   /* Is it modifiable?  Only relevant if lval != not_lval.  */
-  unsigned int m_modifiable : 1;
+  bool m_modifiable : 1;
 
-  /* If zero, contents of this value are in the contents field.  If
-     nonzero, contents are in inferior.  If the lval field is lval_memory,
+  /* If false, contents of this value are in the contents field.  If
+     true, contents are in inferior.  If the lval field is lval_memory,
      the contents are in inferior memory at location.address plus offset.
      The lval field may also be lval_register.
 
@@ -186,16 +635,16 @@ struct value
      or array when the user wants to watch a single struct member or
      array element.  If you ever change the way lazy flag is set and
      reset, be sure to consider this use as well!  */
-  unsigned int m_lazy : 1;
+  bool m_lazy : 1;
 
   /* If value is a variable, is it initialized or not.  */
-  unsigned int m_initialized : 1;
+  bool m_initialized : 1;
 
   /* If value is from the stack.  If this is set, read_stack will be
      used instead of read_memory to enable extra caching.  */
-  unsigned int m_stack : 1;
+  bool m_stack : 1;
 
-  /* True if this is a zero value, created by 'value_zero'; false
+  /* True if this is a zero value, created by 'value::zero'; false
      otherwise.  */
   bool m_is_zero : 1;
 
@@ -290,7 +739,7 @@ struct value
      When we store the entire object, `enclosing_type' is the run-time
      type -- the complete object -- and `embedded_offset' is the
      offset of `type' within that larger type, in target addressable memory
-     units.  The value_contents() macro takes `embedded_offset' into account,
+     units.  The contents() method takes `embedded_offset' into account,
      so most GDB code continues to see the `type' portion of the value, just
      as the inferior would.
 
@@ -340,97 +789,83 @@ struct value
      limited_length will be set to indicate the length in octets that were
      loaded from the inferior.  */
   ULONGEST m_limited_length = 0;
-};
-
-/* Return the gdbarch associated with the value. */
-
-extern struct gdbarch *get_value_arch (const struct value *value);
-
-/* This is being used to change the type of an existing value, that
-   code should instead be creating a new value with the changed type
-   (but possibly shared content).  */
-
-extern void deprecated_set_value_type (struct value *value,
-                                      struct type *type);
-
-/* Only used for bitfields; number of bits contained in them.  */
 
-extern LONGEST value_bitsize (const struct value *);
-extern void set_value_bitsize (struct value *, LONGEST bit);
-
-/* Only used for bitfields; position of start of field.  For
-   little-endian targets, it is the position of the LSB.  For
-   big-endian targets, it is the position of the MSB.  */
-
-extern LONGEST value_bitpos (const struct value *);
-extern void set_value_bitpos (struct value *, LONGEST bit);
-
-/* Only used for bitfields; the containing value.  This allows a
-   single read from the target when displaying multiple
-   bitfields.  */
-
-struct value *value_parent (const struct value *);
-extern void set_value_parent (struct value *value, struct value *parent);
-
-/* Describes offset of a value within lval of a structure in bytes.
-   If lval == lval_memory, this is an offset to the address.  If lval
-   == lval_register, this is a further offset from location.address
-   within the registers structure.  Note also the member
-   embedded_offset below.  */
-
-extern LONGEST value_offset (const struct value *);
-extern void set_value_offset (struct value *, LONGEST offset);
-
-/* The comment from "struct value" reads: ``Is it modifiable?  Only
-   relevant if lval != not_lval.''.  Shouldn't the value instead be
-   not_lval and be done with it?  */
-
-extern int deprecated_value_modifiable (const struct value *value);
-
-/* If a value represents a C++ object, then the `type' field gives the
-   object's compile-time type.  If the object actually belongs to some
-   class derived from `type', perhaps with other base classes and
-   additional members, then `type' is just a subobject of the real
-   thing, and the full object is probably larger than `type' would
-   suggest.
-
-   If `type' is a dynamic class (i.e. one with a vtable), then GDB can
-   actually determine the object's run-time type by looking at the
-   run-time type information in the vtable.  When this information is
-   available, we may elect to read in the entire object, for several
-   reasons:
-
-   - When printing the value, the user would probably rather see the
-     full object, not just the limited portion apparent from the
-     compile-time type.
+  /* Allocate a value and its contents for type TYPE.  If CHECK_SIZE
+     is true, then apply the usual max-value-size checks.  */
+  static struct value *allocate (struct type *type, bool check_size);
+
+  /* Helper for fetch_lazy when the value is a bitfield.  */
+  void fetch_lazy_bitfield ();
+
+  /* Helper for fetch_lazy when the value is in memory.  */
+  void fetch_lazy_memory ();
+
+  /* Helper for fetch_lazy when the value is in a register.  */
+  void fetch_lazy_register ();
+
+  /* Try to limit ourselves to only fetching the limited number of
+     elements.  However, if this limited number of elements still
+     puts us over max_value_size, then we still refuse it and
+     return failure here, which will ultimately throw an error.  */
+  bool set_limited_array_length ();
+
+  /* Allocate the contents of this value if it has not been allocated
+     yet.  If CHECK_SIZE is true, then apply the usual max-value-size
+     checks.  */
+  void allocate_contents (bool check_size);
+
+  /* Helper function for value_contents_eq.  The only difference is that
+     this function is bit rather than byte based.
+
+     Compare LENGTH bits of this value's contents starting at OFFSET1
+     bits with LENGTH bits of VAL2's contents starting at OFFSET2
+     bits.  Return true if the available bits match.  */
+  bool contents_bits_eq (int offset1, const struct value *val2, int offset2,
+                        int length) const;
+
+  void require_not_optimized_out () const;
+  void require_available () const;
+
+  /* Returns true if this value is entirely covered by RANGES.  If the
+     value is lazy, it'll be read now.  Note that RANGE is a pointer
+     to pointer because reading the value might change *RANGE.  */
+  bool entirely_covered_by_range_vector (const std::vector<range> &ranges);
+
+  /* Copy the ranges metadata from this value that overlaps
+     [SRC_BIT_OFFSET, SRC_BIT_OFFSET+BIT_LENGTH) into DST,
+     adjusted.  */
+  void ranges_copy_adjusted (struct value *dst, int dst_bit_offset,
+                            int src_bit_offset, int bit_length) const;
+
+  /* Copy LENGTH target addressable memory units of this value's (all)
+     contents (value_contents_all) starting at SRC_OFFSET, into DST
+     value's (all) contents, starting at DST_OFFSET.  If unavailable
+     contents are being copied from this, the corresponding DST
+     contents are marked unavailable accordingly.  Neither DST nor
+     this value may be lazy values.
+
+     It is assumed the contents of DST in the [DST_OFFSET,
+     DST_OFFSET+LENGTH) range are wholly available.  */
+  void contents_copy_raw (struct value *dst, LONGEST dst_offset,
+                         LONGEST src_offset, LONGEST length);
+
+  /* A helper for value_from_component_bitsize that copies bits from
+     this value to DEST.  */
+  void contents_copy_raw_bitwise (struct value *dst, LONGEST dst_bit_offset,
+                                 LONGEST src_bit_offset, LONGEST bit_length);
+};
 
-   - If `type' has virtual base classes, then even printing `type'
-     alone may require reaching outside the `type' portion of the
-     object to wherever the virtual base class has been stored.
+inline void
+value_ref_policy::incref (struct value *ptr)
+{
+  ptr->incref ();
+}
 
-   When we store the entire object, `enclosing_type' is the run-time
-   type -- the complete object -- and `embedded_offset' is the offset
-   of `type' within that larger type, in bytes.  The value_contents()
-   macro takes `embedded_offset' into account, so most GDB code
-   continues to see the `type' portion of the value, just as the
-   inferior would.
-
-   If `type' is a pointer to an object, then `enclosing_type' is a
-   pointer to the object's run-time type, and `pointed_to_offset' is
-   the offset in bytes from the full object to the pointed-to object
-   -- that is, the value `embedded_offset' would have if we followed
-   the pointer and fetched the complete object.  (I don't really see
-   the point.  Why not just determine the run-time type when you
-   indirect, and avoid the special case?  The contents don't matter
-   until you indirect anyway.)
-
-   If we're not doing anything fancy, `enclosing_type' is equal to
-   `type', and `embedded_offset' is zero, so everything works
-   normally.  */
-
-extern struct type *value_enclosing_type (const struct value *);
-extern void set_value_enclosing_type (struct value *val,
-                                     struct type *new_type);
+inline void
+value_ref_policy::decref (struct value *ptr)
+{
+  ptr->decref ();
+}
 
 /* Returns value_type or value_enclosing_type depending on
    value_print_options.objectprint.
@@ -448,11 +883,6 @@ extern struct type *value_actual_type (struct value *value,
                                       int resolve_simple_types,
                                       int *real_type_found);
 
-extern LONGEST value_pointed_to_offset (const struct value *value);
-extern void set_value_pointed_to_offset (struct value *value, LONGEST val);
-extern LONGEST value_embedded_offset (const struct value *value);
-extern void set_value_embedded_offset (struct value *value, LONGEST val);
-
 /* For lval_computed values, this structure holds functions used to
    retrieve and set the value (or portions of the value).
 
@@ -494,8 +924,8 @@ struct lval_funcs
 
   /* If non-NULL, this is used to determine whether the indicated bits
      of VALUE are a synthetic pointer.  */
-  int (*check_synthetic_pointer) (const struct value *value,
-                                 LONGEST offset, int length);
+  bool (*check_synthetic_pointer) (const struct value *value,
+                                  LONGEST offset, int length);
 
   /* Return a duplicate of VALUE's closure, for use in a new value.
      This may simply return the same closure, if VALUE's is
@@ -514,171 +944,22 @@ struct lval_funcs
   void (*free_closure) (struct value *v);
 };
 
-/* Create a computed lvalue, with type TYPE, function pointers FUNCS,
-   and closure CLOSURE.  */
-
-extern struct value *allocate_computed_value (struct type *type,
-                                             const struct lval_funcs *funcs,
-                                             void *closure);
-
-extern struct value *allocate_optimized_out_value (struct type *type);
-
-/* If VALUE is lval_computed, return its lval_funcs structure.  */
-
-extern const struct lval_funcs *value_computed_funcs (const struct value *);
-
-/* If VALUE is lval_computed, return its closure.  The meaning of the
-   returned value depends on the functions VALUE uses.  */
-
-extern void *value_computed_closure (const struct value *value);
-
-/* If zero, contents of this value are in the contents field.  If
-   nonzero, contents are in inferior.  If the lval field is lval_memory,
-   the contents are in inferior memory at location.address plus offset.
-   The lval field may also be lval_register.
-
-   WARNING: This field is used by the code which handles watchpoints
-   (see breakpoint.c) to decide whether a particular value can be
-   watched by hardware watchpoints.  If the lazy flag is set for some
-   member of a value chain, it is assumed that this member of the
-   chain doesn't need to be watched as part of watching the value
-   itself.  This is how GDB avoids watching the entire struct or array
-   when the user wants to watch a single struct member or array
-   element.  If you ever change the way lazy flag is set and reset, be
-   sure to consider this use as well!  */
-
-extern int value_lazy (const struct value *);
-extern void set_value_lazy (struct value *value, int val);
-
-extern int value_stack (const struct value *);
-extern void set_value_stack (struct value *value, int val);
-
 /* Throw an error complaining that the value has been optimized
    out.  */
 
 extern void error_value_optimized_out (void);
 
-/* value_contents() and value_contents_raw() both return the address
-   of the gdb buffer used to hold a copy of the contents of the lval.
-   value_contents() is used when the contents of the buffer are needed
-   -- it uses value_fetch_lazy() to load the buffer from the process
-   being debugged if it hasn't already been loaded
-   (value_contents_writeable() is used when a writeable but fetched
-   buffer is required)..  value_contents_raw() is used when data is
-   being stored into the buffer, or when it is certain that the
-   contents of the buffer are valid.
-
-   Note: The contents pointer is adjusted by the offset required to
-   get to the real subobject, if the value happens to represent
-   something embedded in a larger run-time object.  */
-
-extern gdb::array_view<gdb_byte> value_contents_raw (struct value *);
-
-/* Actual contents of the value.  For use of this value; setting it
-   uses the stuff above.  Not valid if lazy is nonzero.  Target
-   byte-order.  We force it to be aligned properly for any possible
-   value.  Note that a value therefore extends beyond what is
-   declared here.  */
-
-extern gdb::array_view<const gdb_byte> value_contents (struct value *);
-extern gdb::array_view<gdb_byte> value_contents_writeable (struct value *);
-
-/* The ALL variants of the above two macros do not adjust the returned
-   pointer by the embedded_offset value.  */
-
-extern gdb::array_view<gdb_byte> value_contents_all_raw (struct value *);
-extern gdb::array_view<const gdb_byte> value_contents_all (struct value *);
-
-/* Like value_contents_all, but does not require that the returned
-   bits be valid.  This should only be used in situations where you
-   plan to check the validity manually.  */
-extern gdb::array_view<const gdb_byte> value_contents_for_printing (struct value *value);
-
-/* Like value_contents_for_printing, but accepts a constant value
-   pointer.  Unlike value_contents_for_printing however, the pointed
-   value must _not_ be lazy.  */
-extern gdb::array_view<const gdb_byte>
-  value_contents_for_printing_const (const struct value *value);
-
-extern void value_fetch_lazy (struct value *val);
-
-/* If nonzero, this is the value of a variable which does not actually
-   exist in the program, at least partially.  If the value is lazy,
-   this may fetch it now.  */
-extern int value_optimized_out (struct value *value);
-
-/* Given a value, return true if any of the contents bits starting at
-   OFFSET and extending for LENGTH bits is optimized out, false
-   otherwise.  */
-
-extern int value_bits_any_optimized_out (const struct value *value,
-                                        int bit_offset, int bit_length);
-
-/* Like value_optimized_out, but return true iff the whole value is
-   optimized out.  */
-extern int value_entirely_optimized_out (struct value *value);
-
-/* Mark VALUE's content bytes starting at OFFSET and extending for
-   LENGTH bytes as optimized out.  */
-
-extern void mark_value_bytes_optimized_out (struct value *value,
-                                           int offset, int length);
-
-/* Mark VALUE's content bits starting at OFFSET and extending for
-   LENGTH bits as optimized out.  */
-
-extern void mark_value_bits_optimized_out (struct value *value,
-                                          LONGEST offset, LONGEST length);
-
-/* Set or return field indicating whether a variable is initialized or
-   not, based on debugging information supplied by the compiler.
-   1 = initialized; 0 = uninitialized.  */
-extern int value_initialized (const struct value *);
-extern void set_value_initialized (struct value *, int);
-
-/* Set COMPONENT's location as appropriate for a component of WHOLE
-   --- regardless of what kind of lvalue WHOLE is.  */
-extern void set_value_component_location (struct value *component,
-                                         const struct value *whole);
-
-/* While the following fields are per- VALUE .CONTENT .PIECE (i.e., a
-   single value might have multiple LVALs), this hacked interface is
-   limited to just the first PIECE.  Expect further change.  */
-/* Type of value; either not an lval, or one of the various different
-   possible kinds of lval.  */
-extern enum lval_type *deprecated_value_lval_hack (struct value *);
-#define VALUE_LVAL(val) (*deprecated_value_lval_hack (val))
-
-/* Like VALUE_LVAL, except the parameter can be const.  */
-extern enum lval_type value_lval_const (const struct value *value);
-
-/* If lval == lval_memory, return the address in the inferior.  If
-   lval == lval_register, return the byte offset into the registers
-   structure.  Otherwise, return 0.  The returned address
-   includes the offset, if any.  */
-extern CORE_ADDR value_address (const struct value *);
-
-/* Like value_address, except the result does not include value's
-   offset.  */
-extern CORE_ADDR value_raw_address (const struct value *);
-
-/* Set the address of a value.  */
-extern void set_value_address (struct value *, CORE_ADDR);
-
 /* Pointer to internal variable.  */
-extern struct internalvar **deprecated_value_internalvar_hack (struct value *);
-#define VALUE_INTERNALVAR(val) (*deprecated_value_internalvar_hack (val))
+#define VALUE_INTERNALVAR(val) (*((val)->deprecated_internalvar_hack ()))
 
 /* Frame ID of "next" frame to which a register value is relative.  A
    register value is indicated by VALUE_LVAL being set to lval_register.
    So, if the register value is found relative to frame F, then the
    frame id of F->next will be stored in VALUE_NEXT_FRAME_ID.  */
-extern struct frame_id *deprecated_value_next_frame_id_hack (struct value *);
-#define VALUE_NEXT_FRAME_ID(val) (*deprecated_value_next_frame_id_hack (val))
+#define VALUE_NEXT_FRAME_ID(val) (*((val)->deprecated_next_frame_id_hack ()))
 
 /* Register number if the value is from a register.  */
-extern int *deprecated_value_regnum_hack (struct value *);
-#define VALUE_REGNUM(val) (*deprecated_value_regnum_hack (val))
+#define VALUE_REGNUM(val) (*((val)->deprecated_regnum_hack ()))
 
 /* Return value after lval_funcs->coerce_ref (after check_typedef).  Return
    NULL if lval_funcs->coerce_ref is not applicable for whatever reason.  */
@@ -712,111 +993,6 @@ extern struct value *coerce_ref (struct value *value);
 
 extern struct value *coerce_array (struct value *value);
 
-/* Given a value, determine whether the bits starting at OFFSET and
-   extending for LENGTH bits are a synthetic pointer.  */
-
-extern int value_bits_synthetic_pointer (const struct value *value,
-                                        LONGEST offset, LONGEST length);
-
-/* Given a value, determine whether the contents bytes starting at
-   OFFSET and extending for LENGTH bytes are available.  This returns
-   nonzero if all bytes in the given range are available, zero if any
-   byte is unavailable.  */
-
-extern int value_bytes_available (const struct value *value,
-                                 LONGEST offset, ULONGEST length);
-
-/* Given a value, determine whether the contents bits starting at
-   OFFSET and extending for LENGTH bits are available.  This returns
-   nonzero if all bits in the given range are available, zero if any
-   bit is unavailable.  */
-
-extern int value_bits_available (const struct value *value,
-                                LONGEST offset, ULONGEST length);
-
-/* Like value_bytes_available, but return false if any byte in the
-   whole object is unavailable.  */
-extern int value_entirely_available (struct value *value);
-
-/* Like value_entirely_available, but return false if any byte in the
-   whole object is available.  */
-extern int value_entirely_unavailable (struct value *value);
-
-/* Mark VALUE's content bytes starting at OFFSET and extending for
-   LENGTH bytes as unavailable.  */
-
-extern void mark_value_bytes_unavailable (struct value *value,
-                                         LONGEST offset, ULONGEST length);
-
-/* Mark VALUE's content bits starting at OFFSET and extending for
-   LENGTH bits as unavailable.  */
-
-extern void mark_value_bits_unavailable (struct value *value,
-                                        LONGEST offset, ULONGEST length);
-
-/* Compare LENGTH bytes of VAL1's contents starting at OFFSET1 with
-   LENGTH bytes of VAL2's contents starting at OFFSET2.
-
-   Note that "contents" refers to the whole value's contents
-   (value_contents_all), without any embedded offset adjustment.  For
-   example, to compare a complete object value with itself, including
-   its enclosing type chunk, you'd do:
-
-     int len = check_typedef (value_enclosing_type (val))->length ();
-     value_contents_eq (val, 0, val, 0, len);
-
-   Returns true iff the set of available/valid contents match.
-
-   Optimized-out contents are equal to optimized-out contents, and are
-   not equal to non-optimized-out contents.
-
-   Unavailable contents are equal to unavailable contents, and are not
-   equal to non-unavailable contents.
-
-   For example, if 'x's represent an unavailable byte, and 'V' and 'Z'
-   represent different available/valid bytes, in a value with length
-   16:
-
-     offset:   0   4   8   12  16
-     contents: xxxxVVVVxxxxVVZZ
-
-   then:
-
-     value_contents_eq(val, 0, val, 8, 6) => true
-     value_contents_eq(val, 0, val, 4, 4) => false
-     value_contents_eq(val, 0, val, 8, 8) => false
-     value_contents_eq(val, 4, val, 12, 2) => true
-     value_contents_eq(val, 4, val, 12, 4) => true
-     value_contents_eq(val, 3, val, 4, 4) => true
-
-   If 'x's represent an unavailable byte, 'o' represents an optimized
-   out byte, in a value with length 8:
-
-     offset:   0   4   8
-     contents: xxxxoooo
-
-   then:
-
-     value_contents_eq(val, 0, val, 2, 2) => true
-     value_contents_eq(val, 4, val, 6, 2) => true
-     value_contents_eq(val, 0, val, 4, 4) => true
-
-   We only know whether a value chunk is unavailable or optimized out
-   if we've tried to read it.  As this routine is used by printing
-   routines, which may be printing values in the value history, long
-   after the inferior is gone, it works with const values.  Therefore,
-   this routine must not be called with lazy values.  */
-
-extern bool value_contents_eq (const struct value *val1, LONGEST offset1,
-                              const struct value *val2, LONGEST offset2,
-                              LONGEST length);
-
-/* An overload of value_contents_eq that compares the entirety of both
-   values.  */
-
-extern bool value_contents_eq (const struct value *val1,
-                              const struct value *val2);
-
 /* Read LENGTH addressable memory units starting at MEMADDR into BUFFER,
    which is (or will be copied to) VAL's contents buffer offset by
    BIT_OFFSET bits.  Marks value contents ranges as unavailable if
@@ -824,7 +1000,7 @@ extern bool value_contents_eq (const struct value *val1,
    whether the memory is known to be stack memory.  */
 
 extern void read_value_memory (struct value *val, LONGEST bit_offset,
-                              int stack, CORE_ADDR memaddr,
+                              bool stack, CORE_ADDR memaddr,
                               gdb_byte *buffer, size_t length);
 
 /* Cast SCALAR_VALUE to the element type of VECTOR_TYPE, then replicate
@@ -853,6 +1029,11 @@ extern bool is_floating_value (struct value *val);
 extern LONGEST value_as_long (struct value *val);
 extern CORE_ADDR value_as_address (struct value *val);
 
+/* Extract the value from VAL as a MPZ.  This coerces arrays and
+   handles various integer-like types as well.  */
+
+extern gdb_mpz value_as_mpz (struct value *val);
+
 extern LONGEST unpack_long (struct type *type, const gdb_byte *valaddr);
 extern CORE_ADDR unpack_pointer (struct type *type, const gdb_byte *valaddr);
 
@@ -884,12 +1065,6 @@ extern int unpack_value_field_as_long (struct type *type, const gdb_byte *valadd
                                LONGEST embedded_offset, int fieldno,
                                const struct value *val, LONGEST *result);
 
-extern void unpack_value_bitfield (struct value *dest_val,
-                                  LONGEST bitpos, LONGEST bitsize,
-                                  const gdb_byte *valaddr,
-                                  LONGEST embedded_offset,
-                                  const struct value *val);
-
 extern struct value *value_field_bitfield (struct type *type, int fieldno,
                                           const gdb_byte *valaddr,
                                           LONGEST embedded_offset,
@@ -905,23 +1080,17 @@ extern struct value *value_from_history_ref (const char *, const char **);
 extern struct value *value_from_component (struct value *, struct type *,
                                           LONGEST);
 
+/* Convert the value V into a newly allocated value.  */
+extern struct value *value_from_mpz (struct type *type, const gdb_mpz &v);
 
-/* Create a new value by extracting it from WHOLE.  TYPE is the type
-   of the new value.  BIT_OFFSET and BIT_LENGTH describe the offset
-   and field width of the value to extract from WHOLE -- BIT_LENGTH
-   may differ from TYPE's length in the case where WHOLE's type is
-   packed.
-
-   When the value does come from a non-byte-aligned offset or field
-   width, it will be marked non_lval.  */
+extern struct value *value_at (struct type *type, CORE_ADDR addr);
 
-extern struct value *value_from_component_bitsize (struct value *whole,
-                                                  struct type *type,
-                                                  LONGEST bit_offset,
-                                                  LONGEST bit_length);
+/* Return a new value given a type and an address.  The new value is
+   lazy.  If FRAME is given, it is used when resolving dynamic
+   properties.  */
 
-extern struct value *value_at (struct type *type, CORE_ADDR addr);
-extern struct value *value_at_lazy (struct type *type, CORE_ADDR addr);
+extern struct value *value_at_lazy (struct type *type, CORE_ADDR addr,
+                                   frame_info_ptr frame = nullptr);
 
 /* Like value_at, but ensures that the result is marked not_lval.
    This can be important if the memory is "volatile".  */
@@ -929,9 +1098,9 @@ extern struct value *value_at_non_lval (struct type *type, CORE_ADDR addr);
 
 extern struct value *value_from_contents_and_address_unresolved
      (struct type *, const gdb_byte *, CORE_ADDR);
-extern struct value *value_from_contents_and_address (struct type *,
-                                                     const gdb_byte *,
-                                                     CORE_ADDR);
+extern struct value *value_from_contents_and_address
+     (struct type *, const gdb_byte *, CORE_ADDR,
+      frame_info_ptr frame = nullptr);
 extern struct value *value_from_contents (struct type *, const gdb_byte *);
 
 extern struct value *default_value_from_register (struct gdbarch *gdbarch,
@@ -971,12 +1140,6 @@ extern struct value *read_var_value (struct symbol *var,
                                     const struct block *var_block,
                                     frame_info_ptr frame);
 
-extern struct value *allocate_value (struct type *type);
-extern struct value *allocate_value_lazy (struct type *type);
-extern void value_contents_copy (struct value *dst, LONGEST dst_offset,
-                                struct value *src, LONGEST src_offset,
-                                LONGEST length);
-
 extern struct value *allocate_repeat_value (struct type *type, int count);
 
 extern struct value *value_mark (void);
@@ -1007,23 +1170,61 @@ class scoped_value_mark
   /* Free the values currently on the value stack.  */
   void free_to_mark ()
   {
-    if (m_value != NULL)
+    if (!m_freed)
       {
        value_free_to_mark (m_value);
-       m_value = NULL;
+       m_freed = true;
       }
   }
 
  private:
 
   const struct value *m_value;
+  bool m_freed = false;
 };
 
-extern struct value *value_cstring (const char *ptr, ssize_t len,
+/* Create not_lval value representing a NULL-terminated C string.  The
+   resulting value has type TYPE_CODE_ARRAY.  The string passed in should
+   not include embedded null characters.
+
+   PTR points to the string data; COUNT is number of characters (does
+   not include the NULL terminator) pointed to by PTR, each character is of
+   type (and size of) CHAR_TYPE.  */
+
+extern struct value *value_cstring (const gdb_byte *ptr, ssize_t count,
                                    struct type *char_type);
-extern struct value *value_string (const char *ptr, ssize_t len,
+
+/* Specialisation of value_cstring above.  In this case PTR points to
+   single byte characters.  CHAR_TYPE must have a length of 1.  */
+inline struct value *value_cstring (const char *ptr, ssize_t count,
+                                   struct type *char_type)
+{
+  gdb_assert (char_type->length () == 1);
+  return value_cstring ((const gdb_byte *) ptr, count, char_type);
+}
+
+/* Create a not_lval value with type TYPE_CODE_STRING, the resulting value
+   has type TYPE_CODE_STRING.
+
+   PTR points to the string data; COUNT is number of characters pointed to
+   by PTR, each character has the type (and size of) CHAR_TYPE.
+
+   Note that string types are like array of char types with a lower bound
+   defined by the language (usually zero or one).  Also the string may
+   contain embedded null characters.  */
+
+extern struct value *value_string (const gdb_byte *ptr, ssize_t count,
                                   struct type *char_type);
 
+/* Specialisation of value_string above.  In this case PTR points to
+   single byte characters.  CHAR_TYPE must have a length of 1.  */
+inline struct value *value_string (const char *ptr, ssize_t count,
+                                  struct type *char_type)
+{
+  gdb_assert (char_type->length () == 1);
+  return value_string ((const gdb_byte *) ptr, count, char_type);
+}
+
 extern struct value *value_array (int lowbound, int highbound,
                                  struct value **elemvec);
 
@@ -1056,10 +1257,15 @@ extern struct value *value_ref (struct value *arg1, enum type_code refcode);
 extern struct value *value_assign (struct value *toval,
                                   struct value *fromval);
 
+/* The unary + operation.  */
 extern struct value *value_pos (struct value *arg1);
 
+/* The unary - operation.  */
 extern struct value *value_neg (struct value *arg1);
 
+/* The unary ~ operation -- but note that it also implements the GCC
+   extension, where ~ of a complex number is the complex
+   conjugate.  */
 extern struct value *value_complement (struct value *arg1);
 
 extern struct value *value_struct_elt (struct value **argp,
@@ -1092,11 +1298,6 @@ extern int find_overload_match (gdb::array_view<value *> args,
 
 extern struct value *value_field (struct value *arg1, int fieldno);
 
-extern struct value *value_primitive_field (struct value *arg1, LONGEST offset,
-                                           int fieldno,
-                                           struct type *arg_type);
-
-
 extern struct type *value_rtti_indirect_type (struct value *, int *, LONGEST *,
                                              int *);
 
@@ -1112,8 +1313,6 @@ extern struct value *value_reinterpret_cast (struct type *type,
 
 extern struct value *value_dynamic_cast (struct type *type, struct value *arg);
 
-extern struct value *value_zero (struct type *type, enum lval_type lv);
-
 extern struct value *value_one (struct type *type);
 
 extern struct value *value_repeat (struct value *arg1, int count);
@@ -1127,8 +1326,6 @@ extern struct value *value_bitstring_subscript (struct type *type,
 extern struct value *register_value_being_returned (struct type *valtype,
                                                    struct regcache *retbuf);
 
-extern int value_in (struct value *element, struct value *set);
-
 extern int value_bit_index (struct type *type, const gdb_byte *addr,
                            int index);
 
@@ -1140,17 +1337,6 @@ extern int using_struct_return (struct gdbarch *gdbarch,
                                struct value *function,
                                struct type *value_type);
 
-/* Evaluate the expression EXP.  If set, EXPECT_TYPE is passed to the
-   outermost operation's evaluation.  This is ignored by most
-   operations, but may be used, e.g., to determine the type of an
-   otherwise untyped symbol.  The caller should not assume that the
-   returned value has this type.  */
-
-extern struct value *evaluate_expression (struct expression *exp,
-                                         struct type *expect_type = nullptr);
-
-extern struct value *evaluate_type (struct expression *exp);
-
 extern value *evaluate_var_value (enum noside noside, const block *blk,
                                  symbol *var);
 
@@ -1165,7 +1351,7 @@ extern void fetch_subexp_value (struct expression *exp,
                                std::vector<value_ref_ptr> *val_chain,
                                bool preserve_errors);
 
-extern struct value *parse_and_eval (const char *exp);
+extern struct value *parse_and_eval (const char *exp, parser_flags flags = 0);
 
 extern struct value *parse_to_comma_and_eval (const char **expp);
 
@@ -1303,8 +1489,6 @@ extern int destructor_name_p (const char *name, struct type *type);
 
 extern value_ref_ptr release_value (struct value *val);
 
-extern int record_latest_value (struct value *val);
-
 extern void modify_field (struct type *type, gdb_byte *addr,
                          LONGEST fieldval, LONGEST bitpos, LONGEST bitsize);
 
@@ -1360,16 +1544,8 @@ extern void preserve_values (struct objfile *);
 
 /* From values.c */
 
-extern struct value *value_copy (const value *);
-
-extern struct value *value_non_lval (struct value *);
-
-extern void value_force_lval (struct value *, CORE_ADDR);
-
 extern struct value *make_cv_value (int, int, struct value *);
 
-extern void preserve_one_value (struct value *, struct objfile *, htab_t);
-
 /* From valops.c */
 
 extern struct value *varying_to_slice (struct value *);
@@ -1428,17 +1604,6 @@ struct value *call_internal_function (struct gdbarch *gdbarch,
 
 const char *value_internal_function_name (struct value *);
 
-/* Build a value wrapping and representing WORKER.  The value takes ownership
-   of the xmethod_worker object.  */
-
-extern struct value *value_from_xmethod (xmethod_worker_up &&worker);
-
-extern struct type *result_type_of_xmethod (struct value *method,
-                                           gdb::array_view<value *> argv);
-
-extern struct value *call_xmethod (struct value *method,
-                                  gdb::array_view<value *> argv);
-
 /* Destroy the values currently allocated.  This is called when GDB is
    exiting (e.g., on quit_force).  */
 extern void finalize_values ();
@@ -1447,6 +1612,11 @@ extern void finalize_values ();
    of floating-point, fixed-point, or integer type.  */
 extern gdb_mpq value_to_gdb_mpq (struct value *value);
 
+/* Return true if LEN (in bytes) exceeds the max-value-size setting,
+   otherwise, return false.  If the user has disabled (set to unlimited)
+   the max-value-size setting then this function will always return false.  */
+extern bool exceeds_max_value_size (ULONGEST length);
+
 /* While an instance of this class is live, and array values that are
    created, that are larger than max_value_size, will be restricted in size
    to a particular number of elements.  */