1 /* Print values for GNU debugger GDB.
3 Copyright (C) 1986-2024 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20 #include "event-top.h"
21 #include "extract-store-integer.h"
29 #include "expression.h"
31 #include "cli/cli-cmds.h"
33 #include "breakpoint.h"
35 #include "gdb-demangle.h"
40 #include "completer.h"
44 #include "target-float.h"
45 #include "observable.h"
47 #include "parser-defs.h"
49 #include "arch-utils.h"
50 #include "cli/cli-utils.h"
51 #include "cli/cli-option.h"
52 #include "cli/cli-script.h"
53 #include "cli/cli-style.h"
54 #include "gdbsupport/format.h"
56 #include "gdbsupport/byte-vector.h"
58 #include "gdbsupport/gdb-safe-ctype.h"
59 #include "gdbsupport/rsp-low.h"
62 /* Chain containing all defined memory-tag subcommands. */
64 static struct cmd_list_element
*memory_tag_list
;
66 /* Last specified output format. */
68 static char last_format
= 0;
70 /* Last specified examination size. 'b', 'h', 'w' or `q'. */
72 static char last_size
= 'w';
74 /* Last specified count for the 'x' command. */
76 static int last_count
;
78 /* Last specified tag-printing option. */
80 static bool last_print_tags
= false;
82 /* Default address to examine next, and associated architecture. */
84 static struct gdbarch
*next_gdbarch
;
85 static CORE_ADDR next_address
;
87 /* Number of delay instructions following current disassembled insn. */
89 static int branch_delay_insns
;
91 /* Last address examined. */
93 static CORE_ADDR last_examine_address
;
95 /* Contents of last address examined.
96 This is not valid past the end of the `x' command! */
98 static value_ref_ptr last_examine_value
;
100 /* Largest offset between a symbolic value and an address, that will be
101 printed as `0x1234 <symbol+offset>'. */
103 static unsigned int max_symbolic_offset
= UINT_MAX
;
105 show_max_symbolic_offset (struct ui_file
*file
, int from_tty
,
106 struct cmd_list_element
*c
, const char *value
)
109 _("The largest offset that will be "
110 "printed in <symbol+1234> form is %s.\n"),
114 /* Append the source filename and linenumber of the symbol when
115 printing a symbolic value as `<symbol at filename:linenum>' if set. */
116 static bool print_symbol_filename
= false;
118 show_print_symbol_filename (struct ui_file
*file
, int from_tty
,
119 struct cmd_list_element
*c
, const char *value
)
121 gdb_printf (file
, _("Printing of source filename and "
122 "line number with <symbol> is %s.\n"),
126 /* Number of auto-display expression currently being displayed.
127 So that we can disable it if we get a signal within it.
128 -1 when not doing one. */
130 static int current_display_number
;
132 /* Last allocated display number. */
134 static int display_number
;
138 display (const char *exp_string_
, expression_up
&&exp_
,
139 const struct format_data
&format_
, struct program_space
*pspace_
,
140 const struct block
*block_
)
141 : exp_string (exp_string_
),
142 exp (std::move (exp_
)),
143 number (++display_number
),
151 /* The expression as the user typed it. */
152 std::string exp_string
;
154 /* Expression to be evaluated and displayed. */
157 /* Item number of this auto-display item. */
160 /* Display format specified. */
161 struct format_data format
;
163 /* Program space associated with `block'. */
164 struct program_space
*pspace
;
166 /* Innermost block required by this expression when evaluated. */
167 const struct block
*block
;
169 /* Status of this display (enabled or disabled). */
173 /* Expressions whose values should be displayed automatically each
174 time the program stops. */
176 static std::vector
<std::unique_ptr
<struct display
>> all_displays
;
178 /* Prototypes for local functions. */
180 static void do_one_display (struct display
*);
183 /* Decode a format specification. *STRING_PTR should point to it.
184 OFORMAT and OSIZE are used as defaults for the format and size
185 if none are given in the format specification.
186 If OSIZE is zero, then the size field of the returned value
187 should be set only if a size is explicitly specified by the
189 The structure returned describes all the data
190 found in the specification. In addition, *STRING_PTR is advanced
191 past the specification and past all whitespace following it. */
193 static struct format_data
194 decode_format (const char **string_ptr
, int oformat
, int osize
)
196 struct format_data val
;
197 const char *p
= *string_ptr
;
203 val
.print_tags
= false;
210 if (*p
>= '0' && *p
<= '9')
211 val
.count
*= atoi (p
);
212 while (*p
>= '0' && *p
<= '9')
215 /* Now process size or format letters that follow. */
219 if (*p
== 'b' || *p
== 'h' || *p
== 'w' || *p
== 'g')
228 val
.print_tags
= true;
231 else if (*p
>= 'a' && *p
<= 'z')
237 *string_ptr
= skip_spaces (p
);
239 /* Set defaults for format and size if not specified. */
240 if (val
.format
== '?')
244 /* Neither has been specified. */
245 val
.format
= oformat
;
249 /* If a size is specified, any format makes a reasonable
250 default except 'i'. */
251 val
.format
= oformat
== 'i' ? 'x' : oformat
;
253 else if (val
.size
== '?')
257 /* Pick the appropriate size for an address. This is deferred
258 until do_examine when we know the actual architecture to use.
259 A special size value of 'a' is used to indicate this case. */
260 val
.size
= osize
? 'a' : osize
;
263 /* Floating point has to be word or giantword. */
264 if (osize
== 'w' || osize
== 'g')
267 /* Default it to giantword if the last used size is not
269 val
.size
= osize
? 'g' : osize
;
272 /* Characters default to one byte. */
273 val
.size
= osize
? 'b' : osize
;
276 /* Display strings with byte size chars unless explicitly
282 /* The default is the size most recently specified. */
289 /* Print value VAL on stream according to OPTIONS.
290 Do not end with a newline.
291 SIZE is the letter for the size of datum being printed.
292 This is used to pad hex numbers so they line up. SIZE is 0
293 for print / output and set for examine. */
296 print_formatted (struct value
*val
, int size
,
297 const struct value_print_options
*options
,
298 struct ui_file
*stream
)
300 struct type
*type
= check_typedef (val
->type ());
301 int len
= type
->length ();
303 if (val
->lval () == lval_memory
)
304 next_address
= val
->address () + len
;
308 switch (options
->format
)
312 struct type
*elttype
= val
->type ();
314 next_address
= (val
->address ()
315 + val_print_string (elttype
, NULL
,
317 stream
, options
) * len
);
322 /* We often wrap here if there are long symbolic names. */
323 stream
->wrap_here (4);
324 next_address
= (val
->address ()
325 + gdb_print_insn (type
->arch (),
326 val
->address (), stream
,
327 &branch_delay_insns
));
332 if (options
->format
== 0 || options
->format
== 's'
333 || type
->code () == TYPE_CODE_VOID
334 || type
->code () == TYPE_CODE_REF
335 || type
->code () == TYPE_CODE_ARRAY
336 || type
->code () == TYPE_CODE_STRING
337 || type
->code () == TYPE_CODE_STRUCT
338 || type
->code () == TYPE_CODE_UNION
339 || type
->code () == TYPE_CODE_NAMESPACE
)
340 value_print (val
, stream
, options
);
342 /* User specified format, so don't look to the type to tell us
344 value_print_scalar_formatted (val
, options
, size
, stream
);
347 /* Return builtin floating point type of same length as TYPE.
348 If no such type is found, return TYPE itself. */
350 float_type_from_length (struct type
*type
)
352 struct gdbarch
*gdbarch
= type
->arch ();
353 const struct builtin_type
*builtin
= builtin_type (gdbarch
);
355 if (type
->length () == builtin
->builtin_half
->length ())
356 type
= builtin
->builtin_half
;
357 else if (type
->length () == builtin
->builtin_float
->length ())
358 type
= builtin
->builtin_float
;
359 else if (type
->length () == builtin
->builtin_double
->length ())
360 type
= builtin
->builtin_double
;
361 else if (type
->length () == builtin
->builtin_long_double
->length ())
362 type
= builtin
->builtin_long_double
;
367 /* Print a scalar of data of type TYPE, pointed to in GDB by VALADDR,
368 according to OPTIONS and SIZE on STREAM. Formats s and i are not
369 supported at this level. */
372 print_scalar_formatted (const gdb_byte
*valaddr
, struct type
*type
,
373 const struct value_print_options
*options
,
374 int size
, struct ui_file
*stream
)
376 struct gdbarch
*gdbarch
= type
->arch ();
377 unsigned int len
= type
->length ();
378 enum bfd_endian byte_order
= type_byte_order (type
);
380 /* String printing should go through val_print_scalar_formatted. */
381 gdb_assert (options
->format
!= 's');
383 /* If the value is a pointer, and pointers and addresses are not the
384 same, then at this point, the value's length (in target bytes) is
385 gdbarch_addr_bit/TARGET_CHAR_BIT, not type->length (). */
386 if (type
->code () == TYPE_CODE_PTR
)
387 len
= gdbarch_addr_bit (gdbarch
) / TARGET_CHAR_BIT
;
389 /* If we are printing it as unsigned, truncate it in case it is actually
390 a negative signed value (e.g. "print/u (short)-1" should print 65535
391 (if shorts are 16 bits) instead of 4294967295). */
392 if (options
->format
!= 'c'
393 && (options
->format
!= 'd' || type
->is_unsigned ()))
395 if (len
< type
->length () && byte_order
== BFD_ENDIAN_BIG
)
396 valaddr
+= type
->length () - len
;
399 /* Allow LEN == 0, and in this case, don't assume that VALADDR is
401 const gdb_byte zero
= 0;
408 if (size
!= 0 && (options
->format
== 'x' || options
->format
== 't'))
410 /* Truncate to fit. */
427 error (_("Undefined output size \"%c\"."), size
);
429 if (newlen
< len
&& byte_order
== BFD_ENDIAN_BIG
)
430 valaddr
+= len
- newlen
;
434 /* Biased range types and sub-word scalar types must be handled
435 here; the value is correctly computed by unpack_long. */
436 gdb::byte_vector converted_bytes
;
437 /* Some cases below will unpack the value again. In the biased
438 range case, we want to avoid this, so we store the unpacked value
439 here for possible use later. */
440 std::optional
<LONGEST
> val_long
;
441 if ((is_fixed_point_type (type
)
442 && (options
->format
== 'o'
443 || options
->format
== 'x'
444 || options
->format
== 't'
445 || options
->format
== 'z'
446 || options
->format
== 'd'
447 || options
->format
== 'u'))
448 || (type
->code () == TYPE_CODE_RANGE
&& type
->bounds ()->bias
!= 0)
449 || type
->bit_size_differs_p ())
451 val_long
.emplace (unpack_long (type
, valaddr
));
452 converted_bytes
.resize (type
->length ());
453 store_signed_integer (converted_bytes
.data (), type
->length (),
454 byte_order
, *val_long
);
455 valaddr
= converted_bytes
.data ();
458 /* Printing a non-float type as 'f' will interpret the data as if it were
459 of a floating-point type of the same length, if that exists. Otherwise,
460 the data is printed as integer. */
461 char format
= options
->format
;
462 if (format
== 'f' && type
->code () != TYPE_CODE_FLT
)
464 type
= float_type_from_length (type
);
465 if (type
->code () != TYPE_CODE_FLT
)
472 print_octal_chars (stream
, valaddr
, len
, byte_order
);
475 print_decimal_chars (stream
, valaddr
, len
, true, byte_order
);
478 print_decimal_chars (stream
, valaddr
, len
, false, byte_order
);
481 if (type
->code () != TYPE_CODE_FLT
)
483 print_decimal_chars (stream
, valaddr
, len
, !type
->is_unsigned (),
489 print_floating (valaddr
, type
, stream
);
493 print_binary_chars (stream
, valaddr
, len
, byte_order
, size
> 0, options
);
496 print_hex_chars (stream
, valaddr
, len
, byte_order
, size
> 0);
499 print_hex_chars (stream
, valaddr
, len
, byte_order
, true);
503 struct value_print_options opts
= *options
;
505 if (!val_long
.has_value ())
506 val_long
.emplace (unpack_long (type
, valaddr
));
509 if (type
->is_unsigned ())
510 type
= builtin_type (gdbarch
)->builtin_true_unsigned_char
;
512 type
= builtin_type (gdbarch
)->builtin_true_char
;
514 value_print (value_from_longest (type
, *val_long
), stream
, &opts
);
520 if (!val_long
.has_value ())
521 val_long
.emplace (unpack_long (type
, valaddr
));
522 print_address (gdbarch
, *val_long
, stream
);
527 error (_("Undefined output format \"%c\"."), format
);
531 /* Specify default address for `x' command.
532 The `info lines' command uses this. */
535 set_next_address (struct gdbarch
*gdbarch
, CORE_ADDR addr
)
537 struct type
*ptr_type
= builtin_type (gdbarch
)->builtin_data_ptr
;
539 next_gdbarch
= gdbarch
;
542 /* Make address available to the user as $_. */
543 set_internalvar (lookup_internalvar ("_"),
544 value_from_pointer (ptr_type
, addr
));
547 /* Optionally print address ADDR symbolically as <SYMBOL+OFFSET> on STREAM,
548 after LEADIN. Print nothing if no symbolic name is found nearby.
549 Optionally also print source file and line number, if available.
550 DO_DEMANGLE controls whether to print a symbol in its native "raw" form,
551 or to interpret it as a possible C++ name and convert it back to source
552 form. However note that DO_DEMANGLE can be overridden by the specific
553 settings of the demangle and asm_demangle variables. Returns
554 non-zero if anything was printed; zero otherwise. */
557 print_address_symbolic (struct gdbarch
*gdbarch
, CORE_ADDR addr
,
558 struct ui_file
*stream
,
559 int do_demangle
, const char *leadin
)
561 std::string name
, filename
;
566 if (build_address_symbolic (gdbarch
, addr
, do_demangle
, false, &name
,
567 &offset
, &filename
, &line
, &unmapped
))
570 gdb_puts (leadin
, stream
);
572 gdb_puts ("<*", stream
);
574 gdb_puts ("<", stream
);
575 fputs_styled (name
.c_str (), function_name_style
.style (), stream
);
577 gdb_printf (stream
, "%+d", offset
);
579 /* Append source filename and line number if desired. Give specific
580 line # of this addr, if we have it; else line # of the nearest symbol. */
581 if (print_symbol_filename
&& !filename
.empty ())
583 gdb_puts (line
== -1 ? " in " : " at ", stream
);
584 fputs_styled (filename
.c_str (), file_name_style
.style (), stream
);
586 gdb_printf (stream
, ":%d", line
);
589 gdb_puts ("*>", stream
);
591 gdb_puts (">", stream
);
596 /* See valprint.h. */
599 build_address_symbolic (struct gdbarch
*gdbarch
,
600 CORE_ADDR addr
, /* IN */
601 bool do_demangle
, /* IN */
602 bool prefer_sym_over_minsym
, /* IN */
603 std::string
*name
, /* OUT */
604 int *offset
, /* OUT */
605 std::string
*filename
, /* OUT */
607 int *unmapped
) /* OUT */
609 struct bound_minimal_symbol msymbol
;
610 struct symbol
*symbol
;
611 CORE_ADDR name_location
= 0;
612 struct obj_section
*section
= NULL
;
613 const char *name_temp
= "";
615 /* Let's say it is mapped (not unmapped). */
618 /* Determine if the address is in an overlay, and whether it is
620 if (overlay_debugging
)
622 section
= find_pc_overlay (addr
);
623 if (pc_in_unmapped_range (addr
, section
))
626 addr
= overlay_mapped_address (addr
, section
);
630 /* Try to find the address in both the symbol table and the minsyms.
631 In most cases, we'll prefer to use the symbol instead of the
632 minsym. However, there are cases (see below) where we'll choose
633 to use the minsym instead. */
635 /* This is defective in the sense that it only finds text symbols. So
636 really this is kind of pointless--we should make sure that the
637 minimal symbols have everything we need (by changing that we could
638 save some memory, but for many debug format--ELF/DWARF or
639 anything/stabs--it would be inconvenient to eliminate those minimal
641 msymbol
= lookup_minimal_symbol_by_pc_section (addr
, section
);
642 symbol
= find_pc_sect_function (addr
, section
);
646 /* If this is a function (i.e. a code address), strip out any
647 non-address bits. For instance, display a pointer to the
648 first instruction of a Thumb function as <function>; the
649 second instruction will be <function+2>, even though the
650 pointer is <function+3>. This matches the ISA behavior. */
651 addr
= gdbarch_addr_bits_remove (gdbarch
, addr
);
653 name_location
= symbol
->value_block ()->entry_pc ();
654 if (do_demangle
|| asm_demangle
)
655 name_temp
= symbol
->print_name ();
657 name_temp
= symbol
->linkage_name ();
660 if (msymbol
.minsym
!= NULL
661 && msymbol
.minsym
->has_size ()
662 && msymbol
.minsym
->size () == 0
663 && msymbol
.minsym
->type () != mst_text
664 && msymbol
.minsym
->type () != mst_text_gnu_ifunc
665 && msymbol
.minsym
->type () != mst_file_text
)
666 msymbol
.minsym
= NULL
;
668 if (msymbol
.minsym
!= NULL
)
670 /* Use the minsym if no symbol is found.
672 Additionally, use the minsym instead of a (found) symbol if
673 the following conditions all hold:
674 1) The prefer_sym_over_minsym flag is false.
675 2) The minsym address is identical to that of the address under
677 3) The symbol address is not identical to that of the address
678 under consideration. */
679 if (symbol
== NULL
||
680 (!prefer_sym_over_minsym
681 && msymbol
.value_address () == addr
682 && name_location
!= addr
))
684 /* If this is a function (i.e. a code address), strip out any
685 non-address bits. For instance, display a pointer to the
686 first instruction of a Thumb function as <function>; the
687 second instruction will be <function+2>, even though the
688 pointer is <function+3>. This matches the ISA behavior. */
689 if (msymbol
.minsym
->type () == mst_text
690 || msymbol
.minsym
->type () == mst_text_gnu_ifunc
691 || msymbol
.minsym
->type () == mst_file_text
692 || msymbol
.minsym
->type () == mst_solib_trampoline
)
693 addr
= gdbarch_addr_bits_remove (gdbarch
, addr
);
696 name_location
= msymbol
.value_address ();
697 if (do_demangle
|| asm_demangle
)
698 name_temp
= msymbol
.minsym
->print_name ();
700 name_temp
= msymbol
.minsym
->linkage_name ();
703 if (symbol
== NULL
&& msymbol
.minsym
== NULL
)
706 /* If the nearest symbol is too far away, don't print anything symbolic. */
708 /* For when CORE_ADDR is larger than unsigned int, we do math in
709 CORE_ADDR. But when we detect unsigned wraparound in the
710 CORE_ADDR math, we ignore this test and print the offset,
711 because addr+max_symbolic_offset has wrapped through the end
712 of the address space back to the beginning, giving bogus comparison. */
713 if (addr
> name_location
+ max_symbolic_offset
714 && name_location
+ max_symbolic_offset
> name_location
)
717 *offset
= (LONGEST
) addr
- name_location
;
721 if (print_symbol_filename
)
723 struct symtab_and_line sal
;
725 sal
= find_pc_sect_line (addr
, section
, 0);
729 *filename
= symtab_to_filename_for_display (sal
.symtab
);
737 /* Print address ADDR symbolically on STREAM.
738 First print it as a number. Then perhaps print
739 <SYMBOL + OFFSET> after the number. */
742 print_address (struct gdbarch
*gdbarch
,
743 CORE_ADDR addr
, struct ui_file
*stream
)
745 fputs_styled (paddress (gdbarch
, addr
), address_style
.style (), stream
);
746 print_address_symbolic (gdbarch
, addr
, stream
, asm_demangle
, " ");
749 /* Return a prefix for instruction address:
750 "=> " for current instruction, else " ". */
753 pc_prefix (CORE_ADDR addr
)
755 if (has_stack_frames ())
757 frame_info_ptr frame
;
760 frame
= get_selected_frame (NULL
);
761 if (get_frame_pc_if_available (frame
, &pc
) && pc
== addr
)
767 /* Print address ADDR symbolically on STREAM. Parameter DEMANGLE
768 controls whether to print the symbolic name "raw" or demangled.
769 Return non-zero if anything was printed; zero otherwise. */
772 print_address_demangle (const struct value_print_options
*opts
,
773 struct gdbarch
*gdbarch
, CORE_ADDR addr
,
774 struct ui_file
*stream
, int do_demangle
)
776 if (opts
->addressprint
)
778 fputs_styled (paddress (gdbarch
, addr
), address_style
.style (), stream
);
779 print_address_symbolic (gdbarch
, addr
, stream
, do_demangle
, " ");
783 return print_address_symbolic (gdbarch
, addr
, stream
, do_demangle
, "");
789 /* Find the address of the instruction that is INST_COUNT instructions before
790 the instruction at ADDR.
791 Since some architectures have variable-length instructions, we can't just
792 simply subtract INST_COUNT * INSN_LEN from ADDR. Instead, we use line
793 number information to locate the nearest known instruction boundary,
794 and disassemble forward from there. If we go out of the symbol range
795 during disassembling, we return the lowest address we've got so far and
796 set the number of instructions read to INST_READ. */
799 find_instruction_backward (struct gdbarch
*gdbarch
, CORE_ADDR addr
,
800 int inst_count
, int *inst_read
)
802 /* The vector PCS is used to store instruction addresses within
804 CORE_ADDR loop_start
, loop_end
, p
;
805 std::vector
<CORE_ADDR
> pcs
;
806 struct symtab_and_line sal
;
809 loop_start
= loop_end
= addr
;
811 /* In each iteration of the outer loop, we get a pc range that ends before
812 LOOP_START, then we count and store every instruction address of the range
813 iterated in the loop.
814 If the number of instructions counted reaches INST_COUNT, return the
815 stored address that is located INST_COUNT instructions back from ADDR.
816 If INST_COUNT is not reached, we subtract the number of counted
817 instructions from INST_COUNT, and go to the next iteration. */
821 sal
= find_pc_sect_line (loop_start
, NULL
, 1);
824 /* We reach here when line info is not available. In this case,
825 we print a message and just exit the loop. The return value
826 is calculated after the loop. */
827 gdb_printf (_("No line number information available "
829 gdb_stdout
->wrap_here (2);
830 print_address (gdbarch
, loop_start
- 1, gdb_stdout
);
835 loop_end
= loop_start
;
838 /* This loop pushes instruction addresses in the range from
839 LOOP_START to LOOP_END. */
840 for (p
= loop_start
; p
< loop_end
;)
843 p
+= gdb_insn_length (gdbarch
, p
);
846 inst_count
-= pcs
.size ();
847 *inst_read
+= pcs
.size ();
849 while (inst_count
> 0);
851 /* After the loop, the vector PCS has instruction addresses of the last
852 source line we processed, and INST_COUNT has a negative value.
853 We return the address at the index of -INST_COUNT in the vector for
855 Let's assume the following instruction addresses and run 'x/-4i 0x400e'.
865 find_instruction_backward is called with INST_COUNT = 4 and expected to
866 return 0x4001. When we reach here, INST_COUNT is set to -1 because
867 it was subtracted by 2 (from Line Y) and 3 (from Line X). The value
868 4001 is located at the index 1 of the last iterated line (= Line X),
869 which is simply calculated by -INST_COUNT.
870 The case when the length of PCS is 0 means that we reached an area for
871 which line info is not available. In such case, we return LOOP_START,
872 which was the lowest instruction address that had line info. */
873 p
= pcs
.size () > 0 ? pcs
[-inst_count
] : loop_start
;
875 /* INST_READ includes all instruction addresses in a pc range. Need to
876 exclude the beginning part up to the address we're returning. That
877 is, exclude {0x4000} in the example above. */
879 *inst_read
+= inst_count
;
884 /* Backward read LEN bytes of target memory from address MEMADDR + LEN,
885 placing the results in GDB's memory from MYADDR + LEN. Returns
886 a count of the bytes actually read. */
889 read_memory_backward (struct gdbarch
*gdbarch
,
890 CORE_ADDR memaddr
, gdb_byte
*myaddr
, int len
)
893 int nread
; /* Number of bytes actually read. */
895 /* First try a complete read. */
896 errcode
= target_read_memory (memaddr
, myaddr
, len
);
904 /* Loop, reading one byte at a time until we get as much as we can. */
907 for (nread
= 0; nread
< len
; ++nread
)
909 errcode
= target_read_memory (--memaddr
, --myaddr
, 1);
912 /* The read was unsuccessful, so exit the loop. */
913 gdb_printf (_("Cannot access memory at address %s\n"),
914 paddress (gdbarch
, memaddr
));
922 /* Returns true if X (which is LEN bytes wide) is the number zero. */
925 integer_is_zero (const gdb_byte
*x
, int len
)
929 while (i
< len
&& x
[i
] == 0)
934 /* Find the start address of a string in which ADDR is included.
935 Basically we search for '\0' and return the next address,
936 but if OPTIONS->PRINT_MAX is smaller than the length of a string,
937 we stop searching and return the address to print characters as many as
938 PRINT_MAX from the string. */
941 find_string_backward (struct gdbarch
*gdbarch
,
942 CORE_ADDR addr
, int count
, int char_size
,
943 const struct value_print_options
*options
,
944 int *strings_counted
)
946 const int chunk_size
= 0x20;
949 int chars_to_read
= chunk_size
;
950 int chars_counted
= 0;
951 int count_original
= count
;
952 CORE_ADDR string_start_addr
= addr
;
954 gdb_assert (char_size
== 1 || char_size
== 2 || char_size
== 4);
955 gdb::byte_vector
buffer (chars_to_read
* char_size
);
956 while (count
> 0 && read_error
== 0)
960 addr
-= chars_to_read
* char_size
;
961 chars_read
= read_memory_backward (gdbarch
, addr
, buffer
.data (),
962 chars_to_read
* char_size
);
963 chars_read
/= char_size
;
964 read_error
= (chars_read
== chars_to_read
) ? 0 : 1;
965 unsigned int print_max_chars
= get_print_max_chars (options
);
966 /* Searching for '\0' from the end of buffer in backward direction. */
967 for (i
= 0; i
< chars_read
&& count
> 0 ; ++i
, ++chars_counted
)
969 int offset
= (chars_to_read
- i
- 1) * char_size
;
971 if (integer_is_zero (&buffer
[offset
], char_size
)
972 || chars_counted
== print_max_chars
)
974 /* Found '\0' or reached `print_max_chars'. As OFFSET
975 is the offset to '\0', we add CHAR_SIZE to return
976 the start address of a string. */
978 string_start_addr
= addr
+ offset
+ char_size
;
984 /* Update STRINGS_COUNTED with the actual number of loaded strings. */
985 *strings_counted
= count_original
- count
;
989 /* In error case, STRING_START_ADDR is pointing to the string that
990 was last successfully loaded. Rewind the partially loaded string. */
991 string_start_addr
-= chars_counted
* char_size
;
994 return string_start_addr
;
997 /* Examine data at address ADDR in format FMT.
998 Fetch it from memory and print on gdb_stdout. */
1001 do_examine (struct format_data fmt
, struct gdbarch
*gdbarch
, CORE_ADDR addr
)
1006 struct type
*val_type
= NULL
;
1009 struct value_print_options opts
;
1010 int need_to_update_next_address
= 0;
1011 CORE_ADDR addr_rewound
= 0;
1013 format
= fmt
.format
;
1016 next_gdbarch
= gdbarch
;
1017 next_address
= addr
;
1019 /* Instruction format implies fetch single bytes
1020 regardless of the specified size.
1021 The case of strings is handled in decode_format, only explicit
1022 size operator are not changed to 'b'. */
1028 /* Pick the appropriate size for an address. */
1029 if (gdbarch_ptr_bit (next_gdbarch
) == 64)
1031 else if (gdbarch_ptr_bit (next_gdbarch
) == 32)
1033 else if (gdbarch_ptr_bit (next_gdbarch
) == 16)
1036 /* Bad value for gdbarch_ptr_bit. */
1037 internal_error (_("failed internal consistency check"));
1041 val_type
= builtin_type (next_gdbarch
)->builtin_int8
;
1042 else if (size
== 'h')
1043 val_type
= builtin_type (next_gdbarch
)->builtin_int16
;
1044 else if (size
== 'w')
1045 val_type
= builtin_type (next_gdbarch
)->builtin_int32
;
1046 else if (size
== 'g')
1047 val_type
= builtin_type (next_gdbarch
)->builtin_int64
;
1051 struct type
*char_type
= NULL
;
1053 /* Search for "char16_t" or "char32_t" types or fall back to 8-bit char
1054 if type is not found. */
1056 char_type
= builtin_type (next_gdbarch
)->builtin_char16
;
1057 else if (size
== 'w')
1058 char_type
= builtin_type (next_gdbarch
)->builtin_char32
;
1060 val_type
= char_type
;
1063 if (size
!= '\0' && size
!= 'b')
1064 warning (_("Unable to display strings with "
1065 "size '%c', using 'b' instead."), size
);
1067 val_type
= builtin_type (next_gdbarch
)->builtin_int8
;
1076 if (format
== 's' || format
== 'i')
1079 get_formatted_print_options (&opts
, format
);
1083 /* This is the negative repeat count case.
1084 We rewind the address based on the given repeat count and format,
1085 then examine memory from there in forward direction. */
1090 next_address
= find_instruction_backward (gdbarch
, addr
, count
,
1093 else if (format
== 's')
1095 next_address
= find_string_backward (gdbarch
, addr
, count
,
1096 val_type
->length (),
1101 next_address
= addr
- count
* val_type
->length ();
1104 /* The following call to print_formatted updates next_address in every
1105 iteration. In backward case, we store the start address here
1106 and update next_address with it before exiting the function. */
1107 addr_rewound
= (format
== 's'
1108 ? next_address
- val_type
->length ()
1110 need_to_update_next_address
= 1;
1113 /* Whether we need to print the memory tag information for the current
1115 bool print_range_tag
= true;
1116 uint32_t gsize
= gdbarch_memtag_granule_size (gdbarch
);
1118 /* Print as many objects as specified in COUNT, at most maxelts per line,
1119 with the address of the next one at the start of each line. */
1125 CORE_ADDR tag_laddr
= 0, tag_haddr
= 0;
1127 /* Print the memory tag information if requested. */
1128 if (fmt
.print_tags
&& print_range_tag
1129 && target_supports_memory_tagging ())
1131 tag_laddr
= align_down (next_address
, gsize
);
1132 tag_haddr
= align_down (next_address
+ gsize
, gsize
);
1134 struct value
*v_addr
1135 = value_from_ulongest (builtin_type (gdbarch
)->builtin_data_ptr
,
1138 if (target_is_address_tagged (gdbarch
, value_as_address (v_addr
)))
1140 /* Fetch the allocation tag. */
1142 = gdbarch_get_memtag (gdbarch
, v_addr
, memtag_type::allocation
);
1144 = gdbarch_memtag_to_string (gdbarch
, tag
);
1148 gdb_printf (_("<Allocation Tag %s for range [%s,%s)>\n"),
1150 paddress (gdbarch
, tag_laddr
),
1151 paddress (gdbarch
, tag_haddr
));
1154 print_range_tag
= false;
1158 gdb_puts (pc_prefix (next_address
));
1159 print_address (next_gdbarch
, next_address
, gdb_stdout
);
1166 /* Note that print_formatted sets next_address for the next
1168 last_examine_address
= next_address
;
1170 /* The value to be displayed is not fetched greedily.
1171 Instead, to avoid the possibility of a fetched value not
1172 being used, its retrieval is delayed until the print code
1173 uses it. When examining an instruction stream, the
1174 disassembler will perform its own memory fetch using just
1175 the address stored in LAST_EXAMINE_VALUE. FIXME: Should
1176 the disassembler be modified so that LAST_EXAMINE_VALUE
1177 is left with the byte sequence from the last complete
1178 instruction fetched from memory? */
1180 = release_value (value_at_lazy (val_type
, next_address
));
1182 print_formatted (last_examine_value
.get (), size
, &opts
, gdb_stdout
);
1184 /* Display any branch delay slots following the final insn. */
1185 if (format
== 'i' && count
== 1)
1186 count
+= branch_delay_insns
;
1188 /* Update the tag range based on the current address being
1190 if (tag_haddr
<= next_address
)
1191 print_range_tag
= true;
1196 if (need_to_update_next_address
)
1197 next_address
= addr_rewound
;
1201 validate_format (struct format_data fmt
, const char *cmdname
)
1204 error (_("Size letters are meaningless in \"%s\" command."), cmdname
);
1206 error (_("Item count other than 1 is meaningless in \"%s\" command."),
1208 if (fmt
.format
== 'i')
1209 error (_("Format letter \"%c\" is meaningless in \"%s\" command."),
1210 fmt
.format
, cmdname
);
1213 /* Parse print command format string into *OPTS and update *EXPP.
1214 CMDNAME should name the current command. */
1217 print_command_parse_format (const char **expp
, const char *cmdname
,
1218 value_print_options
*opts
)
1220 const char *exp
= *expp
;
1222 /* opts->raw value might already have been set by 'set print raw-values'
1223 or by using 'print -raw-values'.
1224 So, do not set opts->raw to 0, only set it to 1 if /r is given. */
1225 if (exp
&& *exp
== '/')
1230 fmt
= decode_format (&exp
, last_format
, 0);
1231 validate_format (fmt
, cmdname
);
1232 last_format
= fmt
.format
;
1234 opts
->format
= fmt
.format
;
1235 opts
->raw
= opts
->raw
|| fmt
.raw
;
1245 /* See valprint.h. */
1248 print_value (value
*val
, const value_print_options
&opts
)
1250 /* This setting allows large arrays to be printed by limiting the
1251 number of elements that are loaded into GDB's memory; we only
1252 need to load as many array elements as we plan to print. */
1253 scoped_array_length_limiting
limit_large_arrays (opts
.print_max
);
1255 int histindex
= val
->record_latest ();
1257 annotate_value_history_begin (histindex
, val
->type ());
1259 std::string idx
= string_printf ("$%d", histindex
);
1260 gdb_printf ("%ps = ", styled_string (variable_name_style
.style (),
1263 annotate_value_history_value ();
1265 print_formatted (val
, 0, &opts
, gdb_stdout
);
1268 annotate_value_history_end ();
1271 /* Returns true if memory tags should be validated. False otherwise. */
1274 should_validate_memtags (gdbarch
*gdbarch
, struct value
*value
)
1276 gdb_assert (value
!= nullptr && value
->type () != nullptr);
1278 if (!target_supports_memory_tagging ())
1281 enum type_code code
= value
->type ()->code ();
1283 /* Skip non-address values. */
1284 if (code
!= TYPE_CODE_PTR
1285 && !TYPE_IS_REFERENCE (value
->type ()))
1288 /* OK, we have an address value. Check we have a complete value we
1290 if (value
->optimized_out ()
1291 || !value
->entirely_available ())
1294 /* We do. Check whether it includes any tags. */
1295 return target_is_address_tagged (gdbarch
, value_as_address (value
));
1298 /* Helper for parsing arguments for print_command_1. */
1300 static struct value
*
1301 process_print_command_args (const char *args
, value_print_options
*print_opts
,
1304 get_user_print_options (print_opts
);
1305 /* Override global settings with explicit options, if any. */
1306 auto group
= make_value_print_options_def_group (print_opts
);
1307 gdb::option::process_options
1308 (&args
, gdb::option::PROCESS_OPTIONS_REQUIRE_DELIMITER
, group
);
1310 print_command_parse_format (&args
, "print", print_opts
);
1312 const char *exp
= args
;
1314 if (exp
!= nullptr && *exp
)
1316 /* This setting allows large arrays to be printed by limiting the
1317 number of elements that are loaded into GDB's memory; we only
1318 need to load as many array elements as we plan to print. */
1319 scoped_array_length_limiting
limit_large_arrays (print_opts
->print_max
);
1321 /* VOIDPRINT is true to indicate that we do want to print a void
1322 value, so invert it for parse_expression. */
1323 parser_flags flags
= 0;
1325 flags
= PARSER_VOID_CONTEXT
;
1326 expression_up expr
= parse_expression (exp
, nullptr, flags
);
1327 return expr
->evaluate ();
1330 return access_value_history (0);
1333 /* Implementation of the "print" and "call" commands. */
1336 print_command_1 (const char *args
, int voidprint
)
1338 value_print_options print_opts
;
1340 struct value
*val
= process_print_command_args (args
, &print_opts
, voidprint
);
1342 if (voidprint
|| (val
&& val
->type () &&
1343 val
->type ()->code () != TYPE_CODE_VOID
))
1345 /* If memory tagging validation is on, check if the tag is valid. */
1346 if (print_opts
.memory_tag_violations
)
1350 gdbarch
*arch
= current_inferior ()->arch ();
1352 if (should_validate_memtags (arch
, val
)
1353 && !gdbarch_memtag_matches_p (arch
, val
))
1355 /* Fetch the logical tag. */
1357 = gdbarch_get_memtag (arch
, val
, memtag_type::logical
);
1358 std::string ltag
= gdbarch_memtag_to_string (arch
, tag
);
1360 /* Fetch the allocation tag. */
1361 tag
= gdbarch_get_memtag (arch
, val
,
1362 memtag_type::allocation
);
1363 std::string atag
= gdbarch_memtag_to_string (arch
, tag
);
1365 gdb_printf (_("Logical tag (%s) does not match the "
1366 "allocation tag (%s).\n"),
1367 ltag
.c_str (), atag
.c_str ());
1370 catch (gdb_exception_error
&ex
)
1372 if (ex
.error
== TARGET_CLOSE_ERROR
)
1375 gdb_printf (gdb_stderr
,
1376 _("Could not validate memory tag: %s\n"),
1377 ex
.message
->c_str ());
1381 print_value (val
, print_opts
);
1385 /* See valprint.h. */
1388 print_command_completer (struct cmd_list_element
*ignore
,
1389 completion_tracker
&tracker
,
1390 const char *text
, const char * /*word*/)
1392 const auto group
= make_value_print_options_def_group (nullptr);
1393 if (gdb::option::complete_options
1394 (tracker
, &text
, gdb::option::PROCESS_OPTIONS_REQUIRE_DELIMITER
, group
))
1397 if (skip_over_slash_fmt (tracker
, &text
))
1400 const char *word
= advance_to_expression_complete_word_point (tracker
, text
);
1401 expression_completer (ignore
, tracker
, text
, word
);
1405 print_command (const char *exp
, int from_tty
)
1407 print_command_1 (exp
, true);
1410 /* Same as print, except it doesn't print void results. */
1412 call_command (const char *exp
, int from_tty
)
1414 print_command_1 (exp
, false);
1417 /* Implementation of the "output" command. */
1420 output_command (const char *exp
, int from_tty
)
1424 struct format_data fmt
;
1425 struct value_print_options opts
;
1430 if (exp
&& *exp
== '/')
1433 fmt
= decode_format (&exp
, 0, 0);
1434 validate_format (fmt
, "output");
1435 format
= fmt
.format
;
1438 expression_up expr
= parse_expression (exp
);
1440 val
= expr
->evaluate ();
1442 annotate_value_begin (val
->type ());
1444 get_formatted_print_options (&opts
, format
);
1447 /* This setting allows large arrays to be printed by limiting the
1448 number of elements that are loaded into GDB's memory; we only
1449 need to load as many array elements as we plan to print. */
1450 scoped_array_length_limiting
limit_large_arrays (opts
.print_max
);
1452 print_formatted (val
, fmt
.size
, &opts
, gdb_stdout
);
1454 annotate_value_end ();
1456 gdb_flush (gdb_stdout
);
1460 set_command (const char *exp
, int from_tty
)
1462 expression_up expr
= parse_expression (exp
);
1464 switch (expr
->first_opcode ())
1466 case UNOP_PREINCREMENT
:
1467 case UNOP_POSTINCREMENT
:
1468 case UNOP_PREDECREMENT
:
1469 case UNOP_POSTDECREMENT
:
1471 case BINOP_ASSIGN_MODIFY
:
1476 (_("Expression is not an assignment (and might have no effect)"));
1483 info_symbol_command (const char *arg
, int from_tty
)
1485 struct minimal_symbol
*msymbol
;
1486 CORE_ADDR addr
, sect_addr
;
1488 unsigned int offset
;
1491 error_no_arg (_("address"));
1493 addr
= parse_and_eval_address (arg
);
1494 for (objfile
*objfile
: current_program_space
->objfiles ())
1495 for (obj_section
*osect
: objfile
->sections ())
1497 /* Only process each object file once, even if there's a separate
1499 if (objfile
->separate_debug_objfile_backlink
)
1502 sect_addr
= overlay_mapped_address (addr
, osect
);
1504 if (osect
->contains (sect_addr
)
1506 = lookup_minimal_symbol_by_pc_section (sect_addr
,
1509 const char *obj_name
, *mapped
, *sec_name
, *msym_name
;
1510 const char *loc_string
;
1513 offset
= sect_addr
- msymbol
->value_address (objfile
);
1514 mapped
= section_is_mapped (osect
) ? _("mapped") : _("unmapped");
1515 sec_name
= osect
->the_bfd_section
->name
;
1516 msym_name
= msymbol
->print_name ();
1518 /* Don't print the offset if it is zero.
1519 We assume there's no need to handle i18n of "sym + offset". */
1520 std::string string_holder
;
1523 string_holder
= string_printf ("%s + %u", msym_name
, offset
);
1524 loc_string
= string_holder
.c_str ();
1527 loc_string
= msym_name
;
1529 gdb_assert (osect
->objfile
&& objfile_name (osect
->objfile
));
1530 obj_name
= objfile_name (osect
->objfile
);
1532 if (current_program_space
->multi_objfile_p ())
1533 if (pc_in_unmapped_range (addr
, osect
))
1534 if (section_is_overlay (osect
))
1535 gdb_printf (_("%s in load address range of "
1536 "%s overlay section %s of %s\n"),
1537 loc_string
, mapped
, sec_name
, obj_name
);
1539 gdb_printf (_("%s in load address range of "
1540 "section %s of %s\n"),
1541 loc_string
, sec_name
, obj_name
);
1543 if (section_is_overlay (osect
))
1544 gdb_printf (_("%s in %s overlay section %s of %s\n"),
1545 loc_string
, mapped
, sec_name
, obj_name
);
1547 gdb_printf (_("%s in section %s of %s\n"),
1548 loc_string
, sec_name
, obj_name
);
1550 if (pc_in_unmapped_range (addr
, osect
))
1551 if (section_is_overlay (osect
))
1552 gdb_printf (_("%s in load address range of %s overlay "
1554 loc_string
, mapped
, sec_name
);
1557 (_("%s in load address range of section %s\n"),
1558 loc_string
, sec_name
);
1560 if (section_is_overlay (osect
))
1561 gdb_printf (_("%s in %s overlay section %s\n"),
1562 loc_string
, mapped
, sec_name
);
1564 gdb_printf (_("%s in section %s\n"),
1565 loc_string
, sec_name
);
1569 gdb_printf (_("No symbol matches %s.\n"), arg
);
1573 info_address_command (const char *exp
, int from_tty
)
1575 struct gdbarch
*gdbarch
;
1578 struct bound_minimal_symbol msymbol
;
1580 struct obj_section
*section
;
1581 CORE_ADDR load_addr
, context_pc
= 0;
1582 struct field_of_this_result is_a_field_of_this
;
1585 error (_("Argument required."));
1587 sym
= lookup_symbol (exp
, get_selected_block (&context_pc
), SEARCH_VFT
,
1588 &is_a_field_of_this
).symbol
;
1591 if (is_a_field_of_this
.type
!= NULL
)
1593 gdb_printf ("Symbol \"");
1594 fprintf_symbol (gdb_stdout
, exp
,
1595 current_language
->la_language
, DMGL_ANSI
);
1596 gdb_printf ("\" is a field of the local class variable ");
1597 if (current_language
->la_language
== language_objc
)
1598 gdb_printf ("`self'\n"); /* ObjC equivalent of "this" */
1600 gdb_printf ("`this'\n");
1604 msymbol
= lookup_bound_minimal_symbol (exp
);
1606 if (msymbol
.minsym
!= NULL
)
1608 struct objfile
*objfile
= msymbol
.objfile
;
1610 gdbarch
= objfile
->arch ();
1611 load_addr
= msymbol
.value_address ();
1613 gdb_printf ("Symbol \"");
1614 fprintf_symbol (gdb_stdout
, exp
,
1615 current_language
->la_language
, DMGL_ANSI
);
1616 gdb_printf ("\" is at ");
1617 fputs_styled (paddress (gdbarch
, load_addr
), address_style
.style (),
1619 gdb_printf (" in a file compiled without debugging");
1620 section
= msymbol
.minsym
->obj_section (objfile
);
1621 if (section_is_overlay (section
))
1623 load_addr
= overlay_unmapped_address (load_addr
, section
);
1624 gdb_printf (",\n -- loaded at ");
1625 fputs_styled (paddress (gdbarch
, load_addr
),
1626 address_style
.style (),
1628 gdb_printf (" in overlay section %s",
1629 section
->the_bfd_section
->name
);
1634 error (_("No symbol \"%s\" in current context."), exp
);
1638 gdb_printf ("Symbol \"");
1639 gdb_puts (sym
->print_name ());
1640 gdb_printf ("\" is ");
1641 val
= sym
->value_longest ();
1642 if (sym
->is_objfile_owned ())
1643 section
= sym
->obj_section (sym
->objfile ());
1646 gdbarch
= sym
->arch ();
1648 if (const symbol_computed_ops
*computed_ops
= sym
->computed_ops ();
1649 computed_ops
!= nullptr)
1651 computed_ops
->describe_location (sym
, context_pc
, gdb_stdout
);
1656 switch (sym
->aclass ())
1659 case LOC_CONST_BYTES
:
1660 gdb_printf ("constant");
1664 gdb_printf ("a label at address ");
1665 load_addr
= sym
->value_address ();
1666 fputs_styled (paddress (gdbarch
, load_addr
), address_style
.style (),
1668 if (section_is_overlay (section
))
1670 load_addr
= overlay_unmapped_address (load_addr
, section
);
1671 gdb_printf (",\n -- loaded at ");
1672 fputs_styled (paddress (gdbarch
, load_addr
), address_style
.style (),
1674 gdb_printf (" in overlay section %s",
1675 section
->the_bfd_section
->name
);
1680 gdb_assert_not_reached ("LOC_COMPUTED variable missing a method");
1683 /* GDBARCH is the architecture associated with the objfile the symbol
1684 is defined in; the target architecture may be different, and may
1685 provide additional registers. However, we do not know the target
1686 architecture at this point. We assume the objfile architecture
1687 will contain all the standard registers that occur in debug info
1689 regno
= sym
->register_ops ()->register_number (sym
, gdbarch
);
1691 if (sym
->is_argument ())
1692 gdb_printf (_("an argument in register %s"),
1693 gdbarch_register_name (gdbarch
, regno
));
1695 gdb_printf (_("a variable in register %s"),
1696 gdbarch_register_name (gdbarch
, regno
));
1700 gdb_printf (_("static storage at address "));
1701 load_addr
= sym
->value_address ();
1702 fputs_styled (paddress (gdbarch
, load_addr
), address_style
.style (),
1704 if (section_is_overlay (section
))
1706 load_addr
= overlay_unmapped_address (load_addr
, section
);
1707 gdb_printf (_(",\n -- loaded at "));
1708 fputs_styled (paddress (gdbarch
, load_addr
), address_style
.style (),
1710 gdb_printf (_(" in overlay section %s"),
1711 section
->the_bfd_section
->name
);
1715 case LOC_REGPARM_ADDR
:
1716 /* Note comment at LOC_REGISTER. */
1717 regno
= sym
->register_ops ()->register_number (sym
, gdbarch
);
1718 gdb_printf (_("address of an argument in register %s"),
1719 gdbarch_register_name (gdbarch
, regno
));
1723 gdb_printf (_("an argument at offset %ld"), val
);
1727 gdb_printf (_("a local variable at frame offset %ld"), val
);
1731 gdb_printf (_("a reference argument at offset %ld"), val
);
1735 gdb_printf (_("a typedef"));
1739 gdb_printf (_("a function at address "));
1740 load_addr
= sym
->value_block ()->entry_pc ();
1741 fputs_styled (paddress (gdbarch
, load_addr
), address_style
.style (),
1743 if (section_is_overlay (section
))
1745 load_addr
= overlay_unmapped_address (load_addr
, section
);
1746 gdb_printf (_(",\n -- loaded at "));
1747 fputs_styled (paddress (gdbarch
, load_addr
), address_style
.style (),
1749 gdb_printf (_(" in overlay section %s"),
1750 section
->the_bfd_section
->name
);
1754 case LOC_UNRESOLVED
:
1756 struct bound_minimal_symbol msym
;
1758 msym
= lookup_bound_minimal_symbol (sym
->linkage_name ());
1759 if (msym
.minsym
== NULL
)
1760 gdb_printf ("unresolved");
1763 section
= msym
.obj_section ();
1766 && (section
->the_bfd_section
->flags
& SEC_THREAD_LOCAL
) != 0)
1768 load_addr
= CORE_ADDR (msym
.minsym
->unrelocated_address ());
1769 gdb_printf (_("a thread-local variable at offset %s "
1770 "in the thread-local storage for `%s'"),
1771 paddress (gdbarch
, load_addr
),
1772 objfile_name (section
->objfile
));
1776 load_addr
= msym
.value_address ();
1777 gdb_printf (_("static storage at address "));
1778 fputs_styled (paddress (gdbarch
, load_addr
),
1779 address_style
.style (), gdb_stdout
);
1780 if (section_is_overlay (section
))
1782 load_addr
= overlay_unmapped_address (load_addr
, section
);
1783 gdb_printf (_(",\n -- loaded at "));
1784 fputs_styled (paddress (gdbarch
, load_addr
),
1785 address_style
.style (),
1787 gdb_printf (_(" in overlay section %s"),
1788 section
->the_bfd_section
->name
);
1795 case LOC_OPTIMIZED_OUT
:
1796 gdb_printf (_("optimized out"));
1800 gdb_printf (_("of unknown (botched) type"));
1808 x_command (const char *exp
, int from_tty
)
1810 struct format_data fmt
;
1813 fmt
.format
= last_format
? last_format
: 'x';
1814 fmt
.print_tags
= last_print_tags
;
1815 fmt
.size
= last_size
;
1819 /* If there is no expression and no format, use the most recent
1821 if (exp
== nullptr && last_count
> 0)
1822 fmt
.count
= last_count
;
1824 if (exp
&& *exp
== '/')
1826 const char *tmp
= exp
+ 1;
1828 fmt
= decode_format (&tmp
, last_format
, last_size
);
1832 last_count
= fmt
.count
;
1834 /* If we have an expression, evaluate it and use it as the address. */
1836 if (exp
!= 0 && *exp
!= 0)
1838 expression_up expr
= parse_expression (exp
);
1839 /* Cause expression not to be there any more if this command is
1840 repeated with Newline. But don't clobber a user-defined
1841 command's definition. */
1843 set_repeat_arguments ("");
1844 val
= expr
->evaluate ();
1845 if (TYPE_IS_REFERENCE (val
->type ()))
1846 val
= coerce_ref (val
);
1847 /* In rvalue contexts, such as this, functions are coerced into
1848 pointers to functions. This makes "x/i main" work. */
1849 if (val
->type ()->code () == TYPE_CODE_FUNC
1850 && val
->lval () == lval_memory
)
1851 next_address
= val
->address ();
1853 next_address
= value_as_address (val
);
1855 next_gdbarch
= expr
->gdbarch
;
1859 error_no_arg (_("starting display address"));
1861 do_examine (fmt
, next_gdbarch
, next_address
);
1863 /* If the examine succeeds, we remember its size and format for next
1864 time. Set last_size to 'b' for strings. */
1865 if (fmt
.format
== 's')
1868 last_size
= fmt
.size
;
1869 last_format
= fmt
.format
;
1871 /* Remember tag-printing setting. */
1872 last_print_tags
= fmt
.print_tags
;
1874 /* Set a couple of internal variables if appropriate. */
1875 if (last_examine_value
!= nullptr)
1877 /* Make last address examined available to the user as $_. Use
1878 the correct pointer type. */
1879 struct type
*pointer_type
1880 = lookup_pointer_type (last_examine_value
->type ());
1881 set_internalvar (lookup_internalvar ("_"),
1882 value_from_pointer (pointer_type
,
1883 last_examine_address
));
1885 /* Make contents of last address examined available to the user
1886 as $__. If the last value has not been fetched from memory
1887 then don't fetch it now; instead mark it by voiding the $__
1889 if (last_examine_value
->lazy ())
1890 clear_internalvar (lookup_internalvar ("__"));
1892 set_internalvar (lookup_internalvar ("__"), last_examine_value
.get ());
1896 /* Command completion for the 'display' and 'x' commands. */
1899 display_and_x_command_completer (struct cmd_list_element
*ignore
,
1900 completion_tracker
&tracker
,
1901 const char *text
, const char * /*word*/)
1903 if (skip_over_slash_fmt (tracker
, &text
))
1906 const char *word
= advance_to_expression_complete_word_point (tracker
, text
);
1907 expression_completer (ignore
, tracker
, text
, word
);
1912 /* Add an expression to the auto-display chain.
1913 Specify the expression. */
1916 display_command (const char *arg
, int from_tty
)
1918 struct format_data fmt
;
1919 struct display
*newobj
;
1920 const char *exp
= arg
;
1931 fmt
= decode_format (&exp
, 0, 0);
1932 if (fmt
.size
&& fmt
.format
== 0)
1934 if (fmt
.format
== 'i' || fmt
.format
== 's')
1945 innermost_block_tracker tracker
;
1946 expression_up expr
= parse_expression (exp
, &tracker
);
1948 newobj
= new display (exp
, std::move (expr
), fmt
,
1949 current_program_space
, tracker
.block ());
1950 all_displays
.emplace_back (newobj
);
1953 do_one_display (newobj
);
1958 /* Clear out the display_chain. Done when new symtabs are loaded,
1959 since this invalidates the types stored in many expressions. */
1964 all_displays
.clear ();
1967 /* Delete the auto-display DISPLAY. */
1970 delete_display (struct display
*display
)
1972 gdb_assert (display
!= NULL
);
1974 auto iter
= std::find_if (all_displays
.begin (),
1975 all_displays
.end (),
1976 [=] (const std::unique_ptr
<struct display
> &item
)
1978 return item
.get () == display
;
1980 gdb_assert (iter
!= all_displays
.end ());
1981 all_displays
.erase (iter
);
1984 /* Call FUNCTION on each of the displays whose numbers are given in
1985 ARGS. DATA is passed unmodified to FUNCTION. */
1988 map_display_numbers (const char *args
,
1989 gdb::function_view
<void (struct display
*)> function
)
1994 error_no_arg (_("one or more display numbers"));
1996 number_or_range_parser
parser (args
);
1998 while (!parser
.finished ())
2000 const char *p
= parser
.cur_tok ();
2002 num
= parser
.get_number ();
2004 warning (_("bad display number at or near '%s'"), p
);
2007 auto iter
= std::find_if (all_displays
.begin (),
2008 all_displays
.end (),
2009 [=] (const std::unique_ptr
<display
> &item
)
2011 return item
->number
== num
;
2013 if (iter
== all_displays
.end ())
2014 gdb_printf (_("No display number %d.\n"), num
);
2016 function (iter
->get ());
2021 /* "undisplay" command. */
2024 undisplay_command (const char *args
, int from_tty
)
2028 if (query (_("Delete all auto-display expressions? ")))
2034 map_display_numbers (args
, delete_display
);
2038 /* Display a single auto-display.
2039 Do nothing if the display cannot be printed in the current context,
2040 or if the display is disabled. */
2043 do_one_display (struct display
*d
)
2045 int within_current_scope
;
2050 /* The expression carries the architecture that was used at parse time.
2051 This is a problem if the expression depends on architecture features
2052 (e.g. register numbers), and the current architecture is now different.
2053 For example, a display statement like "display/i $pc" is expected to
2054 display the PC register of the current architecture, not the arch at
2055 the time the display command was given. Therefore, we re-parse the
2056 expression if the current architecture has changed. */
2057 if (d
->exp
!= NULL
&& d
->exp
->gdbarch
!= get_current_arch ())
2068 innermost_block_tracker tracker
;
2069 d
->exp
= parse_expression (d
->exp_string
.c_str (), &tracker
);
2070 d
->block
= tracker
.block ();
2072 catch (const gdb_exception_error
&ex
)
2074 /* Can't re-parse the expression. Disable this display item. */
2075 d
->enabled_p
= false;
2076 warning (_("Unable to display \"%s\": %s"),
2077 d
->exp_string
.c_str (), ex
.what ());
2084 if (d
->pspace
== current_program_space
)
2085 within_current_scope
= d
->block
->contains (get_selected_block (0),
2088 within_current_scope
= 0;
2091 within_current_scope
= 1;
2092 if (!within_current_scope
)
2095 scoped_restore save_display_number
2096 = make_scoped_restore (¤t_display_number
, d
->number
);
2098 annotate_display_begin ();
2099 gdb_printf ("%d", d
->number
);
2100 annotate_display_number_end ();
2105 annotate_display_format ();
2108 if (d
->format
.count
!= 1)
2109 gdb_printf ("%d", d
->format
.count
);
2110 gdb_printf ("%c", d
->format
.format
);
2111 if (d
->format
.format
!= 'i' && d
->format
.format
!= 's')
2112 gdb_printf ("%c", d
->format
.size
);
2115 annotate_display_expression ();
2117 gdb_puts (d
->exp_string
.c_str ());
2118 annotate_display_expression_end ();
2120 if (d
->format
.count
!= 1 || d
->format
.format
== 'i')
2125 annotate_display_value ();
2132 val
= d
->exp
->evaluate ();
2133 addr
= value_as_address (val
);
2134 if (d
->format
.format
== 'i')
2135 addr
= gdbarch_addr_bits_remove (d
->exp
->gdbarch
, addr
);
2136 do_examine (d
->format
, d
->exp
->gdbarch
, addr
);
2138 catch (const gdb_exception_error
&ex
)
2140 gdb_printf (_("%p[<error: %s>%p]\n"),
2141 metadata_style
.style ().ptr (), ex
.what (),
2147 struct value_print_options opts
;
2149 annotate_display_format ();
2151 if (d
->format
.format
)
2152 gdb_printf ("/%c ", d
->format
.format
);
2154 annotate_display_expression ();
2156 gdb_puts (d
->exp_string
.c_str ());
2157 annotate_display_expression_end ();
2161 annotate_display_expression ();
2163 get_formatted_print_options (&opts
, d
->format
.format
);
2164 opts
.raw
= d
->format
.raw
;
2170 val
= d
->exp
->evaluate ();
2171 print_formatted (val
, d
->format
.size
, &opts
, gdb_stdout
);
2173 catch (const gdb_exception_error
&ex
)
2175 fprintf_styled (gdb_stdout
, metadata_style
.style (),
2176 _("<error: %s>"), ex
.what ());
2182 annotate_display_end ();
2184 gdb_flush (gdb_stdout
);
2187 /* Display all of the values on the auto-display chain which can be
2188 evaluated in the current scope. */
2193 for (auto &d
: all_displays
)
2194 do_one_display (d
.get ());
2197 /* Delete the auto-display which we were in the process of displaying.
2198 This is done when there is an error or a signal. */
2201 disable_display (int num
)
2203 for (auto &d
: all_displays
)
2204 if (d
->number
== num
)
2206 d
->enabled_p
= false;
2209 gdb_printf (_("No display number %d.\n"), num
);
2213 disable_current_display (void)
2215 if (current_display_number
>= 0)
2217 disable_display (current_display_number
);
2218 gdb_printf (gdb_stderr
,
2219 _("Disabling display %d to "
2220 "avoid infinite recursion.\n"),
2221 current_display_number
);
2223 current_display_number
= -1;
2227 info_display_command (const char *ignore
, int from_tty
)
2229 if (all_displays
.empty ())
2230 gdb_printf (_("There are no auto-display expressions now.\n"));
2232 gdb_printf (_("Auto-display expressions now in effect:\n\
2233 Num Enb Expression\n"));
2235 for (auto &d
: all_displays
)
2237 gdb_printf ("%d: %c ", d
->number
, "ny"[(int) d
->enabled_p
]);
2239 gdb_printf ("/%d%c%c ", d
->format
.count
, d
->format
.size
,
2241 else if (d
->format
.format
)
2242 gdb_printf ("/%c ", d
->format
.format
);
2243 gdb_puts (d
->exp_string
.c_str ());
2244 if (d
->block
&& !d
->block
->contains (get_selected_block (0), true))
2245 gdb_printf (_(" (cannot be evaluated in the current context)"));
2250 /* Implementation of both the "disable display" and "enable display"
2251 commands. ENABLE decides what to do. */
2254 enable_disable_display_command (const char *args
, int from_tty
, bool enable
)
2258 for (auto &d
: all_displays
)
2259 d
->enabled_p
= enable
;
2263 map_display_numbers (args
,
2264 [=] (struct display
*d
)
2266 d
->enabled_p
= enable
;
2270 /* The "enable display" command. */
2273 enable_display_command (const char *args
, int from_tty
)
2275 enable_disable_display_command (args
, from_tty
, true);
2278 /* The "disable display" command. */
2281 disable_display_command (const char *args
, int from_tty
)
2283 enable_disable_display_command (args
, from_tty
, false);
2286 /* display_chain items point to blocks and expressions. Some expressions in
2287 turn may point to symbols.
2288 Both symbols and blocks are obstack_alloc'd on objfile_stack, and are
2289 obstack_free'd when a shared library is unloaded.
2290 Clear pointers that are about to become dangling.
2291 Both .exp and .block fields will be restored next time we need to display
2292 an item by re-parsing .exp_string field in the new execution context. */
2295 clear_dangling_display_expressions (struct objfile
*objfile
)
2297 program_space
*pspace
= objfile
->pspace
;
2298 if (objfile
->separate_debug_objfile_backlink
)
2300 objfile
= objfile
->separate_debug_objfile_backlink
;
2301 gdb_assert (objfile
->pspace
== pspace
);
2304 for (auto &d
: all_displays
)
2306 if (d
->pspace
!= pspace
)
2309 struct objfile
*bl_objf
= nullptr;
2310 if (d
->block
!= nullptr)
2312 bl_objf
= d
->block
->objfile ();
2313 if (bl_objf
->separate_debug_objfile_backlink
!= nullptr)
2314 bl_objf
= bl_objf
->separate_debug_objfile_backlink
;
2317 if (bl_objf
== objfile
2318 || (d
->exp
!= nullptr && d
->exp
->uses_objfile (objfile
)))
2327 /* Print the value in stack frame FRAME of a variable specified by a
2328 struct symbol. NAME is the name to print; if NULL then VAR's print
2329 name will be used. STREAM is the ui_file on which to print the
2330 value. INDENT specifies the number of indent levels to print
2331 before printing the variable name. */
2334 print_variable_and_value (const char *name
, struct symbol
*var
,
2335 const frame_info_ptr
&frame
,
2336 struct ui_file
*stream
, int indent
)
2340 name
= var
->print_name ();
2342 gdb_printf (stream
, "%*s%ps = ", 2 * indent
, "",
2343 styled_string (variable_name_style
.style (), name
));
2348 struct value_print_options opts
;
2350 /* READ_VAR_VALUE needs a block in order to deal with non-local
2351 references (i.e. to handle nested functions). In this context, we
2352 print variables that are local to this frame, so we can avoid passing
2354 val
= read_var_value (var
, NULL
, frame
);
2355 get_user_print_options (&opts
);
2356 opts
.deref_ref
= true;
2357 common_val_print_checked (val
, stream
, indent
, &opts
, current_language
);
2359 catch (const gdb_exception_error
&except
)
2361 fprintf_styled (stream
, metadata_style
.style (),
2362 "<error reading variable %s (%s)>", name
,
2366 gdb_printf (stream
, "\n");
2369 /* Subroutine of ui_printf to simplify it.
2370 Print VALUE to STREAM using FORMAT.
2371 VALUE is a C-style string either on the target or
2372 in a GDB internal variable. */
2375 printf_c_string (struct ui_file
*stream
, const char *format
,
2376 struct value
*value
)
2378 gdb::byte_vector str
;
2380 if (((value
->type ()->code () != TYPE_CODE_PTR
&& value
->lval () == lval_internalvar
)
2381 || value
->type ()->code () == TYPE_CODE_ARRAY
)
2382 && c_is_string_type_p (value
->type ()))
2384 size_t len
= value
->type ()->length ();
2386 /* Copy the internal var value to TEM_STR and append a terminating null
2387 character. This protects against corrupted C-style strings that lack
2388 the terminating null char. It also allows Ada-style strings (not
2389 null terminated) to be printed without problems. */
2390 str
.resize (len
+ 1);
2392 memcpy (str
.data (), value
->contents ().data (), len
);
2397 CORE_ADDR tem
= value_as_address (value
);;
2402 DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2403 gdb_printf (stream
, format
, "(null)");
2408 /* This is a %s argument. Build the string in STR which is
2410 gdb_assert (str
.size () == 0);
2412 for (len
= 0;; len
++)
2418 read_memory (tem
+ len
, &c
, 1);
2419 if (!exceeds_max_value_size (len
+ 1))
2425 if (exceeds_max_value_size (len
+ 1))
2426 error (_("printed string requires %s bytes, which is more than "
2427 "max-value-size"), plongest (len
+ 1));
2429 /* We will have passed through the above loop at least once, and will
2430 only exit the loop when we have pushed a zero byte onto the end of
2432 gdb_assert (str
.size () > 0);
2433 gdb_assert (str
.back () == 0);
2437 DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2438 gdb_printf (stream
, format
, (char *) str
.data ());
2442 /* Subroutine of ui_printf to simplify it.
2443 Print VALUE to STREAM using FORMAT.
2444 VALUE is a wide C-style string on the target or
2445 in a GDB internal variable. */
2448 printf_wide_c_string (struct ui_file
*stream
, const char *format
,
2449 struct value
*value
)
2451 const gdb_byte
*str
;
2453 struct gdbarch
*gdbarch
= value
->type ()->arch ();
2454 struct type
*wctype
= lookup_typename (current_language
,
2455 "wchar_t", NULL
, 0);
2456 int wcwidth
= wctype
->length ();
2457 std::optional
<gdb::byte_vector
> tem_str
;
2459 if (value
->lval () == lval_internalvar
2460 && c_is_string_type_p (value
->type ()))
2462 str
= value
->contents ().data ();
2463 len
= value
->type ()->length ();
2467 CORE_ADDR tem
= value_as_address (value
);
2472 DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2473 gdb_printf (stream
, format
, "(null)");
2478 /* This is a %s argument. Find the length of the string. */
2479 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2482 for (len
= 0;; len
+= wcwidth
)
2486 if (!exceeds_max_value_size (len
+ wcwidth
))
2488 tem_str
->resize (tem_str
->size () + wcwidth
);
2489 dst
= tem_str
->data () + len
;
2493 /* We still need to check for the null-character, so we need
2494 somewhere to place the data read from the inferior. We
2495 can't keep growing TEM_STR, it's gotten too big, so
2496 instead just read the new character into the start of
2497 TEMS_STR. This will corrupt the previously read contents,
2498 but we're not going to print this string anyway, we just
2499 want to know how big it would have been so we can tell the
2500 user in the error message (see below).
2502 And we know there will be space in this buffer so long as
2503 WCWIDTH is smaller than our LONGEST type, the
2504 max-value-size can't be smaller than a LONGEST. */
2505 dst
= tem_str
->data ();
2507 read_memory (tem
+ len
, dst
, wcwidth
);
2508 if (extract_unsigned_integer (dst
, wcwidth
, byte_order
) == 0)
2512 if (exceeds_max_value_size (len
+ wcwidth
))
2513 error (_("printed string requires %s bytes, which is more than "
2514 "max-value-size"), plongest (len
+ wcwidth
));
2516 str
= tem_str
->data ();
2519 auto_obstack output
;
2521 convert_between_encodings (target_wide_charset (gdbarch
),
2524 &output
, translit_char
);
2525 obstack_grow_str0 (&output
, "");
2528 DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2529 gdb_printf (stream
, format
, obstack_base (&output
));
2533 /* Subroutine of ui_printf to simplify it.
2534 Print VALUE, a floating point value, to STREAM using FORMAT. */
2537 printf_floating (struct ui_file
*stream
, const char *format
,
2538 struct value
*value
, enum argclass argclass
)
2540 /* Parameter data. */
2541 struct type
*param_type
= value
->type ();
2542 struct gdbarch
*gdbarch
= param_type
->arch ();
2544 /* Determine target type corresponding to the format string. */
2545 struct type
*fmt_type
;
2549 fmt_type
= builtin_type (gdbarch
)->builtin_double
;
2551 case long_double_arg
:
2552 fmt_type
= builtin_type (gdbarch
)->builtin_long_double
;
2554 case dec32float_arg
:
2555 fmt_type
= builtin_type (gdbarch
)->builtin_decfloat
;
2557 case dec64float_arg
:
2558 fmt_type
= builtin_type (gdbarch
)->builtin_decdouble
;
2560 case dec128float_arg
:
2561 fmt_type
= builtin_type (gdbarch
)->builtin_declong
;
2564 gdb_assert_not_reached ("unexpected argument class");
2567 /* To match the traditional GDB behavior, the conversion is
2568 done differently depending on the type of the parameter:
2570 - if the parameter has floating-point type, it's value
2571 is converted to the target type;
2573 - otherwise, if the parameter has a type that is of the
2574 same size as a built-in floating-point type, the value
2575 bytes are interpreted as if they were of that type, and
2576 then converted to the target type (this is not done for
2577 decimal floating-point argument classes);
2579 - otherwise, if the source value has an integer value,
2580 it's value is converted to the target type;
2582 - otherwise, an error is raised.
2584 In either case, the result of the conversion is a byte buffer
2585 formatted in the target format for the target type. */
2587 if (fmt_type
->code () == TYPE_CODE_FLT
)
2589 param_type
= float_type_from_length (param_type
);
2590 if (param_type
!= value
->type ())
2591 value
= value_from_contents (param_type
,
2592 value
->contents ().data ());
2595 value
= value_cast (fmt_type
, value
);
2597 /* Convert the value to a string and print it. */
2599 = target_float_to_string (value
->contents ().data (), fmt_type
, format
);
2600 gdb_puts (str
.c_str (), stream
);
2603 /* Subroutine of ui_printf to simplify it.
2604 Print VALUE, a target pointer, to STREAM using FORMAT. */
2607 printf_pointer (struct ui_file
*stream
, const char *format
,
2608 struct value
*value
)
2610 /* We avoid the host's %p because pointers are too
2611 likely to be the wrong size. The only interesting
2612 modifier for %p is a width; extract that, and then
2613 handle %p as glibc would: %#x or a literal "(nil)". */
2615 #ifdef PRINTF_HAS_LONG_LONG
2616 long long val
= value_as_long (value
);
2618 long val
= value_as_long (value
);
2621 /* Build the new output format in FMT. */
2624 /* Copy up to the leading %. */
2625 const char *p
= format
;
2628 int is_percent
= (*p
== '%');
2630 fmt
.push_back (*p
++);
2634 fmt
.push_back (*p
++);
2641 fmt
.push_back ('#');
2643 /* Copy any width or flags. Only the "-" flag is valid for pointers
2644 -- see the format_pieces constructor. */
2645 while (*p
== '-' || (*p
>= '0' && *p
< '9'))
2646 fmt
.push_back (*p
++);
2648 gdb_assert (*p
== 'p' && *(p
+ 1) == '\0');
2651 #ifdef PRINTF_HAS_LONG_LONG
2652 fmt
.push_back ('l');
2654 fmt
.push_back ('l');
2655 fmt
.push_back ('x');
2657 DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2658 gdb_printf (stream
, fmt
.c_str (), val
);
2663 fmt
.push_back ('s');
2665 DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2666 gdb_printf (stream
, fmt
.c_str (), "(nil)");
2671 /* printf "printf format string" ARG to STREAM. */
2674 ui_printf (const char *arg
, struct ui_file
*stream
)
2676 const char *s
= arg
;
2677 std::vector
<struct value
*> val_args
;
2680 error_no_arg (_("format-control string and values to print"));
2682 s
= skip_spaces (s
);
2684 /* A format string should follow, enveloped in double quotes. */
2686 error (_("Bad format string, missing '\"'."));
2688 format_pieces
fpieces (&s
, false, true);
2691 error (_("Bad format string, non-terminated '\"'."));
2693 s
= skip_spaces (s
);
2695 if (*s
!= ',' && *s
!= 0)
2696 error (_("Invalid argument syntax"));
2700 s
= skip_spaces (s
);
2705 const char *current_substring
;
2708 for (auto &&piece
: fpieces
)
2709 if (piece
.argclass
!= literal_piece
)
2712 /* Now, parse all arguments and evaluate them.
2713 Store the VALUEs in VAL_ARGS. */
2720 val_args
.push_back (parse_to_comma_and_eval (&s1
));
2727 if (val_args
.size () != nargs_wanted
)
2728 error (_("Wrong number of arguments for specified format-string"));
2730 /* Now actually print them. */
2732 for (auto &&piece
: fpieces
)
2734 current_substring
= piece
.string
;
2735 switch (piece
.argclass
)
2738 printf_c_string (stream
, current_substring
, val_args
[i
]);
2740 case wide_string_arg
:
2741 printf_wide_c_string (stream
, current_substring
, val_args
[i
]);
2745 struct gdbarch
*gdbarch
= val_args
[i
]->type ()->arch ();
2746 struct type
*wctype
= lookup_typename (current_language
,
2747 "wchar_t", NULL
, 0);
2748 struct type
*valtype
;
2749 const gdb_byte
*bytes
;
2751 valtype
= val_args
[i
]->type ();
2752 if (valtype
->length () != wctype
->length ()
2753 || valtype
->code () != TYPE_CODE_INT
)
2754 error (_("expected wchar_t argument for %%lc"));
2756 bytes
= val_args
[i
]->contents ().data ();
2758 auto_obstack output
;
2760 convert_between_encodings (target_wide_charset (gdbarch
),
2762 bytes
, valtype
->length (),
2764 &output
, translit_char
);
2765 obstack_grow_str0 (&output
, "");
2768 DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2769 gdb_printf (stream
, current_substring
,
2770 obstack_base (&output
));
2775 #ifdef PRINTF_HAS_LONG_LONG
2777 long long val
= value_as_long (val_args
[i
]);
2780 DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2781 gdb_printf (stream
, current_substring
, val
);
2786 error (_("long long not supported in printf"));
2790 int val
= value_as_long (val_args
[i
]);
2793 DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2794 gdb_printf (stream
, current_substring
, val
);
2800 long val
= value_as_long (val_args
[i
]);
2803 DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2804 gdb_printf (stream
, current_substring
, val
);
2810 size_t val
= value_as_long (val_args
[i
]);
2813 DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2814 gdb_printf (stream
, current_substring
, val
);
2818 /* Handles floating-point values. */
2820 case long_double_arg
:
2821 case dec32float_arg
:
2822 case dec64float_arg
:
2823 case dec128float_arg
:
2824 printf_floating (stream
, current_substring
, val_args
[i
],
2828 printf_pointer (stream
, current_substring
, val_args
[i
]);
2832 value_print_options print_opts
;
2833 get_user_print_options (&print_opts
);
2835 if (current_substring
[2] == '[')
2837 std::string
args (¤t_substring
[3],
2838 strlen (¤t_substring
[3]) - 1);
2840 const char *args_ptr
= args
.c_str ();
2842 /* Override global settings with explicit options, if
2845 = make_value_print_options_def_group (&print_opts
);
2846 gdb::option::process_options
2847 (&args_ptr
, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR
,
2850 if (*args_ptr
!= '\0')
2851 error (_("unexpected content in print options: %s"),
2855 print_formatted (val_args
[i
], 0, &print_opts
, stream
);
2859 /* Print a portion of the format string that has no
2860 directives. Note that this will not include any
2861 ordinary %-specs, but it might include "%%". That is
2862 why we use gdb_printf and not gdb_puts here.
2863 Also, we pass a dummy argument because some platforms
2864 have modified GCC to include -Wformat-security by
2865 default, which will warn here if there is no
2868 DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2869 gdb_printf (stream
, current_substring
, 0);
2873 internal_error (_("failed internal consistency check"));
2875 /* Maybe advance to the next argument. */
2876 if (piece
.argclass
!= literal_piece
)
2882 /* Implement the "printf" command. */
2885 printf_command (const char *arg
, int from_tty
)
2887 ui_printf (arg
, gdb_stdout
);
2888 gdb_stdout
->reset_style ();
2889 gdb_stdout
->wrap_here (0);
2890 gdb_stdout
->flush ();
2893 /* Implement the "eval" command. */
2896 eval_command (const char *arg
, int from_tty
)
2900 ui_printf (arg
, &stb
);
2902 std::string expanded
= insert_user_defined_cmd_args (stb
.c_str ());
2904 execute_command (expanded
.c_str (), from_tty
);
2907 /* Convenience function for error checking in memory-tag commands. */
2910 show_addr_not_tagged (CORE_ADDR address
)
2912 error (_("Address %s not in a region mapped with a memory tagging flag."),
2913 paddress (current_inferior ()->arch (), address
));
2916 /* Convenience function for error checking in memory-tag commands. */
2919 show_memory_tagging_unsupported (void)
2921 error (_("Memory tagging not supported or disabled by the current"
2925 /* Implement the "memory-tag" prefix command. */
2928 memory_tag_command (const char *arg
, int from_tty
)
2930 help_list (memory_tag_list
, "memory-tag ", all_commands
, gdb_stdout
);
2933 /* Helper for print-logical-tag and print-allocation-tag. */
2936 memory_tag_print_tag_command (const char *args
, enum memtag_type tag_type
)
2938 if (args
== nullptr)
2939 error_no_arg (_("address or pointer"));
2941 /* Parse args into a value. If the value is a pointer or an address,
2942 then fetch the logical or allocation tag. */
2943 value_print_options print_opts
;
2945 struct value
*val
= process_print_command_args (args
, &print_opts
, true);
2946 gdbarch
*arch
= current_inferior ()->arch ();
2948 /* If the address is not in a region memory mapped with a memory tagging
2949 flag, it is no use trying to access/manipulate its allocation tag.
2951 It is OK to manipulate the logical tag though. */
2952 CORE_ADDR addr
= value_as_address (val
);
2953 if (tag_type
== memtag_type::allocation
2954 && !target_is_address_tagged (arch
, addr
))
2955 show_addr_not_tagged (addr
);
2957 value
*tag_value
= gdbarch_get_memtag (arch
, val
, tag_type
);
2958 std::string tag
= gdbarch_memtag_to_string (arch
, tag_value
);
2961 gdb_printf (_("%s tag unavailable.\n"),
2963 == memtag_type::logical
? "Logical" : "Allocation");
2965 struct value
*v_tag
= process_print_command_args (tag
.c_str (),
2968 print_opts
.output_format
= 'x';
2969 print_value (v_tag
, print_opts
);
2972 /* Implement the "memory-tag print-logical-tag" command. */
2975 memory_tag_print_logical_tag_command (const char *args
, int from_tty
)
2977 if (!target_supports_memory_tagging ())
2978 show_memory_tagging_unsupported ();
2980 memory_tag_print_tag_command (args
, memtag_type::logical
);
2983 /* Implement the "memory-tag print-allocation-tag" command. */
2986 memory_tag_print_allocation_tag_command (const char *args
, int from_tty
)
2988 if (!target_supports_memory_tagging ())
2989 show_memory_tagging_unsupported ();
2991 memory_tag_print_tag_command (args
, memtag_type::allocation
);
2994 /* Parse ARGS and extract ADDR and TAG.
2995 ARGS should have format <expression> <tag bytes>. */
2998 parse_with_logical_tag_input (const char *args
, struct value
**val
,
2999 gdb::byte_vector
&tags
,
3000 value_print_options
*print_opts
)
3002 /* Fetch the address. */
3003 std::string address_string
= extract_string_maybe_quoted (&args
);
3005 /* Parse the address into a value. */
3006 *val
= process_print_command_args (address_string
.c_str (), print_opts
,
3009 /* Fetch the tag bytes. */
3010 std::string tag_string
= extract_string_maybe_quoted (&args
);
3012 /* Validate the input. */
3013 if (address_string
.empty () || tag_string
.empty ())
3014 error (_("Missing arguments."));
3016 if (tag_string
.length () != 2)
3017 error (_("Error parsing tags argument. The tag should be 2 digits."));
3019 tags
= hex2bin (tag_string
.c_str ());
3022 /* Implement the "memory-tag with-logical-tag" command. */
3025 memory_tag_with_logical_tag_command (const char *args
, int from_tty
)
3027 if (!target_supports_memory_tagging ())
3028 show_memory_tagging_unsupported ();
3030 if (args
== nullptr)
3031 error_no_arg (_("<address> <tag>"));
3033 gdb::byte_vector tags
;
3035 value_print_options print_opts
;
3036 gdbarch
*arch
= current_inferior ()->arch ();
3038 /* Parse the input. */
3039 parse_with_logical_tag_input (args
, &val
, tags
, &print_opts
);
3041 /* Setting the logical tag is just a local operation that does not touch
3042 any memory from the target. Given an input value, we modify the value
3043 to include the appropriate tag.
3045 For this reason we need to cast the argument value to a
3046 (void *) pointer. This is so we have the right type for the gdbarch
3047 hook to manipulate the value and insert the tag.
3049 Otherwise, this would fail if, for example, GDB parsed the argument value
3050 into an int-sized value and the pointer value has a type of greater
3053 /* Cast to (void *). */
3054 val
= value_cast (builtin_type (current_inferior ()->arch ())->builtin_data_ptr
,
3057 /* Length doesn't matter for a logical tag. Pass 0. */
3058 if (!gdbarch_set_memtags (arch
, val
, 0, tags
, memtag_type::logical
))
3059 gdb_printf (_("Could not update the logical tag data.\n"));
3062 /* Always print it in hex format. */
3063 print_opts
.output_format
= 'x';
3064 print_value (val
, print_opts
);
3068 /* Parse ARGS and extract ADDR, LENGTH and TAGS. */
3071 parse_set_allocation_tag_input (const char *args
, struct value
**val
,
3072 size_t *length
, gdb::byte_vector
&tags
)
3074 /* Fetch the address. */
3075 std::string address_string
= extract_string_maybe_quoted (&args
);
3077 /* Parse the address into a value. */
3078 value_print_options print_opts
;
3079 *val
= process_print_command_args (address_string
.c_str (), &print_opts
,
3082 /* Fetch the length. */
3083 std::string length_string
= extract_string_maybe_quoted (&args
);
3085 /* Fetch the tag bytes. */
3086 std::string tags_string
= extract_string_maybe_quoted (&args
);
3088 /* Validate the input. */
3089 if (address_string
.empty () || length_string
.empty () || tags_string
.empty ())
3090 error (_("Missing arguments."));
3093 const char *trailer
= nullptr;
3094 LONGEST parsed_length
= strtoulst (length_string
.c_str (), &trailer
, 10);
3096 if (errno
!= 0 || (trailer
!= nullptr && trailer
[0] != '\0'))
3097 error (_("Error parsing length argument."));
3099 if (parsed_length
<= 0)
3100 error (_("Invalid zero or negative length."));
3102 *length
= parsed_length
;
3104 if (tags_string
.length () % 2)
3105 error (_("Error parsing tags argument. Tags should be 2 digits per byte."));
3107 tags
= hex2bin (tags_string
.c_str ());
3110 /* Implement the "memory-tag set-allocation-tag" command.
3111 ARGS should be in the format <address> <length> <tags>. */
3114 memory_tag_set_allocation_tag_command (const char *args
, int from_tty
)
3116 if (!target_supports_memory_tagging ())
3117 show_memory_tagging_unsupported ();
3119 if (args
== nullptr)
3120 error_no_arg (_("<starting address> <length> <tag bytes>"));
3122 gdb::byte_vector tags
;
3126 /* Parse the input. */
3127 parse_set_allocation_tag_input (args
, &val
, &length
, tags
);
3129 /* If the address is not in a region memory-mapped with a memory tagging
3130 flag, it is no use trying to manipulate its allocation tag. */
3131 CORE_ADDR addr
= value_as_address (val
);
3132 if (!target_is_address_tagged (current_inferior ()-> arch(), addr
))
3133 show_addr_not_tagged (addr
);
3135 if (!gdbarch_set_memtags (current_inferior ()->arch (), val
, length
, tags
,
3136 memtag_type::allocation
))
3137 gdb_printf (_("Could not update the allocation tag(s).\n"));
3139 gdb_printf (_("Allocation tag(s) updated successfully.\n"));
3142 /* Implement the "memory-tag check" command. */
3145 memory_tag_check_command (const char *args
, int from_tty
)
3147 if (!target_supports_memory_tagging ())
3148 show_memory_tagging_unsupported ();
3150 if (args
== nullptr)
3151 error_no_arg (_("address or pointer"));
3153 /* Parse the expression into a value. If the value is an address or
3154 pointer, then check its logical tag against the allocation tag. */
3155 value_print_options print_opts
;
3157 struct value
*val
= process_print_command_args (args
, &print_opts
, true);
3158 gdbarch
*arch
= current_inferior ()->arch ();
3160 CORE_ADDR addr
= value_as_address (val
);
3162 /* If the address is not in a region memory mapped with a memory tagging
3163 flag, it is no use trying to access/manipulate its allocation tag. */
3164 if (!target_is_address_tagged (arch
, addr
))
3165 show_addr_not_tagged (addr
);
3167 /* Check if the tag is valid. */
3168 if (!gdbarch_memtag_matches_p (arch
, val
))
3170 value
*tag
= gdbarch_get_memtag (arch
, val
, memtag_type::logical
);
3171 std::string ltag
= gdbarch_memtag_to_string (arch
, tag
);
3173 tag
= gdbarch_get_memtag (arch
, val
, memtag_type::allocation
);
3174 std::string atag
= gdbarch_memtag_to_string (arch
, tag
);
3176 gdb_printf (_("Logical tag (%s) does not match"
3177 " the allocation tag (%s) for address %s.\n"),
3178 ltag
.c_str (), atag
.c_str (),
3179 paddress (current_inferior ()->arch (), addr
));
3184 = gdbarch_get_memtag (current_inferior ()->arch (), val
,
3185 memtag_type::logical
);
3187 = gdbarch_memtag_to_string (current_inferior ()->arch (), tag
);
3189 gdb_printf (_("Memory tags for address %s match (%s).\n"),
3190 paddress (current_inferior ()->arch (), addr
), ltag
.c_str ());
3194 void _initialize_printcmd ();
3196 _initialize_printcmd ()
3198 struct cmd_list_element
*c
;
3200 current_display_number
= -1;
3202 gdb::observers::free_objfile
.attach (clear_dangling_display_expressions
,
3205 add_info ("address", info_address_command
,
3206 _("Describe where symbol SYM is stored.\n\
3207 Usage: info address SYM"));
3209 add_info ("symbol", info_symbol_command
, _("\
3210 Describe what symbol is at location ADDR.\n\
3211 Usage: info symbol ADDR\n\
3212 Only for symbols with fixed locations (global or static scope)."));
3214 c
= add_com ("x", class_vars
, x_command
, _("\
3215 Examine memory: x/FMT ADDRESS.\n\
3216 ADDRESS is an expression for the memory address to examine.\n\
3217 FMT is a repeat count followed by a format letter and a size letter.\n\
3218 Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),\n\
3219 t(binary), f(float), a(address), i(instruction), c(char), s(string)\n\
3220 and z(hex, zero padded on the left).\n\
3221 Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes).\n\
3222 The specified number of objects of the specified size are printed\n\
3223 according to the format. If a negative number is specified, memory is\n\
3224 examined backward from the address.\n\n\
3225 Defaults for format and size letters are those previously used.\n\
3226 Default count is 1. Default address is following last thing printed\n\
3227 with this command or \"print\"."));
3228 set_cmd_completer_handle_brkchars (c
, display_and_x_command_completer
);
3230 add_info ("display", info_display_command
, _("\
3231 Expressions to display when program stops, with code numbers.\n\
3232 Usage: info display"));
3234 add_cmd ("undisplay", class_vars
, undisplay_command
, _("\
3235 Cancel some expressions to be displayed when program stops.\n\
3236 Usage: undisplay [NUM]...\n\
3237 Arguments are the code numbers of the expressions to stop displaying.\n\
3238 No argument means cancel all automatic-display expressions.\n\
3239 \"delete display\" has the same effect as this command.\n\
3240 Do \"info display\" to see current list of code numbers."),
3243 c
= add_com ("display", class_vars
, display_command
, _("\
3244 Print value of expression EXP each time the program stops.\n\
3245 Usage: display[/FMT] EXP\n\
3246 /FMT may be used before EXP as in the \"print\" command.\n\
3247 /FMT \"i\" or \"s\" or including a size-letter is allowed,\n\
3248 as in the \"x\" command, and then EXP is used to get the address to examine\n\
3249 and examining is done as in the \"x\" command.\n\n\
3250 With no argument, display all currently requested auto-display expressions.\n\
3251 Use \"undisplay\" to cancel display requests previously made."));
3252 set_cmd_completer_handle_brkchars (c
, display_and_x_command_completer
);
3254 add_cmd ("display", class_vars
, enable_display_command
, _("\
3255 Enable some expressions to be displayed when program stops.\n\
3256 Usage: enable display [NUM]...\n\
3257 Arguments are the code numbers of the expressions to resume displaying.\n\
3258 No argument means enable all automatic-display expressions.\n\
3259 Do \"info display\" to see current list of code numbers."), &enablelist
);
3261 add_cmd ("display", class_vars
, disable_display_command
, _("\
3262 Disable some expressions to be displayed when program stops.\n\
3263 Usage: disable display [NUM]...\n\
3264 Arguments are the code numbers of the expressions to stop displaying.\n\
3265 No argument means disable all automatic-display expressions.\n\
3266 Do \"info display\" to see current list of code numbers."), &disablelist
);
3268 add_cmd ("display", class_vars
, undisplay_command
, _("\
3269 Cancel some expressions to be displayed when program stops.\n\
3270 Usage: delete display [NUM]...\n\
3271 Arguments are the code numbers of the expressions to stop displaying.\n\
3272 No argument means cancel all automatic-display expressions.\n\
3273 Do \"info display\" to see current list of code numbers."), &deletelist
);
3275 add_com ("printf", class_vars
, printf_command
, _("\
3276 Formatted printing, like the C \"printf\" function.\n\
3277 Usage: printf \"format string\", ARG1, ARG2, ARG3, ..., ARGN\n\
3278 This supports most C printf format specifications, like %s, %d, etc."));
3280 add_com ("output", class_vars
, output_command
, _("\
3281 Like \"print\" but don't put in value history and don't print newline.\n\
3282 Usage: output EXP\n\
3283 This is useful in user-defined commands."));
3285 add_prefix_cmd ("set", class_vars
, set_command
, _("\
3286 Evaluate expression EXP and assign result to variable VAR.\n\
3287 Usage: set VAR = EXP\n\
3288 This uses assignment syntax appropriate for the current language\n\
3289 (VAR = EXP or VAR := EXP for example).\n\
3290 VAR may be a debugger \"convenience\" variable (names starting\n\
3291 with $), a register (a few standard names starting with $), or an actual\n\
3292 variable in the program being debugged. EXP is any valid expression.\n\
3293 Use \"set variable\" for variables with names identical to set subcommands.\n\
3295 With a subcommand, this command modifies parts of the gdb environment.\n\
3296 You can see these environment settings with the \"show\" command."),
3297 &setlist
, 1, &cmdlist
);
3299 /* "call" is the same as "set", but handy for dbx users to call fns. */
3300 c
= add_com ("call", class_vars
, call_command
, _("\
3301 Call a function in the program.\n\
3303 The argument is the function name and arguments, in the notation of the\n\
3304 current working language. The result is printed and saved in the value\n\
3305 history, if it is not void."));
3306 set_cmd_completer_handle_brkchars (c
, print_command_completer
);
3308 cmd_list_element
*set_variable_cmd
3309 = add_cmd ("variable", class_vars
, set_command
, _("\
3310 Evaluate expression EXP and assign result to variable VAR.\n\
3311 Usage: set variable VAR = EXP\n\
3312 This uses assignment syntax appropriate for the current language\n\
3313 (VAR = EXP or VAR := EXP for example).\n\
3314 VAR may be a debugger \"convenience\" variable (names starting\n\
3315 with $), a register (a few standard names starting with $), or an actual\n\
3316 variable in the program being debugged. EXP is any valid expression.\n\
3317 This may usually be abbreviated to simply \"set\"."),
3319 add_alias_cmd ("var", set_variable_cmd
, class_vars
, 0, &setlist
);
3321 const auto print_opts
= make_value_print_options_def_group (nullptr);
3323 static const std::string print_help
= gdb::option::build_help (_("\
3324 Print value of expression EXP.\n\
3325 Usage: print [[OPTION]... --] [/FMT] [EXP]\n\
3330 Note: because this command accepts arbitrary expressions, if you\n\
3331 specify any command option, you must use a double dash (\"--\")\n\
3332 to mark the end of option processing. E.g.: \"print -o -- myobj\".\n\
3334 Variables accessible are those of the lexical environment of the selected\n\
3335 stack frame, plus all those whose scope is global or an entire file.\n\
3337 $NUM gets previous value number NUM. $ and $$ are the last two values.\n\
3338 $$NUM refers to NUM'th value back from the last one.\n\
3339 Names starting with $ refer to registers (with the values they would have\n\
3340 if the program were to return to the stack frame now selected, restoring\n\
3341 all registers saved by frames farther in) or else to debugger\n\
3342 \"convenience\" variables (any such name not a known register).\n\
3343 Use assignment expressions to give values to convenience variables.\n\
3345 {TYPE}ADREXP refers to a datum of data type TYPE, located at address ADREXP.\n\
3346 @ is a binary operator for treating consecutive data objects\n\
3347 anywhere in memory as an array. FOO@NUM gives an array whose first\n\
3348 element is FOO, whose second element is stored in the space following\n\
3349 where FOO is stored, etc. FOO must be an expression whose value\n\
3350 resides in memory.\n\
3352 EXP may be preceded with /FMT, where FMT is a format letter\n\
3353 but no count or size letter (see \"x\" command)."),
3356 cmd_list_element
*print_cmd
3357 = add_com ("print", class_vars
, print_command
, print_help
.c_str ());
3358 set_cmd_completer_handle_brkchars (print_cmd
, print_command_completer
);
3359 add_com_alias ("p", print_cmd
, class_vars
, 1);
3360 add_com_alias ("inspect", print_cmd
, class_vars
, 1);
3362 add_setshow_uinteger_cmd ("max-symbolic-offset", no_class
,
3363 &max_symbolic_offset
, _("\
3364 Set the largest offset that will be printed in <SYMBOL+1234> form."), _("\
3365 Show the largest offset that will be printed in <SYMBOL+1234> form."), _("\
3366 Tell GDB to only display the symbolic form of an address if the\n\
3367 offset between the closest earlier symbol and the address is less than\n\
3368 the specified maximum offset. The default is \"unlimited\", which tells GDB\n\
3369 to always print the symbolic form of an address if any symbol precedes\n\
3370 it. Zero is equivalent to \"unlimited\"."),
3372 show_max_symbolic_offset
,
3373 &setprintlist
, &showprintlist
);
3374 add_setshow_boolean_cmd ("symbol-filename", no_class
,
3375 &print_symbol_filename
, _("\
3376 Set printing of source filename and line number with <SYMBOL>."), _("\
3377 Show printing of source filename and line number with <SYMBOL>."), NULL
,
3379 show_print_symbol_filename
,
3380 &setprintlist
, &showprintlist
);
3382 add_com ("eval", no_class
, eval_command
, _("\
3383 Construct a GDB command and then evaluate it.\n\
3384 Usage: eval \"format string\", ARG1, ARG2, ARG3, ..., ARGN\n\
3385 Convert the arguments to a string as \"printf\" would, but then\n\
3386 treat this string as a command line, and evaluate it."));
3388 /* Memory tagging commands. */
3389 add_prefix_cmd ("memory-tag", class_vars
, memory_tag_command
, _("\
3390 Generic command for printing and manipulating memory tag properties."),
3391 &memory_tag_list
, 0, &cmdlist
);
3392 add_cmd ("print-logical-tag", class_vars
,
3393 memory_tag_print_logical_tag_command
,
3394 ("Print the logical tag from POINTER.\n\
3395 Usage: memory-tag print-logical-tag <POINTER>.\n\
3396 <POINTER> is an expression that evaluates to a pointer.\n\
3397 Print the logical tag contained in POINTER. The tag interpretation is\n\
3398 architecture-specific."),
3400 add_cmd ("print-allocation-tag", class_vars
,
3401 memory_tag_print_allocation_tag_command
,
3402 _("Print the allocation tag for ADDRESS.\n\
3403 Usage: memory-tag print-allocation-tag <ADDRESS>.\n\
3404 <ADDRESS> is an expression that evaluates to a memory address.\n\
3405 Print the allocation tag associated with the memory address ADDRESS.\n\
3406 The tag interpretation is architecture-specific."),
3408 add_cmd ("with-logical-tag", class_vars
, memory_tag_with_logical_tag_command
,
3409 _("Print a POINTER with a specific logical TAG.\n\
3410 Usage: memory-tag with-logical-tag <POINTER> <TAG>\n\
3411 <POINTER> is an expression that evaluates to a pointer.\n\
3412 <TAG> is a sequence of hex bytes that is interpreted by the architecture\n\
3413 as a single memory tag."),
3415 add_cmd ("set-allocation-tag", class_vars
,
3416 memory_tag_set_allocation_tag_command
,
3417 _("Set the allocation tag(s) for a memory range.\n\
3418 Usage: memory-tag set-allocation-tag <ADDRESS> <LENGTH> <TAG_BYTES>\n\
3419 <ADDRESS> is an expression that evaluates to a memory address\n\
3420 <LENGTH> is the number of bytes that is added to <ADDRESS> to calculate\n\
3421 the memory range.\n\
3422 <TAG_BYTES> is a sequence of hex bytes that is interpreted by the\n\
3423 architecture as one or more memory tags.\n\
3424 Sets the tags of the memory range [ADDRESS, ADDRESS + LENGTH)\n\
3427 If the number of tags is greater than or equal to the number of tag granules\n\
3428 in the [ADDRESS, ADDRESS + LENGTH) range, only the tags up to the\n\
3429 number of tag granules are updated.\n\
3431 If the number of tags is less than the number of tag granules, then the\n\
3432 command is a fill operation. The TAG_BYTES are interpreted as a pattern\n\
3433 that gets repeated until the number of tag granules in the memory range\n\
3434 [ADDRESS, ADDRESS + LENGTH) is updated."),
3436 add_cmd ("check", class_vars
, memory_tag_check_command
,
3437 _("Validate a pointer's logical tag against the allocation tag.\n\
3438 Usage: memory-tag check <POINTER>\n\
3439 <POINTER> is an expression that evaluates to a pointer\n\
3440 Fetch the logical and allocation tags for POINTER and compare them\n\
3441 for equality. If the tags do not match, print additional information about\n\
3442 the tag mismatch."),