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>
46 lines
1.5 KiB
C
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
|