xref: /386bsd/usr/src/usr.bin/gdb/value.h (revision a2142627)
1 /* Definitions for values of C expressions, for GDB.
2    Copyright (C) 1986, 1987, 1989 Free Software Foundation, Inc.
3 
4 This file is part of GDB.
5 
6 GDB is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 1, or (at your option)
9 any later version.
10 
11 GDB is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15 
16 You should have received a copy of the GNU General Public License
17 along with GDB; see the file COPYING.  If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
19 
20 /*
21  * The structure which defines the type of a value.  It should never
22  * be possible for a program lval value to survive over a call to the inferior
23  * (ie to be put into the history list or an internal variable).
24  */
25 enum lval_type {
26   /* Not an lval.  */
27   not_lval,
28   /* In memory.  Could be a saved register.  */
29   lval_memory,
30   /* In a register.  */
31   lval_register,
32   /* In a gdb internal variable.  */
33   lval_internalvar,
34   /* Part of a gdb internal variable (structure field).  */
35   lval_internalvar_component,
36   /* In a register series in a frame not the current one, which may have been
37      partially saved or saved in different places (otherwise would be
38      lval_register or lval_memory).  */
39   lval_reg_frame_relative,
40 };
41 
42 struct value
43   {
44     /* Type of value; either not an lval, or one of the various
45        different possible kinds of lval.  */
46     enum lval_type lval;
47     /* Location of value (if lval).  */
48     union
49       {
50 	/* Address in inferior or byte of registers structure.  */
51 	CORE_ADDR address;
52 	/* Pointer to interrnal variable.  */
53 	struct internalvar *internalvar;
54 	/* Number of register.  Only used with
55 	   lval_reg_frame_relative.  */
56 	int regnum;
57       } location;
58     /* Describes offset of a value within lval a structure in bytes.  */
59     int offset;
60     /* Only used for bitfields; number of bits contained in them.  */
61     int bitsize;
62     /* Only used for bitfields; position of start of field.  */
63     int bitpos;
64     /* Frame value is relative to.  In practice, this address is only
65        used if the value is stored in several registers in other than
66        the current frame, and these registers have not all been saved
67        at the same place in memory.  This will be described in the
68        lval enum above as "lval_reg_frame_relative".  */
69     CORE_ADDR frame_addr;
70     /* Type of the value.  */
71     struct type *type;
72     /* Values are stored in a chain, so that they can be deleted
73        easily over calls to the inferior.  Values assigned to internal
74        variables or put into the value history are taken off this
75        list.  */
76     struct value *next;
77     /* If an lval is forced to repeat, a new value is created with
78        these fields set.  The new value is not an lval.  */
79     short repeated;
80     short repetitions;
81     /* Register number if the value is from a register.  Is not kept
82        if you take a field of a structure that is stored in a
83        register.  Shouldn't it be?  */
84     short regno;
85     /* Actual contents of the value.  For use of this value; setting
86        it uses the stuff above.  */
87     long contents[1];
88   };
89 
90 typedef struct value *value;
91 
92 #define VALUE_TYPE(val) (val)->type
93 #define VALUE_CONTENTS(val) ((char *) (val)->contents)
94 #define VALUE_LVAL(val) (val)->lval
95 #define VALUE_ADDRESS(val) (val)->location.address
96 #define VALUE_INTERNALVAR(val) (val)->location.internalvar
97 #define VALUE_FRAME_REGNUM(val) ((val)->location.regnum)
98 #define VALUE_FRAME(val) ((val)->frame_addr)
99 #define VALUE_OFFSET(val) (val)->offset
100 #define VALUE_BITSIZE(val) (val)->bitsize
101 #define VALUE_BITPOS(val) (val)->bitpos
102 #define VALUE_NEXT(val) (val)->next
103 #define VALUE_REPEATED(val) (val)->repeated
104 #define VALUE_REPETITIONS(val) (val)->repetitions
105 #define VALUE_REGNO(val) (val)->regno
106 
107 /* If ARG is an array, convert it to a pointer.
108    If ARG is an enum, convert it to an integer.
109 
110    References are dereferenced.  */
111 
112 #define COERCE_ARRAY(arg)    \
113 { if (TYPE_CODE ( VALUE_TYPE (arg)) == TYPE_CODE_REF)			\
114     arg = value_ind (arg);						\
115   if (VALUE_REPEATED (arg)						\
116       || TYPE_CODE (VALUE_TYPE (arg)) == TYPE_CODE_ARRAY)		\
117     arg = value_coerce_array (arg);					\
118   if (TYPE_CODE (VALUE_TYPE (arg)) == TYPE_CODE_ENUM)			\
119     arg = value_cast (builtin_type_unsigned_int, arg);			\
120 }
121 
122 /* If ARG is an enum, convert it to an integer.  */
123 
124 #define COERCE_ENUM(arg)    \
125 { if (TYPE_CODE ( VALUE_TYPE (arg)) == TYPE_CODE_REF)			\
126     arg = value_ind (arg);						\
127   if (TYPE_CODE (VALUE_TYPE (arg)) == TYPE_CODE_ENUM)			\
128     arg = value_cast (builtin_type_unsigned_int, arg);			\
129 }
130 
131 /* Internal variables (variables for convenience of use of debugger)
132    are recorded as a chain of these structures.  */
133 
134 struct internalvar
135 {
136   struct internalvar *next;
137   char *name;
138   value value;
139 };
140 
141 LONGEST value_as_long ();
142 double value_as_double ();
143 LONGEST unpack_long ();
144 double unpack_double ();
145 long unpack_field_as_long ();
146 value value_from_long ();
147 value value_from_double ();
148 value value_at ();
149 value value_from_register ();
150 value value_of_variable ();
151 value value_of_register ();
152 value read_var_value ();
153 value locate_var_value ();
154 value allocate_value ();
155 value allocate_repeat_value ();
156 value value_string ();
157 
158 value value_binop ();
159 value value_add ();
160 value value_sub ();
161 value value_coerce_array ();
162 value value_ind ();
163 value value_addr ();
164 value value_assign ();
165 value value_neg ();
166 value value_lognot ();
167 value value_struct_elt (), value_struct_elt_for_address ();
168 value value_field ();
169 value value_cast ();
170 value value_zero ();
171 value value_repeat ();
172 value value_subscript ();
173 
174 value call_function ();
175 value value_being_returned ();
176 int using_struct_return ();
177 
178 value evaluate_expression ();
179 value evaluate_type ();
180 value parse_and_eval ();
181 value parse_to_comma_and_eval ();
182 
183 value access_value_history ();
184 value value_of_internalvar ();
185 struct internalvar *lookup_internalvar ();
186 
187 int value_equal ();
188 int value_less ();
189 int value_zerop ();
190 
191 /* C++ */
192 value value_of_this ();
193 value value_static_field ();
194 value value_x_binop ();
195 value value_x_unop ();
196 int binop_user_defined_p ();
197 int unop_user_defined_p ();
198 
199 void read_register_bytes ();
200 void modify_field ();
201 void type_print ();
202 void type_print_1 ();
203 
204 /* Possibilities for prettyprint parameters to routines which print
205    things.  */
206 enum val_prettyprint {
207   Val_no_prettyprint = 0,
208   Val_prettyprint,
209   /* Use the default setting which the user has specified.  */
210   Val_pretty_default
211   };
212 
213