tst->arch.vex.guest_R0 = sigNo;
if (flags & VKI_SA_RESTORER)
- tst->arch.vex.guest_R14 = (Addr) restorer;
+ tst->arch.vex.guest_R14 = (Addr)restorer;
+ else
+ tst->arch.vex.guest_R14
+ = (flags & VKI_SA_SIGINFO)
+ ? (Addr)&VG_(arm_linux_SUBST_FOR_rt_sigreturn)
+ : (Addr)&VG_(arm_linux_SUBST_FOR_sigreturn);
tst->arch.vex.guest_R15T = (Addr) handler; /* R15 == PC */
}
.global VG_(trampoline_stuff_start)
VG_(trampoline_stuff_start):
+.global VG_(arm_linux_SUBST_FOR_sigreturn)
+.type VG_(arm_linux_SUBST_FOR_sigreturn),#function
+VG_(arm_linux_SUBST_FOR_sigreturn):
+ mov r7, # __NR_sigreturn
+ svc #0
+ .long 0xFFFFFFFF /*illegal insn*/
+.size VG_(arm_linux_SUBST_FOR_sigreturn), .-VG_(arm_linux_SUBST_FOR_sigreturn)
+
+.global VG_(arm_linux_SUBST_FOR_rt_sigreturn)
+.type VG_(arm_linux_SUBST_FOR_rt_sigreturn),#function
+VG_(arm_linux_SUBST_FOR_rt_sigreturn):
+ mov r7, # __NR_rt_sigreturn
+ svc #0
+ .long 0xFFFFFFFF /*illegal insn*/
+.size VG_(arm_linux_SUBST_FOR_rt_sigreturn), .-VG_(arm_linux_SUBST_FOR_rt_sigreturn)
+
.global VG_(arm_linux_REDIR_FOR_strlen)
VG_(arm_linux_REDIR_FOR_strlen):
mov r2, r0
#endif
#if defined(VGP_arm_linux)
+extern Addr VG_(arm_linux_SUBST_FOR_sigreturn);
+extern Addr VG_(arm_linux_SUBST_FOR_rt_sigreturn);
extern UInt VG_(arm_linux_REDIR_FOR_strlen)( void* );
//extern void* VG_(arm_linux_REDIR_FOR_index) ( void*, Int );
extern void* VG_(arm_linux_REDIR_FOR_memcpy)( void*, void*, Int );