Add `set print repeats' tests for C/C++ arrays
[binutils-gdb.git] / gdb / remote.h
index de582a2dd4cb49a763bfe7715f83dd9d962c73d0..638ffc2e337c1c5e52180c5706ed21745af0d4a5 100644 (file)
@@ -1,5 +1,5 @@
 /* Remote target communications for serial-line targets in custom GDB protocol
-   Copyright (C) 1999-2021 Free Software Foundation, Inc.
+   Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
 struct target_desc;
 struct remote_target;
 
-/* Debugging level.  0 is off, and non-zero values mean to print some debug
-   information (higher values, more information).  */
-extern int remote_debug;
+class process_stratum_target;
+
+/* True when printing "remote" debug statements is enabled.  */
+
+extern bool remote_debug;
+
+/* Print a "remote" debug statement.  */
+
+#define remote_debug_printf(fmt, ...) \
+  debug_prefixed_printf_cond (remote_debug, "remote", fmt, ##__VA_ARGS__)
+
+/* Same as the above, but don't include the function name.  */
+
+#define remote_debug_printf_nofunc(fmt, ...) \
+               debug_prefixed_printf_cond_nofunc (remote_debug, "remote", \
+                                                  fmt, ##__VA_ARGS__)
+
+/* Print "remote" enter/exit debug statements.  */
+
+#define REMOTE_SCOPED_DEBUG_ENTER_EXIT \
+  scoped_debug_enter_exit (remote_debug, "remote")
 
 /* Read a packet from the remote machine, with error checking, and
    store it in *BUF.  Resize *BUF using xrealloc if necessary to hold
@@ -61,4 +79,46 @@ extern int remote_register_number_and_offset (struct gdbarch *gdbarch,
 
 extern void remote_notif_get_pending_events (remote_target *remote,
                                             struct notif_client *np);
+extern bool remote_target_is_non_stop_p (remote_target *t);
+
+/* An abstract class that represents the set of callbacks that are made
+   from the send_remote_packet function (declared below).  */
+
+struct send_remote_packet_callbacks
+{
+  /* The SENDING callback is called once send_remote_packet has performed
+     its error checking and setup, just before the packet is sent to the
+     remote target.  BUF is the content of the packet that will be sent
+     (before any of the protocol specific prefix, suffix, or escaping is
+     applied).  */
+
+  virtual void sending (gdb::array_view<const char> &buf) = 0;
+
+  /* The RECEIVED callback is called once a reply has been received from
+     the remote target.  The content of the reply is in BUF which can't be
+     modified, and which is not guaranteed to remain valid after the
+     RECEIVED call has returned.  If you need to preserve the contents of
+     BUF then a copy should be taken.  */
+
+  virtual void received (gdb::array_view<const char> &buf) = 0;
+};
+
+/* Send BUF to the current remote target.  If BUF points to an empty
+   string, either zero length, or the first character is the null
+   character, then an error is thrown.  If the current target is not a
+   remote target then an error is thrown.
+
+   Calls CALLBACKS->sending() just before the packet is sent to the remote
+   target, and calls CALLBACKS->received() with the reply once this is
+   received from the remote target.  */
+
+extern void send_remote_packet (gdb::array_view<const char> &buf,
+                               send_remote_packet_callbacks *callbacks);
+
+
+/* Return true if TARGET is a remote, or extended-remote target, otherwise,
+   return false.  */
+
+extern bool is_remote_target (process_stratum_target *target);
+
 #endif