gdb/target-debug.h - gdb

Functions defined

Macros defined

Source code

  1. /* GDB target debugging macros

  2.    Copyright (C) 2014-2015 Free Software Foundation, Inc.

  3.    This file is part of GDB.

  4.    This program is free software; you can redistribute it and/or modify
  5.    it under the terms of the GNU General Public License as published by
  6.    the Free Software Foundation; either version 3 of the License, or
  7.    (at your option) any later version.

  8.    This program is distributed in the hope that it will be useful,
  9.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11.    GNU General Public License for more details.

  12.    You should have received a copy of the GNU General Public License
  13.    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

  14. #ifndef TARGET_DEBUG_H
  15. #define TARGET_DEBUG_H

  16. /* Printers for the debug target.  Each prints an object of a given
  17.    type to a string that needn't be freed.  Most printers are macros,
  18.    for brevity, but a few are static functions where more complicated
  19.    behavior is needed.

  20.    References to these printers are automatically generated by
  21.    make-target-delegates.  See the generated file target-delegates.c.

  22.    In a couple cases, a special printing function is defined and then
  23.    used via the TARGET_DEBUG_PRINTER macro.  See target.h.

  24.    A few methods still have some explicit targetdebug code in
  25.    target.c.  In most cases this is because target delegation hasn't
  26.    been done for the method; but individual cases vary.  For instance,
  27.    target_store_registers does some special register printing that is
  28.    more simply done there, and target_xfer_partial additionally
  29.    bypasses the debug target.  */


  30. /* Helper macro.  */

  31. #define target_debug_do_print(E)                        \
  32.   fputs_unfiltered ((E), gdb_stdlog);

  33. #define target_debug_print_struct_target_ops_p(X)        \
  34.   target_debug_do_print (host_address_to_string (X))
  35. #define target_debug_print_enum_target_object(X)        \
  36.   target_debug_do_print (plongest (X))
  37. #define target_debug_print_CORE_ADDR(X)                \
  38.   target_debug_do_print (core_addr_to_string (X))
  39. #define target_debug_print_const_char_p(X)        \
  40.   target_debug_do_print (((X) ? (X) : "(null)"))
  41. #define target_debug_print_char_p(X)                \
  42.   target_debug_do_print (((X) ? (X) : "(null)"))
  43. #define target_debug_print_int(X)                \
  44.   target_debug_do_print (plongest (X))
  45. #define target_debug_print_long(X)                \
  46.   target_debug_do_print (plongest (X))
  47. #define target_debug_print_enum_target_xfer_status(X)        \
  48.   target_debug_do_print (plongest (X))
  49. #define target_debug_print_enum_exec_direction_kind(X)        \
  50.   target_debug_do_print (plongest (X))
  51. #define target_debug_print_enum_trace_find_type(X)        \
  52.   target_debug_do_print (plongest (X))
  53. #define target_debug_print_enum_btrace_read_type(X)        \
  54.   target_debug_do_print (plongest (X))
  55. #define target_debug_print_enum_btrace_error(X) \
  56.   target_debug_do_print (plongest (X))
  57. #define target_debug_print_ptid_t(X)                \
  58.   target_debug_do_print (plongest (ptid_get_pid (X)))
  59. #define target_debug_print_struct_gdbarch_p(X)        \
  60.   target_debug_do_print (gdbarch_bfd_arch_info (X)->printable_name)
  61. #define target_debug_print_const_gdb_byte_p(X)        \
  62.   target_debug_do_print (host_address_to_string (X))
  63. #define target_debug_print_gdb_byte_p(X)        \
  64.   target_debug_do_print (host_address_to_string (X))
  65. #define target_debug_print_gdb_byte_pp(X)        \
  66.   target_debug_do_print (host_address_to_string (*(X)))
  67. #define target_debug_print_enum_gdb_signal(X)        \
  68.   target_debug_do_print (gdb_signal_to_name (X))
  69. #define target_debug_print_ULONGEST(X)                \
  70.   target_debug_do_print (hex_string (X))
  71. #define target_debug_print_ULONGEST_p(X)        \
  72.   target_debug_do_print (hex_string (*(X)))
  73. #define target_debug_print_LONGEST(X)                \
  74.   target_debug_do_print (phex (X, 0))
  75. #define target_debug_print_LONGEST_p(X)                \
  76.   target_debug_do_print (phex (*(X), 0))
  77. #define target_debug_print_struct_address_space_p(X)        \
  78.   target_debug_do_print (plongest (address_space_num (X)))
  79. #define target_debug_print_struct_bp_target_info_p(X)        \
  80.   target_debug_do_print (core_addr_to_string ((X)->placed_address))
  81. #define target_debug_print_struct_expression_p(X)        \
  82.   target_debug_do_print (host_address_to_string (X))
  83. #define target_debug_print_CORE_ADDR_p(X)        \
  84.   target_debug_do_print (core_addr_to_string (*(X)))
  85. #define target_debug_print_int_p(X)                \
  86.   target_debug_do_print (plongest (*(X)))
  87. #define target_debug_print_struct_regcache_p(X) \
  88.   target_debug_do_print (host_address_to_string (X))
  89. #define target_debug_print_struct_thread_info_p(X)        \
  90.   target_debug_do_print (host_address_to_string (X))
  91. #define target_debug_print_struct_ui_file_p(X)        \
  92.   target_debug_do_print (host_address_to_string (X))
  93. #define target_debug_print_struct_target_section_table_p(X)        \
  94.   target_debug_do_print (host_address_to_string (X))
  95. #define target_debug_print_async_callback_ftype_p(X) \
  96.   target_debug_do_print (host_address_to_string (X))
  97. #define target_debug_print_void_p(X) \
  98.   target_debug_do_print (host_address_to_string (X))
  99. #define target_debug_print_find_memory_region_ftype(X) \
  100.   target_debug_do_print (host_address_to_string (X))
  101. #define target_debug_print_bfd_p(X) \
  102.   target_debug_do_print (host_address_to_string (X))
  103. #define target_debug_print_VEC_mem_region_s__p(X)        \
  104.   target_debug_do_print (host_address_to_string (X))
  105. #define target_debug_print_VEC_static_tracepoint_marker_p__p(X)        \
  106.   target_debug_do_print (host_address_to_string (X))
  107. #define target_debug_print_const_struct_target_desc_p(X)        \
  108.   target_debug_do_print (host_address_to_string (X))
  109. #define target_debug_print_struct_bp_location_p(X)        \
  110.   target_debug_do_print (host_address_to_string (X))
  111. #define target_debug_print_struct_trace_state_variable_p(X)        \
  112.   target_debug_do_print (host_address_to_string (X))
  113. #define target_debug_print_struct_trace_status_p(X)        \
  114.   target_debug_do_print (host_address_to_string (X))
  115. #define target_debug_print_struct_breakpoint_p(X)        \
  116.   target_debug_do_print (host_address_to_string (X))
  117. #define target_debug_print_struct_uploaded_tp_p(X)        \
  118.   target_debug_do_print (host_address_to_string (X))
  119. #define target_debug_print_struct_uploaded_tp_pp(X)        \
  120.   target_debug_do_print (host_address_to_string (X))
  121. #define target_debug_print_struct_uploaded_tsv_pp(X)        \
  122.   target_debug_do_print (host_address_to_string (X))
  123. #define target_debug_print_struct_static_tracepoint_marker_p(X)        \
  124.   target_debug_do_print (host_address_to_string (X))
  125. #define target_debug_print_struct_traceframe_info_p(X)        \
  126.   target_debug_do_print (host_address_to_string (X))
  127. #define target_debug_print_struct_btrace_target_info_p(X)        \
  128.   target_debug_do_print (host_address_to_string (X))
  129. #define target_debug_print_VEC__btrace_block_s__pp(X)        \
  130.   target_debug_do_print (host_address_to_string (X))
  131. #define target_debug_print_const_struct_frame_unwind_p(X)        \
  132.   target_debug_do_print (host_address_to_string (X))

  133. static void
  134. target_debug_print_struct_target_waitstatus_p (struct target_waitstatus *status)
  135. {
  136.   char *str = target_waitstatus_to_string (status);

  137.   fputs_unfiltered (str, gdb_stdlog);
  138.   xfree (str);
  139. }



  140. /* Macros or functions that are used via TARGET_DEBUG_PRINTER.  */

  141. #define target_debug_print_step(X) \
  142.   target_debug_do_print ((X) ? "step" : "continue")

  143. static void
  144. target_debug_print_options (int options)
  145. {
  146.   char *str = target_options_to_string (options);

  147.   fputs_unfiltered (str, gdb_stdlog);
  148.   xfree (str);
  149. }

  150. static void
  151. target_debug_print_signals (unsigned char *sigs)
  152. {
  153.   fputs_unfiltered ("{", gdb_stdlog);
  154.   if (sigs != NULL)
  155.     {
  156.       int i;

  157.       for (i = 0; i < GDB_SIGNAL_LAST; i++)
  158.         if (sigs[i])
  159.           fprintf_unfiltered (gdb_stdlog, " %s", gdb_signal_to_name (i));
  160.     }
  161.   fputs_unfiltered (" }", gdb_stdlog);
  162. }

  163. #endif /* TARGET_DEBUG_H */