1 /* Parse expressions for GDB.
3 Copyright (C) 1986-2020 Free Software Foundation, Inc.
5 Modified from expread.y by the Department of Computer Science at the
6 State University of New York at Buffalo, 1991.
8 This file is part of GDB.
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3 of the License, or
13 (at your option) any later version.
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program. If not, see <http://www.gnu.org/licenses/>. */
23 /* Parse an expression from text in a string,
24 and return the result as a struct expression pointer.
25 That structure contains arithmetic operations in reverse polish,
26 with constants represented by operations that are followed by special data.
27 See expression.h for the details of the format.
28 What is important here is that it can be built up sequentially
29 during the process of parsing; the lower levels of the tree always
30 come first in the result. */
34 #include "arch-utils.h"
38 #include "expression.h"
43 #include "parser-defs.h"
45 #include "symfile.h" /* for overlay functions */
47 #include "target-float.h"
51 #include "user-regs.h"
53 #include "gdbsupport/gdb_optional.h"
55 /* Standard set of definitions for printing, dumping, prefixifying,
56 * and evaluating expressions. */
58 const struct exp_descriptor exp_descriptor_standard
=
60 print_subexp_standard
,
61 operator_length_standard
,
62 operator_check_standard
,
64 dump_subexp_body_standard
,
65 evaluate_subexp_standard
68 static unsigned int expressiondebug
= 0;
70 show_expressiondebug (struct ui_file
*file
, int from_tty
,
71 struct cmd_list_element
*c
, const char *value
)
73 fprintf_filtered (file
, _("Expression debugging is %s.\n"), value
);
77 /* True if an expression parser should set yydebug. */
81 show_parserdebug (struct ui_file
*file
, int from_tty
,
82 struct cmd_list_element
*c
, const char *value
)
84 fprintf_filtered (file
, _("Parser debugging is %s.\n"), value
);
88 static int prefixify_subexp (struct expression
*, struct expression
*, int,
91 static expression_up
parse_exp_in_context (const char **, CORE_ADDR
,
92 const struct block
*, int,
94 innermost_block_tracker
*,
95 expr_completion_state
*);
97 static void increase_expout_size (struct expr_builder
*ps
, size_t lenelt
);
100 /* Documented at it's declaration. */
103 innermost_block_tracker::update (const struct block
*b
,
104 innermost_block_tracker_types t
)
106 if ((m_types
& t
) != 0
107 && (m_innermost_block
== NULL
108 || contained_in (b
, m_innermost_block
)))
109 m_innermost_block
= b
;
114 /* See definition in parser-defs.h. */
116 expr_builder::expr_builder (const struct language_defn
*lang
,
117 struct gdbarch
*gdbarch
)
119 expout (XNEWVAR (expression
,
121 + EXP_ELEM_TO_BYTES (expout_size
)))),
124 expout
->language_defn
= lang
;
125 expout
->gdbarch
= gdbarch
;
129 expr_builder::release ()
131 /* Record the actual number of expression elements, and then
132 reallocate the expression memory so that we free up any
135 expout
->nelts
= expout_ptr
;
136 expout
.reset (XRESIZEVAR (expression
, expout
.release (),
138 + EXP_ELEM_TO_BYTES (expout_ptr
))));
140 return std::move (expout
);
143 /* This page contains the functions for adding data to the struct expression
144 being constructed. */
146 /* Add one element to the end of the expression. */
148 /* To avoid a bug in the Sun 4 compiler, we pass things that can fit into
149 a register through here. */
152 write_exp_elt (struct expr_builder
*ps
, const union exp_element
*expelt
)
154 if (ps
->expout_ptr
>= ps
->expout_size
)
156 ps
->expout_size
*= 2;
157 ps
->expout
.reset (XRESIZEVAR (expression
, ps
->expout
.release (),
159 + EXP_ELEM_TO_BYTES (ps
->expout_size
))));
161 ps
->expout
->elts
[ps
->expout_ptr
++] = *expelt
;
165 write_exp_elt_opcode (struct expr_builder
*ps
, enum exp_opcode expelt
)
167 union exp_element tmp
;
169 memset (&tmp
, 0, sizeof (union exp_element
));
171 write_exp_elt (ps
, &tmp
);
175 write_exp_elt_sym (struct expr_builder
*ps
, struct symbol
*expelt
)
177 union exp_element tmp
;
179 memset (&tmp
, 0, sizeof (union exp_element
));
181 write_exp_elt (ps
, &tmp
);
185 write_exp_elt_msym (struct expr_builder
*ps
, minimal_symbol
*expelt
)
187 union exp_element tmp
;
189 memset (&tmp
, 0, sizeof (union exp_element
));
190 tmp
.msymbol
= expelt
;
191 write_exp_elt (ps
, &tmp
);
195 write_exp_elt_block (struct expr_builder
*ps
, const struct block
*b
)
197 union exp_element tmp
;
199 memset (&tmp
, 0, sizeof (union exp_element
));
201 write_exp_elt (ps
, &tmp
);
205 write_exp_elt_objfile (struct expr_builder
*ps
, struct objfile
*objfile
)
207 union exp_element tmp
;
209 memset (&tmp
, 0, sizeof (union exp_element
));
210 tmp
.objfile
= objfile
;
211 write_exp_elt (ps
, &tmp
);
215 write_exp_elt_longcst (struct expr_builder
*ps
, LONGEST expelt
)
217 union exp_element tmp
;
219 memset (&tmp
, 0, sizeof (union exp_element
));
220 tmp
.longconst
= expelt
;
221 write_exp_elt (ps
, &tmp
);
225 write_exp_elt_floatcst (struct expr_builder
*ps
, const gdb_byte expelt
[16])
227 union exp_element tmp
;
230 for (index
= 0; index
< 16; index
++)
231 tmp
.floatconst
[index
] = expelt
[index
];
233 write_exp_elt (ps
, &tmp
);
237 write_exp_elt_type (struct expr_builder
*ps
, struct type
*expelt
)
239 union exp_element tmp
;
241 memset (&tmp
, 0, sizeof (union exp_element
));
243 write_exp_elt (ps
, &tmp
);
247 write_exp_elt_intern (struct expr_builder
*ps
, struct internalvar
*expelt
)
249 union exp_element tmp
;
251 memset (&tmp
, 0, sizeof (union exp_element
));
252 tmp
.internalvar
= expelt
;
253 write_exp_elt (ps
, &tmp
);
256 /* Add a string constant to the end of the expression.
258 String constants are stored by first writing an expression element
259 that contains the length of the string, then stuffing the string
260 constant itself into however many expression elements are needed
261 to hold it, and then writing another expression element that contains
262 the length of the string. I.e. an expression element at each end of
263 the string records the string length, so you can skip over the
264 expression elements containing the actual string bytes from either
265 end of the string. Note that this also allows gdb to handle
266 strings with embedded null bytes, as is required for some languages.
268 Don't be fooled by the fact that the string is null byte terminated,
269 this is strictly for the convenience of debugging gdb itself.
270 Gdb does not depend up the string being null terminated, since the
271 actual length is recorded in expression elements at each end of the
272 string. The null byte is taken into consideration when computing how
273 many expression elements are required to hold the string constant, of
278 write_exp_string (struct expr_builder
*ps
, struct stoken str
)
280 int len
= str
.length
;
284 /* Compute the number of expression elements required to hold the string
285 (including a null byte terminator), along with one expression element
286 at each end to record the actual string length (not including the
287 null byte terminator). */
289 lenelt
= 2 + BYTES_TO_EXP_ELEM (len
+ 1);
291 increase_expout_size (ps
, lenelt
);
293 /* Write the leading length expression element (which advances the current
294 expression element index), then write the string constant followed by a
295 terminating null byte, and then write the trailing length expression
298 write_exp_elt_longcst (ps
, (LONGEST
) len
);
299 strdata
= (char *) &ps
->expout
->elts
[ps
->expout_ptr
];
300 memcpy (strdata
, str
.ptr
, len
);
301 *(strdata
+ len
) = '\0';
302 ps
->expout_ptr
+= lenelt
- 2;
303 write_exp_elt_longcst (ps
, (LONGEST
) len
);
306 /* Add a vector of string constants to the end of the expression.
308 This adds an OP_STRING operation, but encodes the contents
309 differently from write_exp_string. The language is expected to
310 handle evaluation of this expression itself.
312 After the usual OP_STRING header, TYPE is written into the
313 expression as a long constant. The interpretation of this field is
314 up to the language evaluator.
316 Next, each string in VEC is written. The length is written as a
317 long constant, followed by the contents of the string. */
320 write_exp_string_vector (struct expr_builder
*ps
, int type
,
321 struct stoken_vector
*vec
)
326 /* Compute the size. We compute the size in number of slots to
327 avoid issues with string padding. */
329 for (i
= 0; i
< vec
->len
; ++i
)
331 /* One slot for the length of this element, plus the number of
332 slots needed for this string. */
333 n_slots
+= 1 + BYTES_TO_EXP_ELEM (vec
->tokens
[i
].length
);
336 /* One more slot for the type of the string. */
339 /* Now compute a phony string length. */
340 len
= EXP_ELEM_TO_BYTES (n_slots
) - 1;
343 increase_expout_size (ps
, n_slots
);
345 write_exp_elt_opcode (ps
, OP_STRING
);
346 write_exp_elt_longcst (ps
, len
);
347 write_exp_elt_longcst (ps
, type
);
349 for (i
= 0; i
< vec
->len
; ++i
)
351 write_exp_elt_longcst (ps
, vec
->tokens
[i
].length
);
352 memcpy (&ps
->expout
->elts
[ps
->expout_ptr
], vec
->tokens
[i
].ptr
,
353 vec
->tokens
[i
].length
);
354 ps
->expout_ptr
+= BYTES_TO_EXP_ELEM (vec
->tokens
[i
].length
);
357 write_exp_elt_longcst (ps
, len
);
358 write_exp_elt_opcode (ps
, OP_STRING
);
361 /* Add a bitstring constant to the end of the expression.
363 Bitstring constants are stored by first writing an expression element
364 that contains the length of the bitstring (in bits), then stuffing the
365 bitstring constant itself into however many expression elements are
366 needed to hold it, and then writing another expression element that
367 contains the length of the bitstring. I.e. an expression element at
368 each end of the bitstring records the bitstring length, so you can skip
369 over the expression elements containing the actual bitstring bytes from
370 either end of the bitstring. */
373 write_exp_bitstring (struct expr_builder
*ps
, struct stoken str
)
375 int bits
= str
.length
; /* length in bits */
376 int len
= (bits
+ HOST_CHAR_BIT
- 1) / HOST_CHAR_BIT
;
380 /* Compute the number of expression elements required to hold the bitstring,
381 along with one expression element at each end to record the actual
382 bitstring length in bits. */
384 lenelt
= 2 + BYTES_TO_EXP_ELEM (len
);
386 increase_expout_size (ps
, lenelt
);
388 /* Write the leading length expression element (which advances the current
389 expression element index), then write the bitstring constant, and then
390 write the trailing length expression element. */
392 write_exp_elt_longcst (ps
, (LONGEST
) bits
);
393 strdata
= (char *) &ps
->expout
->elts
[ps
->expout_ptr
];
394 memcpy (strdata
, str
.ptr
, len
);
395 ps
->expout_ptr
+= lenelt
- 2;
396 write_exp_elt_longcst (ps
, (LONGEST
) bits
);
399 /* Return the type of MSYMBOL, a minimal symbol of OBJFILE. If
400 ADDRESS_P is not NULL, set it to the MSYMBOL's resolved
404 find_minsym_type_and_address (minimal_symbol
*msymbol
,
405 struct objfile
*objfile
,
406 CORE_ADDR
*address_p
)
408 bound_minimal_symbol bound_msym
= {msymbol
, objfile
};
409 struct obj_section
*section
= MSYMBOL_OBJ_SECTION (objfile
, msymbol
);
410 enum minimal_symbol_type type
= MSYMBOL_TYPE (msymbol
);
412 bool is_tls
= (section
!= NULL
413 && section
->the_bfd_section
->flags
& SEC_THREAD_LOCAL
);
415 /* The minimal symbol might point to a function descriptor;
416 resolve it to the actual code address instead. */
420 /* Addresses of TLS symbols are really offsets into a
421 per-objfile/per-thread storage block. */
422 addr
= MSYMBOL_VALUE_RAW_ADDRESS (bound_msym
.minsym
);
424 else if (msymbol_is_function (objfile
, msymbol
, &addr
))
426 if (addr
!= BMSYMBOL_VALUE_ADDRESS (bound_msym
))
428 /* This means we resolved a function descriptor, and we now
429 have an address for a code/text symbol instead of a data
431 if (MSYMBOL_TYPE (msymbol
) == mst_data_gnu_ifunc
)
432 type
= mst_text_gnu_ifunc
;
439 addr
= BMSYMBOL_VALUE_ADDRESS (bound_msym
);
441 if (overlay_debugging
)
442 addr
= symbol_overlayed_address (addr
, section
);
446 /* Skip translation if caller does not need the address. */
447 if (address_p
!= NULL
)
448 *address_p
= target_translate_tls_address (objfile
, addr
);
449 return objfile_type (objfile
)->nodebug_tls_symbol
;
452 if (address_p
!= NULL
)
459 case mst_solib_trampoline
:
460 return objfile_type (objfile
)->nodebug_text_symbol
;
462 case mst_text_gnu_ifunc
:
463 return objfile_type (objfile
)->nodebug_text_gnu_ifunc_symbol
;
469 return objfile_type (objfile
)->nodebug_data_symbol
;
471 case mst_slot_got_plt
:
472 return objfile_type (objfile
)->nodebug_got_plt_symbol
;
475 return objfile_type (objfile
)->nodebug_unknown_symbol
;
479 /* Add the appropriate elements for a minimal symbol to the end of
483 write_exp_msymbol (struct expr_builder
*ps
,
484 struct bound_minimal_symbol bound_msym
)
486 write_exp_elt_opcode (ps
, OP_VAR_MSYM_VALUE
);
487 write_exp_elt_objfile (ps
, bound_msym
.objfile
);
488 write_exp_elt_msym (ps
, bound_msym
.minsym
);
489 write_exp_elt_opcode (ps
, OP_VAR_MSYM_VALUE
);
492 /* See parser-defs.h. */
495 parser_state::mark_struct_expression ()
497 gdb_assert (parse_completion
498 && (m_completion_state
.expout_tag_completion_type
499 == TYPE_CODE_UNDEF
));
500 m_completion_state
.expout_last_struct
= expout_ptr
;
503 /* Indicate that the current parser invocation is completing a tag.
504 TAG is the type code of the tag, and PTR and LENGTH represent the
505 start of the tag name. */
508 parser_state::mark_completion_tag (enum type_code tag
, const char *ptr
,
511 gdb_assert (parse_completion
512 && (m_completion_state
.expout_tag_completion_type
514 && m_completion_state
.expout_completion_name
== NULL
515 && m_completion_state
.expout_last_struct
== -1);
516 gdb_assert (tag
== TYPE_CODE_UNION
517 || tag
== TYPE_CODE_STRUCT
518 || tag
== TYPE_CODE_ENUM
);
519 m_completion_state
.expout_tag_completion_type
= tag
;
520 m_completion_state
.expout_completion_name
.reset (xstrndup (ptr
, length
));
524 /* Recognize tokens that start with '$'. These include:
526 $regname A native register name or a "standard
529 $variable A convenience variable with a name chosen
532 $digits Value history with index <digits>, starting
533 from the first value which has index 1.
535 $$digits Value history with index <digits> relative
536 to the last value. I.e. $$0 is the last
537 value, $$1 is the one previous to that, $$2
538 is the one previous to $$1, etc.
540 $ | $0 | $$0 The last value in the value history.
542 $$ An abbreviation for the second to the last
543 value in the value history, I.e. $$1 */
546 write_dollar_variable (struct parser_state
*ps
, struct stoken str
)
548 struct block_symbol sym
;
549 struct bound_minimal_symbol msym
;
550 struct internalvar
*isym
= NULL
;
553 /* Handle the tokens $digits; also $ (short for $0) and $$ (short for $$1)
554 and $$digits (equivalent to $<-digits> if you could type that). */
558 /* Double dollar means negate the number and add -1 as well.
559 Thus $$ alone means -1. */
560 if (str
.length
>= 2 && str
.ptr
[1] == '$')
567 /* Just dollars (one or two). */
571 /* Is the rest of the token digits? */
572 for (; i
< str
.length
; i
++)
573 if (!(str
.ptr
[i
] >= '0' && str
.ptr
[i
] <= '9'))
577 i
= atoi (str
.ptr
+ 1 + negate
);
583 /* Handle tokens that refer to machine registers:
584 $ followed by a register name. */
585 i
= user_reg_map_name_to_regnum (ps
->gdbarch (),
586 str
.ptr
+ 1, str
.length
- 1);
588 goto handle_register
;
590 /* Any names starting with $ are probably debugger internal variables. */
592 copy
= copy_name (str
);
593 isym
= lookup_only_internalvar (copy
.c_str () + 1);
596 write_exp_elt_opcode (ps
, OP_INTERNALVAR
);
597 write_exp_elt_intern (ps
, isym
);
598 write_exp_elt_opcode (ps
, OP_INTERNALVAR
);
602 /* On some systems, such as HP-UX and hppa-linux, certain system routines
603 have names beginning with $ or $$. Check for those, first. */
605 sym
= lookup_symbol (copy
.c_str (), NULL
, VAR_DOMAIN
, NULL
);
608 write_exp_elt_opcode (ps
, OP_VAR_VALUE
);
609 write_exp_elt_block (ps
, sym
.block
);
610 write_exp_elt_sym (ps
, sym
.symbol
);
611 write_exp_elt_opcode (ps
, OP_VAR_VALUE
);
614 msym
= lookup_bound_minimal_symbol (copy
.c_str ());
617 write_exp_msymbol (ps
, msym
);
621 /* Any other names are assumed to be debugger internal variables. */
623 write_exp_elt_opcode (ps
, OP_INTERNALVAR
);
624 write_exp_elt_intern (ps
, create_internalvar (copy
.c_str () + 1));
625 write_exp_elt_opcode (ps
, OP_INTERNALVAR
);
628 write_exp_elt_opcode (ps
, OP_LAST
);
629 write_exp_elt_longcst (ps
, (LONGEST
) i
);
630 write_exp_elt_opcode (ps
, OP_LAST
);
633 write_exp_elt_opcode (ps
, OP_REGISTER
);
636 write_exp_string (ps
, str
);
637 write_exp_elt_opcode (ps
, OP_REGISTER
);
638 ps
->block_tracker
->update (ps
->expression_context_block
,
639 INNERMOST_BLOCK_FOR_REGISTERS
);
645 find_template_name_end (const char *p
)
648 int just_seen_right
= 0;
649 int just_seen_colon
= 0;
650 int just_seen_space
= 0;
652 if (!p
|| (*p
!= '<'))
663 /* In future, may want to allow these?? */
666 depth
++; /* start nested template */
667 if (just_seen_colon
|| just_seen_right
|| just_seen_space
)
668 return 0; /* but not after : or :: or > or space */
671 if (just_seen_colon
|| just_seen_right
)
672 return 0; /* end a (nested?) template */
673 just_seen_right
= 1; /* but not after : or :: */
674 if (--depth
== 0) /* also disallow >>, insist on > > */
675 return ++p
; /* if outermost ended, return */
678 if (just_seen_space
|| (just_seen_colon
> 1))
679 return 0; /* nested class spec coming up */
680 just_seen_colon
++; /* we allow :: but not :::: */
685 if (!((*p
>= 'a' && *p
<= 'z') || /* allow token chars */
686 (*p
>= 'A' && *p
<= 'Z') ||
687 (*p
>= '0' && *p
<= '9') ||
688 (*p
== '_') || (*p
== ',') || /* commas for template args */
689 (*p
== '&') || (*p
== '*') || /* pointer and ref types */
690 (*p
== '(') || (*p
== ')') || /* function types */
691 (*p
== '[') || (*p
== ']'))) /* array types */
705 /* Return a null-terminated temporary copy of the name of a string token.
707 Tokens that refer to names do so with explicit pointer and length,
708 so they can share the storage that lexptr is parsing.
709 When it is necessary to pass a name to a function that expects
710 a null-terminated string, the substring is copied out
711 into a separate block of storage. */
714 copy_name (struct stoken token
)
716 return std::string (token
.ptr
, token
.length
);
720 /* See comments on parser-defs.h. */
723 prefixify_expression (struct expression
*expr
, int last_struct
)
725 gdb_assert (expr
->nelts
> 0);
726 int len
= sizeof (struct expression
) + EXP_ELEM_TO_BYTES (expr
->nelts
);
727 struct expression
*temp
;
728 int inpos
= expr
->nelts
, outpos
= 0;
730 temp
= (struct expression
*) alloca (len
);
732 /* Copy the original expression into temp. */
733 memcpy (temp
, expr
, len
);
735 return prefixify_subexp (temp
, expr
, inpos
, outpos
, last_struct
);
738 /* Return the number of exp_elements in the postfix subexpression
739 of EXPR whose operator is at index ENDPOS - 1 in EXPR. */
742 length_of_subexp (struct expression
*expr
, int endpos
)
746 operator_length (expr
, endpos
, &oplen
, &args
);
750 oplen
+= length_of_subexp (expr
, endpos
- oplen
);
757 /* Sets *OPLENP to the length of the operator whose (last) index is
758 ENDPOS - 1 in EXPR, and sets *ARGSP to the number of arguments that
762 operator_length (const struct expression
*expr
, int endpos
, int *oplenp
,
765 expr
->language_defn
->la_exp_desc
->operator_length (expr
, endpos
,
769 /* Default value for operator_length in exp_descriptor vectors. */
772 operator_length_standard (const struct expression
*expr
, int endpos
,
773 int *oplenp
, int *argsp
)
777 enum range_type range_type
;
781 error (_("?error in operator_length_standard"));
783 i
= (int) expr
->elts
[endpos
- 1].opcode
;
789 oplen
= longest_to_int (expr
->elts
[endpos
- 2].longconst
);
790 oplen
= 5 + BYTES_TO_EXP_ELEM (oplen
+ 1);
796 case OP_VAR_MSYM_VALUE
:
800 case OP_FUNC_STATIC_VAR
:
801 oplen
= longest_to_int (expr
->elts
[endpos
- 2].longconst
);
802 oplen
= 4 + BYTES_TO_EXP_ELEM (oplen
+ 1);
810 case OP_VAR_ENTRY_VALUE
:
820 case OP_F77_UNDETERMINED_ARGLIST
:
822 args
= 1 + longest_to_int (expr
->elts
[endpos
- 2].longconst
);
826 oplen
= 5 + longest_to_int (expr
->elts
[endpos
- 2].longconst
);
830 case OP_OBJC_MSGCALL
: /* Objective C message (method) call. */
832 args
= 1 + longest_to_int (expr
->elts
[endpos
- 2].longconst
);
841 case UNOP_DYNAMIC_CAST
:
842 case UNOP_REINTERPRET_CAST
:
843 case UNOP_MEMVAL_TYPE
:
871 oplen
= longest_to_int (expr
->elts
[endpos
- 2].longconst
);
872 oplen
= 4 + BYTES_TO_EXP_ELEM (oplen
+ 1);
877 case STRUCTOP_STRUCT
:
884 case OP_OBJC_NSSTRING
: /* Objective C Foundation Class
885 NSString constant. */
886 case OP_OBJC_SELECTOR
: /* Objective C "@selector" pseudo-op. */
888 oplen
= longest_to_int (expr
->elts
[endpos
- 2].longconst
);
889 oplen
= 4 + BYTES_TO_EXP_ELEM (oplen
+ 1);
894 args
= longest_to_int (expr
->elts
[endpos
- 2].longconst
);
895 args
-= longest_to_int (expr
->elts
[endpos
- 3].longconst
);
905 case MULTI_SUBSCRIPT
:
907 args
= 1 + longest_to_int (expr
->elts
[endpos
- 2].longconst
);
910 case BINOP_ASSIGN_MODIFY
:
922 range_type
= (enum range_type
)
923 longest_to_int (expr
->elts
[endpos
- 2].longconst
);
927 case LOW_BOUND_DEFAULT
:
928 case LOW_BOUND_DEFAULT_EXCLUSIVE
:
929 case HIGH_BOUND_DEFAULT
:
932 case BOTH_BOUND_DEFAULT
:
935 case NONE_BOUND_DEFAULT
:
936 case NONE_BOUND_DEFAULT_EXCLUSIVE
:
944 args
= 1 + (i
< (int) BINOP_END
);
951 /* Copy the subexpression ending just before index INEND in INEXPR
952 into OUTEXPR, starting at index OUTBEG.
953 In the process, convert it from suffix to prefix form.
954 If LAST_STRUCT is -1, then this function always returns -1.
955 Otherwise, it returns the index of the subexpression which is the
956 left-hand-side of the expression at LAST_STRUCT. */
959 prefixify_subexp (struct expression
*inexpr
,
960 struct expression
*outexpr
, int inend
, int outbeg
,
969 operator_length (inexpr
, inend
, &oplen
, &args
);
971 /* Copy the final operator itself, from the end of the input
972 to the beginning of the output. */
974 memcpy (&outexpr
->elts
[outbeg
], &inexpr
->elts
[inend
],
975 EXP_ELEM_TO_BYTES (oplen
));
978 if (last_struct
== inend
)
979 result
= outbeg
- oplen
;
981 /* Find the lengths of the arg subexpressions. */
982 arglens
= (int *) alloca (args
* sizeof (int));
983 for (i
= args
- 1; i
>= 0; i
--)
985 oplen
= length_of_subexp (inexpr
, inend
);
990 /* Now copy each subexpression, preserving the order of
991 the subexpressions, but prefixifying each one.
992 In this loop, inend starts at the beginning of
993 the expression this level is working on
994 and marches forward over the arguments.
995 outbeg does similarly in the output. */
996 for (i
= 0; i
< args
; i
++)
1002 r
= prefixify_subexp (inexpr
, outexpr
, inend
, outbeg
, last_struct
);
1005 /* Return immediately. We probably have only parsed a
1006 partial expression, so we don't want to try to reverse
1007 the other operands. */
1016 /* Read an expression from the string *STRINGPTR points to,
1017 parse it, and return a pointer to a struct expression that we malloc.
1018 Use block BLOCK as the lexical context for variable names;
1019 if BLOCK is zero, use the block of the selected stack frame.
1020 Meanwhile, advance *STRINGPTR to point after the expression,
1021 at the first nonwhite character that is not part of the expression
1022 (possibly a null character).
1024 If COMMA is nonzero, stop if a comma is reached. */
1027 parse_exp_1 (const char **stringptr
, CORE_ADDR pc
, const struct block
*block
,
1028 int comma
, innermost_block_tracker
*tracker
)
1030 return parse_exp_in_context (stringptr
, pc
, block
, comma
, 0, NULL
,
1034 /* As for parse_exp_1, except that if VOID_CONTEXT_P, then
1035 no value is expected from the expression.
1036 OUT_SUBEXP is set when attempting to complete a field name; in this
1037 case it is set to the index of the subexpression on the
1038 left-hand-side of the struct op. If not doing such completion, it
1039 is left untouched. */
1041 static expression_up
1042 parse_exp_in_context (const char **stringptr
, CORE_ADDR pc
,
1043 const struct block
*block
,
1044 int comma
, int void_context_p
, int *out_subexp
,
1045 innermost_block_tracker
*tracker
,
1046 expr_completion_state
*cstate
)
1048 const struct language_defn
*lang
= NULL
;
1051 if (*stringptr
== 0 || **stringptr
== 0)
1052 error_no_arg (_("expression to compute"));
1054 const struct block
*expression_context_block
= block
;
1055 CORE_ADDR expression_context_pc
= 0;
1057 innermost_block_tracker local_tracker
;
1058 if (tracker
== nullptr)
1059 tracker
= &local_tracker
;
1061 /* If no context specified, try using the current frame, if any. */
1062 if (!expression_context_block
)
1063 expression_context_block
= get_selected_block (&expression_context_pc
);
1065 expression_context_pc
= BLOCK_ENTRY_PC (expression_context_block
);
1067 expression_context_pc
= pc
;
1069 /* Fall back to using the current source static context, if any. */
1071 if (!expression_context_block
)
1073 struct symtab_and_line cursal
= get_current_source_symtab_and_line ();
1075 expression_context_block
1076 = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (cursal
.symtab
),
1078 if (expression_context_block
)
1079 expression_context_pc
= BLOCK_ENTRY_PC (expression_context_block
);
1082 if (language_mode
== language_mode_auto
&& block
!= NULL
)
1084 /* Find the language associated to the given context block.
1085 Default to the current language if it can not be determined.
1087 Note that using the language corresponding to the current frame
1088 can sometimes give unexpected results. For instance, this
1089 routine is often called several times during the inferior
1090 startup phase to re-parse breakpoint expressions after
1091 a new shared library has been loaded. The language associated
1092 to the current frame at this moment is not relevant for
1093 the breakpoint. Using it would therefore be silly, so it seems
1094 better to rely on the current language rather than relying on
1095 the current frame language to parse the expression. That's why
1096 we do the following language detection only if the context block
1097 has been specifically provided. */
1098 struct symbol
*func
= block_linkage_function (block
);
1101 lang
= language_def (func
->language ());
1102 if (lang
== NULL
|| lang
->la_language
== language_unknown
)
1103 lang
= current_language
;
1106 lang
= current_language
;
1108 /* get_current_arch may reset CURRENT_LANGUAGE via select_frame.
1109 While we need CURRENT_LANGUAGE to be set to LANG (for lookup_symbol
1110 and others called from *.y) ensure CURRENT_LANGUAGE gets restored
1111 to the value matching SELECTED_FRAME as set by get_current_arch. */
1113 parser_state
ps (lang
, get_current_arch (), expression_context_block
,
1114 expression_context_pc
, comma
, *stringptr
,
1115 cstate
!= nullptr, tracker
);
1117 scoped_restore_current_language lang_saver
;
1118 set_language (lang
->la_language
);
1122 lang
->la_parser (&ps
);
1124 catch (const gdb_exception
&except
)
1126 /* If parsing for completion, allow this to succeed; but if no
1127 expression elements have been written, then there's nothing
1129 if (! ps
.parse_completion
|| ps
.expout_ptr
== 0)
1133 /* We have to operate on an "expression *", due to la_post_parser,
1134 which explains this funny-looking double release. */
1135 expression_up result
= ps
.release ();
1137 /* Convert expression from postfix form as generated by yacc
1138 parser, to a prefix form. */
1140 if (expressiondebug
)
1141 dump_raw_expression (result
.get (), gdb_stdlog
,
1142 "before conversion to prefix form");
1144 subexp
= prefixify_expression (result
.get (),
1145 ps
.m_completion_state
.expout_last_struct
);
1147 *out_subexp
= subexp
;
1149 lang
->la_post_parser (&result
, void_context_p
, ps
.parse_completion
,
1152 if (expressiondebug
)
1153 dump_prefix_expression (result
.get (), gdb_stdlog
);
1155 if (cstate
!= nullptr)
1156 *cstate
= std::move (ps
.m_completion_state
);
1157 *stringptr
= ps
.lexptr
;
1161 /* Parse STRING as an expression, and complain if this fails
1162 to use up all of the contents of STRING. */
1165 parse_expression (const char *string
, innermost_block_tracker
*tracker
)
1167 expression_up exp
= parse_exp_1 (&string
, 0, 0, 0, tracker
);
1169 error (_("Junk after end of expression."));
1173 /* Same as parse_expression, but using the given language (LANG)
1174 to parse the expression. */
1177 parse_expression_with_language (const char *string
, enum language lang
)
1179 gdb::optional
<scoped_restore_current_language
> lang_saver
;
1180 if (current_language
->la_language
!= lang
)
1182 lang_saver
.emplace ();
1183 set_language (lang
);
1186 return parse_expression (string
);
1189 /* Parse STRING as an expression. If parsing ends in the middle of a
1190 field reference, return the type of the left-hand-side of the
1191 reference; furthermore, if the parsing ends in the field name,
1192 return the field name in *NAME. If the parsing ends in the middle
1193 of a field reference, but the reference is somehow invalid, throw
1194 an exception. In all other cases, return NULL. */
1197 parse_expression_for_completion (const char *string
,
1198 gdb::unique_xmalloc_ptr
<char> *name
,
1199 enum type_code
*code
)
1204 expr_completion_state cstate
;
1208 exp
= parse_exp_in_context (&string
, 0, 0, 0, 0, &subexp
,
1211 catch (const gdb_exception_error
&except
)
1213 /* Nothing, EXP remains NULL. */
1219 if (cstate
.expout_tag_completion_type
!= TYPE_CODE_UNDEF
)
1221 *code
= cstate
.expout_tag_completion_type
;
1222 *name
= std::move (cstate
.expout_completion_name
);
1226 if (cstate
.expout_last_struct
== -1)
1229 const char *fieldname
= extract_field_op (exp
.get (), &subexp
);
1230 if (fieldname
== NULL
)
1236 name
->reset (xstrdup (fieldname
));
1237 /* This might throw an exception. If so, we want to let it
1239 val
= evaluate_subexpression_type (exp
.get (), subexp
);
1241 return value_type (val
);
1244 /* A post-parser that does nothing. */
1247 null_post_parser (expression_up
*exp
, int void_context_p
, int completin
,
1248 innermost_block_tracker
*tracker
)
1252 /* Parse floating point value P of length LEN.
1253 Return false if invalid, true if valid.
1254 The successfully parsed number is stored in DATA in
1255 target format for floating-point type TYPE.
1257 NOTE: This accepts the floating point syntax that sscanf accepts. */
1260 parse_float (const char *p
, int len
,
1261 const struct type
*type
, gdb_byte
*data
)
1263 return target_float_from_string (data
, type
, std::string (p
, len
));
1266 /* This function avoids direct calls to fprintf
1267 in the parser generated debug code. */
1269 parser_fprintf (FILE *x
, const char *y
, ...)
1275 vfprintf_unfiltered (gdb_stderr
, y
, args
);
1278 fprintf_unfiltered (gdb_stderr
, " Unknown FILE used.\n");
1279 vfprintf_unfiltered (gdb_stderr
, y
, args
);
1284 /* Implementation of the exp_descriptor method operator_check. */
1287 operator_check_standard (struct expression
*exp
, int pos
,
1288 int (*objfile_func
) (struct objfile
*objfile
,
1292 const union exp_element
*const elts
= exp
->elts
;
1293 struct type
*type
= NULL
;
1294 struct objfile
*objfile
= NULL
;
1296 /* Extended operators should have been already handled by exp_descriptor
1297 iterate method of its specific language. */
1298 gdb_assert (elts
[pos
].opcode
< OP_EXTENDED0
);
1300 /* Track the callers of write_exp_elt_type for this table. */
1302 switch (elts
[pos
].opcode
)
1314 type
= elts
[pos
+ 1].type
;
1319 LONGEST arg
, nargs
= elts
[pos
+ 2].longconst
;
1321 for (arg
= 0; arg
< nargs
; arg
++)
1323 struct type
*inst_type
= elts
[pos
+ 3 + arg
].type
;
1324 struct objfile
*inst_objfile
= TYPE_OBJFILE (inst_type
);
1326 if (inst_objfile
&& (*objfile_func
) (inst_objfile
, data
))
1334 const struct block
*const block
= elts
[pos
+ 1].block
;
1335 const struct symbol
*const symbol
= elts
[pos
+ 2].symbol
;
1337 /* Check objfile where the variable itself is placed.
1338 SYMBOL_OBJ_SECTION (symbol) may be NULL. */
1339 if ((*objfile_func
) (symbol_objfile (symbol
), data
))
1342 /* Check objfile where is placed the code touching the variable. */
1343 objfile
= lookup_objfile_from_block (block
);
1345 type
= SYMBOL_TYPE (symbol
);
1348 case OP_VAR_MSYM_VALUE
:
1349 objfile
= elts
[pos
+ 1].objfile
;
1353 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
1355 if (type
&& TYPE_OBJFILE (type
)
1356 && (*objfile_func
) (TYPE_OBJFILE (type
), data
))
1358 if (objfile
&& (*objfile_func
) (objfile
, data
))
1364 /* Call OBJFILE_FUNC for any objfile found being referenced by EXP.
1365 OBJFILE_FUNC is never called with NULL OBJFILE. OBJFILE_FUNC get
1366 passed an arbitrary caller supplied DATA pointer. If OBJFILE_FUNC
1367 returns non-zero value then (any other) non-zero value is immediately
1368 returned to the caller. Otherwise zero is returned after iterating
1369 through whole EXP. */
1372 exp_iterate (struct expression
*exp
,
1373 int (*objfile_func
) (struct objfile
*objfile
, void *data
),
1378 for (endpos
= exp
->nelts
; endpos
> 0; )
1380 int pos
, args
, oplen
= 0;
1382 operator_length (exp
, endpos
, &oplen
, &args
);
1383 gdb_assert (oplen
> 0);
1385 pos
= endpos
- oplen
;
1386 if (exp
->language_defn
->la_exp_desc
->operator_check (exp
, pos
,
1387 objfile_func
, data
))
1396 /* Helper for exp_uses_objfile. */
1399 exp_uses_objfile_iter (struct objfile
*exp_objfile
, void *objfile_voidp
)
1401 struct objfile
*objfile
= (struct objfile
*) objfile_voidp
;
1403 if (exp_objfile
->separate_debug_objfile_backlink
)
1404 exp_objfile
= exp_objfile
->separate_debug_objfile_backlink
;
1406 return exp_objfile
== objfile
;
1409 /* Return 1 if EXP uses OBJFILE (and will become dangling when OBJFILE
1410 is unloaded), otherwise return 0. OBJFILE must not be a separate debug info
1414 exp_uses_objfile (struct expression
*exp
, struct objfile
*objfile
)
1416 gdb_assert (objfile
->separate_debug_objfile_backlink
== NULL
);
1418 return exp_iterate (exp
, exp_uses_objfile_iter
, objfile
);
1421 /* Reallocate the `expout' pointer inside PS so that it can accommodate
1422 at least LENELT expression elements. This function does nothing if
1423 there is enough room for the elements. */
1426 increase_expout_size (struct expr_builder
*ps
, size_t lenelt
)
1428 if ((ps
->expout_ptr
+ lenelt
) >= ps
->expout_size
)
1430 ps
->expout_size
= std::max (ps
->expout_size
* 2,
1431 ps
->expout_ptr
+ lenelt
+ 10);
1432 ps
->expout
.reset (XRESIZEVAR (expression
,
1433 ps
->expout
.release (),
1434 (sizeof (struct expression
)
1435 + EXP_ELEM_TO_BYTES (ps
->expout_size
))));
1439 void _initialize_parse ();
1441 _initialize_parse ()
1443 add_setshow_zuinteger_cmd ("expression", class_maintenance
,
1445 _("Set expression debugging."),
1446 _("Show expression debugging."),
1447 _("When non-zero, the internal representation "
1448 "of expressions will be printed."),
1450 show_expressiondebug
,
1451 &setdebuglist
, &showdebuglist
);
1452 add_setshow_boolean_cmd ("parser", class_maintenance
,
1454 _("Set parser debugging."),
1455 _("Show parser debugging."),
1456 _("When non-zero, expression parser "
1457 "tracing will be enabled."),
1460 &setdebuglist
, &showdebuglist
);