printcmd.c revision 1.10 1 1.1 christos /* Print values for GNU debugger GDB.
2 1.1 christos
3 1.10 christos Copyright (C) 1986-2023 Free Software Foundation, Inc.
4 1.1 christos
5 1.1 christos This file is part of GDB.
6 1.1 christos
7 1.1 christos This program is free software; you can redistribute it and/or modify
8 1.1 christos it under the terms of the GNU General Public License as published by
9 1.1 christos the Free Software Foundation; either version 3 of the License, or
10 1.1 christos (at your option) any later version.
11 1.1 christos
12 1.1 christos This program is distributed in the hope that it will be useful,
13 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of
14 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 1.1 christos GNU General Public License for more details.
16 1.1 christos
17 1.1 christos You should have received a copy of the GNU General Public License
18 1.1 christos along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 1.1 christos
20 1.1 christos #include "defs.h"
21 1.1 christos #include "frame.h"
22 1.1 christos #include "symtab.h"
23 1.1 christos #include "gdbtypes.h"
24 1.1 christos #include "value.h"
25 1.1 christos #include "language.h"
26 1.9 christos #include "c-lang.h"
27 1.1 christos #include "expression.h"
28 1.1 christos #include "gdbcore.h"
29 1.1 christos #include "gdbcmd.h"
30 1.1 christos #include "target.h"
31 1.1 christos #include "breakpoint.h"
32 1.1 christos #include "demangle.h"
33 1.1 christos #include "gdb-demangle.h"
34 1.1 christos #include "valprint.h"
35 1.1 christos #include "annotate.h"
36 1.1 christos #include "symfile.h" /* for overlay functions */
37 1.1 christos #include "objfiles.h" /* ditto */
38 1.1 christos #include "completer.h" /* for completion functions */
39 1.1 christos #include "ui-out.h"
40 1.1 christos #include "block.h"
41 1.1 christos #include "disasm.h"
42 1.8 christos #include "target-float.h"
43 1.8 christos #include "observable.h"
44 1.1 christos #include "solist.h"
45 1.1 christos #include "parser-defs.h"
46 1.1 christos #include "charset.h"
47 1.1 christos #include "arch-utils.h"
48 1.1 christos #include "cli/cli-utils.h"
49 1.9 christos #include "cli/cli-option.h"
50 1.7 christos #include "cli/cli-script.h"
51 1.8 christos #include "cli/cli-style.h"
52 1.9 christos #include "gdbsupport/format.h"
53 1.1 christos #include "source.h"
54 1.9 christos #include "gdbsupport/byte-vector.h"
55 1.9 christos #include "gdbsupport/gdb_optional.h"
56 1.10 christos #include "safe-ctype.h"
57 1.10 christos #include "gdbsupport/rsp-low.h"
58 1.10 christos
59 1.10 christos /* Chain containing all defined memory-tag subcommands. */
60 1.10 christos
61 1.10 christos static struct cmd_list_element *memory_tag_list;
62 1.1 christos
63 1.1 christos /* Last specified output format. */
64 1.1 christos
65 1.1 christos static char last_format = 0;
66 1.1 christos
67 1.1 christos /* Last specified examination size. 'b', 'h', 'w' or `q'. */
68 1.1 christos
69 1.1 christos static char last_size = 'w';
70 1.1 christos
71 1.8 christos /* Last specified count for the 'x' command. */
72 1.8 christos
73 1.8 christos static int last_count;
74 1.8 christos
75 1.10 christos /* Last specified tag-printing option. */
76 1.10 christos
77 1.10 christos static bool last_print_tags = false;
78 1.10 christos
79 1.1 christos /* Default address to examine next, and associated architecture. */
80 1.1 christos
81 1.1 christos static struct gdbarch *next_gdbarch;
82 1.1 christos static CORE_ADDR next_address;
83 1.1 christos
84 1.1 christos /* Number of delay instructions following current disassembled insn. */
85 1.1 christos
86 1.1 christos static int branch_delay_insns;
87 1.1 christos
88 1.1 christos /* Last address examined. */
89 1.1 christos
90 1.1 christos static CORE_ADDR last_examine_address;
91 1.1 christos
92 1.1 christos /* Contents of last address examined.
93 1.1 christos This is not valid past the end of the `x' command! */
94 1.1 christos
95 1.8 christos static value_ref_ptr last_examine_value;
96 1.1 christos
97 1.1 christos /* Largest offset between a symbolic value and an address, that will be
98 1.1 christos printed as `0x1234 <symbol+offset>'. */
99 1.1 christos
100 1.1 christos static unsigned int max_symbolic_offset = UINT_MAX;
101 1.1 christos static void
102 1.1 christos show_max_symbolic_offset (struct ui_file *file, int from_tty,
103 1.1 christos struct cmd_list_element *c, const char *value)
104 1.1 christos {
105 1.10 christos gdb_printf (file,
106 1.10 christos _("The largest offset that will be "
107 1.10 christos "printed in <symbol+1234> form is %s.\n"),
108 1.10 christos value);
109 1.1 christos }
110 1.1 christos
111 1.1 christos /* Append the source filename and linenumber of the symbol when
112 1.1 christos printing a symbolic value as `<symbol at filename:linenum>' if set. */
113 1.9 christos static bool print_symbol_filename = false;
114 1.1 christos static void
115 1.1 christos show_print_symbol_filename (struct ui_file *file, int from_tty,
116 1.1 christos struct cmd_list_element *c, const char *value)
117 1.1 christos {
118 1.10 christos gdb_printf (file, _("Printing of source filename and "
119 1.10 christos "line number with <symbol> is %s.\n"),
120 1.10 christos value);
121 1.1 christos }
122 1.1 christos
123 1.1 christos /* Number of auto-display expression currently being displayed.
124 1.1 christos So that we can disable it if we get a signal within it.
125 1.1 christos -1 when not doing one. */
126 1.1 christos
127 1.1 christos static int current_display_number;
128 1.1 christos
129 1.9 christos /* Last allocated display number. */
130 1.9 christos
131 1.9 christos static int display_number;
132 1.9 christos
133 1.1 christos struct display
134 1.1 christos {
135 1.9 christos display (const char *exp_string_, expression_up &&exp_,
136 1.9 christos const struct format_data &format_, struct program_space *pspace_,
137 1.9 christos const struct block *block_)
138 1.9 christos : exp_string (exp_string_),
139 1.9 christos exp (std::move (exp_)),
140 1.9 christos number (++display_number),
141 1.9 christos format (format_),
142 1.9 christos pspace (pspace_),
143 1.9 christos block (block_),
144 1.9 christos enabled_p (true)
145 1.9 christos {
146 1.9 christos }
147 1.1 christos
148 1.1 christos /* The expression as the user typed it. */
149 1.9 christos std::string exp_string;
150 1.1 christos
151 1.1 christos /* Expression to be evaluated and displayed. */
152 1.7 christos expression_up exp;
153 1.1 christos
154 1.1 christos /* Item number of this auto-display item. */
155 1.1 christos int number;
156 1.1 christos
157 1.1 christos /* Display format specified. */
158 1.1 christos struct format_data format;
159 1.1 christos
160 1.1 christos /* Program space associated with `block'. */
161 1.1 christos struct program_space *pspace;
162 1.1 christos
163 1.1 christos /* Innermost block required by this expression when evaluated. */
164 1.1 christos const struct block *block;
165 1.1 christos
166 1.1 christos /* Status of this display (enabled or disabled). */
167 1.9 christos bool enabled_p;
168 1.1 christos };
169 1.1 christos
170 1.9 christos /* Expressions whose values should be displayed automatically each
171 1.9 christos time the program stops. */
172 1.1 christos
173 1.9 christos static std::vector<std::unique_ptr<struct display>> all_displays;
174 1.1 christos
175 1.1 christos /* Prototypes for local functions. */
176 1.1 christos
177 1.1 christos static void do_one_display (struct display *);
178 1.1 christos
179 1.1 christos
181 1.1 christos /* Decode a format specification. *STRING_PTR should point to it.
182 1.1 christos OFORMAT and OSIZE are used as defaults for the format and size
183 1.1 christos if none are given in the format specification.
184 1.1 christos If OSIZE is zero, then the size field of the returned value
185 1.1 christos should be set only if a size is explicitly specified by the
186 1.1 christos user.
187 1.1 christos The structure returned describes all the data
188 1.1 christos found in the specification. In addition, *STRING_PTR is advanced
189 1.1 christos past the specification and past all whitespace following it. */
190 1.1 christos
191 1.1 christos static struct format_data
192 1.1 christos decode_format (const char **string_ptr, int oformat, int osize)
193 1.1 christos {
194 1.1 christos struct format_data val;
195 1.1 christos const char *p = *string_ptr;
196 1.1 christos
197 1.1 christos val.format = '?';
198 1.1 christos val.size = '?';
199 1.1 christos val.count = 1;
200 1.10 christos val.raw = 0;
201 1.1 christos val.print_tags = false;
202 1.6 christos
203 1.6 christos if (*p == '-')
204 1.6 christos {
205 1.6 christos val.count = -1;
206 1.6 christos p++;
207 1.1 christos }
208 1.6 christos if (*p >= '0' && *p <= '9')
209 1.1 christos val.count *= atoi (p);
210 1.1 christos while (*p >= '0' && *p <= '9')
211 1.1 christos p++;
212 1.1 christos
213 1.1 christos /* Now process size or format letters that follow. */
214 1.1 christos
215 1.1 christos while (1)
216 1.1 christos {
217 1.1 christos if (*p == 'b' || *p == 'h' || *p == 'w' || *p == 'g')
218 1.1 christos val.size = *p++;
219 1.1 christos else if (*p == 'r')
220 1.1 christos {
221 1.1 christos val.raw = 1;
222 1.1 christos p++;
223 1.10 christos }
224 1.10 christos else if (*p == 'm')
225 1.10 christos {
226 1.10 christos val.print_tags = true;
227 1.10 christos p++;
228 1.1 christos }
229 1.1 christos else if (*p >= 'a' && *p <= 'z')
230 1.1 christos val.format = *p++;
231 1.1 christos else
232 1.1 christos break;
233 1.1 christos }
234 1.8 christos
235 1.1 christos *string_ptr = skip_spaces (p);
236 1.1 christos
237 1.1 christos /* Set defaults for format and size if not specified. */
238 1.1 christos if (val.format == '?')
239 1.1 christos {
240 1.1 christos if (val.size == '?')
241 1.1 christos {
242 1.1 christos /* Neither has been specified. */
243 1.1 christos val.format = oformat;
244 1.1 christos val.size = osize;
245 1.1 christos }
246 1.1 christos else
247 1.1 christos /* If a size is specified, any format makes a reasonable
248 1.1 christos default except 'i'. */
249 1.1 christos val.format = oformat == 'i' ? 'x' : oformat;
250 1.1 christos }
251 1.1 christos else if (val.size == '?')
252 1.1 christos switch (val.format)
253 1.1 christos {
254 1.1 christos case 'a':
255 1.1 christos /* Pick the appropriate size for an address. This is deferred
256 1.1 christos until do_examine when we know the actual architecture to use.
257 1.1 christos A special size value of 'a' is used to indicate this case. */
258 1.1 christos val.size = osize ? 'a' : osize;
259 1.1 christos break;
260 1.1 christos case 'f':
261 1.1 christos /* Floating point has to be word or giantword. */
262 1.1 christos if (osize == 'w' || osize == 'g')
263 1.1 christos val.size = osize;
264 1.1 christos else
265 1.1 christos /* Default it to giantword if the last used size is not
266 1.1 christos appropriate. */
267 1.1 christos val.size = osize ? 'g' : osize;
268 1.1 christos break;
269 1.1 christos case 'c':
270 1.1 christos /* Characters default to one byte. */
271 1.1 christos val.size = osize ? 'b' : osize;
272 1.1 christos break;
273 1.1 christos case 's':
274 1.1 christos /* Display strings with byte size chars unless explicitly
275 1.1 christos specified. */
276 1.1 christos val.size = '\0';
277 1.1 christos break;
278 1.1 christos
279 1.1 christos default:
280 1.1 christos /* The default is the size most recently specified. */
281 1.1 christos val.size = osize;
282 1.1 christos }
283 1.1 christos
284 1.1 christos return val;
285 1.1 christos }
286 1.1 christos
287 1.1 christos /* Print value VAL on stream according to OPTIONS.
289 1.1 christos Do not end with a newline.
290 1.1 christos SIZE is the letter for the size of datum being printed.
291 1.1 christos This is used to pad hex numbers so they line up. SIZE is 0
292 1.1 christos for print / output and set for examine. */
293 1.1 christos
294 1.1 christos static void
295 1.1 christos print_formatted (struct value *val, int size,
296 1.1 christos const struct value_print_options *options,
297 1.1 christos struct ui_file *stream)
298 1.10 christos {
299 1.1 christos struct type *type = check_typedef (value_type (val));
300 1.1 christos int len = type->length ();
301 1.1 christos
302 1.1 christos if (VALUE_LVAL (val) == lval_memory)
303 1.1 christos next_address = value_address (val) + len;
304 1.1 christos
305 1.1 christos if (size)
306 1.1 christos {
307 1.1 christos switch (options->format)
308 1.1 christos {
309 1.1 christos case 's':
310 1.1 christos {
311 1.1 christos struct type *elttype = value_type (val);
312 1.1 christos
313 1.1 christos next_address = (value_address (val)
314 1.1 christos + val_print_string (elttype, NULL,
315 1.1 christos value_address (val), -1,
316 1.1 christos stream, options) * len);
317 1.1 christos }
318 1.1 christos return;
319 1.1 christos
320 1.10 christos case 'i':
321 1.1 christos /* We often wrap here if there are long symbolic names. */
322 1.10 christos stream->wrap_here (4);
323 1.1 christos next_address = (value_address (val)
324 1.1 christos + gdb_print_insn (type->arch (),
325 1.1 christos value_address (val), stream,
326 1.1 christos &branch_delay_insns));
327 1.1 christos return;
328 1.1 christos }
329 1.1 christos }
330 1.10 christos
331 1.9 christos if (options->format == 0 || options->format == 's'
332 1.9 christos || type->code () == TYPE_CODE_VOID
333 1.9 christos || type->code () == TYPE_CODE_REF
334 1.9 christos || type->code () == TYPE_CODE_ARRAY
335 1.9 christos || type->code () == TYPE_CODE_STRING
336 1.9 christos || type->code () == TYPE_CODE_STRUCT
337 1.1 christos || type->code () == TYPE_CODE_UNION
338 1.1 christos || type->code () == TYPE_CODE_NAMESPACE)
339 1.1 christos value_print (val, stream, options);
340 1.1 christos else
341 1.9 christos /* User specified format, so don't look to the type to tell us
342 1.1 christos what to do. */
343 1.1 christos value_print_scalar_formatted (val, options, size, stream);
344 1.1 christos }
345 1.1 christos
346 1.1 christos /* Return builtin floating point type of same length as TYPE.
347 1.1 christos If no such type is found, return TYPE itself. */
348 1.1 christos static struct type *
349 1.10 christos float_type_from_length (struct type *type)
350 1.1 christos {
351 1.1 christos struct gdbarch *gdbarch = type->arch ();
352 1.10 christos const struct builtin_type *builtin = builtin_type (gdbarch);
353 1.1 christos
354 1.10 christos if (type->length () == builtin->builtin_float->length ())
355 1.1 christos type = builtin->builtin_float;
356 1.10 christos else if (type->length () == builtin->builtin_double->length ())
357 1.1 christos type = builtin->builtin_double;
358 1.1 christos else if (type->length () == builtin->builtin_long_double->length ())
359 1.1 christos type = builtin->builtin_long_double;
360 1.1 christos
361 1.1 christos return type;
362 1.1 christos }
363 1.1 christos
364 1.1 christos /* Print a scalar of data of type TYPE, pointed to in GDB by VALADDR,
365 1.1 christos according to OPTIONS and SIZE on STREAM. Formats s and i are not
366 1.1 christos supported at this level. */
367 1.6 christos
368 1.1 christos void
369 1.1 christos print_scalar_formatted (const gdb_byte *valaddr, struct type *type,
370 1.1 christos const struct value_print_options *options,
371 1.10 christos int size, struct ui_file *stream)
372 1.10 christos {
373 1.9 christos struct gdbarch *gdbarch = type->arch ();
374 1.1 christos unsigned int len = type->length ();
375 1.1 christos enum bfd_endian byte_order = type_byte_order (type);
376 1.1 christos
377 1.1 christos /* String printing should go through val_print_scalar_formatted. */
378 1.1 christos gdb_assert (options->format != 's');
379 1.1 christos
380 1.10 christos /* If the value is a pointer, and pointers and addresses are not the
381 1.9 christos same, then at this point, the value's length (in target bytes) is
382 1.1 christos gdbarch_addr_bit/TARGET_CHAR_BIT, not type->length (). */
383 1.1 christos if (type->code () == TYPE_CODE_PTR)
384 1.1 christos len = gdbarch_addr_bit (gdbarch) / TARGET_CHAR_BIT;
385 1.1 christos
386 1.1 christos /* If we are printing it as unsigned, truncate it in case it is actually
387 1.8 christos a negative signed value (e.g. "print/u (short)-1" should print 65535
388 1.10 christos (if shorts are 16 bits) instead of 4294967295). */
389 1.10 christos if (options->format != 'c'
390 1.10 christos && (options->format != 'd' || type->is_unsigned ()))
391 1.10 christos {
392 1.10 christos if (len < type->length () && byte_order == BFD_ENDIAN_BIG)
393 1.10 christos valaddr += type->length () - len;
394 1.10 christos }
395 1.10 christos
396 1.10 christos /* Allow LEN == 0, and in this case, don't assume that VALADDR is
397 1.10 christos valid. */
398 1.1 christos const gdb_byte zero = 0;
399 1.10 christos if (len == 0)
400 1.10 christos {
401 1.1 christos len = 1;
402 1.1 christos valaddr = &zero;
403 1.8 christos }
404 1.1 christos
405 1.8 christos if (size != 0 && (options->format == 'x' || options->format == 't'))
406 1.8 christos {
407 1.8 christos /* Truncate to fit. */
408 1.1 christos unsigned newlen;
409 1.8 christos switch (size)
410 1.8 christos {
411 1.8 christos case 'b':
412 1.8 christos newlen = 1;
413 1.8 christos break;
414 1.8 christos case 'h':
415 1.8 christos newlen = 2;
416 1.8 christos break;
417 1.8 christos case 'w':
418 1.8 christos newlen = 4;
419 1.8 christos break;
420 1.8 christos case 'g':
421 1.8 christos newlen = 8;
422 1.8 christos break;
423 1.1 christos default:
424 1.8 christos error (_("Undefined output size \"%c\"."), size);
425 1.8 christos }
426 1.8 christos if (newlen < len && byte_order == BFD_ENDIAN_BIG)
427 1.8 christos valaddr += len - newlen;
428 1.8 christos len = newlen;
429 1.10 christos }
430 1.10 christos
431 1.9 christos /* Biased range types and sub-word scalar types must be handled
432 1.9 christos here; the value is correctly computed by unpack_long. */
433 1.9 christos gdb::byte_vector converted_bytes;
434 1.9 christos /* Some cases below will unpack the value again. In the biased
435 1.9 christos range case, we want to avoid this, so we store the unpacked value
436 1.10 christos here for possible use later. */
437 1.9 christos gdb::optional<LONGEST> val_long;
438 1.9 christos if ((is_fixed_point_type (type)
439 1.9 christos && (options->format == 'o'
440 1.9 christos || options->format == 'x'
441 1.9 christos || options->format == 't'
442 1.9 christos || options->format == 'z'
443 1.10 christos || options->format == 'd'
444 1.10 christos || options->format == 'u'))
445 1.9 christos || (type->code () == TYPE_CODE_RANGE && type->bounds ()->bias != 0)
446 1.9 christos || type->bit_size_differs_p ())
447 1.10 christos {
448 1.10 christos val_long.emplace (unpack_long (type, valaddr));
449 1.9 christos converted_bytes.resize (type->length ());
450 1.9 christos store_signed_integer (converted_bytes.data (), type->length (),
451 1.8 christos byte_order, *val_long);
452 1.8 christos valaddr = converted_bytes.data ();
453 1.8 christos }
454 1.8 christos
455 1.8 christos /* Printing a non-float type as 'f' will interpret the data as if it were
456 1.8 christos of a floating-point type of the same length, if that exists. Otherwise,
457 1.9 christos the data is printed as integer. */
458 1.8 christos char format = options->format;
459 1.8 christos if (format == 'f' && type->code () != TYPE_CODE_FLT)
460 1.9 christos {
461 1.10 christos type = float_type_from_length (type);
462 1.8 christos if (type->code () != TYPE_CODE_FLT)
463 1.8 christos format = 0;
464 1.8 christos }
465 1.8 christos
466 1.8 christos switch (format)
467 1.8 christos {
468 1.1 christos case 'o':
469 1.1 christos print_octal_chars (stream, valaddr, len, byte_order);
470 1.8 christos break;
471 1.1 christos case 'd':
472 1.1 christos print_decimal_chars (stream, valaddr, len, true, byte_order);
473 1.8 christos break;
474 1.8 christos case 'u':
475 1.8 christos print_decimal_chars (stream, valaddr, len, false, byte_order);
476 1.9 christos break;
477 1.8 christos case 0:
478 1.10 christos if (type->code () != TYPE_CODE_FLT)
479 1.8 christos {
480 1.8 christos print_decimal_chars (stream, valaddr, len, !type->is_unsigned (),
481 1.8 christos byte_order);
482 1.8 christos break;
483 1.8 christos }
484 1.8 christos /* FALLTHROUGH */
485 1.1 christos case 'f':
486 1.1 christos print_floating (valaddr, type, stream);
487 1.8 christos break;
488 1.10 christos
489 1.8 christos case 't':
490 1.8 christos print_binary_chars (stream, valaddr, len, byte_order, size > 0, options);
491 1.8 christos break;
492 1.1 christos case 'x':
493 1.8 christos print_hex_chars (stream, valaddr, len, byte_order, size > 0);
494 1.8 christos break;
495 1.1 christos case 'z':
496 1.1 christos print_hex_chars (stream, valaddr, len, byte_order, true);
497 1.1 christos break;
498 1.1 christos case 'c':
499 1.1 christos {
500 1.9 christos struct value_print_options opts = *options;
501 1.9 christos
502 1.8 christos if (!val_long.has_value ())
503 1.1 christos val_long.emplace (unpack_long (type, valaddr));
504 1.10 christos
505 1.1 christos opts.format = 0;
506 1.10 christos if (type->is_unsigned ())
507 1.1 christos type = builtin_type (gdbarch)->builtin_true_unsigned_char;
508 1.1 christos else
509 1.9 christos type = builtin_type (gdbarch)->builtin_true_char;
510 1.1 christos
511 1.1 christos value_print (value_from_longest (type, *val_long), stream, &opts);
512 1.1 christos }
513 1.8 christos break;
514 1.1 christos
515 1.9 christos case 'a':
516 1.9 christos {
517 1.9 christos if (!val_long.has_value ())
518 1.1 christos val_long.emplace (unpack_long (type, valaddr));
519 1.1 christos print_address (gdbarch, *val_long, stream);
520 1.1 christos }
521 1.1 christos break;
522 1.8 christos
523 1.1 christos default:
524 1.1 christos error (_("Undefined output format \"%c\"."), format);
525 1.1 christos }
526 1.1 christos }
527 1.1 christos
528 1.1 christos /* Specify default address for `x' command.
529 1.1 christos The `info lines' command uses this. */
530 1.1 christos
531 1.1 christos void
532 1.1 christos set_next_address (struct gdbarch *gdbarch, CORE_ADDR addr)
533 1.1 christos {
534 1.1 christos struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
535 1.1 christos
536 1.1 christos next_gdbarch = gdbarch;
537 1.1 christos next_address = addr;
538 1.1 christos
539 1.1 christos /* Make address available to the user as $_. */
540 1.1 christos set_internalvar (lookup_internalvar ("_"),
541 1.1 christos value_from_pointer (ptr_type, addr));
542 1.1 christos }
543 1.1 christos
544 1.1 christos /* Optionally print address ADDR symbolically as <SYMBOL+OFFSET> on STREAM,
545 1.1 christos after LEADIN. Print nothing if no symbolic name is found nearby.
546 1.1 christos Optionally also print source file and line number, if available.
547 1.1 christos DO_DEMANGLE controls whether to print a symbol in its native "raw" form,
548 1.1 christos or to interpret it as a possible C++ name and convert it back to source
549 1.1 christos form. However note that DO_DEMANGLE can be overridden by the specific
550 1.1 christos settings of the demangle and asm_demangle variables. Returns
551 1.1 christos non-zero if anything was printed; zero otherwise. */
552 1.1 christos
553 1.1 christos int
554 1.7 christos print_address_symbolic (struct gdbarch *gdbarch, CORE_ADDR addr,
555 1.1 christos struct ui_file *stream,
556 1.8 christos int do_demangle, const char *leadin)
557 1.1 christos {
558 1.1 christos std::string name, filename;
559 1.1 christos int unmapped = 0;
560 1.1 christos int offset = 0;
561 1.9 christos int line = 0;
562 1.10 christos
563 1.8 christos if (build_address_symbolic (gdbarch, addr, do_demangle, false, &name,
564 1.1 christos &offset, &filename, &line, &unmapped))
565 1.10 christos return 0;
566 1.1 christos
567 1.10 christos gdb_puts (leadin, stream);
568 1.1 christos if (unmapped)
569 1.10 christos gdb_puts ("<*", stream);
570 1.8 christos else
571 1.1 christos gdb_puts ("<", stream);
572 1.10 christos fputs_styled (name.c_str (), function_name_style.style (), stream);
573 1.1 christos if (offset != 0)
574 1.1 christos gdb_printf (stream, "%+d", offset);
575 1.1 christos
576 1.8 christos /* Append source filename and line number if desired. Give specific
577 1.1 christos line # of this addr, if we have it; else line # of the nearest symbol. */
578 1.10 christos if (print_symbol_filename && !filename.empty ())
579 1.8 christos {
580 1.1 christos gdb_puts (line == -1 ? " in " : " at ", stream);
581 1.10 christos fputs_styled (filename.c_str (), file_name_style.style (), stream);
582 1.1 christos if (line != -1)
583 1.1 christos gdb_printf (stream, ":%d", line);
584 1.10 christos }
585 1.1 christos if (unmapped)
586 1.10 christos gdb_puts ("*>", stream);
587 1.1 christos else
588 1.1 christos gdb_puts (">", stream);
589 1.1 christos
590 1.1 christos return 1;
591 1.8 christos }
592 1.8 christos
593 1.1 christos /* See valprint.h. */
594 1.1 christos
595 1.1 christos int
596 1.9 christos build_address_symbolic (struct gdbarch *gdbarch,
597 1.9 christos CORE_ADDR addr, /* IN */
598 1.8 christos bool do_demangle, /* IN */
599 1.1 christos bool prefer_sym_over_minsym, /* IN */
600 1.8 christos std::string *name, /* OUT */
601 1.1 christos int *offset, /* OUT */
602 1.1 christos std::string *filename, /* OUT */
603 1.1 christos int *line, /* OUT */
604 1.3 christos int *unmapped) /* OUT */
605 1.1 christos {
606 1.1 christos struct bound_minimal_symbol msymbol;
607 1.1 christos struct symbol *symbol;
608 1.1 christos CORE_ADDR name_location = 0;
609 1.1 christos struct obj_section *section = NULL;
610 1.1 christos const char *name_temp = "";
611 1.1 christos
612 1.1 christos /* Let's say it is mapped (not unmapped). */
613 1.1 christos *unmapped = 0;
614 1.1 christos
615 1.1 christos /* Determine if the address is in an overlay, and whether it is
616 1.1 christos mapped. */
617 1.1 christos if (overlay_debugging)
618 1.1 christos {
619 1.1 christos section = find_pc_overlay (addr);
620 1.1 christos if (pc_in_unmapped_range (addr, section))
621 1.1 christos {
622 1.1 christos *unmapped = 1;
623 1.1 christos addr = overlay_mapped_address (addr, section);
624 1.1 christos }
625 1.9 christos }
626 1.9 christos
627 1.9 christos /* Try to find the address in both the symbol table and the minsyms.
628 1.9 christos In most cases, we'll prefer to use the symbol instead of the
629 1.1 christos minsym. However, there are cases (see below) where we'll choose
630 1.1 christos to use the minsym instead. */
631 1.1 christos
632 1.1 christos /* This is defective in the sense that it only finds text symbols. So
633 1.1 christos really this is kind of pointless--we should make sure that the
634 1.1 christos minimal symbols have everything we need (by changing that we could
635 1.1 christos save some memory, but for many debug format--ELF/DWARF or
636 1.3 christos anything/stabs--it would be inconvenient to eliminate those minimal
637 1.1 christos symbols anyway). */
638 1.1 christos msymbol = lookup_minimal_symbol_by_pc_section (addr, section);
639 1.1 christos symbol = find_pc_sect_function (addr, section);
640 1.1 christos
641 1.1 christos if (symbol)
642 1.1 christos {
643 1.1 christos /* If this is a function (i.e. a code address), strip out any
644 1.1 christos non-address bits. For instance, display a pointer to the
645 1.1 christos first instruction of a Thumb function as <function>; the
646 1.1 christos second instruction will be <function+2>, even though the
647 1.1 christos pointer is <function+3>. This matches the ISA behavior. */
648 1.10 christos addr = gdbarch_addr_bits_remove (gdbarch, addr);
649 1.1 christos
650 1.9 christos name_location = symbol->value_block ()->entry_pc ();
651 1.1 christos if (do_demangle || asm_demangle)
652 1.9 christos name_temp = symbol->print_name ();
653 1.1 christos else
654 1.1 christos name_temp = symbol->linkage_name ();
655 1.3 christos }
656 1.10 christos
657 1.10 christos if (msymbol.minsym != NULL
658 1.10 christos && msymbol.minsym->has_size ()
659 1.10 christos && msymbol.minsym->size () == 0
660 1.10 christos && msymbol.minsym->type () != mst_text
661 1.3 christos && msymbol.minsym->type () != mst_text_gnu_ifunc
662 1.1 christos && msymbol.minsym->type () != mst_file_text)
663 1.3 christos msymbol.minsym = NULL;
664 1.1 christos
665 1.9 christos if (msymbol.minsym != NULL)
666 1.9 christos {
667 1.9 christos /* Use the minsym if no symbol is found.
668 1.9 christos
669 1.9 christos Additionally, use the minsym instead of a (found) symbol if
670 1.9 christos the following conditions all hold:
671 1.9 christos 1) The prefer_sym_over_minsym flag is false.
672 1.9 christos 2) The minsym address is identical to that of the address under
673 1.9 christos consideration.
674 1.9 christos 3) The symbol address is not identical to that of the address
675 1.10 christos under consideration. */
676 1.10 christos if (symbol == NULL ||
677 1.9 christos (!prefer_sym_over_minsym
678 1.1 christos && msymbol.value_address () == addr
679 1.1 christos && name_location != addr))
680 1.1 christos {
681 1.1 christos /* If this is a function (i.e. a code address), strip out any
682 1.1 christos non-address bits. For instance, display a pointer to the
683 1.1 christos first instruction of a Thumb function as <function>; the
684 1.10 christos second instruction will be <function+2>, even though the
685 1.10 christos pointer is <function+3>. This matches the ISA behavior. */
686 1.10 christos if (msymbol.minsym->type () == mst_text
687 1.10 christos || msymbol.minsym->type () == mst_text_gnu_ifunc
688 1.1 christos || msymbol.minsym->type () == mst_file_text
689 1.1 christos || msymbol.minsym->type () == mst_solib_trampoline)
690 1.1 christos addr = gdbarch_addr_bits_remove (gdbarch, addr);
691 1.10 christos
692 1.1 christos symbol = 0;
693 1.9 christos name_location = msymbol.value_address ();
694 1.1 christos if (do_demangle || asm_demangle)
695 1.9 christos name_temp = msymbol.minsym->print_name ();
696 1.1 christos else
697 1.1 christos name_temp = msymbol.minsym->linkage_name ();
698 1.3 christos }
699 1.1 christos }
700 1.1 christos if (symbol == NULL && msymbol.minsym == NULL)
701 1.1 christos return 1;
702 1.1 christos
703 1.1 christos /* If the nearest symbol is too far away, don't print anything symbolic. */
704 1.1 christos
705 1.1 christos /* For when CORE_ADDR is larger than unsigned int, we do math in
706 1.1 christos CORE_ADDR. But when we detect unsigned wraparound in the
707 1.1 christos CORE_ADDR math, we ignore this test and print the offset,
708 1.1 christos because addr+max_symbolic_offset has wrapped through the end
709 1.1 christos of the address space back to the beginning, giving bogus comparison. */
710 1.1 christos if (addr > name_location + max_symbolic_offset
711 1.1 christos && name_location + max_symbolic_offset > name_location)
712 1.9 christos return 1;
713 1.1 christos
714 1.8 christos *offset = (LONGEST) addr - name_location;
715 1.1 christos
716 1.1 christos *name = name_temp;
717 1.1 christos
718 1.1 christos if (print_symbol_filename)
719 1.1 christos {
720 1.1 christos struct symtab_and_line sal;
721 1.1 christos
722 1.1 christos sal = find_pc_sect_line (addr, section, 0);
723 1.1 christos
724 1.8 christos if (sal.symtab)
725 1.1 christos {
726 1.1 christos *filename = symtab_to_filename_for_display (sal.symtab);
727 1.1 christos *line = sal.line;
728 1.1 christos }
729 1.1 christos }
730 1.1 christos return 0;
731 1.1 christos }
732 1.1 christos
733 1.1 christos
734 1.1 christos /* Print address ADDR symbolically on STREAM.
735 1.1 christos First print it as a number. Then perhaps print
736 1.1 christos <SYMBOL + OFFSET> after the number. */
737 1.1 christos
738 1.1 christos void
739 1.1 christos print_address (struct gdbarch *gdbarch,
740 1.8 christos CORE_ADDR addr, struct ui_file *stream)
741 1.1 christos {
742 1.1 christos fputs_styled (paddress (gdbarch, addr), address_style.style (), stream);
743 1.1 christos print_address_symbolic (gdbarch, addr, stream, asm_demangle, " ");
744 1.1 christos }
745 1.1 christos
746 1.1 christos /* Return a prefix for instruction address:
747 1.1 christos "=> " for current instruction, else " ". */
748 1.1 christos
749 1.1 christos const char *
750 1.1 christos pc_prefix (CORE_ADDR addr)
751 1.1 christos {
752 1.10 christos if (has_stack_frames ())
753 1.1 christos {
754 1.1 christos frame_info_ptr frame;
755 1.1 christos CORE_ADDR pc;
756 1.1 christos
757 1.1 christos frame = get_selected_frame (NULL);
758 1.1 christos if (get_frame_pc_if_available (frame, &pc) && pc == addr)
759 1.1 christos return "=> ";
760 1.1 christos }
761 1.1 christos return " ";
762 1.1 christos }
763 1.1 christos
764 1.1 christos /* Print address ADDR symbolically on STREAM. Parameter DEMANGLE
765 1.1 christos controls whether to print the symbolic name "raw" or demangled.
766 1.1 christos Return non-zero if anything was printed; zero otherwise. */
767 1.1 christos
768 1.1 christos int
769 1.1 christos print_address_demangle (const struct value_print_options *opts,
770 1.1 christos struct gdbarch *gdbarch, CORE_ADDR addr,
771 1.1 christos struct ui_file *stream, int do_demangle)
772 1.1 christos {
773 1.8 christos if (opts->addressprint)
774 1.1 christos {
775 1.1 christos fputs_styled (paddress (gdbarch, addr), address_style.style (), stream);
776 1.1 christos print_address_symbolic (gdbarch, addr, stream, do_demangle, " ");
777 1.1 christos }
778 1.1 christos else
779 1.1 christos {
780 1.1 christos return print_address_symbolic (gdbarch, addr, stream, do_demangle, "");
781 1.1 christos }
782 1.1 christos return 1;
783 1.1 christos }
784 1.6 christos
785 1.6 christos
787 1.6 christos /* Find the address of the instruction that is INST_COUNT instructions before
788 1.6 christos the instruction at ADDR.
789 1.6 christos Since some architectures have variable-length instructions, we can't just
790 1.6 christos simply subtract INST_COUNT * INSN_LEN from ADDR. Instead, we use line
791 1.6 christos number information to locate the nearest known instruction boundary,
792 1.6 christos and disassemble forward from there. If we go out of the symbol range
793 1.6 christos during disassembling, we return the lowest address we've got so far and
794 1.6 christos set the number of instructions read to INST_READ. */
795 1.10 christos
796 1.6 christos static CORE_ADDR
797 1.6 christos find_instruction_backward (struct gdbarch *gdbarch, CORE_ADDR addr,
798 1.6 christos int inst_count, int *inst_read)
799 1.6 christos {
800 1.7 christos /* The vector PCS is used to store instruction addresses within
801 1.6 christos a pc range. */
802 1.6 christos CORE_ADDR loop_start, loop_end, p;
803 1.6 christos std::vector<CORE_ADDR> pcs;
804 1.6 christos struct symtab_and_line sal;
805 1.6 christos
806 1.6 christos *inst_read = 0;
807 1.6 christos loop_start = loop_end = addr;
808 1.6 christos
809 1.6 christos /* In each iteration of the outer loop, we get a pc range that ends before
810 1.6 christos LOOP_START, then we count and store every instruction address of the range
811 1.6 christos iterated in the loop.
812 1.6 christos If the number of instructions counted reaches INST_COUNT, return the
813 1.6 christos stored address that is located INST_COUNT instructions back from ADDR.
814 1.6 christos If INST_COUNT is not reached, we subtract the number of counted
815 1.7 christos instructions from INST_COUNT, and go to the next iteration. */
816 1.6 christos do
817 1.6 christos {
818 1.10 christos pcs.clear ();
819 1.10 christos sal = find_pc_sect_line (loop_start, NULL, 1);
820 1.10 christos if (sal.line <= 0)
821 1.10 christos {
822 1.10 christos /* We reach here when line info is not available. In this case,
823 1.10 christos we print a message and just exit the loop. The return value
824 1.10 christos is calculated after the loop. */
825 1.10 christos gdb_printf (_("No line number information available "
826 1.10 christos "for address "));
827 1.10 christos gdb_stdout->wrap_here (2);
828 1.10 christos print_address (gdbarch, loop_start - 1, gdb_stdout);
829 1.6 christos gdb_printf ("\n");
830 1.6 christos break;
831 1.6 christos }
832 1.6 christos
833 1.6 christos loop_end = loop_start;
834 1.10 christos loop_start = sal.pc;
835 1.6 christos
836 1.10 christos /* This loop pushes instruction addresses in the range from
837 1.7 christos LOOP_START to LOOP_END. */
838 1.10 christos for (p = loop_start; p < loop_end;)
839 1.10 christos {
840 1.6 christos pcs.push_back (p);
841 1.7 christos p += gdb_insn_length (gdbarch, p);
842 1.7 christos }
843 1.6 christos
844 1.6 christos inst_count -= pcs.size ();
845 1.6 christos *inst_read += pcs.size ();
846 1.6 christos }
847 1.6 christos while (inst_count > 0);
848 1.6 christos
849 1.6 christos /* After the loop, the vector PCS has instruction addresses of the last
850 1.6 christos source line we processed, and INST_COUNT has a negative value.
851 1.6 christos We return the address at the index of -INST_COUNT in the vector for
852 1.10 christos the reason below.
853 1.10 christos Let's assume the following instruction addresses and run 'x/-4i 0x400e'.
854 1.10 christos Line X of File
855 1.6 christos 0x4000
856 1.10 christos 0x4001
857 1.10 christos 0x4005
858 1.6 christos Line Y of File
859 1.10 christos 0x4009
860 1.6 christos 0x400c
861 1.6 christos => 0x400e
862 1.6 christos 0x4011
863 1.6 christos find_instruction_backward is called with INST_COUNT = 4 and expected to
864 1.6 christos return 0x4001. When we reach here, INST_COUNT is set to -1 because
865 1.6 christos it was subtracted by 2 (from Line Y) and 3 (from Line X). The value
866 1.6 christos 4001 is located at the index 1 of the last iterated line (= Line X),
867 1.6 christos which is simply calculated by -INST_COUNT.
868 1.7 christos The case when the length of PCS is 0 means that we reached an area for
869 1.6 christos which line info is not available. In such case, we return LOOP_START,
870 1.6 christos which was the lowest instruction address that had line info. */
871 1.6 christos p = pcs.size () > 0 ? pcs[-inst_count] : loop_start;
872 1.6 christos
873 1.6 christos /* INST_READ includes all instruction addresses in a pc range. Need to
874 1.6 christos exclude the beginning part up to the address we're returning. That
875 1.6 christos is, exclude {0x4000} in the example above. */
876 1.6 christos if (inst_count < 0)
877 1.6 christos *inst_read += inst_count;
878 1.6 christos
879 1.6 christos return p;
880 1.6 christos }
881 1.6 christos
882 1.6 christos /* Backward read LEN bytes of target memory from address MEMADDR + LEN,
883 1.6 christos placing the results in GDB's memory from MYADDR + LEN. Returns
884 1.6 christos a count of the bytes actually read. */
885 1.10 christos
886 1.6 christos static int
887 1.6 christos read_memory_backward (struct gdbarch *gdbarch,
888 1.6 christos CORE_ADDR memaddr, gdb_byte *myaddr, int len)
889 1.6 christos {
890 1.6 christos int errcode;
891 1.6 christos int nread; /* Number of bytes actually read. */
892 1.6 christos
893 1.6 christos /* First try a complete read. */
894 1.6 christos errcode = target_read_memory (memaddr, myaddr, len);
895 1.6 christos if (errcode == 0)
896 1.6 christos {
897 1.6 christos /* Got it all. */
898 1.6 christos nread = len;
899 1.6 christos }
900 1.6 christos else
901 1.6 christos {
902 1.6 christos /* Loop, reading one byte at a time until we get as much as we can. */
903 1.10 christos memaddr += len;
904 1.10 christos myaddr += len;
905 1.10 christos for (nread = 0; nread < len; ++nread)
906 1.10 christos {
907 1.10 christos errcode = target_read_memory (--memaddr, --myaddr, 1);
908 1.10 christos if (errcode != 0)
909 1.10 christos {
910 1.10 christos /* The read was unsuccessful, so exit the loop. */
911 1.10 christos gdb_printf (_("Cannot access memory at address %s\n"),
912 1.10 christos paddress (gdbarch, memaddr));
913 1.6 christos break;
914 1.6 christos }
915 1.6 christos }
916 1.6 christos }
917 1.6 christos return nread;
918 1.6 christos }
919 1.6 christos
920 1.6 christos /* Returns true if X (which is LEN bytes wide) is the number zero. */
921 1.6 christos
922 1.6 christos static int
923 1.6 christos integer_is_zero (const gdb_byte *x, int len)
924 1.6 christos {
925 1.6 christos int i = 0;
926 1.6 christos
927 1.6 christos while (i < len && x[i] == 0)
928 1.6 christos ++i;
929 1.6 christos return (i == len);
930 1.6 christos }
931 1.6 christos
932 1.6 christos /* Find the start address of a string in which ADDR is included.
933 1.6 christos Basically we search for '\0' and return the next address,
934 1.6 christos but if OPTIONS->PRINT_MAX is smaller than the length of a string,
935 1.6 christos we stop searching and return the address to print characters as many as
936 1.6 christos PRINT_MAX from the string. */
937 1.10 christos
938 1.10 christos static CORE_ADDR
939 1.10 christos find_string_backward (struct gdbarch *gdbarch,
940 1.6 christos CORE_ADDR addr, int count, int char_size,
941 1.6 christos const struct value_print_options *options,
942 1.6 christos int *strings_counted)
943 1.6 christos {
944 1.6 christos const int chunk_size = 0x20;
945 1.6 christos int read_error = 0;
946 1.6 christos int chars_read = 0;
947 1.6 christos int chars_to_read = chunk_size;
948 1.6 christos int chars_counted = 0;
949 1.6 christos int count_original = count;
950 1.8 christos CORE_ADDR string_start_addr = addr;
951 1.6 christos
952 1.6 christos gdb_assert (char_size == 1 || char_size == 2 || char_size == 4);
953 1.6 christos gdb::byte_vector buffer (chars_to_read * char_size);
954 1.6 christos while (count > 0 && read_error == 0)
955 1.6 christos {
956 1.8 christos int i;
957 1.10 christos
958 1.6 christos addr -= chars_to_read * char_size;
959 1.6 christos chars_read = read_memory_backward (gdbarch, addr, buffer.data (),
960 1.6 christos chars_to_read * char_size);
961 1.6 christos chars_read /= char_size;
962 1.10 christos read_error = (chars_read == chars_to_read) ? 0 : 1;
963 1.10 christos /* Searching for '\0' from the end of buffer in backward direction. */
964 1.6 christos for (i = 0; i < chars_read && count > 0 ; ++i, ++chars_counted)
965 1.10 christos {
966 1.10 christos int offset = (chars_to_read - i - 1) * char_size;
967 1.10 christos
968 1.10 christos if (integer_is_zero (&buffer[offset], char_size)
969 1.10 christos || chars_counted == options->print_max)
970 1.10 christos {
971 1.10 christos /* Found '\0' or reached print_max. As OFFSET is the offset to
972 1.10 christos '\0', we add CHAR_SIZE to return the start address of
973 1.10 christos a string. */
974 1.10 christos --count;
975 1.10 christos string_start_addr = addr + offset + char_size;
976 1.6 christos chars_counted = 0;
977 1.6 christos }
978 1.6 christos }
979 1.6 christos }
980 1.6 christos
981 1.6 christos /* Update STRINGS_COUNTED with the actual number of loaded strings. */
982 1.6 christos *strings_counted = count_original - count;
983 1.6 christos
984 1.10 christos if (read_error != 0)
985 1.6 christos {
986 1.6 christos /* In error case, STRING_START_ADDR is pointing to the string that
987 1.6 christos was last successfully loaded. Rewind the partially loaded string. */
988 1.6 christos string_start_addr -= chars_counted * char_size;
989 1.6 christos }
990 1.6 christos
991 1.1 christos return string_start_addr;
992 1.1 christos }
993 1.1 christos
994 1.1 christos /* Examine data at address ADDR in format FMT.
995 1.1 christos Fetch it from memory and print on gdb_stdout. */
996 1.1 christos
997 1.1 christos static void
998 1.1 christos do_examine (struct format_data fmt, struct gdbarch *gdbarch, CORE_ADDR addr)
999 1.1 christos {
1000 1.1 christos char format = 0;
1001 1.1 christos char size;
1002 1.1 christos int count = 1;
1003 1.1 christos struct type *val_type = NULL;
1004 1.6 christos int i;
1005 1.6 christos int maxelts;
1006 1.1 christos struct value_print_options opts;
1007 1.1 christos int need_to_update_next_address = 0;
1008 1.1 christos CORE_ADDR addr_rewound = 0;
1009 1.1 christos
1010 1.1 christos format = fmt.format;
1011 1.1 christos size = fmt.size;
1012 1.1 christos count = fmt.count;
1013 1.1 christos next_gdbarch = gdbarch;
1014 1.1 christos next_address = addr;
1015 1.1 christos
1016 1.1 christos /* Instruction format implies fetch single bytes
1017 1.1 christos regardless of the specified size.
1018 1.1 christos The case of strings is handled in decode_format, only explicit
1019 1.1 christos size operator are not changed to 'b'. */
1020 1.1 christos if (format == 'i')
1021 1.1 christos size = 'b';
1022 1.1 christos
1023 1.1 christos if (size == 'a')
1024 1.1 christos {
1025 1.1 christos /* Pick the appropriate size for an address. */
1026 1.1 christos if (gdbarch_ptr_bit (next_gdbarch) == 64)
1027 1.1 christos size = 'g';
1028 1.1 christos else if (gdbarch_ptr_bit (next_gdbarch) == 32)
1029 1.1 christos size = 'w';
1030 1.1 christos else if (gdbarch_ptr_bit (next_gdbarch) == 16)
1031 1.10 christos size = 'h';
1032 1.1 christos else
1033 1.1 christos /* Bad value for gdbarch_ptr_bit. */
1034 1.1 christos internal_error (_("failed internal consistency check"));
1035 1.1 christos }
1036 1.1 christos
1037 1.1 christos if (size == 'b')
1038 1.1 christos val_type = builtin_type (next_gdbarch)->builtin_int8;
1039 1.1 christos else if (size == 'h')
1040 1.1 christos val_type = builtin_type (next_gdbarch)->builtin_int16;
1041 1.1 christos else if (size == 'w')
1042 1.1 christos val_type = builtin_type (next_gdbarch)->builtin_int32;
1043 1.1 christos else if (size == 'g')
1044 1.1 christos val_type = builtin_type (next_gdbarch)->builtin_int64;
1045 1.1 christos
1046 1.1 christos if (format == 's')
1047 1.1 christos {
1048 1.1 christos struct type *char_type = NULL;
1049 1.1 christos
1050 1.1 christos /* Search for "char16_t" or "char32_t" types or fall back to 8-bit char
1051 1.1 christos if type is not found. */
1052 1.1 christos if (size == 'h')
1053 1.1 christos char_type = builtin_type (next_gdbarch)->builtin_char16;
1054 1.10 christos else if (size == 'w')
1055 1.1 christos char_type = builtin_type (next_gdbarch)->builtin_char32;
1056 1.10 christos if (char_type)
1057 1.1 christos val_type = char_type;
1058 1.1 christos else
1059 1.1 christos {
1060 1.1 christos if (size != '\0' && size != 'b')
1061 1.1 christos warning (_("Unable to display strings with "
1062 1.10 christos "size '%c', using 'b' instead."), size);
1063 1.1 christos size = 'b';
1064 1.1 christos val_type = builtin_type (next_gdbarch)->builtin_int8;
1065 1.1 christos }
1066 1.1 christos }
1067 1.1 christos
1068 1.1 christos maxelts = 8;
1069 1.1 christos if (size == 'w')
1070 1.1 christos maxelts = 4;
1071 1.1 christos if (size == 'g')
1072 1.1 christos maxelts = 2;
1073 1.1 christos if (format == 's' || format == 'i')
1074 1.1 christos maxelts = 1;
1075 1.6 christos
1076 1.6 christos get_formatted_print_options (&opts, format);
1077 1.6 christos
1078 1.10 christos if (count < 0)
1079 1.10 christos {
1080 1.6 christos /* This is the negative repeat count case.
1081 1.6 christos We rewind the address based on the given repeat count and format,
1082 1.6 christos then examine memory from there in forward direction. */
1083 1.10 christos
1084 1.10 christos count = -count;
1085 1.10 christos if (format == 'i')
1086 1.10 christos {
1087 1.6 christos next_address = find_instruction_backward (gdbarch, addr, count,
1088 1.10 christos &count);
1089 1.10 christos }
1090 1.10 christos else if (format == 's')
1091 1.10 christos {
1092 1.10 christos next_address = find_string_backward (gdbarch, addr, count,
1093 1.6 christos val_type->length (),
1094 1.10 christos &opts, &count);
1095 1.10 christos }
1096 1.10 christos else
1097 1.6 christos {
1098 1.6 christos next_address = addr - count * val_type->length ();
1099 1.10 christos }
1100 1.10 christos
1101 1.6 christos /* The following call to print_formatted updates next_address in every
1102 1.10 christos iteration. In backward case, we store the start address here
1103 1.10 christos and update next_address with it before exiting the function. */
1104 1.6 christos addr_rewound = (format == 's'
1105 1.6 christos ? next_address - val_type->length ()
1106 1.6 christos : next_address);
1107 1.10 christos need_to_update_next_address = 1;
1108 1.10 christos }
1109 1.10 christos
1110 1.10 christos /* Whether we need to print the memory tag information for the current
1111 1.10 christos address range. */
1112 1.1 christos bool print_range_tag = true;
1113 1.1 christos uint32_t gsize = gdbarch_memtag_granule_size (gdbarch);
1114 1.1 christos
1115 1.1 christos /* Print as many objects as specified in COUNT, at most maxelts per line,
1116 1.1 christos with the address of the next one at the start of each line. */
1117 1.1 christos
1118 1.10 christos while (count > 0)
1119 1.10 christos {
1120 1.10 christos QUIT;
1121 1.10 christos
1122 1.10 christos CORE_ADDR tag_laddr = 0, tag_haddr = 0;
1123 1.10 christos
1124 1.10 christos /* Print the memory tag information if requested. */
1125 1.10 christos if (fmt.print_tags && print_range_tag
1126 1.10 christos && target_supports_memory_tagging ())
1127 1.10 christos {
1128 1.10 christos tag_laddr = align_down (next_address, gsize);
1129 1.10 christos tag_haddr = align_down (next_address + gsize, gsize);
1130 1.10 christos
1131 1.10 christos struct value *v_addr
1132 1.10 christos = value_from_ulongest (builtin_type (gdbarch)->builtin_data_ptr,
1133 1.10 christos tag_laddr);
1134 1.10 christos
1135 1.10 christos if (gdbarch_tagged_address_p (target_gdbarch (), v_addr))
1136 1.10 christos {
1137 1.10 christos /* Fetch the allocation tag. */
1138 1.10 christos struct value *tag
1139 1.10 christos = gdbarch_get_memtag (gdbarch, v_addr, memtag_type::allocation);
1140 1.10 christos std::string atag
1141 1.10 christos = gdbarch_memtag_to_string (gdbarch, tag);
1142 1.10 christos
1143 1.10 christos if (!atag.empty ())
1144 1.10 christos {
1145 1.10 christos gdb_printf (_("<Allocation Tag %s for range [%s,%s)>\n"),
1146 1.10 christos atag.c_str (),
1147 1.10 christos paddress (gdbarch, tag_laddr),
1148 1.10 christos paddress (gdbarch, tag_haddr));
1149 1.10 christos }
1150 1.10 christos }
1151 1.1 christos print_range_tag = false;
1152 1.10 christos }
1153 1.1 christos
1154 1.10 christos if (format == 'i')
1155 1.1 christos gdb_puts (pc_prefix (next_address));
1156 1.1 christos print_address (next_gdbarch, next_address, gdb_stdout);
1157 1.1 christos gdb_printf (":");
1158 1.1 christos for (i = maxelts;
1159 1.10 christos i > 0 && count > 0;
1160 1.1 christos i--, count--)
1161 1.1 christos {
1162 1.1 christos gdb_printf ("\t");
1163 1.1 christos /* Note that print_formatted sets next_address for the next
1164 1.1 christos object. */
1165 1.1 christos last_examine_address = next_address;
1166 1.1 christos
1167 1.1 christos /* The value to be displayed is not fetched greedily.
1168 1.1 christos Instead, to avoid the possibility of a fetched value not
1169 1.1 christos being used, its retrieval is delayed until the print code
1170 1.1 christos uses it. When examining an instruction stream, the
1171 1.1 christos disassembler will perform its own memory fetch using just
1172 1.1 christos the address stored in LAST_EXAMINE_VALUE. FIXME: Should
1173 1.8 christos the disassembler be modified so that LAST_EXAMINE_VALUE
1174 1.8 christos is left with the byte sequence from the last complete
1175 1.1 christos instruction fetched from memory? */
1176 1.8 christos last_examine_value
1177 1.1 christos = release_value (value_at_lazy (val_type, next_address));
1178 1.1 christos
1179 1.1 christos print_formatted (last_examine_value.get (), size, &opts, gdb_stdout);
1180 1.1 christos
1181 1.10 christos /* Display any branch delay slots following the final insn. */
1182 1.10 christos if (format == 'i' && count == 1)
1183 1.10 christos count += branch_delay_insns;
1184 1.10 christos
1185 1.10 christos /* Update the tag range based on the current address being
1186 1.1 christos processed. */
1187 1.10 christos if (tag_haddr <= next_address)
1188 1.1 christos print_range_tag = true;
1189 1.6 christos }
1190 1.6 christos gdb_printf ("\n");
1191 1.6 christos }
1192 1.1 christos
1193 1.1 christos if (need_to_update_next_address)
1194 1.1 christos next_address = addr_rewound;
1195 1.5 christos }
1196 1.1 christos
1197 1.1 christos static void
1199 1.1 christos validate_format (struct format_data fmt, const char *cmdname)
1200 1.1 christos {
1201 1.1 christos if (fmt.size != 0)
1202 1.1 christos error (_("Size letters are meaningless in \"%s\" command."), cmdname);
1203 1.1 christos if (fmt.count != 1)
1204 1.1 christos error (_("Item count other than 1 is meaningless in \"%s\" command."),
1205 1.1 christos cmdname);
1206 1.1 christos if (fmt.format == 'i')
1207 1.9 christos error (_("Format letter \"%c\" is meaningless in \"%s\" command."),
1208 1.5 christos fmt.format, cmdname);
1209 1.5 christos }
1210 1.5 christos
1211 1.5 christos /* Parse print command format string into *OPTS and update *EXPP.
1212 1.9 christos CMDNAME should name the current command. */
1213 1.5 christos
1214 1.5 christos void
1215 1.5 christos print_command_parse_format (const char **expp, const char *cmdname,
1216 1.9 christos value_print_options *opts)
1217 1.9 christos {
1218 1.9 christos const char *exp = *expp;
1219 1.5 christos
1220 1.5 christos /* opts->raw value might already have been set by 'set print raw-values'
1221 1.9 christos or by using 'print -raw-values'.
1222 1.9 christos So, do not set opts->raw to 0, only set it to 1 if /r is given. */
1223 1.5 christos if (exp && *exp == '/')
1224 1.9 christos {
1225 1.9 christos format_data fmt;
1226 1.9 christos
1227 1.9 christos exp++;
1228 1.9 christos fmt = decode_format (&exp, last_format, 0);
1229 1.9 christos validate_format (fmt, cmdname);
1230 1.5 christos last_format = fmt.format;
1231 1.5 christos
1232 1.5 christos opts->format = fmt.format;
1233 1.9 christos opts->raw = opts->raw || fmt.raw;
1234 1.5 christos }
1235 1.5 christos else
1236 1.5 christos {
1237 1.5 christos opts->format = 0;
1238 1.5 christos }
1239 1.9 christos
1240 1.5 christos *expp = exp;
1241 1.5 christos }
1242 1.9 christos
1243 1.5 christos /* See valprint.h. */
1244 1.5 christos
1245 1.5 christos void
1246 1.5 christos print_value (value *val, const value_print_options &opts)
1247 1.5 christos {
1248 1.10 christos int histindex = record_latest_value (val);
1249 1.5 christos
1250 1.5 christos annotate_value_history_begin (histindex, value_type (val));
1251 1.5 christos
1252 1.9 christos gdb_printf ("$%d = ", histindex);
1253 1.10 christos
1254 1.5 christos annotate_value_history_value ();
1255 1.5 christos
1256 1.5 christos print_formatted (val, 0, &opts, gdb_stdout);
1257 1.5 christos gdb_printf ("\n");
1258 1.10 christos
1259 1.1 christos annotate_value_history_end ();
1260 1.10 christos }
1261 1.10 christos
1262 1.1 christos /* Returns true if memory tags should be validated. False otherwise. */
1263 1.10 christos
1264 1.10 christos static bool
1265 1.10 christos should_validate_memtags (struct value *value)
1266 1.10 christos {
1267 1.10 christos gdb_assert (value != nullptr && value_type (value) != nullptr);
1268 1.10 christos
1269 1.10 christos if (!target_supports_memory_tagging ())
1270 1.10 christos return false;
1271 1.10 christos
1272 1.10 christos enum type_code code = value_type (value)->code ();
1273 1.10 christos
1274 1.10 christos /* Skip non-address values. */
1275 1.10 christos if (code != TYPE_CODE_PTR
1276 1.10 christos && !TYPE_IS_REFERENCE (value_type (value)))
1277 1.10 christos return false;
1278 1.10 christos
1279 1.10 christos /* OK, we have an address value. Check we have a complete value we
1280 1.10 christos can extract. */
1281 1.10 christos if (value_optimized_out (value)
1282 1.10 christos || !value_entirely_available (value))
1283 1.10 christos return false;
1284 1.10 christos
1285 1.10 christos /* We do. Check whether it includes any tags. */
1286 1.9 christos return gdbarch_tagged_address_p (target_gdbarch (), value);
1287 1.10 christos }
1288 1.10 christos
1289 1.10 christos /* Helper for parsing arguments for print_command_1. */
1290 1.10 christos
1291 1.10 christos static struct value *
1292 1.9 christos process_print_command_args (const char *args, value_print_options *print_opts,
1293 1.10 christos bool voidprint)
1294 1.9 christos {
1295 1.9 christos get_user_print_options (print_opts);
1296 1.9 christos /* Override global settings with explicit options, if any. */
1297 1.10 christos auto group = make_value_print_options_def_group (print_opts);
1298 1.1 christos gdb::option::process_options
1299 1.9 christos (&args, gdb::option::PROCESS_OPTIONS_REQUIRE_DELIMITER, group);
1300 1.1 christos
1301 1.9 christos print_command_parse_format (&args, "print", print_opts);
1302 1.1 christos
1303 1.10 christos const char *exp = args;
1304 1.10 christos
1305 1.10 christos if (exp != nullptr && *exp)
1306 1.10 christos {
1307 1.1 christos /* VOIDPRINT is true to indicate that we do want to print a void
1308 1.10 christos value, so invert it for parse_expression. */
1309 1.10 christos expression_up expr = parse_expression (exp, nullptr, !voidprint);
1310 1.10 christos return evaluate_expression (expr.get ());
1311 1.10 christos }
1312 1.10 christos
1313 1.10 christos return access_value_history (0);
1314 1.10 christos }
1315 1.10 christos
1316 1.10 christos /* Implementation of the "print" and "call" commands. */
1317 1.10 christos
1318 1.10 christos static void
1319 1.10 christos print_command_1 (const char *args, int voidprint)
1320 1.1 christos {
1321 1.1 christos value_print_options print_opts;
1322 1.9 christos
1323 1.10 christos struct value *val = process_print_command_args (args, &print_opts, voidprint);
1324 1.10 christos
1325 1.10 christos if (voidprint || (val && value_type (val) &&
1326 1.10 christos value_type (val)->code () != TYPE_CODE_VOID))
1327 1.10 christos {
1328 1.10 christos /* If memory tagging validation is on, check if the tag is valid. */
1329 1.10 christos if (print_opts.memory_tag_violations)
1330 1.10 christos {
1331 1.10 christos try
1332 1.10 christos {
1333 1.10 christos if (should_validate_memtags (val)
1334 1.10 christos && !gdbarch_memtag_matches_p (target_gdbarch (), val))
1335 1.10 christos {
1336 1.10 christos /* Fetch the logical tag. */
1337 1.10 christos struct value *tag
1338 1.10 christos = gdbarch_get_memtag (target_gdbarch (), val,
1339 1.10 christos memtag_type::logical);
1340 1.10 christos std::string ltag
1341 1.10 christos = gdbarch_memtag_to_string (target_gdbarch (), tag);
1342 1.10 christos
1343 1.10 christos /* Fetch the allocation tag. */
1344 1.10 christos tag = gdbarch_get_memtag (target_gdbarch (), val,
1345 1.10 christos memtag_type::allocation);
1346 1.10 christos std::string atag
1347 1.10 christos = gdbarch_memtag_to_string (target_gdbarch (), tag);
1348 1.10 christos
1349 1.10 christos gdb_printf (_("Logical tag (%s) does not match the "
1350 1.10 christos "allocation tag (%s).\n"),
1351 1.10 christos ltag.c_str (), atag.c_str ());
1352 1.10 christos }
1353 1.10 christos }
1354 1.10 christos catch (gdb_exception_error &ex)
1355 1.10 christos {
1356 1.10 christos if (ex.error == TARGET_CLOSE_ERROR)
1357 1.10 christos throw;
1358 1.10 christos
1359 1.10 christos gdb_printf (gdb_stderr,
1360 1.10 christos _("Could not validate memory tag: %s\n"),
1361 1.10 christos ex.message->c_str ());
1362 1.10 christos }
1363 1.10 christos }
1364 1.10 christos
1365 1.10 christos print_value (val, print_opts);
1366 1.10 christos }
1367 1.10 christos }
1368 1.10 christos
1369 1.10 christos /* Called from command completion function to skip over /FMT
1370 1.10 christos specifications, allowing the rest of the line to be completed. Returns
1371 1.10 christos true if the /FMT is at the end of the current line and there is nothing
1372 1.10 christos left to complete, otherwise false is returned.
1373 1.10 christos
1374 1.10 christos In either case *ARGS can be updated to point after any part of /FMT that
1375 1.10 christos is present.
1376 1.10 christos
1377 1.10 christos This function is designed so that trying to complete '/' will offer no
1378 1.10 christos completions, the user needs to insert the format specification
1379 1.10 christos themselves. Trying to complete '/FMT' (where FMT is any non-empty set
1380 1.10 christos of alpha-numeric characters) will cause readline to insert a single
1381 1.10 christos space, setting the user up to enter the expression. */
1382 1.10 christos
1383 1.10 christos static bool
1384 1.10 christos skip_over_slash_fmt (completion_tracker &tracker, const char **args)
1385 1.10 christos {
1386 1.10 christos const char *text = *args;
1387 1.10 christos
1388 1.10 christos if (text[0] == '/')
1389 1.10 christos {
1390 1.10 christos bool in_fmt;
1391 1.10 christos tracker.set_use_custom_word_point (true);
1392 1.10 christos
1393 1.10 christos if (text[1] == '\0')
1394 1.10 christos {
1395 1.10 christos /* The user tried to complete after typing just the '/' character
1396 1.10 christos of the /FMT string. Step the completer past the '/', but we
1397 1.10 christos don't offer any completions. */
1398 1.10 christos in_fmt = true;
1399 1.10 christos ++text;
1400 1.10 christos }
1401 1.10 christos else
1402 1.10 christos {
1403 1.10 christos /* The user has typed some characters after the '/', we assume
1404 1.10 christos this is a complete /FMT string, first skip over it. */
1405 1.10 christos text = skip_to_space (text);
1406 1.10 christos
1407 1.10 christos if (*text == '\0')
1408 1.10 christos {
1409 1.10 christos /* We're at the end of the input string. The user has typed
1410 1.10 christos '/FMT' and asked for a completion. Push an empty
1411 1.10 christos completion string, this will cause readline to insert a
1412 1.10 christos space so the user now has '/FMT '. */
1413 1.10 christos in_fmt = true;
1414 1.10 christos tracker.add_completion (make_unique_xstrdup (text));
1415 1.10 christos }
1416 1.10 christos else
1417 1.10 christos {
1418 1.10 christos /* The user has already typed things after the /FMT, skip the
1419 1.10 christos whitespace and return false. Whoever called this function
1420 1.10 christos should then try to complete what comes next. */
1421 1.10 christos in_fmt = false;
1422 1.10 christos text = skip_spaces (text);
1423 1.10 christos }
1424 1.10 christos }
1425 1.10 christos
1426 1.10 christos tracker.advance_custom_word_point_by (text - *args);
1427 1.10 christos *args = text;
1428 1.9 christos return in_fmt;
1429 1.9 christos }
1430 1.9 christos
1431 1.9 christos return false;
1432 1.9 christos }
1433 1.9 christos
1434 1.9 christos /* See valprint.h. */
1435 1.9 christos
1436 1.9 christos void
1437 1.9 christos print_command_completer (struct cmd_list_element *ignore,
1438 1.9 christos completion_tracker &tracker,
1439 1.9 christos const char *text, const char * /*word*/)
1440 1.9 christos {
1441 1.9 christos const auto group = make_value_print_options_def_group (nullptr);
1442 1.10 christos if (gdb::option::complete_options
1443 1.10 christos (tracker, &text, gdb::option::PROCESS_OPTIONS_REQUIRE_DELIMITER, group))
1444 1.10 christos return;
1445 1.9 christos
1446 1.9 christos if (skip_over_slash_fmt (tracker, &text))
1447 1.1 christos return;
1448 1.1 christos
1449 1.1 christos const char *word = advance_to_expression_complete_word_point (tracker, text);
1450 1.8 christos expression_completer (ignore, tracker, text, word);
1451 1.1 christos }
1452 1.10 christos
1453 1.1 christos static void
1454 1.1 christos print_command (const char *exp, int from_tty)
1455 1.1 christos {
1456 1.1 christos print_command_1 (exp, true);
1457 1.8 christos }
1458 1.1 christos
1459 1.10 christos /* Same as print, except it doesn't print void results. */
1460 1.1 christos static void
1461 1.1 christos call_command (const char *exp, int from_tty)
1462 1.1 christos {
1463 1.1 christos print_command_1 (exp, false);
1464 1.1 christos }
1465 1.8 christos
1466 1.1 christos /* Implementation of the "output" command. */
1467 1.1 christos
1468 1.1 christos void
1469 1.1 christos output_command (const char *exp, int from_tty)
1470 1.1 christos {
1471 1.1 christos char format = 0;
1472 1.1 christos struct value *val;
1473 1.1 christos struct format_data fmt;
1474 1.1 christos struct value_print_options opts;
1475 1.1 christos
1476 1.1 christos fmt.size = 0;
1477 1.1 christos fmt.raw = 0;
1478 1.1 christos
1479 1.1 christos if (exp && *exp == '/')
1480 1.1 christos {
1481 1.1 christos exp++;
1482 1.1 christos fmt = decode_format (&exp, 0, 0);
1483 1.7 christos validate_format (fmt, "output");
1484 1.1 christos format = fmt.format;
1485 1.7 christos }
1486 1.1 christos
1487 1.1 christos expression_up expr = parse_expression (exp);
1488 1.1 christos
1489 1.1 christos val = evaluate_expression (expr.get ());
1490 1.1 christos
1491 1.1 christos annotate_value_begin (value_type (val));
1492 1.1 christos
1493 1.1 christos get_formatted_print_options (&opts, format);
1494 1.1 christos opts.raw = fmt.raw;
1495 1.1 christos print_formatted (val, fmt.size, &opts, gdb_stdout);
1496 1.1 christos
1497 1.1 christos annotate_value_end ();
1498 1.1 christos
1499 1.8 christos gdb_flush (gdb_stdout);
1500 1.1 christos }
1501 1.7 christos
1502 1.1 christos static void
1503 1.10 christos set_command (const char *exp, int from_tty)
1504 1.10 christos {
1505 1.10 christos expression_up expr = parse_expression (exp);
1506 1.10 christos
1507 1.10 christos switch (expr->op->opcode ())
1508 1.10 christos {
1509 1.10 christos case UNOP_PREINCREMENT:
1510 1.10 christos case UNOP_POSTINCREMENT:
1511 1.10 christos case UNOP_PREDECREMENT:
1512 1.10 christos case UNOP_POSTDECREMENT:
1513 1.10 christos case BINOP_ASSIGN:
1514 1.10 christos case BINOP_ASSIGN_MODIFY:
1515 1.10 christos case BINOP_COMMA:
1516 1.10 christos break;
1517 1.1 christos default:
1518 1.7 christos warning
1519 1.1 christos (_("Expression is not an assignment (and might have no effect)"));
1520 1.1 christos }
1521 1.1 christos
1522 1.8 christos evaluate_expression (expr.get ());
1523 1.1 christos }
1524 1.1 christos
1525 1.1 christos static void
1526 1.1 christos info_symbol_command (const char *arg, int from_tty)
1527 1.1 christos {
1528 1.1 christos struct minimal_symbol *msymbol;
1529 1.1 christos struct obj_section *osect;
1530 1.1 christos CORE_ADDR addr, sect_addr;
1531 1.1 christos int matches = 0;
1532 1.1 christos unsigned int offset;
1533 1.1 christos
1534 1.8 christos if (!arg)
1535 1.8 christos error_no_arg (_("address"));
1536 1.1 christos
1537 1.8 christos addr = parse_and_eval_address (arg);
1538 1.8 christos for (objfile *objfile : current_program_space->objfiles ())
1539 1.8 christos ALL_OBJFILE_OSECTIONS (objfile, osect)
1540 1.8 christos {
1541 1.8 christos /* Only process each object file once, even if there's a separate
1542 1.8 christos debug file. */
1543 1.8 christos if (objfile->separate_debug_objfile_backlink)
1544 1.10 christos continue;
1545 1.8 christos
1546 1.8 christos sect_addr = overlay_mapped_address (addr, osect);
1547 1.8 christos
1548 1.8 christos if (osect->addr () <= sect_addr && sect_addr < osect->endaddr ()
1549 1.8 christos && (msymbol
1550 1.8 christos = lookup_minimal_symbol_by_pc_section (sect_addr,
1551 1.1 christos osect).minsym))
1552 1.8 christos {
1553 1.10 christos const char *obj_name, *mapped, *sec_name, *msym_name;
1554 1.8 christos const char *loc_string;
1555 1.8 christos
1556 1.9 christos matches = 1;
1557 1.8 christos offset = sect_addr - msymbol->value_address (objfile);
1558 1.8 christos mapped = section_is_mapped (osect) ? _("mapped") : _("unmapped");
1559 1.8 christos sec_name = osect->the_bfd_section->name;
1560 1.8 christos msym_name = msymbol->print_name ();
1561 1.8 christos
1562 1.8 christos /* Don't print the offset if it is zero.
1563 1.8 christos We assume there's no need to handle i18n of "sym + offset". */
1564 1.8 christos std::string string_holder;
1565 1.8 christos if (offset)
1566 1.1 christos {
1567 1.8 christos string_holder = string_printf ("%s + %u", msym_name, offset);
1568 1.8 christos loc_string = string_holder.c_str ();
1569 1.8 christos }
1570 1.8 christos else
1571 1.8 christos loc_string = msym_name;
1572 1.9 christos
1573 1.8 christos gdb_assert (osect->objfile && objfile_name (osect->objfile));
1574 1.8 christos obj_name = objfile_name (osect->objfile);
1575 1.10 christos
1576 1.10 christos if (current_program_space->multi_objfile_p ())
1577 1.10 christos if (pc_in_unmapped_range (addr, osect))
1578 1.8 christos if (section_is_overlay (osect))
1579 1.10 christos gdb_printf (_("%s in load address range of "
1580 1.10 christos "%s overlay section %s of %s\n"),
1581 1.10 christos loc_string, mapped, sec_name, obj_name);
1582 1.8 christos else
1583 1.8 christos gdb_printf (_("%s in load address range of "
1584 1.10 christos "section %s of %s\n"),
1585 1.10 christos loc_string, sec_name, obj_name);
1586 1.8 christos else
1587 1.10 christos if (section_is_overlay (osect))
1588 1.10 christos gdb_printf (_("%s in %s overlay section %s of %s\n"),
1589 1.1 christos loc_string, mapped, sec_name, obj_name);
1590 1.8 christos else
1591 1.8 christos gdb_printf (_("%s in section %s of %s\n"),
1592 1.10 christos loc_string, sec_name, obj_name);
1593 1.10 christos else
1594 1.10 christos if (pc_in_unmapped_range (addr, osect))
1595 1.8 christos if (section_is_overlay (osect))
1596 1.10 christos gdb_printf (_("%s in load address range of %s overlay "
1597 1.8 christos "section %s\n"),
1598 1.8 christos loc_string, mapped, sec_name);
1599 1.8 christos else
1600 1.8 christos gdb_printf
1601 1.10 christos (_("%s in load address range of section %s\n"),
1602 1.10 christos loc_string, sec_name);
1603 1.8 christos else
1604 1.10 christos if (section_is_overlay (osect))
1605 1.10 christos gdb_printf (_("%s in %s overlay section %s\n"),
1606 1.8 christos loc_string, mapped, sec_name);
1607 1.1 christos else
1608 1.1 christos gdb_printf (_("%s in section %s\n"),
1609 1.10 christos loc_string, sec_name);
1610 1.1 christos }
1611 1.1 christos }
1612 1.1 christos if (matches == 0)
1613 1.8 christos gdb_printf (_("No symbol matches %s.\n"), arg);
1614 1.1 christos }
1615 1.1 christos
1616 1.1 christos static void
1617 1.1 christos info_address_command (const char *exp, int from_tty)
1618 1.1 christos {
1619 1.1 christos struct gdbarch *gdbarch;
1620 1.1 christos int regno;
1621 1.1 christos struct symbol *sym;
1622 1.1 christos struct bound_minimal_symbol msymbol;
1623 1.1 christos long val;
1624 1.1 christos struct obj_section *section;
1625 1.1 christos CORE_ADDR load_addr, context_pc = 0;
1626 1.1 christos struct field_of_this_result is_a_field_of_this;
1627 1.1 christos
1628 1.6 christos if (exp == 0)
1629 1.1 christos error (_("Argument required."));
1630 1.1 christos
1631 1.1 christos sym = lookup_symbol (exp, get_selected_block (&context_pc), VAR_DOMAIN,
1632 1.1 christos &is_a_field_of_this).symbol;
1633 1.10 christos if (sym == NULL)
1634 1.10 christos {
1635 1.10 christos if (is_a_field_of_this.type != NULL)
1636 1.10 christos {
1637 1.1 christos gdb_printf ("Symbol \"");
1638 1.10 christos fprintf_symbol (gdb_stdout, exp,
1639 1.1 christos current_language->la_language, DMGL_ANSI);
1640 1.10 christos gdb_printf ("\" is a field of the local class variable ");
1641 1.1 christos if (current_language->la_language == language_objc)
1642 1.1 christos gdb_printf ("`self'\n"); /* ObjC equivalent of "this" */
1643 1.1 christos else
1644 1.1 christos gdb_printf ("`this'\n");
1645 1.1 christos return;
1646 1.1 christos }
1647 1.1 christos
1648 1.1 christos msymbol = lookup_bound_minimal_symbol (exp);
1649 1.1 christos
1650 1.9 christos if (msymbol.minsym != NULL)
1651 1.10 christos {
1652 1.1 christos struct objfile *objfile = msymbol.objfile;
1653 1.10 christos
1654 1.10 christos gdbarch = objfile->arch ();
1655 1.10 christos load_addr = msymbol.value_address ();
1656 1.10 christos
1657 1.8 christos gdb_printf ("Symbol \"");
1658 1.8 christos fprintf_symbol (gdb_stdout, exp,
1659 1.10 christos current_language->la_language, DMGL_ANSI);
1660 1.10 christos gdb_printf ("\" is at ");
1661 1.1 christos fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
1662 1.1 christos gdb_stdout);
1663 1.1 christos gdb_printf (" in a file compiled without debugging");
1664 1.10 christos section = msymbol.minsym->obj_section (objfile);
1665 1.8 christos if (section_is_overlay (section))
1666 1.8 christos {
1667 1.8 christos load_addr = overlay_unmapped_address (load_addr, section);
1668 1.10 christos gdb_printf (",\n -- loaded at ");
1669 1.10 christos fputs_styled (paddress (gdbarch, load_addr),
1670 1.1 christos address_style.style (),
1671 1.10 christos gdb_stdout);
1672 1.1 christos gdb_printf (" in overlay section %s",
1673 1.1 christos section->the_bfd_section->name);
1674 1.1 christos }
1675 1.1 christos gdb_printf (".\n");
1676 1.1 christos }
1677 1.1 christos else
1678 1.10 christos error (_("No symbol \"%s\" in current context."), exp);
1679 1.10 christos return;
1680 1.10 christos }
1681 1.10 christos
1682 1.10 christos gdb_printf ("Symbol \"");
1683 1.10 christos gdb_puts (sym->print_name ());
1684 1.3 christos gdb_printf ("\" is ");
1685 1.3 christos val = sym->value_longest ();
1686 1.10 christos if (sym->is_objfile_owned ())
1687 1.1 christos section = sym->obj_section (sym->objfile ());
1688 1.1 christos else
1689 1.1 christos section = NULL;
1690 1.1 christos gdbarch = sym->arch ();
1691 1.1 christos
1692 1.10 christos if (SYMBOL_COMPUTED_OPS (sym) != NULL)
1693 1.1 christos {
1694 1.1 christos SYMBOL_COMPUTED_OPS (sym)->describe_location (sym, context_pc,
1695 1.1 christos gdb_stdout);
1696 1.10 christos gdb_printf (".\n");
1697 1.1 christos return;
1698 1.1 christos }
1699 1.1 christos
1700 1.10 christos switch (sym->aclass ())
1701 1.1 christos {
1702 1.1 christos case LOC_CONST:
1703 1.1 christos case LOC_CONST_BYTES:
1704 1.10 christos gdb_printf ("constant");
1705 1.10 christos break;
1706 1.8 christos
1707 1.8 christos case LOC_LABEL:
1708 1.1 christos gdb_printf ("a label at address ");
1709 1.1 christos load_addr = sym->value_address ();
1710 1.1 christos fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
1711 1.10 christos gdb_stdout);
1712 1.8 christos if (section_is_overlay (section))
1713 1.8 christos {
1714 1.10 christos load_addr = overlay_unmapped_address (load_addr, section);
1715 1.10 christos gdb_printf (",\n -- loaded at ");
1716 1.1 christos fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
1717 1.1 christos gdb_stdout);
1718 1.1 christos gdb_printf (" in overlay section %s",
1719 1.1 christos section->the_bfd_section->name);
1720 1.10 christos }
1721 1.1 christos break;
1722 1.1 christos
1723 1.1 christos case LOC_COMPUTED:
1724 1.1 christos gdb_assert_not_reached ("LOC_COMPUTED variable missing a method");
1725 1.1 christos
1726 1.1 christos case LOC_REGISTER:
1727 1.1 christos /* GDBARCH is the architecture associated with the objfile the symbol
1728 1.1 christos is defined in; the target architecture may be different, and may
1729 1.1 christos provide additional registers. However, we do not know the target
1730 1.1 christos architecture at this point. We assume the objfile architecture
1731 1.10 christos will contain all the standard registers that occur in debug info
1732 1.10 christos in that objfile. */
1733 1.10 christos regno = SYMBOL_REGISTER_OPS (sym)->register_number (sym, gdbarch);
1734 1.1 christos
1735 1.10 christos if (sym->is_argument ())
1736 1.10 christos gdb_printf (_("an argument in register %s"),
1737 1.1 christos gdbarch_register_name (gdbarch, regno));
1738 1.1 christos else
1739 1.1 christos gdb_printf (_("a variable in register %s"),
1740 1.10 christos gdbarch_register_name (gdbarch, regno));
1741 1.10 christos break;
1742 1.8 christos
1743 1.8 christos case LOC_STATIC:
1744 1.1 christos gdb_printf (_("static storage at address "));
1745 1.1 christos load_addr = sym->value_address ();
1746 1.1 christos fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
1747 1.10 christos gdb_stdout);
1748 1.8 christos if (section_is_overlay (section))
1749 1.8 christos {
1750 1.10 christos load_addr = overlay_unmapped_address (load_addr, section);
1751 1.10 christos gdb_printf (_(",\n -- loaded at "));
1752 1.1 christos fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
1753 1.1 christos gdb_stdout);
1754 1.1 christos gdb_printf (_(" in overlay section %s"),
1755 1.1 christos section->the_bfd_section->name);
1756 1.1 christos }
1757 1.1 christos break;
1758 1.10 christos
1759 1.10 christos case LOC_REGPARM_ADDR:
1760 1.1 christos /* Note comment at LOC_REGISTER. */
1761 1.1 christos regno = SYMBOL_REGISTER_OPS (sym)->register_number (sym, gdbarch);
1762 1.1 christos gdb_printf (_("address of an argument in register %s"),
1763 1.10 christos gdbarch_register_name (gdbarch, regno));
1764 1.1 christos break;
1765 1.1 christos
1766 1.1 christos case LOC_ARG:
1767 1.10 christos gdb_printf (_("an argument at offset %ld"), val);
1768 1.1 christos break;
1769 1.1 christos
1770 1.1 christos case LOC_LOCAL:
1771 1.10 christos gdb_printf (_("a local variable at frame offset %ld"), val);
1772 1.1 christos break;
1773 1.1 christos
1774 1.1 christos case LOC_REF_ARG:
1775 1.10 christos gdb_printf (_("a reference argument at offset %ld"), val);
1776 1.1 christos break;
1777 1.1 christos
1778 1.1 christos case LOC_TYPEDEF:
1779 1.10 christos gdb_printf (_("a typedef"));
1780 1.10 christos break;
1781 1.8 christos
1782 1.8 christos case LOC_BLOCK:
1783 1.1 christos gdb_printf (_("a function at address "));
1784 1.1 christos load_addr = sym->value_block ()->entry_pc ();
1785 1.1 christos fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
1786 1.10 christos gdb_stdout);
1787 1.8 christos if (section_is_overlay (section))
1788 1.8 christos {
1789 1.10 christos load_addr = overlay_unmapped_address (load_addr, section);
1790 1.10 christos gdb_printf (_(",\n -- loaded at "));
1791 1.1 christos fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
1792 1.1 christos gdb_stdout);
1793 1.1 christos gdb_printf (_(" in overlay section %s"),
1794 1.1 christos section->the_bfd_section->name);
1795 1.1 christos }
1796 1.1 christos break;
1797 1.1 christos
1798 1.9 christos case LOC_UNRESOLVED:
1799 1.1 christos {
1800 1.10 christos struct bound_minimal_symbol msym;
1801 1.1 christos
1802 1.1 christos msym = lookup_bound_minimal_symbol (sym->linkage_name ());
1803 1.10 christos if (msym.minsym == NULL)
1804 1.1 christos gdb_printf ("unresolved");
1805 1.1 christos else
1806 1.1 christos {
1807 1.6 christos section = msym.obj_section ();
1808 1.10 christos
1809 1.10 christos if (section
1810 1.10 christos && (section->the_bfd_section->flags & SEC_THREAD_LOCAL) != 0)
1811 1.10 christos {
1812 1.10 christos load_addr = msym.minsym->value_raw_address ();
1813 1.6 christos gdb_printf (_("a thread-local variable at offset %s "
1814 1.1 christos "in the thread-local storage for `%s'"),
1815 1.1 christos paddress (gdbarch, load_addr),
1816 1.10 christos objfile_name (section->objfile));
1817 1.10 christos }
1818 1.8 christos else
1819 1.8 christos {
1820 1.1 christos load_addr = msym.value_address ();
1821 1.1 christos gdb_printf (_("static storage at address "));
1822 1.1 christos fputs_styled (paddress (gdbarch, load_addr),
1823 1.10 christos address_style.style (), gdb_stdout);
1824 1.8 christos if (section_is_overlay (section))
1825 1.8 christos {
1826 1.8 christos load_addr = overlay_unmapped_address (load_addr, section);
1827 1.10 christos gdb_printf (_(",\n -- loaded at "));
1828 1.10 christos fputs_styled (paddress (gdbarch, load_addr),
1829 1.1 christos address_style.style (),
1830 1.1 christos gdb_stdout);
1831 1.1 christos gdb_printf (_(" in overlay section %s"),
1832 1.1 christos section->the_bfd_section->name);
1833 1.1 christos }
1834 1.1 christos }
1835 1.1 christos }
1836 1.10 christos }
1837 1.1 christos break;
1838 1.1 christos
1839 1.1 christos case LOC_OPTIMIZED_OUT:
1840 1.10 christos gdb_printf (_("optimized out"));
1841 1.1 christos break;
1842 1.1 christos
1843 1.10 christos default:
1844 1.1 christos gdb_printf (_("of unknown (botched) type"));
1845 1.1 christos break;
1846 1.1 christos }
1847 1.1 christos gdb_printf (".\n");
1848 1.8 christos }
1849 1.1 christos
1850 1.1 christos
1852 1.1 christos static void
1853 1.1 christos x_command (const char *exp, int from_tty)
1854 1.10 christos {
1855 1.1 christos struct format_data fmt;
1856 1.1 christos struct value *val;
1857 1.1 christos
1858 1.1 christos fmt.format = last_format ? last_format : 'x';
1859 1.8 christos fmt.print_tags = last_print_tags;
1860 1.8 christos fmt.size = last_size;
1861 1.8 christos fmt.count = 1;
1862 1.8 christos fmt.raw = 0;
1863 1.8 christos
1864 1.1 christos /* If there is no expression and no format, use the most recent
1865 1.1 christos count. */
1866 1.1 christos if (exp == nullptr && last_count > 0)
1867 1.1 christos fmt.count = last_count;
1868 1.1 christos
1869 1.1 christos if (exp && *exp == '/')
1870 1.1 christos {
1871 1.1 christos const char *tmp = exp + 1;
1872 1.8 christos
1873 1.8 christos fmt = decode_format (&tmp, last_format, last_size);
1874 1.1 christos exp = (char *) tmp;
1875 1.1 christos }
1876 1.1 christos
1877 1.1 christos last_count = fmt.count;
1878 1.7 christos
1879 1.1 christos /* If we have an expression, evaluate it and use it as the address. */
1880 1.10 christos
1881 1.10 christos if (exp != 0 && *exp != 0)
1882 1.1 christos {
1883 1.8 christos expression_up expr = parse_expression (exp);
1884 1.7 christos /* Cause expression not to be there any more if this command is
1885 1.7 christos repeated with Newline. But don't clobber a user-defined
1886 1.1 christos command's definition. */
1887 1.1 christos if (from_tty)
1888 1.10 christos set_repeat_arguments ("");
1889 1.9 christos val = evaluate_expression (expr.get ());
1890 1.1 christos if (TYPE_IS_REFERENCE (value_type (val)))
1891 1.1 christos val = coerce_ref (val);
1892 1.1 christos /* In rvalue contexts, such as this, functions are coerced into
1893 1.1 christos pointers to functions. This makes "x/i main" work. */
1894 1.1 christos if (value_type (val)->code () == TYPE_CODE_FUNC
1895 1.1 christos && VALUE_LVAL (val) == lval_memory)
1896 1.1 christos next_address = value_address (val);
1897 1.1 christos else
1898 1.1 christos next_address = value_as_address (val);
1899 1.1 christos
1900 1.1 christos next_gdbarch = expr->gdbarch;
1901 1.1 christos }
1902 1.1 christos
1903 1.1 christos if (!next_gdbarch)
1904 1.1 christos error_no_arg (_("starting display address"));
1905 1.1 christos
1906 1.1 christos do_examine (fmt, next_gdbarch, next_address);
1907 1.1 christos
1908 1.1 christos /* If the examine succeeds, we remember its size and format for next
1909 1.1 christos time. Set last_size to 'b' for strings. */
1910 1.1 christos if (fmt.format == 's')
1911 1.10 christos last_size = 'b';
1912 1.10 christos else
1913 1.10 christos last_size = fmt.size;
1914 1.1 christos last_format = fmt.format;
1915 1.8 christos
1916 1.1 christos /* Remember tag-printing setting. */
1917 1.1 christos last_print_tags = fmt.print_tags;
1918 1.10 christos
1919 1.1 christos /* Set a couple of internal variables if appropriate. */
1920 1.8 christos if (last_examine_value != nullptr)
1921 1.1 christos {
1922 1.1 christos /* Make last address examined available to the user as $_. Use
1923 1.1 christos the correct pointer type. */
1924 1.1 christos struct type *pointer_type
1925 1.1 christos = lookup_pointer_type (value_type (last_examine_value.get ()));
1926 1.1 christos set_internalvar (lookup_internalvar ("_"),
1927 1.1 christos value_from_pointer (pointer_type,
1928 1.1 christos last_examine_address));
1929 1.8 christos
1930 1.1 christos /* Make contents of last address examined available to the user
1931 1.1 christos as $__. If the last value has not been fetched from memory
1932 1.8 christos then don't fetch it now; instead mark it by voiding the $__
1933 1.1 christos variable. */
1934 1.1 christos if (value_lazy (last_examine_value.get ()))
1935 1.10 christos clear_internalvar (lookup_internalvar ("__"));
1936 1.10 christos else
1937 1.10 christos set_internalvar (lookup_internalvar ("__"), last_examine_value.get ());
1938 1.10 christos }
1939 1.10 christos }
1940 1.10 christos
1941 1.10 christos /* Command completion for the 'display' and 'x' commands. */
1942 1.10 christos
1943 1.10 christos static void
1944 1.10 christos display_and_x_command_completer (struct cmd_list_element *ignore,
1945 1.10 christos completion_tracker &tracker,
1946 1.10 christos const char *text, const char * /*word*/)
1947 1.10 christos {
1948 1.10 christos if (skip_over_slash_fmt (tracker, &text))
1949 1.10 christos return;
1950 1.1 christos
1951 1.1 christos const char *word = advance_to_expression_complete_word_point (tracker, text);
1952 1.1 christos expression_completer (ignore, tracker, text, word);
1953 1.1 christos }
1954 1.1 christos
1955 1.1 christos
1956 1.8 christos
1958 1.1 christos /* Add an expression to the auto-display chain.
1959 1.5 christos Specify the expression. */
1960 1.1 christos
1961 1.1 christos static void
1962 1.5 christos display_command (const char *arg, int from_tty)
1963 1.5 christos {
1964 1.5 christos struct format_data fmt;
1965 1.5 christos struct display *newobj;
1966 1.5 christos const char *exp = arg;
1967 1.1 christos
1968 1.5 christos if (exp == 0)
1969 1.1 christos {
1970 1.5 christos do_displays ();
1971 1.5 christos return;
1972 1.5 christos }
1973 1.5 christos
1974 1.5 christos if (*exp == '/')
1975 1.5 christos {
1976 1.5 christos exp++;
1977 1.5 christos fmt = decode_format (&exp, 0, 0);
1978 1.5 christos if (fmt.size && fmt.format == 0)
1979 1.5 christos fmt.format = 'x';
1980 1.5 christos if (fmt.format == 'i' || fmt.format == 's')
1981 1.5 christos fmt.size = 'b';
1982 1.5 christos }
1983 1.5 christos else
1984 1.1 christos {
1985 1.9 christos fmt.format = 0;
1986 1.9 christos fmt.size = 0;
1987 1.6 christos fmt.count = 0;
1988 1.9 christos fmt.raw = 0;
1989 1.9 christos }
1990 1.9 christos
1991 1.1 christos innermost_block_tracker tracker;
1992 1.5 christos expression_up expr = parse_expression (exp, &tracker);
1993 1.5 christos
1994 1.1 christos newobj = new display (exp, std::move (expr), fmt,
1995 1.5 christos current_program_space, tracker.block ());
1996 1.1 christos all_displays.emplace_back (newobj);
1997 1.1 christos
1998 1.1 christos if (from_tty)
1999 1.1 christos do_one_display (newobj);
2000 1.1 christos
2001 1.1 christos dont_repeat ();
2002 1.9 christos }
2003 1.1 christos
2004 1.9 christos /* Clear out the display_chain. Done when new symtabs are loaded,
2005 1.1 christos since this invalidates the types stored in many expressions. */
2006 1.1 christos
2007 1.1 christos void
2008 1.1 christos clear_displays ()
2009 1.1 christos {
2010 1.1 christos all_displays.clear ();
2011 1.1 christos }
2012 1.1 christos
2013 1.1 christos /* Delete the auto-display DISPLAY. */
2014 1.9 christos
2015 1.9 christos static void
2016 1.9 christos delete_display (struct display *display)
2017 1.9 christos {
2018 1.9 christos gdb_assert (display != NULL);
2019 1.9 christos
2020 1.9 christos auto iter = std::find_if (all_displays.begin (),
2021 1.9 christos all_displays.end (),
2022 1.1 christos [=] (const std::unique_ptr<struct display> &item)
2023 1.1 christos {
2024 1.1 christos return item.get () == display;
2025 1.1 christos });
2026 1.1 christos gdb_assert (iter != all_displays.end ());
2027 1.1 christos all_displays.erase (iter);
2028 1.8 christos }
2029 1.9 christos
2030 1.1 christos /* Call FUNCTION on each of the displays whose numbers are given in
2031 1.1 christos ARGS. DATA is passed unmodified to FUNCTION. */
2032 1.1 christos
2033 1.1 christos static void
2034 1.1 christos map_display_numbers (const char *args,
2035 1.1 christos gdb::function_view<void (struct display *)> function)
2036 1.7 christos {
2037 1.1 christos int num;
2038 1.7 christos
2039 1.1 christos if (args == NULL)
2040 1.7 christos error_no_arg (_("one or more display numbers"));
2041 1.1 christos
2042 1.7 christos number_or_range_parser parser (args);
2043 1.1 christos
2044 1.1 christos while (!parser.finished ())
2045 1.1 christos {
2046 1.1 christos const char *p = parser.cur_tok ();
2047 1.9 christos
2048 1.9 christos num = parser.get_number ();
2049 1.9 christos if (num == 0)
2050 1.9 christos warning (_("bad display number at or near '%s'"), p);
2051 1.9 christos else
2052 1.9 christos {
2053 1.9 christos auto iter = std::find_if (all_displays.begin (),
2054 1.10 christos all_displays.end (),
2055 1.1 christos [=] (const std::unique_ptr<display> &item)
2056 1.9 christos {
2057 1.1 christos return item->number == num;
2058 1.1 christos });
2059 1.1 christos if (iter == all_displays.end ())
2060 1.1 christos gdb_printf (_("No display number %d.\n"), num);
2061 1.1 christos else
2062 1.1 christos function (iter->get ());
2063 1.1 christos }
2064 1.8 christos }
2065 1.1 christos }
2066 1.1 christos
2067 1.1 christos /* "undisplay" command. */
2068 1.1 christos
2069 1.1 christos static void
2070 1.1 christos undisplay_command (const char *args, int from_tty)
2071 1.1 christos {
2072 1.1 christos if (args == NULL)
2073 1.1 christos {
2074 1.9 christos if (query (_("Delete all auto-display expressions? ")))
2075 1.1 christos clear_displays ();
2076 1.1 christos dont_repeat ();
2077 1.1 christos return;
2078 1.1 christos }
2079 1.1 christos
2080 1.1 christos map_display_numbers (args, delete_display);
2081 1.1 christos dont_repeat ();
2082 1.1 christos }
2083 1.1 christos
2084 1.1 christos /* Display a single auto-display.
2085 1.1 christos Do nothing if the display cannot be printed in the current context,
2086 1.1 christos or if the display is disabled. */
2087 1.9 christos
2088 1.1 christos static void
2089 1.1 christos do_one_display (struct display *d)
2090 1.1 christos {
2091 1.1 christos int within_current_scope;
2092 1.1 christos
2093 1.1 christos if (!d->enabled_p)
2094 1.1 christos return;
2095 1.1 christos
2096 1.1 christos /* The expression carries the architecture that was used at parse time.
2097 1.1 christos This is a problem if the expression depends on architecture features
2098 1.1 christos (e.g. register numbers), and the current architecture is now different.
2099 1.7 christos For example, a display statement like "display/i $pc" is expected to
2100 1.1 christos display the PC register of the current architecture, not the arch at
2101 1.1 christos the time the display command was given. Therefore, we re-parse the
2102 1.1 christos expression if the current architecture has changed. */
2103 1.1 christos if (d->exp != NULL && d->exp->gdbarch != get_current_arch ())
2104 1.1 christos {
2105 1.1 christos d->exp.reset ();
2106 1.9 christos d->block = NULL;
2107 1.1 christos }
2108 1.9 christos
2109 1.9 christos if (d->exp == NULL)
2110 1.9 christos {
2111 1.1 christos
2112 1.9 christos try
2113 1.1 christos {
2114 1.1 christos innermost_block_tracker tracker;
2115 1.9 christos d->exp = parse_expression (d->exp_string.c_str (), &tracker);
2116 1.1 christos d->block = tracker.block ();
2117 1.9 christos }
2118 1.1 christos catch (const gdb_exception &ex)
2119 1.1 christos {
2120 1.1 christos /* Can't re-parse the expression. Disable this display item. */
2121 1.1 christos d->enabled_p = false;
2122 1.1 christos warning (_("Unable to display \"%s\": %s"),
2123 1.1 christos d->exp_string.c_str (), ex.what ());
2124 1.1 christos return;
2125 1.9 christos }
2126 1.9 christos }
2127 1.1 christos
2128 1.1 christos if (d->block)
2129 1.1 christos {
2130 1.1 christos if (d->pspace == current_program_space)
2131 1.1 christos within_current_scope = contained_in (get_selected_block (0), d->block,
2132 1.1 christos true);
2133 1.1 christos else
2134 1.1 christos within_current_scope = 0;
2135 1.7 christos }
2136 1.7 christos else
2137 1.1 christos within_current_scope = 1;
2138 1.1 christos if (!within_current_scope)
2139 1.10 christos return;
2140 1.1 christos
2141 1.10 christos scoped_restore save_display_number
2142 1.1 christos = make_scoped_restore (¤t_display_number, d->number);
2143 1.1 christos
2144 1.1 christos annotate_display_begin ();
2145 1.1 christos gdb_printf ("%d", d->number);
2146 1.1 christos annotate_display_number_end ();
2147 1.10 christos gdb_printf (": ");
2148 1.1 christos if (d->format.size)
2149 1.10 christos {
2150 1.10 christos
2151 1.1 christos annotate_display_format ();
2152 1.10 christos
2153 1.10 christos gdb_printf ("x/");
2154 1.1 christos if (d->format.count != 1)
2155 1.1 christos gdb_printf ("%d", d->format.count);
2156 1.1 christos gdb_printf ("%c", d->format.format);
2157 1.10 christos if (d->format.format != 'i' && d->format.format != 's')
2158 1.1 christos gdb_printf ("%c", d->format.size);
2159 1.1 christos gdb_printf (" ");
2160 1.1 christos
2161 1.10 christos annotate_display_expression ();
2162 1.1 christos
2163 1.10 christos gdb_puts (d->exp_string.c_str ());
2164 1.1 christos annotate_display_expression_end ();
2165 1.1 christos
2166 1.1 christos if (d->format.count != 1 || d->format.format == 'i')
2167 1.9 christos gdb_printf ("\n");
2168 1.10 christos else
2169 1.1 christos gdb_printf (" ");
2170 1.1 christos
2171 1.1 christos annotate_display_value ();
2172 1.7 christos
2173 1.1 christos try
2174 1.1 christos {
2175 1.1 christos struct value *val;
2176 1.1 christos CORE_ADDR addr;
2177 1.1 christos
2178 1.9 christos val = evaluate_expression (d->exp.get ());
2179 1.5 christos addr = value_as_address (val);
2180 1.10 christos if (d->format.format == 'i')
2181 1.10 christos addr = gdbarch_addr_bits_remove (d->exp->gdbarch, addr);
2182 1.10 christos do_examine (d->format, d->exp->gdbarch, addr);
2183 1.5 christos }
2184 1.1 christos catch (const gdb_exception_error &ex)
2185 1.1 christos {
2186 1.1 christos gdb_printf (_("%p[<error: %s>%p]\n"),
2187 1.1 christos metadata_style.style ().ptr (), ex.what (),
2188 1.1 christos nullptr);
2189 1.1 christos }
2190 1.1 christos }
2191 1.1 christos else
2192 1.10 christos {
2193 1.1 christos struct value_print_options opts;
2194 1.1 christos
2195 1.1 christos annotate_display_format ();
2196 1.10 christos
2197 1.1 christos if (d->format.format)
2198 1.1 christos gdb_printf ("/%c ", d->format.format);
2199 1.10 christos
2200 1.1 christos annotate_display_expression ();
2201 1.1 christos
2202 1.1 christos gdb_puts (d->exp_string.c_str ());
2203 1.1 christos annotate_display_expression_end ();
2204 1.1 christos
2205 1.1 christos gdb_printf (" = ");
2206 1.9 christos
2207 1.10 christos annotate_display_expression ();
2208 1.1 christos
2209 1.1 christos get_formatted_print_options (&opts, d->format.format);
2210 1.7 christos opts.raw = d->format.raw;
2211 1.1 christos
2212 1.1 christos try
2213 1.9 christos {
2214 1.5 christos struct value *val;
2215 1.9 christos
2216 1.9 christos val = evaluate_expression (d->exp.get ());
2217 1.5 christos print_formatted (val, d->format.size, &opts, gdb_stdout);
2218 1.5 christos }
2219 1.10 christos catch (const gdb_exception_error &ex)
2220 1.1 christos {
2221 1.1 christos fprintf_styled (gdb_stdout, metadata_style.style (),
2222 1.1 christos _("<error: %s>"), ex.what ());
2223 1.1 christos }
2224 1.1 christos
2225 1.1 christos gdb_printf ("\n");
2226 1.1 christos }
2227 1.1 christos
2228 1.1 christos annotate_display_end ();
2229 1.1 christos
2230 1.1 christos gdb_flush (gdb_stdout);
2231 1.1 christos }
2232 1.1 christos
2233 1.9 christos /* Display all of the values on the auto-display chain which can be
2234 1.9 christos evaluated in the current scope. */
2235 1.1 christos
2236 1.1 christos void
2237 1.1 christos do_displays (void)
2238 1.1 christos {
2239 1.1 christos for (auto &d : all_displays)
2240 1.1 christos do_one_display (d.get ());
2241 1.1 christos }
2242 1.1 christos
2243 1.9 christos /* Delete the auto-display which we were in the process of displaying.
2244 1.1 christos This is done when there is an error or a signal. */
2245 1.1 christos
2246 1.9 christos void
2247 1.1 christos disable_display (int num)
2248 1.1 christos {
2249 1.10 christos for (auto &d : all_displays)
2250 1.1 christos if (d->number == num)
2251 1.1 christos {
2252 1.1 christos d->enabled_p = false;
2253 1.1 christos return;
2254 1.1 christos }
2255 1.1 christos gdb_printf (_("No display number %d.\n"), num);
2256 1.1 christos }
2257 1.1 christos
2258 1.10 christos void
2259 1.10 christos disable_current_display (void)
2260 1.10 christos {
2261 1.10 christos if (current_display_number >= 0)
2262 1.1 christos {
2263 1.1 christos disable_display (current_display_number);
2264 1.1 christos gdb_printf (gdb_stderr,
2265 1.1 christos _("Disabling display %d to "
2266 1.1 christos "avoid infinite recursion.\n"),
2267 1.8 christos current_display_number);
2268 1.1 christos }
2269 1.9 christos current_display_number = -1;
2270 1.10 christos }
2271 1.1 christos
2272 1.10 christos static void
2273 1.1 christos info_display_command (const char *ignore, int from_tty)
2274 1.1 christos {
2275 1.9 christos if (all_displays.empty ())
2276 1.1 christos gdb_printf (_("There are no auto-display expressions now.\n"));
2277 1.10 christos else
2278 1.1 christos gdb_printf (_("Auto-display expressions now in effect:\n\
2279 1.10 christos Num Enb Expression\n"));
2280 1.10 christos
2281 1.1 christos for (auto &d : all_displays)
2282 1.10 christos {
2283 1.10 christos gdb_printf ("%d: %c ", d->number, "ny"[(int) d->enabled_p]);
2284 1.9 christos if (d->format.size)
2285 1.10 christos gdb_printf ("/%d%c%c ", d->format.count, d->format.size,
2286 1.10 christos d->format.format);
2287 1.1 christos else if (d->format.format)
2288 1.1 christos gdb_printf ("/%c ", d->format.format);
2289 1.1 christos gdb_puts (d->exp_string.c_str ());
2290 1.9 christos if (d->block && !contained_in (get_selected_block (0), d->block, true))
2291 1.1 christos gdb_printf (_(" (cannot be evaluated in the current context)"));
2292 1.1 christos gdb_printf ("\n");
2293 1.1 christos }
2294 1.9 christos }
2295 1.1 christos
2296 1.1 christos /* Implementation of both the "disable display" and "enable display"
2297 1.1 christos commands. ENABLE decides what to do. */
2298 1.9 christos
2299 1.1 christos static void
2300 1.1 christos enable_disable_display_command (const char *args, int from_tty, bool enable)
2301 1.1 christos {
2302 1.1 christos if (args == NULL)
2303 1.9 christos {
2304 1.9 christos for (auto &d : all_displays)
2305 1.9 christos d->enabled_p = enable;
2306 1.9 christos return;
2307 1.9 christos }
2308 1.1 christos
2309 1.1 christos map_display_numbers (args,
2310 1.1 christos [=] (struct display *d)
2311 1.1 christos {
2312 1.1 christos d->enabled_p = enable;
2313 1.8 christos });
2314 1.1 christos }
2315 1.9 christos
2316 1.1 christos /* The "enable display" command. */
2317 1.1 christos
2318 1.1 christos static void
2319 1.1 christos enable_display_command (const char *args, int from_tty)
2320 1.1 christos {
2321 1.8 christos enable_disable_display_command (args, from_tty, true);
2322 1.1 christos }
2323 1.9 christos
2324 1.1 christos /* The "disable display" command. */
2325 1.1 christos
2326 1.1 christos static void
2327 1.1 christos disable_display_command (const char *args, int from_tty)
2328 1.1 christos {
2329 1.1 christos enable_disable_display_command (args, from_tty, false);
2330 1.1 christos }
2331 1.1 christos
2332 1.1 christos /* display_chain items point to blocks and expressions. Some expressions in
2333 1.1 christos turn may point to symbols.
2334 1.1 christos Both symbols and blocks are obstack_alloc'd on objfile_stack, and are
2335 1.1 christos obstack_free'd when a shared library is unloaded.
2336 1.1 christos Clear pointers that are about to become dangling.
2337 1.1 christos Both .exp and .block fields will be restored next time we need to display
2338 1.1 christos an item by re-parsing .exp_string field in the new execution context. */
2339 1.1 christos
2340 1.1 christos static void
2341 1.1 christos clear_dangling_display_expressions (struct objfile *objfile)
2342 1.1 christos {
2343 1.1 christos struct program_space *pspace;
2344 1.1 christos
2345 1.1 christos /* With no symbol file we cannot have a block or expression from it. */
2346 1.1 christos if (objfile == NULL)
2347 1.1 christos return;
2348 1.1 christos pspace = objfile->pspace;
2349 1.9 christos if (objfile->separate_debug_objfile_backlink)
2350 1.1 christos {
2351 1.1 christos objfile = objfile->separate_debug_objfile_backlink;
2352 1.1 christos gdb_assert (objfile->pspace == pspace);
2353 1.1 christos }
2354 1.9 christos
2355 1.9 christos for (auto &d : all_displays)
2356 1.9 christos {
2357 1.9 christos if (d->pspace != pspace)
2358 1.9 christos continue;
2359 1.9 christos
2360 1.9 christos struct objfile *bl_objf = nullptr;
2361 1.9 christos if (d->block != nullptr)
2362 1.9 christos {
2363 1.7 christos bl_objf = block_objfile (d->block);
2364 1.9 christos if (bl_objf->separate_debug_objfile_backlink != nullptr)
2365 1.9 christos bl_objf = bl_objf->separate_debug_objfile_backlink;
2366 1.9 christos }
2367 1.9 christos
2368 1.1 christos if (bl_objf == objfile
2369 1.1 christos || (d->exp != NULL && exp_uses_objfile (d->exp.get (), objfile)))
2370 1.1 christos {
2371 1.1 christos d->exp.reset ();
2372 1.1 christos d->block = NULL;
2373 1.1 christos }
2374 1.1 christos }
2375 1.1 christos }
2376 1.1 christos
2377 1.1 christos
2379 1.1 christos /* Print the value in stack frame FRAME of a variable specified by a
2380 1.1 christos struct symbol. NAME is the name to print; if NULL then VAR's print
2381 1.1 christos name will be used. STREAM is the ui_file on which to print the
2382 1.10 christos value. INDENT specifies the number of indent levels to print
2383 1.1 christos before printing the variable name.
2384 1.1 christos
2385 1.1 christos This function invalidates FRAME. */
2386 1.1 christos
2387 1.9 christos void
2388 1.1 christos print_variable_and_value (const char *name, struct symbol *var,
2389 1.10 christos frame_info_ptr frame,
2390 1.10 christos struct ui_file *stream, int indent)
2391 1.8 christos {
2392 1.9 christos
2393 1.1 christos if (!name)
2394 1.1 christos name = var->print_name ();
2395 1.1 christos
2396 1.1 christos gdb_printf (stream, "%*s%ps = ", 2 * indent, "",
2397 1.6 christos styled_string (variable_name_style.style (), name));
2398 1.6 christos
2399 1.6 christos try
2400 1.6 christos {
2401 1.6 christos struct value *val;
2402 1.1 christos struct value_print_options opts;
2403 1.1 christos
2404 1.10 christos /* READ_VAR_VALUE needs a block in order to deal with non-local
2405 1.1 christos references (i.e. to handle nested functions). In this context, we
2406 1.1 christos print variables that are local to this frame, so we can avoid passing
2407 1.1 christos a block to it. */
2408 1.1 christos val = read_var_value (var, NULL, frame);
2409 1.1 christos get_user_print_options (&opts);
2410 1.9 christos opts.deref_ref = 1;
2411 1.5 christos common_val_print_checked (val, stream, indent, &opts, current_language);
2412 1.9 christos
2413 1.9 christos /* common_val_print invalidates FRAME when a pretty printer calls inferior
2414 1.9 christos function. */
2415 1.5 christos frame = NULL;
2416 1.5 christos }
2417 1.10 christos catch (const gdb_exception_error &except)
2418 1.1 christos {
2419 1.1 christos fprintf_styled (stream, metadata_style.style (),
2420 1.1 christos "<error reading variable %s (%s)>", name,
2421 1.1 christos except.what ());
2422 1.9 christos }
2423 1.9 christos
2424 1.1 christos gdb_printf (stream, "\n");
2425 1.1 christos }
2426 1.1 christos
2427 1.1 christos /* Subroutine of ui_printf to simplify it.
2428 1.1 christos Print VALUE to STREAM using FORMAT.
2429 1.9 christos VALUE is a C-style string either on the target or
2430 1.1 christos in a GDB internal variable. */
2431 1.9 christos
2432 1.9 christos static void
2433 1.9 christos printf_c_string (struct ui_file *stream, const char *format,
2434 1.9 christos struct value *value)
2435 1.10 christos {
2436 1.9 christos const gdb_byte *str;
2437 1.9 christos
2438 1.9 christos if (value_type (value)->code () != TYPE_CODE_PTR
2439 1.9 christos && VALUE_LVAL (value) == lval_internalvar
2440 1.9 christos && c_is_string_type_p (value_type (value)))
2441 1.9 christos {
2442 1.9 christos size_t len = value_type (value)->length ();
2443 1.10 christos
2444 1.9 christos /* Copy the internal var value to TEM_STR and append a terminating null
2445 1.9 christos character. This protects against corrupted C-style strings that lack
2446 1.9 christos the terminating null char. It also allows Ada-style strings (not
2447 1.9 christos null terminated) to be printed without problems. */
2448 1.8 christos gdb_byte *tem_str = (gdb_byte *) alloca (len + 1);
2449 1.9 christos
2450 1.9 christos memcpy (tem_str, value_contents (value).data (), len);
2451 1.9 christos tem_str [len] = 0;
2452 1.9 christos str = tem_str;
2453 1.9 christos }
2454 1.9 christos else
2455 1.10 christos {
2456 1.9 christos CORE_ADDR tem = value_as_address (value);;
2457 1.9 christos
2458 1.9 christos if (tem == 0)
2459 1.9 christos {
2460 1.9 christos DIAGNOSTIC_PUSH
2461 1.9 christos DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2462 1.9 christos gdb_printf (stream, format, "(null)");
2463 1.9 christos DIAGNOSTIC_POP
2464 1.9 christos return;
2465 1.9 christos }
2466 1.9 christos
2467 1.9 christos /* This is a %s argument. Find the length of the string. */
2468 1.9 christos size_t len;
2469 1.9 christos
2470 1.9 christos for (len = 0;; len++)
2471 1.9 christos {
2472 1.1 christos gdb_byte c;
2473 1.9 christos
2474 1.9 christos QUIT;
2475 1.1 christos read_memory (tem + len, &c, 1);
2476 1.9 christos if (c == 0)
2477 1.9 christos break;
2478 1.9 christos }
2479 1.9 christos
2480 1.1 christos /* Copy the string contents into a string inside GDB. */
2481 1.1 christos gdb_byte *tem_str = (gdb_byte *) alloca (len + 1);
2482 1.8 christos
2483 1.8 christos if (len != 0)
2484 1.10 christos read_memory (tem, tem_str, len);
2485 1.8 christos tem_str[len] = 0;
2486 1.1 christos str = tem_str;
2487 1.1 christos }
2488 1.1 christos
2489 1.1 christos DIAGNOSTIC_PUSH
2490 1.9 christos DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2491 1.9 christos gdb_printf (stream, format, (char *) str);
2492 1.1 christos DIAGNOSTIC_POP
2493 1.1 christos }
2494 1.1 christos
2495 1.1 christos /* Subroutine of ui_printf to simplify it.
2496 1.1 christos Print VALUE to STREAM using FORMAT.
2497 1.9 christos VALUE is a wide C-style string on the target or
2498 1.9 christos in a GDB internal variable. */
2499 1.10 christos
2500 1.9 christos static void
2501 1.1 christos printf_wide_c_string (struct ui_file *stream, const char *format,
2502 1.10 christos struct value *value)
2503 1.1 christos {
2504 1.9 christos const gdb_byte *str;
2505 1.9 christos size_t len;
2506 1.8 christos struct gdbarch *gdbarch = value_type (value)->arch ();
2507 1.10 christos struct type *wctype = lookup_typename (current_language,
2508 1.10 christos "wchar_t", NULL, 0);
2509 1.8 christos int wcwidth = wctype->length ();
2510 1.9 christos
2511 1.9 christos if (VALUE_LVAL (value) == lval_internalvar
2512 1.9 christos && c_is_string_type_p (value_type (value)))
2513 1.9 christos {
2514 1.9 christos str = value_contents (value).data ();
2515 1.9 christos len = value_type (value)->length ();
2516 1.9 christos }
2517 1.9 christos else
2518 1.10 christos {
2519 1.9 christos CORE_ADDR tem = value_as_address (value);
2520 1.9 christos
2521 1.9 christos if (tem == 0)
2522 1.9 christos {
2523 1.9 christos DIAGNOSTIC_PUSH
2524 1.9 christos DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2525 1.9 christos gdb_printf (stream, format, "(null)");
2526 1.9 christos DIAGNOSTIC_POP
2527 1.9 christos return;
2528 1.9 christos }
2529 1.9 christos
2530 1.9 christos /* This is a %s argument. Find the length of the string. */
2531 1.9 christos enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2532 1.9 christos gdb_byte *buf = (gdb_byte *) alloca (wcwidth);
2533 1.9 christos
2534 1.1 christos for (len = 0;; len += wcwidth)
2535 1.9 christos {
2536 1.9 christos QUIT;
2537 1.9 christos read_memory (tem + len, buf, wcwidth);
2538 1.9 christos if (extract_unsigned_integer (buf, wcwidth, byte_order) == 0)
2539 1.9 christos break;
2540 1.9 christos }
2541 1.9 christos
2542 1.1 christos /* Copy the string contents into a string inside GDB. */
2543 1.1 christos gdb_byte *tem_str = (gdb_byte *) alloca (len + wcwidth);
2544 1.8 christos
2545 1.1 christos if (len != 0)
2546 1.1 christos read_memory (tem, tem_str, len);
2547 1.1 christos memset (&tem_str[len], 0, wcwidth);
2548 1.9 christos str = tem_str;
2549 1.1 christos }
2550 1.1 christos
2551 1.1 christos auto_obstack output;
2552 1.8 christos
2553 1.8 christos convert_between_encodings (target_wide_charset (gdbarch),
2554 1.10 christos host_charset (),
2555 1.8 christos str, len, wcwidth,
2556 1.1 christos &output, translit_char);
2557 1.1 christos obstack_grow_str0 (&output, "");
2558 1.1 christos
2559 1.8 christos DIAGNOSTIC_PUSH
2560 1.1 christos DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2561 1.1 christos gdb_printf (stream, format, obstack_base (&output));
2562 1.8 christos DIAGNOSTIC_POP
2563 1.8 christos }
2564 1.1 christos
2565 1.1 christos /* Subroutine of ui_printf to simplify it.
2566 1.1 christos Print VALUE, a floating point value, to STREAM using FORMAT. */
2567 1.10 christos
2568 1.1 christos static void
2569 1.8 christos printf_floating (struct ui_file *stream, const char *format,
2570 1.8 christos struct value *value, enum argclass argclass)
2571 1.8 christos {
2572 1.1 christos /* Parameter data. */
2573 1.8 christos struct type *param_type = value_type (value);
2574 1.8 christos struct gdbarch *gdbarch = param_type->arch ();
2575 1.8 christos
2576 1.8 christos /* Determine target type corresponding to the format string. */
2577 1.8 christos struct type *fmt_type;
2578 1.8 christos switch (argclass)
2579 1.8 christos {
2580 1.8 christos case double_arg:
2581 1.8 christos fmt_type = builtin_type (gdbarch)->builtin_double;
2582 1.8 christos break;
2583 1.8 christos case long_double_arg:
2584 1.8 christos fmt_type = builtin_type (gdbarch)->builtin_long_double;
2585 1.8 christos break;
2586 1.8 christos case dec32float_arg:
2587 1.8 christos fmt_type = builtin_type (gdbarch)->builtin_decfloat;
2588 1.8 christos break;
2589 1.8 christos case dec64float_arg:
2590 1.1 christos fmt_type = builtin_type (gdbarch)->builtin_decdouble;
2591 1.1 christos break;
2592 1.8 christos case dec128float_arg:
2593 1.8 christos fmt_type = builtin_type (gdbarch)->builtin_declong;
2594 1.8 christos break;
2595 1.8 christos default:
2596 1.8 christos gdb_assert_not_reached ("unexpected argument class");
2597 1.8 christos }
2598 1.8 christos
2599 1.8 christos /* To match the traditional GDB behavior, the conversion is
2600 1.8 christos done differently depending on the type of the parameter:
2601 1.8 christos
2602 1.8 christos - if the parameter has floating-point type, it's value
2603 1.8 christos is converted to the target type;
2604 1.8 christos
2605 1.8 christos - otherwise, if the parameter has a type that is of the
2606 1.8 christos same size as a built-in floating-point type, the value
2607 1.8 christos bytes are interpreted as if they were of that type, and
2608 1.1 christos then converted to the target type (this is not done for
2609 1.8 christos decimal floating-point argument classes);
2610 1.8 christos
2611 1.1 christos - otherwise, if the source value has an integer value,
2612 1.9 christos it's value is converted to the target type;
2613 1.8 christos
2614 1.8 christos - otherwise, an error is raised.
2615 1.8 christos
2616 1.10 christos In either case, the result of the conversion is a byte buffer
2617 1.10 christos formatted in the target format for the target type. */
2618 1.8 christos
2619 1.1 christos if (fmt_type->code () == TYPE_CODE_FLT)
2620 1.8 christos {
2621 1.1 christos param_type = float_type_from_length (param_type);
2622 1.8 christos if (param_type != value_type (value))
2623 1.8 christos value = value_from_contents (param_type,
2624 1.10 christos value_contents (value).data ());
2625 1.10 christos }
2626 1.1 christos
2627 1.1 christos value = value_cast (fmt_type, value);
2628 1.1 christos
2629 1.1 christos /* Convert the value to a string and print it. */
2630 1.1 christos std::string str
2631 1.1 christos = target_float_to_string (value_contents (value).data (), fmt_type, format);
2632 1.1 christos gdb_puts (str.c_str (), stream);
2633 1.1 christos }
2634 1.1 christos
2635 1.1 christos /* Subroutine of ui_printf to simplify it.
2636 1.1 christos Print VALUE, a target pointer, to STREAM using FORMAT. */
2637 1.1 christos
2638 1.1 christos static void
2639 1.1 christos printf_pointer (struct ui_file *stream, const char *format,
2640 1.1 christos struct value *value)
2641 1.1 christos {
2642 1.1 christos /* We avoid the host's %p because pointers are too
2643 1.1 christos likely to be the wrong size. The only interesting
2644 1.1 christos modifier for %p is a width; extract that, and then
2645 1.1 christos handle %p as glibc would: %#x or a literal "(nil)". */
2646 1.1 christos
2647 1.1 christos const char *p;
2648 1.6 christos char *fmt, *fmt_p;
2649 1.1 christos #ifdef PRINTF_HAS_LONG_LONG
2650 1.1 christos long long val = value_as_long (value);
2651 1.1 christos #else
2652 1.1 christos long val = value_as_long (value);
2653 1.1 christos #endif
2654 1.1 christos
2655 1.1 christos fmt = (char *) alloca (strlen (format) + 5);
2656 1.1 christos
2657 1.1 christos /* Copy up to the leading %. */
2658 1.1 christos p = format;
2659 1.1 christos fmt_p = fmt;
2660 1.1 christos while (*p)
2661 1.1 christos {
2662 1.1 christos int is_percent = (*p == '%');
2663 1.1 christos
2664 1.1 christos *fmt_p++ = *p++;
2665 1.1 christos if (is_percent)
2666 1.1 christos {
2667 1.1 christos if (*p == '%')
2668 1.1 christos *fmt_p++ = *p++;
2669 1.1 christos else
2670 1.8 christos break;
2671 1.8 christos }
2672 1.8 christos }
2673 1.1 christos
2674 1.1 christos if (val != 0)
2675 1.1 christos *fmt_p++ = '#';
2676 1.1 christos
2677 1.1 christos /* Copy any width or flags. Only the "-" flag is valid for pointers
2678 1.1 christos -- see the format_pieces constructor. */
2679 1.1 christos while (*p == '-' || (*p >= '0' && *p < '9'))
2680 1.1 christos *fmt_p++ = *p++;
2681 1.1 christos
2682 1.1 christos gdb_assert (*p == 'p' && *(p + 1) == '\0');
2683 1.1 christos if (val != 0)
2684 1.8 christos {
2685 1.8 christos #ifdef PRINTF_HAS_LONG_LONG
2686 1.10 christos *fmt_p++ = 'l';
2687 1.8 christos #endif
2688 1.1 christos *fmt_p++ = 'l';
2689 1.1 christos *fmt_p++ = 'x';
2690 1.1 christos *fmt_p++ = '\0';
2691 1.1 christos DIAGNOSTIC_PUSH
2692 1.1 christos DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2693 1.8 christos gdb_printf (stream, fmt, val);
2694 1.8 christos DIAGNOSTIC_POP
2695 1.10 christos }
2696 1.8 christos else
2697 1.1 christos {
2698 1.1 christos *fmt_p++ = 's';
2699 1.1 christos *fmt_p++ = '\0';
2700 1.1 christos DIAGNOSTIC_PUSH
2701 1.1 christos DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2702 1.1 christos gdb_printf (stream, fmt, "(nil)");
2703 1.1 christos DIAGNOSTIC_POP
2704 1.1 christos }
2705 1.1 christos }
2706 1.8 christos
2707 1.1 christos /* printf "printf format string" ARG to STREAM. */
2708 1.1 christos
2709 1.1 christos static void
2710 1.1 christos ui_printf (const char *arg, struct ui_file *stream)
2711 1.8 christos {
2712 1.1 christos const char *s = arg;
2713 1.1 christos std::vector<struct value *> val_args;
2714 1.1 christos
2715 1.1 christos if (s == 0)
2716 1.1 christos error_no_arg (_("format-control string and values to print"));
2717 1.8 christos
2718 1.1 christos s = skip_spaces (s);
2719 1.1 christos
2720 1.1 christos /* A format string should follow, enveloped in double quotes. */
2721 1.1 christos if (*s++ != '"')
2722 1.8 christos error (_("Bad format string, missing '\"'."));
2723 1.1 christos
2724 1.1 christos format_pieces fpieces (&s);
2725 1.1 christos
2726 1.1 christos if (*s++ != '"')
2727 1.1 christos error (_("Bad format string, non-terminated '\"'."));
2728 1.1 christos
2729 1.8 christos s = skip_spaces (s);
2730 1.1 christos
2731 1.1 christos if (*s != ',' && *s != 0)
2732 1.1 christos error (_("Invalid argument syntax"));
2733 1.8 christos
2734 1.8 christos if (*s == ',')
2735 1.1 christos s++;
2736 1.1 christos s = skip_spaces (s);
2737 1.8 christos
2738 1.8 christos {
2739 1.1 christos int nargs_wanted;
2740 1.1 christos int i;
2741 1.1 christos const char *current_substring;
2742 1.1 christos
2743 1.1 christos nargs_wanted = 0;
2744 1.1 christos for (auto &&piece : fpieces)
2745 1.1 christos if (piece.argclass != literal_piece)
2746 1.1 christos ++nargs_wanted;
2747 1.1 christos
2748 1.1 christos /* Now, parse all arguments and evaluate them.
2749 1.8 christos Store the VALUEs in VAL_ARGS. */
2750 1.1 christos
2751 1.1 christos while (*s != '\0')
2752 1.1 christos {
2753 1.1 christos const char *s1;
2754 1.1 christos
2755 1.1 christos s1 = s;
2756 1.8 christos val_args.push_back (parse_to_comma_and_eval (&s1));
2757 1.1 christos
2758 1.1 christos s = s1;
2759 1.1 christos if (*s == ',')
2760 1.1 christos s++;
2761 1.8 christos }
2762 1.1 christos
2763 1.8 christos if (val_args.size () != nargs_wanted)
2764 1.8 christos error (_("Wrong number of arguments for specified format-string"));
2765 1.1 christos
2766 1.1 christos /* Now actually print them. */
2767 1.1 christos i = 0;
2768 1.1 christos for (auto &&piece : fpieces)
2769 1.1 christos {
2770 1.1 christos current_substring = piece.string;
2771 1.1 christos switch (piece.argclass)
2772 1.1 christos {
2773 1.1 christos case string_arg:
2774 1.10 christos printf_c_string (stream, current_substring, val_args[i]);
2775 1.9 christos break;
2776 1.1 christos case wide_string_arg:
2777 1.1 christos printf_wide_c_string (stream, current_substring, val_args[i]);
2778 1.1 christos break;
2779 1.1 christos case wide_char_arg:
2780 1.1 christos {
2781 1.10 christos struct gdbarch *gdbarch = value_type (val_args[i])->arch ();
2782 1.9 christos struct type *wctype = lookup_typename (current_language,
2783 1.1 christos "wchar_t", NULL, 0);
2784 1.1 christos struct type *valtype;
2785 1.10 christos const gdb_byte *bytes;
2786 1.1 christos
2787 1.8 christos valtype = value_type (val_args[i]);
2788 1.1 christos if (valtype->length () != wctype->length ()
2789 1.1 christos || valtype->code () != TYPE_CODE_INT)
2790 1.1 christos error (_("expected wchar_t argument for %%lc"));
2791 1.10 christos
2792 1.10 christos bytes = value_contents (val_args[i]).data ();
2793 1.1 christos
2794 1.1 christos auto_obstack output;
2795 1.1 christos
2796 1.8 christos convert_between_encodings (target_wide_charset (gdbarch),
2797 1.8 christos host_charset (),
2798 1.10 christos bytes, valtype->length (),
2799 1.10 christos valtype->length (),
2800 1.8 christos &output, translit_char);
2801 1.1 christos obstack_grow_str0 (&output, "");
2802 1.1 christos
2803 1.1 christos DIAGNOSTIC_PUSH
2804 1.1 christos DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2805 1.1 christos gdb_printf (stream, current_substring,
2806 1.1 christos obstack_base (&output));
2807 1.1 christos DIAGNOSTIC_POP
2808 1.8 christos }
2809 1.8 christos break;
2810 1.10 christos case long_long_arg:
2811 1.8 christos #ifdef PRINTF_HAS_LONG_LONG
2812 1.1 christos {
2813 1.1 christos long long val = value_as_long (val_args[i]);
2814 1.1 christos
2815 1.1 christos DIAGNOSTIC_PUSH
2816 1.1 christos DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2817 1.1 christos gdb_printf (stream, current_substring, val);
2818 1.1 christos DIAGNOSTIC_POP
2819 1.1 christos break;
2820 1.1 christos }
2821 1.8 christos #else
2822 1.8 christos error (_("long long not supported in printf"));
2823 1.10 christos #endif
2824 1.8 christos case int_arg:
2825 1.1 christos {
2826 1.1 christos int val = value_as_long (val_args[i]);
2827 1.1 christos
2828 1.1 christos DIAGNOSTIC_PUSH
2829 1.1 christos DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2830 1.1 christos gdb_printf (stream, current_substring, val);
2831 1.8 christos DIAGNOSTIC_POP
2832 1.8 christos break;
2833 1.10 christos }
2834 1.8 christos case long_arg:
2835 1.1 christos {
2836 1.1 christos long val = value_as_long (val_args[i]);
2837 1.9 christos
2838 1.9 christos DIAGNOSTIC_PUSH
2839 1.9 christos DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2840 1.9 christos gdb_printf (stream, current_substring, val);
2841 1.9 christos DIAGNOSTIC_POP
2842 1.9 christos break;
2843 1.10 christos }
2844 1.9 christos case size_t_arg:
2845 1.9 christos {
2846 1.9 christos size_t val = value_as_long (val_args[i]);
2847 1.8 christos
2848 1.8 christos DIAGNOSTIC_PUSH
2849 1.8 christos DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2850 1.8 christos gdb_printf (stream, current_substring, val);
2851 1.8 christos DIAGNOSTIC_POP
2852 1.8 christos break;
2853 1.8 christos }
2854 1.8 christos /* Handles floating-point values. */
2855 1.1 christos case double_arg:
2856 1.1 christos case long_double_arg:
2857 1.1 christos case dec32float_arg:
2858 1.1 christos case dec64float_arg:
2859 1.1 christos case dec128float_arg:
2860 1.1 christos printf_floating (stream, current_substring, val_args[i],
2861 1.1 christos piece.argclass);
2862 1.1 christos break;
2863 1.10 christos case ptr_arg:
2864 1.1 christos printf_pointer (stream, current_substring, val_args[i]);
2865 1.1 christos break;
2866 1.1 christos case literal_piece:
2867 1.1 christos /* Print a portion of the format string that has no
2868 1.8 christos directives. Note that this will not include any
2869 1.8 christos ordinary %-specs, but it might include "%%". That is
2870 1.10 christos why we use gdb_printf and not gdb_puts here.
2871 1.8 christos Also, we pass a dummy argument because some platforms
2872 1.1 christos have modified GCC to include -Wformat-security by
2873 1.1 christos default, which will warn here if there is no
2874 1.10 christos argument. */
2875 1.1 christos DIAGNOSTIC_PUSH
2876 1.1 christos DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
2877 1.8 christos gdb_printf (stream, current_substring, 0);
2878 1.1 christos DIAGNOSTIC_POP
2879 1.1 christos break;
2880 1.1 christos default:
2881 1.1 christos internal_error (_("failed internal consistency check"));
2882 1.1 christos }
2883 1.1 christos /* Maybe advance to the next argument. */
2884 1.1 christos if (piece.argclass != literal_piece)
2885 1.1 christos ++i;
2886 1.8 christos }
2887 1.1 christos }
2888 1.1 christos }
2889 1.10 christos
2890 1.10 christos /* Implement the "printf" command. */
2891 1.9 christos
2892 1.1 christos static void
2893 1.1 christos printf_command (const char *arg, int from_tty)
2894 1.1 christos {
2895 1.1 christos ui_printf (arg, gdb_stdout);
2896 1.1 christos gdb_stdout->reset_style ();
2897 1.8 christos gdb_stdout->wrap_here (0);
2898 1.1 christos gdb_stdout->flush ();
2899 1.7 christos }
2900 1.1 christos
2901 1.7 christos /* Implement the "eval" command. */
2902 1.1 christos
2903 1.7 christos static void
2904 1.1 christos eval_command (const char *arg, int from_tty)
2905 1.8 christos {
2906 1.1 christos string_file stb;
2907 1.1 christos
2908 1.10 christos ui_printf (arg, &stb);
2909 1.10 christos
2910 1.10 christos std::string expanded = insert_user_defined_cmd_args (stb.c_str ());
2911 1.10 christos
2912 1.10 christos execute_command (expanded.c_str (), from_tty);
2913 1.10 christos }
2914 1.10 christos
2915 1.10 christos /* Convenience function for error checking in memory-tag commands. */
2916 1.10 christos
2917 1.10 christos static void
2918 1.10 christos show_addr_not_tagged (CORE_ADDR address)
2919 1.10 christos {
2920 1.10 christos error (_("Address %s not in a region mapped with a memory tagging flag."),
2921 1.10 christos paddress (target_gdbarch (), address));
2922 1.10 christos }
2923 1.10 christos
2924 1.10 christos /* Convenience function for error checking in memory-tag commands. */
2925 1.10 christos
2926 1.10 christos static void
2927 1.10 christos show_memory_tagging_unsupported (void)
2928 1.10 christos {
2929 1.10 christos error (_("Memory tagging not supported or disabled by the current"
2930 1.10 christos " architecture."));
2931 1.10 christos }
2932 1.10 christos
2933 1.10 christos /* Implement the "memory-tag" prefix command. */
2934 1.10 christos
2935 1.10 christos static void
2936 1.10 christos memory_tag_command (const char *arg, int from_tty)
2937 1.10 christos {
2938 1.10 christos help_list (memory_tag_list, "memory-tag ", all_commands, gdb_stdout);
2939 1.10 christos }
2940 1.10 christos
2941 1.10 christos /* Helper for print-logical-tag and print-allocation-tag. */
2942 1.10 christos
2943 1.10 christos static void
2944 1.10 christos memory_tag_print_tag_command (const char *args, enum memtag_type tag_type)
2945 1.10 christos {
2946 1.10 christos if (args == nullptr)
2947 1.10 christos error_no_arg (_("address or pointer"));
2948 1.10 christos
2949 1.10 christos /* Parse args into a value. If the value is a pointer or an address,
2950 1.10 christos then fetch the logical or allocation tag. */
2951 1.10 christos value_print_options print_opts;
2952 1.10 christos
2953 1.10 christos struct value *val = process_print_command_args (args, &print_opts, true);
2954 1.10 christos
2955 1.10 christos /* If the address is not in a region memory mapped with a memory tagging
2956 1.10 christos flag, it is no use trying to access/manipulate its allocation tag.
2957 1.10 christos
2958 1.10 christos It is OK to manipulate the logical tag though. */
2959 1.10 christos if (tag_type == memtag_type::allocation
2960 1.10 christos && !gdbarch_tagged_address_p (target_gdbarch (), val))
2961 1.10 christos show_addr_not_tagged (value_as_address (val));
2962 1.10 christos
2963 1.10 christos struct value *tag_value
2964 1.10 christos = gdbarch_get_memtag (target_gdbarch (), val, tag_type);
2965 1.10 christos std::string tag = gdbarch_memtag_to_string (target_gdbarch (), tag_value);
2966 1.10 christos
2967 1.10 christos if (tag.empty ())
2968 1.10 christos gdb_printf (_("%s tag unavailable.\n"),
2969 1.10 christos tag_type
2970 1.10 christos == memtag_type::logical? "Logical" : "Allocation");
2971 1.10 christos
2972 1.10 christos struct value *v_tag = process_print_command_args (tag.c_str (),
2973 1.10 christos &print_opts,
2974 1.10 christos true);
2975 1.10 christos print_opts.output_format = 'x';
2976 1.10 christos print_value (v_tag, print_opts);
2977 1.10 christos }
2978 1.10 christos
2979 1.10 christos /* Implement the "memory-tag print-logical-tag" command. */
2980 1.10 christos
2981 1.10 christos static void
2982 1.10 christos memory_tag_print_logical_tag_command (const char *args, int from_tty)
2983 1.10 christos {
2984 1.10 christos if (!target_supports_memory_tagging ())
2985 1.10 christos show_memory_tagging_unsupported ();
2986 1.10 christos
2987 1.10 christos memory_tag_print_tag_command (args, memtag_type::logical);
2988 1.10 christos }
2989 1.10 christos
2990 1.10 christos /* Implement the "memory-tag print-allocation-tag" command. */
2991 1.10 christos
2992 1.10 christos static void
2993 1.10 christos memory_tag_print_allocation_tag_command (const char *args, int from_tty)
2994 1.10 christos {
2995 1.10 christos if (!target_supports_memory_tagging ())
2996 1.10 christos show_memory_tagging_unsupported ();
2997 1.10 christos
2998 1.10 christos memory_tag_print_tag_command (args, memtag_type::allocation);
2999 1.10 christos }
3000 1.10 christos
3001 1.10 christos /* Parse ARGS and extract ADDR and TAG.
3002 1.10 christos ARGS should have format <expression> <tag bytes>. */
3003 1.10 christos
3004 1.10 christos static void
3005 1.10 christos parse_with_logical_tag_input (const char *args, struct value **val,
3006 1.10 christos gdb::byte_vector &tags,
3007 1.10 christos value_print_options *print_opts)
3008 1.10 christos {
3009 1.10 christos /* Fetch the address. */
3010 1.10 christos std::string address_string = extract_string_maybe_quoted (&args);
3011 1.10 christos
3012 1.10 christos /* Parse the address into a value. */
3013 1.10 christos *val = process_print_command_args (address_string.c_str (), print_opts,
3014 1.10 christos true);
3015 1.10 christos
3016 1.10 christos /* Fetch the tag bytes. */
3017 1.10 christos std::string tag_string = extract_string_maybe_quoted (&args);
3018 1.10 christos
3019 1.10 christos /* Validate the input. */
3020 1.10 christos if (address_string.empty () || tag_string.empty ())
3021 1.10 christos error (_("Missing arguments."));
3022 1.10 christos
3023 1.10 christos if (tag_string.length () != 2)
3024 1.10 christos error (_("Error parsing tags argument. The tag should be 2 digits."));
3025 1.10 christos
3026 1.10 christos tags = hex2bin (tag_string.c_str ());
3027 1.10 christos }
3028 1.10 christos
3029 1.10 christos /* Implement the "memory-tag with-logical-tag" command. */
3030 1.10 christos
3031 1.10 christos static void
3032 1.10 christos memory_tag_with_logical_tag_command (const char *args, int from_tty)
3033 1.10 christos {
3034 1.10 christos if (!target_supports_memory_tagging ())
3035 1.10 christos show_memory_tagging_unsupported ();
3036 1.10 christos
3037 1.10 christos if (args == nullptr)
3038 1.10 christos error_no_arg (_("<address> <tag>"));
3039 1.10 christos
3040 1.10 christos gdb::byte_vector tags;
3041 1.10 christos struct value *val;
3042 1.10 christos value_print_options print_opts;
3043 1.10 christos
3044 1.10 christos /* Parse the input. */
3045 1.10 christos parse_with_logical_tag_input (args, &val, tags, &print_opts);
3046 1.10 christos
3047 1.10 christos /* Setting the logical tag is just a local operation that does not touch
3048 1.10 christos any memory from the target. Given an input value, we modify the value
3049 1.10 christos to include the appropriate tag.
3050 1.10 christos
3051 1.10 christos For this reason we need to cast the argument value to a
3052 1.10 christos (void *) pointer. This is so we have the right type for the gdbarch
3053 1.10 christos hook to manipulate the value and insert the tag.
3054 1.10 christos
3055 1.10 christos Otherwise, this would fail if, for example, GDB parsed the argument value
3056 1.10 christos into an int-sized value and the pointer value has a type of greater
3057 1.10 christos length. */
3058 1.10 christos
3059 1.10 christos /* Cast to (void *). */
3060 1.10 christos val = value_cast (builtin_type (target_gdbarch ())->builtin_data_ptr,
3061 1.10 christos val);
3062 1.10 christos
3063 1.10 christos /* Length doesn't matter for a logical tag. Pass 0. */
3064 1.10 christos if (!gdbarch_set_memtags (target_gdbarch (), val, 0, tags,
3065 1.10 christos memtag_type::logical))
3066 1.10 christos gdb_printf (_("Could not update the logical tag data.\n"));
3067 1.10 christos else
3068 1.10 christos {
3069 1.10 christos /* Always print it in hex format. */
3070 1.10 christos print_opts.output_format = 'x';
3071 1.10 christos print_value (val, print_opts);
3072 1.10 christos }
3073 1.10 christos }
3074 1.10 christos
3075 1.10 christos /* Parse ARGS and extract ADDR, LENGTH and TAGS. */
3076 1.10 christos
3077 1.10 christos static void
3078 1.10 christos parse_set_allocation_tag_input (const char *args, struct value **val,
3079 1.10 christos size_t *length, gdb::byte_vector &tags)
3080 1.10 christos {
3081 1.10 christos /* Fetch the address. */
3082 1.10 christos std::string address_string = extract_string_maybe_quoted (&args);
3083 1.10 christos
3084 1.10 christos /* Parse the address into a value. */
3085 1.10 christos value_print_options print_opts;
3086 1.10 christos *val = process_print_command_args (address_string.c_str (), &print_opts,
3087 1.10 christos true);
3088 1.10 christos
3089 1.10 christos /* Fetch the length. */
3090 1.10 christos std::string length_string = extract_string_maybe_quoted (&args);
3091 1.10 christos
3092 1.10 christos /* Fetch the tag bytes. */
3093 1.10 christos std::string tags_string = extract_string_maybe_quoted (&args);
3094 1.10 christos
3095 1.10 christos /* Validate the input. */
3096 1.10 christos if (address_string.empty () || length_string.empty () || tags_string.empty ())
3097 1.10 christos error (_("Missing arguments."));
3098 1.10 christos
3099 1.10 christos errno = 0;
3100 1.10 christos const char *trailer = nullptr;
3101 1.10 christos LONGEST parsed_length = strtoulst (length_string.c_str (), &trailer, 10);
3102 1.10 christos
3103 1.10 christos if (errno != 0 || (trailer != nullptr && trailer[0] != '\0'))
3104 1.10 christos error (_("Error parsing length argument."));
3105 1.10 christos
3106 1.10 christos if (parsed_length <= 0)
3107 1.10 christos error (_("Invalid zero or negative length."));
3108 1.10 christos
3109 1.10 christos *length = parsed_length;
3110 1.10 christos
3111 1.10 christos if (tags_string.length () % 2)
3112 1.10 christos error (_("Error parsing tags argument. Tags should be 2 digits per byte."));
3113 1.10 christos
3114 1.10 christos tags = hex2bin (tags_string.c_str ());
3115 1.10 christos
3116 1.10 christos /* If the address is not in a region memory mapped with a memory tagging
3117 1.10 christos flag, it is no use trying to access/manipulate its allocation tag. */
3118 1.10 christos if (!gdbarch_tagged_address_p (target_gdbarch (), *val))
3119 1.10 christos show_addr_not_tagged (value_as_address (*val));
3120 1.10 christos }
3121 1.10 christos
3122 1.10 christos /* Implement the "memory-tag set-allocation-tag" command.
3123 1.10 christos ARGS should be in the format <address> <length> <tags>. */
3124 1.10 christos
3125 1.10 christos static void
3126 1.10 christos memory_tag_set_allocation_tag_command (const char *args, int from_tty)
3127 1.10 christos {
3128 1.10 christos if (!target_supports_memory_tagging ())
3129 1.10 christos show_memory_tagging_unsupported ();
3130 1.10 christos
3131 1.10 christos if (args == nullptr)
3132 1.10 christos error_no_arg (_("<starting address> <length> <tag bytes>"));
3133 1.10 christos
3134 1.10 christos gdb::byte_vector tags;
3135 1.10 christos size_t length = 0;
3136 1.10 christos struct value *val;
3137 1.10 christos
3138 1.10 christos /* Parse the input. */
3139 1.10 christos parse_set_allocation_tag_input (args, &val, &length, tags);
3140 1.10 christos
3141 1.10 christos if (!gdbarch_set_memtags (target_gdbarch (), val, length, tags,
3142 1.10 christos memtag_type::allocation))
3143 1.10 christos gdb_printf (_("Could not update the allocation tag(s).\n"));
3144 1.10 christos else
3145 1.10 christos gdb_printf (_("Allocation tag(s) updated successfully.\n"));
3146 1.10 christos }
3147 1.10 christos
3148 1.10 christos /* Implement the "memory-tag check" command. */
3149 1.10 christos
3150 1.10 christos static void
3151 1.10 christos memory_tag_check_command (const char *args, int from_tty)
3152 1.10 christos {
3153 1.10 christos if (!target_supports_memory_tagging ())
3154 1.10 christos show_memory_tagging_unsupported ();
3155 1.10 christos
3156 1.10 christos if (args == nullptr)
3157 1.10 christos error (_("Argument required (address or pointer)"));
3158 1.10 christos
3159 1.10 christos /* Parse the expression into a value. If the value is an address or
3160 1.10 christos pointer, then check its logical tag against the allocation tag. */
3161 1.10 christos value_print_options print_opts;
3162 1.10 christos
3163 1.10 christos struct value *val = process_print_command_args (args, &print_opts, true);
3164 1.10 christos
3165 1.10 christos /* If the address is not in a region memory mapped with a memory tagging
3166 1.10 christos flag, it is no use trying to access/manipulate its allocation tag. */
3167 1.10 christos if (!gdbarch_tagged_address_p (target_gdbarch (), val))
3168 1.10 christos show_addr_not_tagged (value_as_address (val));
3169 1.10 christos
3170 1.10 christos CORE_ADDR addr = value_as_address (val);
3171 1.10 christos
3172 1.10 christos /* Check if the tag is valid. */
3173 1.10 christos if (!gdbarch_memtag_matches_p (target_gdbarch (), val))
3174 1.10 christos {
3175 1.10 christos struct value *tag
3176 1.10 christos = gdbarch_get_memtag (target_gdbarch (), val, memtag_type::logical);
3177 1.10 christos std::string ltag
3178 1.10 christos = gdbarch_memtag_to_string (target_gdbarch (), tag);
3179 1.10 christos
3180 1.10 christos tag = gdbarch_get_memtag (target_gdbarch (), val,
3181 1.10 christos memtag_type::allocation);
3182 1.10 christos std::string atag
3183 1.10 christos = gdbarch_memtag_to_string (target_gdbarch (), tag);
3184 1.10 christos
3185 1.10 christos gdb_printf (_("Logical tag (%s) does not match"
3186 1.10 christos " the allocation tag (%s) for address %s.\n"),
3187 1.10 christos ltag.c_str (), atag.c_str (),
3188 1.10 christos paddress (target_gdbarch (), addr));
3189 1.10 christos }
3190 1.10 christos else
3191 1.10 christos {
3192 1.10 christos struct value *tag
3193 1.10 christos = gdbarch_get_memtag (target_gdbarch (), val, memtag_type::logical);
3194 1.10 christos std::string ltag
3195 1.9 christos = gdbarch_memtag_to_string (target_gdbarch (), tag);
3196 1.1 christos
3197 1.9 christos gdb_printf (_("Memory tags for address %s match (%s).\n"),
3198 1.1 christos paddress (target_gdbarch (), addr), ltag.c_str ());
3199 1.1 christos }
3200 1.1 christos }
3201 1.1 christos
3202 1.1 christos void _initialize_printcmd ();
3203 1.10 christos void
3204 1.10 christos _initialize_printcmd ()
3205 1.1 christos {
3206 1.8 christos struct cmd_list_element *c;
3207 1.9 christos
3208 1.9 christos current_display_number = -1;
3209 1.1 christos
3210 1.8 christos gdb::observers::free_objfile.attach (clear_dangling_display_expressions,
3211 1.1 christos "printcmd");
3212 1.9 christos
3213 1.1 christos add_info ("address", info_address_command,
3214 1.1 christos _("Describe where symbol SYM is stored.\n\
3215 1.10 christos Usage: info address SYM"));
3216 1.1 christos
3217 1.1 christos add_info ("symbol", info_symbol_command, _("\
3218 1.1 christos Describe what symbol is at location ADDR.\n\
3219 1.1 christos Usage: info symbol ADDR\n\
3220 1.1 christos Only for symbols with fixed locations (global or static scope)."));
3221 1.1 christos
3222 1.1 christos c = add_com ("x", class_vars, x_command, _("\
3223 1.1 christos Examine memory: x/FMT ADDRESS.\n\
3224 1.6 christos ADDRESS is an expression for the memory address to examine.\n\
3225 1.6 christos FMT is a repeat count followed by a format letter and a size letter.\n\
3226 1.1 christos Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),\n\
3227 1.1 christos t(binary), f(float), a(address), i(instruction), c(char), s(string)\n\
3228 1.1 christos and z(hex, zero padded on the left).\n\
3229 1.10 christos Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes).\n\
3230 1.1 christos The specified number of objects of the specified size are printed\n\
3231 1.8 christos according to the format. If a negative number is specified, memory is\n\
3232 1.9 christos examined backward from the address.\n\n\
3233 1.9 christos Defaults for format and size letters are those previously used.\n\
3234 1.1 christos Default count is 1. Default address is following last thing printed\n\
3235 1.1 christos with this command or \"print\"."));
3236 1.1 christos set_cmd_completer_handle_brkchars (c, display_and_x_command_completer);
3237 1.9 christos
3238 1.1 christos add_info ("display", info_display_command, _("\
3239 1.1 christos Expressions to display when program stops, with code numbers.\n\
3240 1.1 christos Usage: info display"));
3241 1.1 christos
3242 1.1 christos add_cmd ("undisplay", class_vars, undisplay_command, _("\
3243 1.1 christos Cancel some expressions to be displayed when program stops.\n\
3244 1.10 christos Usage: undisplay [NUM]...\n\
3245 1.1 christos Arguments are the code numbers of the expressions to stop displaying.\n\
3246 1.9 christos No argument means cancel all automatic-display expressions.\n\
3247 1.1 christos \"delete display\" has the same effect as this command.\n\
3248 1.1 christos Do \"info display\" to see current list of code numbers."),
3249 1.1 christos &cmdlist);
3250 1.1 christos
3251 1.1 christos c = add_com ("display", class_vars, display_command, _("\
3252 1.1 christos Print value of expression EXP each time the program stops.\n\
3253 1.10 christos Usage: display[/FMT] EXP\n\
3254 1.1 christos /FMT may be used before EXP as in the \"print\" command.\n\
3255 1.1 christos /FMT \"i\" or \"s\" or including a size-letter is allowed,\n\
3256 1.1 christos as in the \"x\" command, and then EXP is used to get the address to examine\n\
3257 1.9 christos and examining is done as in the \"x\" command.\n\n\
3258 1.1 christos With no argument, display all currently requested auto-display expressions.\n\
3259 1.1 christos Use \"undisplay\" to cancel display requests previously made."));
3260 1.1 christos set_cmd_completer_handle_brkchars (c, display_and_x_command_completer);
3261 1.1 christos
3262 1.1 christos add_cmd ("display", class_vars, enable_display_command, _("\
3263 1.1 christos Enable some expressions to be displayed when program stops.\n\
3264 1.9 christos Usage: enable display [NUM]...\n\
3265 1.1 christos Arguments are the code numbers of the expressions to resume displaying.\n\
3266 1.1 christos No argument means enable all automatic-display expressions.\n\
3267 1.1 christos Do \"info display\" to see current list of code numbers."), &enablelist);
3268 1.1 christos
3269 1.1 christos add_cmd ("display", class_vars, disable_display_command, _("\
3270 1.1 christos Disable some expressions to be displayed when program stops.\n\
3271 1.9 christos Usage: disable display [NUM]...\n\
3272 1.1 christos Arguments are the code numbers of the expressions to stop displaying.\n\
3273 1.1 christos No argument means disable all automatic-display expressions.\n\
3274 1.1 christos Do \"info display\" to see current list of code numbers."), &disablelist);
3275 1.1 christos
3276 1.1 christos add_cmd ("display", class_vars, undisplay_command, _("\
3277 1.8 christos Cancel some expressions to be displayed when program stops.\n\
3278 1.9 christos Usage: delete display [NUM]...\n\
3279 1.8 christos Arguments are the code numbers of the expressions to stop displaying.\n\
3280 1.1 christos No argument means cancel all automatic-display expressions.\n\
3281 1.1 christos Do \"info display\" to see current list of code numbers."), &deletelist);
3282 1.1 christos
3283 1.9 christos add_com ("printf", class_vars, printf_command, _("\
3284 1.1 christos Formatted printing, like the C \"printf\" function.\n\
3285 1.1 christos Usage: printf \"format string\", ARG1, ARG2, ARG3, ..., ARGN\n\
3286 1.1 christos This supports most C printf format specifications, like %s, %d, etc."));
3287 1.9 christos
3288 1.9 christos add_com ("output", class_vars, output_command, _("\
3289 1.9 christos Like \"print\" but don't put in value history and don't print newline.\n\
3290 1.9 christos Usage: output EXP\n\
3291 1.9 christos This is useful in user-defined commands."));
3292 1.1 christos
3293 1.1 christos add_prefix_cmd ("set", class_vars, set_command, _("\
3294 1.1 christos Evaluate expression EXP and assign result to variable VAR.\n\
3295 1.1 christos Usage: set VAR = EXP\n\
3296 1.1 christos This uses assignment syntax appropriate for the current language\n\
3297 1.1 christos (VAR = EXP or VAR := EXP for example).\n\
3298 1.10 christos VAR may be a debugger \"convenience\" variable (names starting\n\
3299 1.1 christos with $), a register (a few standard names starting with $), or an actual\n\
3300 1.1 christos variable in the program being debugged. EXP is any valid expression.\n\
3301 1.1 christos Use \"set variable\" for variables with names identical to set subcommands.\n\
3302 1.1 christos \n\
3303 1.9 christos With a subcommand, this command modifies parts of the gdb environment.\n\
3304 1.1 christos You can see these environment settings with the \"show\" command."),
3305 1.1 christos &setlist, 1, &cmdlist);
3306 1.1 christos
3307 1.9 christos /* "call" is the same as "set", but handy for dbx users to call fns. */
3308 1.1 christos c = add_com ("call", class_vars, call_command, _("\
3309 1.10 christos Call a function in the program.\n\
3310 1.10 christos Usage: call EXP\n\
3311 1.9 christos The argument is the function name and arguments, in the notation of the\n\
3312 1.9 christos current working language. The result is printed and saved in the value\n\
3313 1.9 christos history, if it is not void."));
3314 1.9 christos set_cmd_completer_handle_brkchars (c, print_command_completer);
3315 1.9 christos
3316 1.1 christos cmd_list_element *set_variable_cmd
3317 1.1 christos = add_cmd ("variable", class_vars, set_command, _("\
3318 1.1 christos Evaluate expression EXP and assign result to variable VAR.\n\
3319 1.10 christos Usage: set variable VAR = EXP\n\
3320 1.10 christos This uses assignment syntax appropriate for the current language\n\
3321 1.1 christos (VAR = EXP or VAR := EXP for example).\n\
3322 1.9 christos VAR may be a debugger \"convenience\" variable (names starting\n\
3323 1.9 christos with $), a register (a few standard names starting with $), or an actual\n\
3324 1.9 christos variable in the program being debugged. EXP is any valid expression.\n\
3325 1.1 christos This may usually be abbreviated to simply \"set\"."),
3326 1.9 christos &setlist);
3327 1.9 christos add_alias_cmd ("var", set_variable_cmd, class_vars, 0, &setlist);
3328 1.9 christos
3329 1.9 christos const auto print_opts = make_value_print_options_def_group (nullptr);
3330 1.9 christos
3331 1.9 christos static const std::string print_help = gdb::option::build_help (_("\
3332 1.9 christos Print value of expression EXP.\n\
3333 1.9 christos Usage: print [[OPTION]... --] [/FMT] [EXP]\n\
3334 1.9 christos \n\
3335 1.1 christos Options:\n\
3336 1.1 christos %OPTIONS%\n\
3337 1.1 christos \n\
3338 1.1 christos Note: because this command accepts arbitrary expressions, if you\n\
3339 1.1 christos specify any command option, you must use a double dash (\"--\")\n\
3340 1.1 christos to mark the end of option processing. E.g.: \"print -o -- myobj\".\n\
3341 1.1 christos \n\
3342 1.1 christos Variables accessible are those of the lexical environment of the selected\n\
3343 1.1 christos stack frame, plus all those whose scope is global or an entire file.\n\
3344 1.1 christos \n\
3345 1.1 christos $NUM gets previous value number NUM. $ and $$ are the last two values.\n\
3346 1.1 christos $$NUM refers to NUM'th value back from the last one.\n\
3347 1.1 christos Names starting with $ refer to registers (with the values they would have\n\
3348 1.1 christos if the program were to return to the stack frame now selected, restoring\n\
3349 1.1 christos all registers saved by frames farther in) or else to debugger\n\
3350 1.1 christos \"convenience\" variables (any such name not a known register).\n\
3351 1.1 christos Use assignment expressions to give values to convenience variables.\n\
3352 1.1 christos \n\
3353 1.1 christos {TYPE}ADREXP refers to a datum of data type TYPE, located at address ADREXP.\n\
3354 1.9 christos @ is a binary operator for treating consecutive data objects\n\
3355 1.9 christos anywhere in memory as an array. FOO@NUM gives an array whose first\n\
3356 1.9 christos element is FOO, whose second element is stored in the space following\n\
3357 1.10 christos where FOO is stored, etc. FOO must be an expression whose value\n\
3358 1.10 christos resides in memory.\n\
3359 1.10 christos \n\
3360 1.10 christos EXP may be preceded with /FMT, where FMT is a format letter\n\
3361 1.10 christos but no count or size letter (see \"x\" command)."),
3362 1.1 christos print_opts);
3363 1.1 christos
3364 1.1 christos cmd_list_element *print_cmd
3365 1.9 christos = add_com ("print", class_vars, print_command, print_help.c_str ());
3366 1.9 christos set_cmd_completer_handle_brkchars (print_cmd, print_command_completer);
3367 1.1 christos add_com_alias ("p", print_cmd, class_vars, 1);
3368 1.1 christos add_com_alias ("inspect", print_cmd, class_vars, 1);
3369 1.1 christos
3370 1.1 christos add_setshow_uinteger_cmd ("max-symbolic-offset", no_class,
3371 1.1 christos &max_symbolic_offset, _("\
3372 1.1 christos Set the largest offset that will be printed in <SYMBOL+1234> form."), _("\
3373 1.1 christos Show the largest offset that will be printed in <SYMBOL+1234> form."), _("\
3374 1.1 christos Tell GDB to only display the symbolic form of an address if the\n\
3375 1.1 christos offset between the closest earlier symbol and the address is less than\n\
3376 1.1 christos the specified maximum offset. The default is \"unlimited\", which tells GDB\n\
3377 1.9 christos to always print the symbolic form of an address if any symbol precedes\n\
3378 1.9 christos it. Zero is equivalent to \"unlimited\"."),
3379 1.1 christos NULL,
3380 1.1 christos show_max_symbolic_offset,
3381 1.1 christos &setprintlist, &showprintlist);
3382 1.1 christos add_setshow_boolean_cmd ("symbol-filename", no_class,
3383 1.1 christos &print_symbol_filename, _("\
3384 1.9 christos Set printing of source filename and line number with <SYMBOL>."), _("\
3385 1.9 christos Show printing of source filename and line number with <SYMBOL>."), NULL,
3386 1.9 christos NULL,
3387 1.9 christos show_print_symbol_filename,
3388 1.10 christos &setprintlist, &showprintlist);
3389 1.10 christos
3390 1.10 christos add_com ("eval", no_class, eval_command, _("\
3391 1.10 christos Construct a GDB command and then evaluate it.\n\
3392 1.10 christos Usage: eval \"format string\", ARG1, ARG2, ARG3, ..., ARGN\n\
3393 1.10 christos Convert the arguments to a string as \"printf\" would, but then\n\
3394 1.10 christos treat this string as a command line, and evaluate it."));
3395 1.10 christos
3396 1.10 christos /* Memory tagging commands. */
3397 1.10 christos add_prefix_cmd ("memory-tag", class_vars, memory_tag_command, _("\
3398 1.10 christos Generic command for printing and manipulating memory tag properties."),
3399 1.10 christos &memory_tag_list, 0, &cmdlist);
3400 1.10 christos add_cmd ("print-logical-tag", class_vars,
3401 1.10 christos memory_tag_print_logical_tag_command,
3402 1.10 christos ("Print the logical tag from POINTER.\n\
3403 1.10 christos Usage: memory-tag print-logical-tag <POINTER>.\n\
3404 1.10 christos <POINTER> is an expression that evaluates to a pointer.\n\
3405 1.10 christos Print the logical tag contained in POINTER. The tag interpretation is\n\
3406 1.10 christos architecture-specific."),
3407 1.10 christos &memory_tag_list);
3408 1.10 christos add_cmd ("print-allocation-tag", class_vars,
3409 1.10 christos memory_tag_print_allocation_tag_command,
3410 1.10 christos _("Print the allocation tag for ADDRESS.\n\
3411 1.10 christos Usage: memory-tag print-allocation-tag <ADDRESS>.\n\
3412 1.10 christos <ADDRESS> is an expression that evaluates to a memory address.\n\
3413 1.10 christos Print the allocation tag associated with the memory address ADDRESS.\n\
3414 1.10 christos The tag interpretation is architecture-specific."),
3415 1.10 christos &memory_tag_list);
3416 1.10 christos add_cmd ("with-logical-tag", class_vars, memory_tag_with_logical_tag_command,
3417 1.10 christos _("Print a POINTER with a specific logical TAG.\n\
3418 1.10 christos Usage: memory-tag with-logical-tag <POINTER> <TAG>\n\
3419 1.10 christos <POINTER> is an expression that evaluates to a pointer.\n\
3420 1.10 christos <TAG> is a sequence of hex bytes that is interpreted by the architecture\n\
3421 1.10 christos as a single memory tag."),
3422 1.10 christos &memory_tag_list);
3423 1.10 christos add_cmd ("set-allocation-tag", class_vars,
3424 1.10 christos memory_tag_set_allocation_tag_command,
3425 1.10 christos _("Set the allocation tag(s) for a memory range.\n\
3426 1.10 christos Usage: memory-tag set-allocation-tag <ADDRESS> <LENGTH> <TAG_BYTES>\n\
3427 1.10 christos <ADDRESS> is an expression that evaluates to a memory address\n\
3428 1.10 christos <LENGTH> is the number of bytes that is added to <ADDRESS> to calculate\n\
3429 1.10 christos the memory range.\n\
3430 1.10 christos <TAG_BYTES> is a sequence of hex bytes that is interpreted by the\n\
3431 1.10 christos architecture as one or more memory tags.\n\
3432 1.10 christos Sets the tags of the memory range [ADDRESS, ADDRESS + LENGTH)\n\
3433 1.10 christos to TAG_BYTES.\n\
3434 1.10 christos \n\
3435 1.10 christos If the number of tags is greater than or equal to the number of tag granules\n\
3436 1.10 christos in the [ADDRESS, ADDRESS + LENGTH) range, only the tags up to the\n\
3437 1.10 christos number of tag granules are updated.\n\
3438 1.10 christos \n\
3439 1.10 christos If the number of tags is less than the number of tag granules, then the\n\
3440 1.10 christos command is a fill operation. The TAG_BYTES are interpreted as a pattern\n\
3441 1.10 christos that gets repeated until the number of tag granules in the memory range\n\
3442 1.10 christos [ADDRESS, ADDRESS + LENGTH) is updated."),
3443 1.10 christos &memory_tag_list);
3444 1.10 christos add_cmd ("check", class_vars, memory_tag_check_command,
3445 1.1 christos _("Validate a pointer's logical tag against the allocation tag.\n\
3446 Usage: memory-tag check <POINTER>\n\
3447 <POINTER> is an expression that evaluates to a pointer\n\
3448 Fetch the logical and allocation tags for POINTER and compare them\n\
3449 for equality. If the tags do not match, print additional information about\n\
3450 the tag mismatch."),
3451 &memory_tag_list);
3452 }
3453