aboutsummaryrefslogtreecommitdiff
path: root/gdb/extension.h
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@polymtl.ca>2024-04-23 09:22:56 -0400
committerSimon Marchi <simon.marchi@polymtl.ca>2024-04-23 11:26:14 -0400
commit7d21eff9442d75c2b1d4beec1120115bf252dfdf (patch)
tree815188f7ddb2d647674e2b278fd0d457b18005ae /gdb/extension.h
parenteb97e68430f51fc120db4cde03abdffb0303f8ae (diff)
downloadbinutils-7d21eff9442d75c2b1d4beec1120115bf252dfdf.zip
binutils-7d21eff9442d75c2b1d4beec1120115bf252dfdf.tar.gz
binutils-7d21eff9442d75c2b1d4beec1120115bf252dfdf.tar.bz2
gdb: move declarations of check_quit_flag and set_quit_flag to extension.h
Move them out of defs.h, to extension.h, since the implementations are in extension.c. Change-Id: Ie7321468bd7fecc684d70b09f72c3ee8ac75d8f4 Approved-By: Tom Tromey <tom@tromey.com>
Diffstat (limited to 'gdb/extension.h')
-rw-r--r--gdb/extension.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/gdb/extension.h b/gdb/extension.h
index 9ba1299..94a500d 100644
--- a/gdb/extension.h
+++ b/gdb/extension.h
@@ -429,4 +429,34 @@ private:
bool m_prev_cooperative_sigint_handling_disabled;
};
+/* GDB's SIGINT handler basically sets a flag; code that might take a
+ long time before it gets back to the event loop, and which ought to
+ be interruptible, checks this flag using the QUIT macro, which, if
+ GDB has the terminal, throws a quit exception.
+
+ In addition to setting a flag, the SIGINT handler also marks a
+ select/poll-able file descriptor as read-ready. That is used by
+ interruptible_select in order to support interrupting blocking I/O
+ in a race-free manner.
+
+ These functions use the extension_language_ops API to allow extension
+ language(s) and GDB SIGINT handling to coexist seamlessly. */
+
+/* Return true if the quit flag has been set, false otherwise.
+ Note: The flag is cleared as a side-effect.
+ The flag is checked in all extension languages that support cooperative
+ SIGINT handling, not just the current one. This simplifies transitions. */
+
+extern int check_quit_flag ();
+
+/* Set the quit flag.
+ This only sets the flag in the currently active extension language.
+ If the currently active extension language does not have cooperative
+ SIGINT handling, then GDB's global flag is set, and it is up to the
+ extension language to call check_quit_flag. The extension language
+ is free to install its own SIGINT handler, but we still need to handle
+ the transition. */
+
+extern void set_quit_flag ();
+
#endif /* EXTENSION_H */