ports/emulators/qemu-devel/files/extra-patch-bsd-user-arm-signal
Juergen Lock bccbf3e27f - bsd-user: add posix-openpt syscall and TIOCPTMASTER/TIOCPKT ioctl
handling.  (this fixes sysutils/screen) [1]
- arm-bsd-user: fix sigreturn frame handling. [2]
- Bump PORTREVISION.

Submitted by:	kan [1], sson [2]
2014-06-27 18:31:19 +00:00

51 lines
2 KiB
Text

diff --git a/bsd-user/arm/target_arch_signal.h b/bsd-user/arm/target_arch_signal.h
index 048bd4f..0b14b0b 100644
--- a/bsd-user/arm/target_arch_signal.h
+++ b/bsd-user/arm/target_arch_signal.h
@@ -47,7 +47,7 @@
#define TARGET_INSN_SIZE 4 /* arm instruction size */
/* Size of the signal trampolin code. See _sigtramp(). */
-#define TARGET_SZSIGCODE ((abi_ulong)(8 * TARGET_INSN_SIZE))
+#define TARGET_SZSIGCODE ((abi_ulong)(9 * TARGET_INSN_SIZE))
/* compare to arm/include/_limits.h */
#define TARGET_MINSIGSTKSZ (1024 * 4) /* min sig stack size */
@@ -248,7 +248,7 @@ static inline abi_long get_ucontext_sigreturn(CPUARMState *regs,
return -TARGET_EINVAL;
}
- *target_uc = target_sf + offsetof(struct target_sigframe, sf_uc);
+ *target_uc = target_sf;
return 0;
}
diff --git a/bsd-user/arm/target_arch_sigtramp.h b/bsd-user/arm/target_arch_sigtramp.h
index 98dc313..5b7424c 100644
--- a/bsd-user/arm/target_arch_sigtramp.h
+++ b/bsd-user/arm/target_arch_sigtramp.h
@@ -15,16 +15,17 @@ static inline abi_long setup_sigtramp(abi_ulong offset, unsigned sigf_uc,
*/
uint32_t sigtramp_code[] = {
/* 1 */ 0xE1A0000D, /* mov r0, sp */
- /* 2 */ 0xE59F700C, /* ldr r7, [pc, #12] */
- /* 3 */ 0xEF000000 + sys_sigreturn, /* swi (SYS_sigreturn) */
- /* 4 */ 0xE59F7008, /* ldr r7, [pc, #8] */
- /* 5 */ 0xEF000000 + sys_exit, /* swi (SYS_exit)*/
- /* 6 */ 0xEAFFFFFA, /* b . -16 */
- /* 7 */ sys_sigreturn,
- /* 8 */ sys_exit
+ /* 2 */ 0xE2800000 + sigf_uc, /* add r0, r0, #SIGF_UC */
+ /* 3 */ 0xE59F700C, /* ldr r7, [pc, #12] */
+ /* 4 */ 0xEF000000 + sys_sigreturn, /* swi (SYS_sigreturn) */
+ /* 5 */ 0xE59F7008, /* ldr r7, [pc, #8] */
+ /* 6 */ 0xEF000000 + sys_exit, /* swi (SYS_exit)*/
+ /* 7 */ 0xEAFFFFFA, /* b . -16 */
+ /* 8 */ sys_sigreturn,
+ /* 9 */ sys_exit
};
- for (i = 0; i < 8; i++) {
+ for (i = 0; i < 9; i++) {
tswap32s(&sigtramp_code[i]);
}