mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

When not using ptrace, we need to both save and restore registers through the mcontext as provided by the host kernel to our signal handlers. Add corresponding functions to store the state to an mcontext and helpers to access the mcontext of the subprocess through the stub data. Signed-off-by: Benjamin Berg <benjamin@sipsolutions.net> Signed-off-by: Benjamin Berg <benjamin.berg@intel.com> Link: https://patch.msgid.link/20250602130052.545733-4-benjamin@sipsolutions.net Signed-off-by: Johannes Berg <johannes.berg@intel.com>
40 lines
953 B
C
40 lines
953 B
C
/*
|
|
* Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
|
|
* Licensed under the GPL
|
|
*/
|
|
|
|
#ifndef __SYS_SIGCONTEXT_X86_H
|
|
#define __SYS_SIGCONTEXT_X86_H
|
|
|
|
#include <stub-data.h>
|
|
|
|
extern void get_regs_from_mc(struct uml_pt_regs *, mcontext_t *);
|
|
extern void get_mc_from_regs(struct uml_pt_regs *regs, mcontext_t *mc,
|
|
int single_stepping);
|
|
|
|
extern int get_stub_state(struct uml_pt_regs *regs, struct stub_data *data,
|
|
unsigned long *fp_size_out);
|
|
extern int set_stub_state(struct uml_pt_regs *regs, struct stub_data *data,
|
|
int single_stepping);
|
|
|
|
#ifdef __i386__
|
|
|
|
#define GET_FAULTINFO_FROM_MC(fi, mc) \
|
|
{ \
|
|
(fi).cr2 = (mc)->cr2; \
|
|
(fi).error_code = (mc)->gregs[REG_ERR]; \
|
|
(fi).trap_no = (mc)->gregs[REG_TRAPNO]; \
|
|
}
|
|
|
|
#else
|
|
|
|
#define GET_FAULTINFO_FROM_MC(fi, mc) \
|
|
{ \
|
|
(fi).cr2 = (mc)->gregs[REG_CR2]; \
|
|
(fi).error_code = (mc)->gregs[REG_ERR]; \
|
|
(fi).trap_no = (mc)->gregs[REG_TRAPNO]; \
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|