X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fvalue.h;h=65fd203b9605c2606d0db487c1bea3c7c25f4355;hb=e81e7f5e38bf0da52d9e88a94e4df9aeecd80357;hp=b9013fdf1e87079174053858684b3729788b4ccf;hpb=a543d2a92e50ea5689748f74eb23efc02e82b008;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/value.h b/gdb/value.h index b9013fdf1e..65fd203b96 100644 --- a/gdb/value.h +++ b/gdb/value.h @@ -1,6 +1,6 @@ /* Definitions for values of C expressions, for GDB. - Copyright (C) 1986-2013 Free Software Foundation, Inc. + Copyright (C) 1986-2014 Free Software Foundation, Inc. This file is part of GDB. @@ -31,6 +31,7 @@ struct type; struct ui_file; struct language_defn; struct value_print_options; +struct xmethod_worker; /* The structure which defines the type of a value. It should never be possible for a program lval value to survive over a call to the @@ -273,6 +274,11 @@ extern void set_value_lazy (struct value *value, int val); extern int value_stack (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 @@ -319,10 +325,16 @@ extern int value_fetch_lazy (struct value *val); extern int value_contents_equal (struct value *val1, struct value *val2); /* If nonzero, this is the value of a variable which does not actually - exist in the program. */ + 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); extern void set_value_optimized_out (struct value *value, int val); +/* Like value_optimized_out, but don't fetch the value even if it is + lazy. Mainly useful for constructing other values using VALUE as + template. */ +extern int value_optimized_out_const (const struct value *value); + /* Like value_optimized_out, but return false if any bit in the object is valid. */ extern int value_entirely_optimized_out (const struct value *value); @@ -425,16 +437,34 @@ extern int value_bits_synthetic_pointer (const struct value *value, extern int value_bytes_available (const struct value *value, int offset, int 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, + int offset, int 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, int offset, int 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, + int offset, int length); + /* Compare LENGTH bytes of VAL1's contents starting at OFFSET1 with LENGTH bytes of VAL2's contents starting at OFFSET2. @@ -463,7 +493,12 @@ extern void mark_value_bytes_unavailable (struct value *value, value_available_contents_eq(val, 4, val, 12, 2) => 1 value_available_contents_eq(val, 4, val, 12, 4) => 0 value_available_contents_eq(val, 3, val, 4, 4) => 0 -*/ + + We only know whether a value chunk is available 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 int value_available_contents_eq (const struct value *val1, int offset1, const struct value *val2, int offset2, @@ -545,9 +580,10 @@ extern struct value *value_from_contents_and_address (struct type *, CORE_ADDR); extern struct value *value_from_contents (struct type *, const gdb_byte *); -extern struct value *default_value_from_register (struct type *type, +extern struct value *default_value_from_register (struct gdbarch *gdbarch, + struct type *type, int regnum, - struct frame_info *frame); + struct frame_id frame_id); extern void read_frame_register_value (struct value *value, struct frame_info *frame); @@ -555,7 +591,7 @@ extern void read_frame_register_value (struct value *value, extern struct value *value_from_register (struct type *type, int regnum, struct frame_info *frame); -extern CORE_ADDR address_from_register (struct type *type, int regnum, +extern CORE_ADDR address_from_register (int regnum, struct frame_info *frame); extern struct value *value_of_variable (struct symbol *var, @@ -578,7 +614,6 @@ extern struct value *default_read_var_value (struct symbol *var, extern struct value *allocate_value (struct type *type); extern struct value *allocate_value_lazy (struct type *type); -extern void allocate_value_contents (struct value *value); extern void value_contents_copy (struct value *dst, int dst_offset, struct value *src, int src_offset, int length); @@ -637,8 +672,13 @@ extern struct value *value_struct_elt (struct value **argp, const char *name, int *static_memfuncp, const char *err); +extern struct value *value_struct_elt_bitpos (struct value **argp, + int bitpos, + struct type *field_type, + const char *err); + extern struct value *value_aggregate_elt (struct type *curtype, - char *name, + const char *name, struct type *expect_type, int want_address, enum noside noside); @@ -696,6 +736,10 @@ extern int value_in (struct value *element, struct value *set); extern int value_bit_index (struct type *type, const gdb_byte *addr, int index); +extern enum return_value_convention +struct_return_convention (struct gdbarch *gdbarch, struct value *function, + struct type *value_type); + extern int using_struct_return (struct gdbarch *gdbarch, struct value *function, struct type *value_type); @@ -713,22 +757,23 @@ extern struct value *evaluate_subexpression_type (struct expression *exp, extern void fetch_subexp_value (struct expression *exp, int *pc, struct value **valp, struct value **resultp, - struct value **val_chain); + struct value **val_chain, + int preserve_errors); extern char *extract_field_op (struct expression *exp, int *subexp); extern struct value *evaluate_subexp_with_coercion (struct expression *, int *, enum noside); -extern struct value *parse_and_eval (char *exp); +extern struct value *parse_and_eval (const char *exp); -extern struct value *parse_to_comma_and_eval (char **expp); +extern struct value *parse_to_comma_and_eval (const char **expp); extern struct type *parse_and_eval_type (char *p, int length); -extern CORE_ADDR parse_and_eval_address (char *exp); +extern CORE_ADDR parse_and_eval_address (const char *exp); -extern LONGEST parse_and_eval_long (char *exp); +extern LONGEST parse_and_eval_long (const char *exp); extern void unop_promote (const struct language_defn *language, struct gdbarch *gdbarch, @@ -797,10 +842,9 @@ struct internalvar_funcs void (*destroy) (void *data); }; -extern struct internalvar * -create_internalvar_type_lazy (const char *name, - const struct internalvar_funcs *funcs, - void *data); +extern struct internalvar *create_internalvar_type_lazy (const char *name, + const struct internalvar_funcs *funcs, + void *data); /* Compile an internal variable to an agent expression. VAR is the variable to compile; EXPR and VALUE are the agent expression we are @@ -890,7 +934,7 @@ extern void value_print (struct value *val, struct ui_file *stream, extern void value_print_array_elements (struct value *val, struct ui_file *stream, int format, - enum val_prettyprint pretty); + enum val_prettyformat pretty); extern struct value *value_release_to_mark (struct value *mark); @@ -968,4 +1012,9 @@ struct value *call_internal_function (struct gdbarch *gdbarch, char *value_internal_function_name (struct value *); +extern struct value *value_of_xmethod (struct xmethod_worker *); + +struct value *call_xmethod (struct value *function, + int argc, struct value **argv); + #endif /* !defined (VALUE_H) */