Add tests for PR ld/16452 and PR ld/16457
[platform/upstream/binutils.git] / gdb / target-debug.h
1 /* GDB target debugging macros
2
3    Copyright (C) 2014 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #ifndef TARGET_DEBUG_H
21 #define TARGET_DEBUG_H
22
23 /* Printers for the debug target.  Each prints an object of a given
24    type to a string that needn't be freed.  Most printers are macros,
25    for brevity, but a few are static functions where more complicated
26    behavior is needed.
27
28    References to these printers are automatically generated by
29    make-target-delegates.  See the generated file target-delegates.c.
30
31    In a couple cases, a special printing function is defined and then
32    used via the TARGET_DEBUG_PRINTER macro.  See target.h.
33
34    A few methods still have some explicit targetdebug code in
35    target.c.  In most cases this is because target delegation hasn't
36    been done for the method; but individual cases vary.  For instance,
37    target_store_registers does some special register printing that is
38    more simply done there, and target_xfer_partial additionally
39    bypasses the debug target.  */
40
41
42 /* Helper macro.  */
43
44 #define target_debug_do_print(E)                        \
45   fputs_unfiltered ((E), gdb_stdlog);
46
47 #define target_debug_print_struct_target_ops_p(X)       \
48   target_debug_do_print (host_address_to_string (X))
49 #define target_debug_print_enum_target_object(X)        \
50   target_debug_do_print (plongest (X))
51 #define target_debug_print_CORE_ADDR(X)         \
52   target_debug_do_print (core_addr_to_string (X))
53 #define target_debug_print_const_char_p(X)      \
54   target_debug_do_print (((X) ? (X) : "(null)"))
55 #define target_debug_print_char_p(X)            \
56   target_debug_do_print (((X) ? (X) : "(null)"))
57 #define target_debug_print_int(X)               \
58   target_debug_do_print (plongest (X))
59 #define target_debug_print_long(X)              \
60   target_debug_do_print (plongest (X))
61 #define target_debug_print_enum_target_xfer_status(X)   \
62   target_debug_do_print (plongest (X))
63 #define target_debug_print_enum_exec_direction_kind(X)  \
64   target_debug_do_print (plongest (X))
65 #define target_debug_print_enum_trace_find_type(X)      \
66   target_debug_do_print (plongest (X))
67 #define target_debug_print_enum_btrace_read_type(X)     \
68   target_debug_do_print (plongest (X))
69 #define target_debug_print_enum_btrace_error(X) \
70   target_debug_do_print (plongest (X))
71 #define target_debug_print_ptid_t(X)            \
72   target_debug_do_print (plongest (ptid_get_pid (X)))
73 #define target_debug_print_struct_gdbarch_p(X)  \
74   target_debug_do_print (gdbarch_bfd_arch_info (X)->printable_name)
75 #define target_debug_print_const_gdb_byte_p(X)  \
76   target_debug_do_print (host_address_to_string (X))
77 #define target_debug_print_gdb_byte_p(X)        \
78   target_debug_do_print (host_address_to_string (X))
79 #define target_debug_print_gdb_byte_pp(X)       \
80   target_debug_do_print (host_address_to_string (*(X)))
81 #define target_debug_print_enum_gdb_signal(X)   \
82   target_debug_do_print (gdb_signal_to_name (X))
83 #define target_debug_print_ULONGEST(X)          \
84   target_debug_do_print (hex_string (X))
85 #define target_debug_print_ULONGEST_p(X)        \
86   target_debug_do_print (hex_string (*(X)))
87 #define target_debug_print_LONGEST(X)           \
88   target_debug_do_print (phex (X, 0))
89 #define target_debug_print_LONGEST_p(X)         \
90   target_debug_do_print (phex (*(X), 0))
91 #define target_debug_print_struct_address_space_p(X)    \
92   target_debug_do_print (plongest (address_space_num (X)))
93 #define target_debug_print_struct_bp_target_info_p(X)   \
94   target_debug_do_print (core_addr_to_string ((X)->placed_address))
95 #define target_debug_print_struct_expression_p(X)       \
96   target_debug_do_print (host_address_to_string (X))
97 #define target_debug_print_CORE_ADDR_p(X)       \
98   target_debug_do_print (core_addr_to_string (*(X)))
99 #define target_debug_print_int_p(X)             \
100   target_debug_do_print (plongest (*(X)))
101 #define target_debug_print_struct_regcache_p(X) \
102   target_debug_do_print (host_address_to_string (X))
103 #define target_debug_print_struct_thread_info_p(X)      \
104   target_debug_do_print (host_address_to_string (X))
105 #define target_debug_print_struct_ui_file_p(X)  \
106   target_debug_do_print (host_address_to_string (X))
107 #define target_debug_print_struct_target_section_table_p(X)     \
108   target_debug_do_print (host_address_to_string (X))
109 #define target_debug_print_async_callback_ftype_p(X) \
110   target_debug_do_print (host_address_to_string (X))
111 #define target_debug_print_void_p(X) \
112   target_debug_do_print (host_address_to_string (X))
113 #define target_debug_print_find_memory_region_ftype(X) \
114   target_debug_do_print (host_address_to_string (X))
115 #define target_debug_print_bfd_p(X) \
116   target_debug_do_print (host_address_to_string (X))
117 #define target_debug_print_VEC_mem_region_s__p(X)       \
118   target_debug_do_print (host_address_to_string (X))
119 #define target_debug_print_VEC_static_tracepoint_marker_p__p(X) \
120   target_debug_do_print (host_address_to_string (X))
121 #define target_debug_print_const_struct_target_desc_p(X)        \
122   target_debug_do_print (host_address_to_string (X))
123 #define target_debug_print_struct_bp_location_p(X)      \
124   target_debug_do_print (host_address_to_string (X))
125 #define target_debug_print_struct_trace_state_variable_p(X)     \
126   target_debug_do_print (host_address_to_string (X))
127 #define target_debug_print_struct_trace_status_p(X)     \
128   target_debug_do_print (host_address_to_string (X))
129 #define target_debug_print_struct_breakpoint_p(X)       \
130   target_debug_do_print (host_address_to_string (X))
131 #define target_debug_print_struct_uploaded_tp_p(X)      \
132   target_debug_do_print (host_address_to_string (X))
133 #define target_debug_print_struct_uploaded_tp_pp(X)     \
134   target_debug_do_print (host_address_to_string (X))
135 #define target_debug_print_struct_uploaded_tsv_pp(X)    \
136   target_debug_do_print (host_address_to_string (X))
137 #define target_debug_print_struct_static_tracepoint_marker_p(X) \
138   target_debug_do_print (host_address_to_string (X))
139 #define target_debug_print_struct_traceframe_info_p(X)  \
140   target_debug_do_print (host_address_to_string (X))
141 #define target_debug_print_struct_btrace_target_info_p(X)       \
142   target_debug_do_print (host_address_to_string (X))
143 #define target_debug_print_VEC__btrace_block_s__pp(X)   \
144   target_debug_do_print (host_address_to_string (X))
145 #define target_debug_print_const_struct_frame_unwind_p(X)       \
146   target_debug_do_print (host_address_to_string (X))
147
148 static void
149 target_debug_print_struct_target_waitstatus_p (struct target_waitstatus *status)
150 {
151   char *str = target_waitstatus_to_string (status);
152
153   fputs_unfiltered (str, gdb_stdlog);
154   xfree (str);
155 }
156
157 \f
158
159 /* Macros or functions that are used via TARGET_DEBUG_PRINTER.  */
160
161 #define target_debug_print_step(X) \
162   target_debug_do_print ((X) ? "step" : "continue")
163
164 static void
165 target_debug_print_options (int options)
166 {
167   char *str = target_options_to_string (options);
168
169   fputs_unfiltered (str, gdb_stdlog);
170   xfree (str);
171 }
172
173 static void
174 target_debug_print_signals (unsigned char *sigs)
175 {
176   fputs_unfiltered ("{", gdb_stdlog);
177   if (sigs != NULL)
178     {
179       int i;
180
181       for (i = 0; i < GDB_SIGNAL_LAST; i++)
182         if (sigs[i])
183           fprintf_unfiltered (gdb_stdlog, " %s", gdb_signal_to_name (i));
184     }
185   fputs_unfiltered (" }", gdb_stdlog);
186 }
187
188 #endif /* TARGET_DEBUG_H */