Files
qemu/linux-user/sh4/vdso-asmoffset.h
Matt Turner 975bd51a88 linux-user/sh4: add VDSO support for sh4 and sh4eb
Provides replacement VDSO with sigreturn trampolines
(__kernel_sigreturn, __kernel_rt_sigreturn) and syscall stubs
(clock_gettime, clock_gettime64, clock_getres, gettimeofday).

Both LE and BE blobs are committed and selected at compile time via
TARGET_BIG_ENDIAN. The BE variant requires an sh4eb-unknown-linux-gnu
toolchain; sh4-unknown-linux-gnu does not support -mb.

CFI register numbers follow GCC's SH_DEBUGGER_REGNO:
PR=17, GBR=18, MACH=20, MACL=21, FPUL=23, FPSCR=24, FR0-15=25-40.

Signed-off-by: Matt Turner <mattst88@gmail.com>
Signed-off-by: Helge Deller <deller@gmx.de>
2026-05-24 15:07:28 +02:00

46 lines
1.5 KiB
C

/*
* Offsets into target signal frames for sh4 vdso.
*
* From linux-user/sh4/signal.c:
*
* struct target_sigcontext {
* target_ulong oldmask; // 0
* target_ulong sc_gregs[16]; // 4
* target_ulong sc_pc; // 68
* target_ulong sc_pr; // 72
* target_ulong sc_sr; // 76
* target_ulong sc_gbr; // 80
* target_ulong sc_mach; // 84
* target_ulong sc_macl; // 88
* target_ulong sc_fpregs[16]; // 92
* target_ulong sc_xfpregs[16]; // 156
* unsigned int sc_fpscr; // 220
* unsigned int sc_fpul; // 224
* unsigned int sc_ownedfp; // 228
* }; // sizeof = 232
*
* struct sigframe { sigcontext sc; ... }
* struct rt_sigframe { siginfo info[128]; ucontext uc; }
* ucontext = { flags[4], link[4], stack[12], sigcontext mcontext; ... }
* => mcontext at rt_sigframe + 128 + 20 = rt_sigframe + 148
*/
/* Offset of sigcontext within sigframe (CFA base for sigreturn). */
#define SIGFRAME_SC_OFFSET 0
/* Offset of tuc_mcontext within rt_sigframe (CFA base for rt_sigreturn). */
#define RT_SIGFRAME_SC_OFFSET 148
/* Offsets within struct sigcontext. */
#define SC_GREGS 4
#define SC_PC 68
#define SC_PR 72
#define SC_SR 76
#define SC_GBR 80
#define SC_MACH 84
#define SC_MACL 88
#define SC_FPREGS 92
#define SC_XFPREGS 156
#define SC_FPSCR 220
#define SC_FPUL 224