summary refs log tree commit diff stats
path: root/linux-user/signal-common.h
diff options
context:
space:
mode:
authorIlya Leoshkevich <iii@linux.ibm.com>2024-10-30 00:17:47 +0100
committerRichard Henderson <richard.henderson@linaro.org>2024-11-05 10:36:08 +0000
commitc107521e0ee9ea1744f674a79d02d3d5ea2ba98c (patch)
treeaf3793e5dc52a2d96aeb3fc1143146cc173e7ef1 /linux-user/signal-common.h
parent6e9dcfb906f734b1e5b44d4ca2fac0a87bbac777 (diff)
downloadfocaccia-qemu-c107521e0ee9ea1744f674a79d02d3d5ea2ba98c.tar.gz
focaccia-qemu-c107521e0ee9ea1744f674a79d02d3d5ea2ba98c.zip
linux-user: Allow custom rt signal mappings
Some applications want to use low priority realtime signals (e.g.,
SIGRTMAX). Currently QEMU cannot map all target realtime signals to
host realtime signals, and chooses to sacrifice the end of the target
realtime signal range.

Allow users to choose how to map target realtime signals to host
realtime signals using the new -t option, the new QEMU_RTSIG_MAP
environment variable, and the new -Drtsig_map=\"...\" meson flag.
To simplify things, the meson flag is not per-target, because the
intended use case is app-specific qemu-user builds.

The mapping is specified using the "tsig hsig count[,...]" syntax.
Target realtime signals [tsig,tsig+count) are mapped to host realtime
signals [hsig,hsig+count). Care is taken to avoid double and
out-of-range mappings.

Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-ID: <20241029232211.206766-2-iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'linux-user/signal-common.h')
-rw-r--r--linux-user/signal-common.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/linux-user/signal-common.h b/linux-user/signal-common.h
index f4cbe6185e..8584d9ecc2 100644
--- a/linux-user/signal-common.h
+++ b/linux-user/signal-common.h
@@ -56,7 +56,7 @@ void setup_rt_frame(int sig, struct target_sigaction *ka,
                     target_sigset_t *set, CPUArchState *env);
 
 void process_pending_signals(CPUArchState *cpu_env);
-void signal_init(void);
+void signal_init(const char *rtsig_map);
 void queue_signal(CPUArchState *env, int sig, int si_type,
                   target_siginfo_t *info);
 void host_to_target_siginfo(target_siginfo_t *tinfo, const siginfo_t *info);