Home | History | Annotate | Line # | Download | only in gdb
valprint.h revision 1.10
      1   1.1  christos /* Declarations for value printing routines for GDB, the GNU debugger.
      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 #ifndef VALPRINT_H
     21   1.1  christos #define VALPRINT_H
     22   1.1  christos 
     23   1.9  christos #include "cli/cli-option.h"
     24   1.9  christos 
     25   1.1  christos /* This is used to pass formatting options to various value-printing
     26   1.1  christos    functions.  */
     27   1.1  christos struct value_print_options
     28   1.1  christos {
     29   1.1  christos   /* Pretty-formatting control.  */
     30   1.1  christos   enum val_prettyformat prettyformat;
     31   1.1  christos 
     32   1.1  christos   /* Controls pretty formatting of arrays.  */
     33   1.9  christos   bool prettyformat_arrays;
     34   1.1  christos 
     35   1.1  christos   /* Controls pretty formatting of structures.  */
     36   1.9  christos   bool prettyformat_structs;
     37   1.1  christos 
     38   1.1  christos   /* Controls printing of virtual tables.  */
     39   1.9  christos   bool vtblprint;
     40   1.1  christos 
     41   1.1  christos   /* Controls printing of nested unions.  */
     42   1.9  christos   bool unionprint;
     43   1.1  christos 
     44   1.1  christos   /* Controls printing of addresses.  */
     45   1.9  christos   bool addressprint;
     46   1.1  christos 
     47  1.10  christos   /* Controls printing of nibbles.  */
     48  1.10  christos   bool nibblesprint;
     49  1.10  christos 
     50   1.1  christos   /* Controls looking up an object's derived type using what we find
     51   1.1  christos      in its vtables.  */
     52   1.9  christos   bool objectprint;
     53   1.1  christos 
     54   1.1  christos   /* Maximum number of chars to print for a string pointer value or vector
     55   1.1  christos      contents, or UINT_MAX for no limit.  Note that "set print elements 0"
     56   1.1  christos      stores UINT_MAX in print_max, which displays in a show command as
     57   1.1  christos      "unlimited".  */
     58   1.1  christos   unsigned int print_max;
     59   1.1  christos 
     60   1.1  christos   /* Print repeat counts if there are more than this many repetitions
     61   1.1  christos      of an element in an array.  */
     62   1.1  christos   unsigned int repeat_count_threshold;
     63   1.1  christos 
     64   1.1  christos   /* The global output format letter.  */
     65   1.1  christos   int output_format;
     66   1.1  christos 
     67   1.1  christos   /* The current format letter.  This is set locally for a given call,
     68   1.1  christos      e.g. when the user passes a format to "print".  */
     69   1.1  christos   int format;
     70   1.1  christos 
     71  1.10  christos   /* Print memory tag violations for pointers.  */
     72  1.10  christos   bool memory_tag_violations;
     73  1.10  christos 
     74   1.1  christos   /* Stop printing at null character?  */
     75   1.9  christos   bool stop_print_at_null;
     76   1.1  christos 
     77   1.1  christos   /* True if we should print the index of each element when printing
     78   1.1  christos      an array.  */
     79   1.9  christos   bool print_array_indexes;
     80   1.1  christos 
     81   1.9  christos   /* If true, then dereference references, otherwise just print
     82   1.1  christos      them like pointers.  */
     83   1.9  christos   bool deref_ref;
     84   1.1  christos 
     85   1.9  christos   /* If true, print static fields.  */
     86   1.9  christos   bool static_field_print;
     87   1.1  christos 
     88   1.9  christos   /* If true, print static fields for Pascal.  FIXME: C++ has a
     89   1.7  christos      flag, why not share with Pascal too?  */
     90   1.9  christos   bool pascal_static_field_print;
     91   1.1  christos 
     92   1.9  christos   /* If true, don't do Python pretty-printing.  */
     93   1.9  christos   bool raw;
     94   1.1  christos 
     95   1.9  christos   /* If true, print the value in "summary" form.
     96   1.9  christos      If raw and summary are both true, don't print non-scalar values
     97   1.1  christos      ("..." is printed instead).  */
     98   1.9  christos   bool summary;
     99   1.1  christos 
    100   1.9  christos   /* If true, when printing a pointer, print the symbol to which it
    101   1.1  christos      points, if any.  */
    102   1.9  christos   bool symbol_print;
    103   1.9  christos 
    104   1.9  christos   /* Maximum print depth when printing nested aggregates.  */
    105   1.9  christos   int max_depth;
    106   1.1  christos };
    107   1.1  christos 
    108   1.9  christos /* Create an option_def_group for the value_print options, with OPTS
    109   1.9  christos    as context.  */
    110   1.9  christos extern gdb::option::option_def_group make_value_print_options_def_group
    111   1.9  christos   (value_print_options *opts);
    112   1.9  christos 
    113   1.1  christos /* The global print options set by the user.  In general this should
    114   1.1  christos    not be directly accessed, except by set/show commands.  Ordinary
    115   1.1  christos    code should call get_user_print_options instead.  */
    116   1.1  christos extern struct value_print_options user_print_options;
    117   1.1  christos 
    118   1.1  christos /* Initialize *OPTS to be a copy of the user print options.  */
    119   1.1  christos extern void get_user_print_options (struct value_print_options *opts);
    120   1.1  christos 
    121   1.1  christos /* Initialize *OPTS to be a copy of the user print options, but with
    122   1.1  christos    pretty-formatting disabled.  */
    123   1.1  christos extern void get_no_prettyformat_print_options (struct value_print_options *);
    124   1.1  christos 
    125   1.1  christos /* Initialize *OPTS to be a copy of the user print options, but using
    126   1.1  christos    FORMAT as the formatting option.  */
    127   1.1  christos extern void get_formatted_print_options (struct value_print_options *opts,
    128   1.1  christos 					 char format);
    129   1.1  christos 
    130   1.1  christos extern void maybe_print_array_index (struct type *index_type, LONGEST index,
    131  1.10  christos 				     struct ui_file *stream,
    132   1.1  christos 				     const struct value_print_options *);
    133   1.1  christos 
    134   1.9  christos 
    135   1.9  christos /* Print elements of an array.  */
    136   1.9  christos 
    137   1.9  christos extern void value_print_array_elements (struct value *, struct ui_file *, int,
    138   1.1  christos 					const struct value_print_options *,
    139   1.9  christos 					unsigned int);
    140   1.9  christos 
    141   1.9  christos /* Print a scalar according to OPTIONS and SIZE on STREAM.  Format 'i'
    142   1.9  christos    is not supported at this level.
    143   1.9  christos 
    144   1.9  christos    This is how the elements of an array or structure are printed
    145   1.9  christos    with a format.  */
    146   1.9  christos 
    147   1.9  christos extern void value_print_scalar_formatted
    148   1.9  christos   (struct value *val, const struct value_print_options *options,
    149   1.9  christos    int size, struct ui_file *stream);
    150   1.1  christos 
    151   1.1  christos extern void print_binary_chars (struct ui_file *, const gdb_byte *,
    152  1.10  christos 				unsigned int, enum bfd_endian, bool,
    153  1.10  christos 				const struct value_print_options *options);
    154   1.1  christos 
    155   1.1  christos extern void print_octal_chars (struct ui_file *, const gdb_byte *,
    156   1.1  christos 			       unsigned int, enum bfd_endian);
    157   1.1  christos 
    158   1.1  christos extern void print_decimal_chars (struct ui_file *, const gdb_byte *,
    159   1.8  christos 				 unsigned int, bool, enum bfd_endian);
    160   1.1  christos 
    161   1.1  christos extern void print_hex_chars (struct ui_file *, const gdb_byte *,
    162   1.8  christos 			     unsigned int, enum bfd_endian, bool);
    163   1.1  christos 
    164   1.1  christos extern void print_function_pointer_address (const struct value_print_options *options,
    165   1.1  christos 					    struct gdbarch *gdbarch,
    166   1.1  christos 					    CORE_ADDR address,
    167   1.1  christos 					    struct ui_file *stream);
    168   1.1  christos 
    169   1.9  christos /* Helper function to check the validity of some bits of a value.
    170   1.9  christos 
    171   1.9  christos    If TYPE represents some aggregate type (e.g., a structure), return 1.
    172   1.9  christos 
    173   1.9  christos    Otherwise, any of the bytes starting at OFFSET and extending for
    174  1.10  christos    TYPE->length () bytes are invalid, print a message to STREAM and
    175   1.9  christos    return 0.  The checking is done using FUNCS.
    176   1.9  christos 
    177   1.9  christos    Otherwise, return 1.  */
    178   1.9  christos 
    179   1.9  christos extern int valprint_check_validity (struct ui_file *stream, struct type *type,
    180   1.9  christos 				    LONGEST embedded_offset,
    181   1.9  christos 				    const struct value *val);
    182   1.9  christos 
    183   1.1  christos extern void val_print_optimized_out (const struct value *val,
    184   1.1  christos 				     struct ui_file *stream);
    185   1.1  christos 
    186   1.1  christos /* Prints "<not saved>" to STREAM.  */
    187   1.1  christos extern void val_print_not_saved (struct ui_file *stream);
    188   1.1  christos 
    189   1.1  christos extern void val_print_unavailable (struct ui_file *stream);
    190   1.1  christos 
    191   1.1  christos extern void val_print_invalid_address (struct ui_file *stream);
    192   1.1  christos 
    193   1.1  christos /* An instance of this is passed to generic_val_print and describes
    194   1.1  christos    some language-specific ways to print things.  */
    195   1.1  christos 
    196   1.1  christos struct generic_val_print_decorations
    197   1.1  christos {
    198   1.1  christos   /* Printing complex numbers: what to print before, between the
    199   1.1  christos      elements, and after.  */
    200   1.1  christos 
    201   1.1  christos   const char *complex_prefix;
    202   1.1  christos   const char *complex_infix;
    203   1.1  christos   const char *complex_suffix;
    204   1.1  christos 
    205   1.1  christos   /* Boolean true and false.  */
    206   1.1  christos 
    207   1.1  christos   const char *true_name;
    208   1.1  christos   const char *false_name;
    209   1.1  christos 
    210   1.1  christos   /* What to print when we see TYPE_CODE_VOID.  */
    211   1.1  christos 
    212   1.1  christos   const char *void_name;
    213   1.6  christos 
    214   1.6  christos   /* Array start and end strings.  */
    215   1.6  christos   const char *array_start;
    216   1.6  christos   const char *array_end;
    217   1.1  christos };
    218   1.1  christos 
    219   1.1  christos 
    220   1.9  christos /* Print a value in a generic way.  VAL is the value, STREAM is where
    221   1.9  christos    to print it, RECURSE is the recursion depth, OPTIONS describe how
    222   1.9  christos    the printing should be done, and D is the language-specific
    223   1.9  christos    decorations object.  Note that structs and unions cannot be printed
    224   1.9  christos    by this function.  */
    225   1.9  christos 
    226   1.9  christos extern void generic_value_print (struct value *val, struct ui_file *stream,
    227   1.9  christos 				 int recurse,
    228   1.9  christos 				 const struct value_print_options *options,
    229   1.9  christos 				 const struct generic_val_print_decorations *d);
    230   1.1  christos 
    231   1.1  christos extern void generic_emit_char (int c, struct type *type, struct ui_file *stream,
    232   1.1  christos 			       int quoter, const char *encoding);
    233   1.1  christos 
    234   1.1  christos extern void generic_printstr (struct ui_file *stream, struct type *type,
    235   1.1  christos 			      const gdb_byte *string, unsigned int length,
    236   1.1  christos 			      const char *encoding, int force_ellipses,
    237   1.1  christos 			      int quote_char, int c_style_terminator,
    238   1.1  christos 			      const struct value_print_options *options);
    239   1.1  christos 
    240   1.1  christos /* Run the "output" command.  ARGS and FROM_TTY are the usual
    241   1.1  christos    arguments passed to all command implementations, except ARGS is
    242   1.1  christos    const.  */
    243   1.1  christos 
    244   1.8  christos extern void output_command (const char *args, int from_tty);
    245   1.1  christos 
    246   1.1  christos extern int val_print_scalar_type_p (struct type *type);
    247   1.1  christos 
    248   1.5  christos struct format_data
    249   1.5  christos   {
    250   1.5  christos     int count;
    251   1.5  christos     char format;
    252   1.5  christos     char size;
    253  1.10  christos     bool print_tags;
    254   1.5  christos 
    255   1.5  christos     /* True if the value should be printed raw -- that is, bypassing
    256   1.5  christos        python-based formatters.  */
    257   1.5  christos     unsigned char raw;
    258   1.5  christos   };
    259   1.5  christos 
    260   1.5  christos extern void print_command_parse_format (const char **expp, const char *cmdname,
    261   1.9  christos 					value_print_options *opts);
    262   1.9  christos 
    263   1.9  christos /* Print VAL to console according to OPTS, including recording it to
    264   1.9  christos    the history.  */
    265   1.9  christos extern void print_value (value *val, const value_print_options &opts);
    266   1.9  christos 
    267   1.9  christos /* Completer for the "print", "call", and "compile print"
    268   1.9  christos    commands.  */
    269   1.9  christos extern void print_command_completer (struct cmd_list_element *ignore,
    270   1.9  christos 				     completion_tracker &tracker,
    271   1.9  christos 				     const char *text, const char *word);
    272   1.5  christos 
    273   1.8  christos /* Given an address ADDR return all the elements needed to print the
    274   1.8  christos    address in a symbolic form.  NAME can be mangled or not depending
    275   1.8  christos    on DO_DEMANGLE (and also on the asm_demangle global variable,
    276   1.9  christos    manipulated via ''set print asm-demangle'').  When
    277   1.9  christos    PREFER_SYM_OVER_MINSYM is true, names (and offsets) from minimal
    278   1.9  christos    symbols won't be used except in instances where no symbol was
    279   1.9  christos    found; otherwise, a minsym might be used in some instances (mostly
    280   1.9  christos    involving function with non-contiguous address ranges).  Return
    281   1.9  christos    0 in case of success, when all the info in the OUT parameters is
    282   1.9  christos    valid.  Return 1 otherwise.  */
    283   1.8  christos 
    284   1.8  christos extern int build_address_symbolic (struct gdbarch *,
    285   1.8  christos 				   CORE_ADDR addr,
    286   1.9  christos 				   bool do_demangle,
    287   1.9  christos 				   bool prefer_sym_over_minsym,
    288   1.8  christos 				   std::string *name,
    289   1.8  christos 				   int *offset,
    290   1.8  christos 				   std::string *filename,
    291   1.8  christos 				   int *line,
    292   1.8  christos 				   int *unmapped);
    293   1.8  christos 
    294   1.9  christos /* Check to see if RECURSE is greater than or equal to the allowed
    295   1.9  christos    printing max-depth (see 'set print max-depth').  If it is then print an
    296   1.9  christos    ellipsis expression to STREAM and return true, otherwise return false.
    297   1.9  christos    LANGUAGE determines what type of ellipsis expression is printed.  */
    298   1.9  christos 
    299   1.9  christos extern bool val_print_check_max_depth (struct ui_file *stream, int recurse,
    300   1.9  christos 				       const struct value_print_options *opts,
    301   1.9  christos 				       const struct language_defn *language);
    302   1.9  christos 
    303   1.9  christos /* Like common_val_print, but call value_check_printable first.  */
    304   1.9  christos 
    305   1.9  christos extern void common_val_print_checked
    306   1.9  christos   (struct value *val,
    307   1.9  christos    struct ui_file *stream, int recurse,
    308   1.9  christos    const struct value_print_options *options,
    309   1.9  christos    const struct language_defn *language);
    310   1.9  christos 
    311   1.1  christos #endif
    312