linux-user/main.c: Remove redundant end_exclusive()
PATCH 1/1 linux-user/main.c: Remove redundant end_exclusive()
start/end_exclusive() need be pairs, except the start_exclusive() in stop_all_tasks() which is only used by force_sig(), which will be abort. So at present, start_exclusive() in stop_all_task() need not be paired.
So need remove end_exclusive() after queue_signal(). If could really return from queue_signal(), which meant stop_all_task() is not called ( at least, not called in time), the next end_exclusive() would be issue.
Also use TARGET_SIGSEGV instead of SIGSEGV, since queue_signal() is for TARGET_*, at present, queue_signal() is a normal function which may call force_sig(), or return (may kill pid or queue signal, then return).
--- linux-user/main.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
linux-user/main.c +1 -3
@@ -517,14 +517,12 @@ segv:end_exclusive ();/* We get the PC of the entry address - which is as good as anything, on a real kernel what you get depends on which mode it uses. */ - info.si_signo =SIGSEGV ; + info.si_signo =TARGET_SIGSEGV ; info.si_errno =0 ;/* XXX: check env->error_code */ info.si_code =TARGET_SEGV_MAPERR ; info._sifields._sigfault._addr = env->exception.vaddress;queue_signal (env, info.si_signo, &info); - -end_exclusive (); }/* Handle a jump to the kernel code page. */
Signature · 1 line
1.9.3 (Apple Git-50)
Quoted 11 lines · Chen Gang S
start/end_exclusive() need be pairs, except the
start_exclusive()instop_all_tasks()which is only used byforce_sig(), which will be abort. So at present,start_exclusive()instop_all_task()need not be paired.So need remove
end_exclusive()afterqueue_signal(). If could really return fromqueue_signal(), which meantstop_all_task()is not called ( at least, not called in time), the nextend_exclusive()would be issue.Also use
TARGET_SIGSEGVinstead of SIGSEGV, sincequeue_signal()is for TARGET_*, at present,queue_signal()is a normal function which may callforce_sig(), or return (may kill pid or queue signal, then return).
It would be helpful to mention the affected target architecture (and/or function name) in the commit message, because main.c covers a lot of ground.
Quoted 10 lines
Signed-off-by Chen Gang <[email protected]>--- linux-user/main.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)linux-user/main.c +0
-0
linux-user/main.c segv: · line 520
Quoted 5 lines
linux-user/main.c +1
-1@@ -517,14 +517,12 @@ segv:end_exclusive ();/* We get the PC of the entry address - which is as good as anything, on a real kernel what you get depends on which mode it uses. */ - info.si_signo =SIGSEGV ; + info.si_signo =TARGET_SIGSEGV ;
I think this is a correct bug fix, but it's not really related to the main point of the patch (fixing end_exclusive()) and there are actually a lot of instances of it in this file and possibly others. Could you fix it (and those others) in a separate patch, please?
linux-user/main.c segv: · line 526
Quoted 8 lines
linux-user/main.c +0
-2info.si_errno =0 ;/* XXX: check env->error_code */ info.si_code =TARGET_SEGV_MAPERR ; info._sifields._sigfault._addr = env->exception.vaddress;queue_signal (env, info.si_signo, &info); - -end_exclusive (); }
This change is correct.
thanks
-- PMM
Quoted 9 lines · Peter Maydell
Quoted 8 lines · Chen Gang S
start/end_exclusive() need be pairs, except the
start_exclusive()instop_all_tasks()which is only used byforce_sig(), which will be abort. So at present,start_exclusive()instop_all_task()need not be paired.So need remove
end_exclusive()afterqueue_signal(). If could really return fromqueue_signal(), which meantstop_all_task()is not called ( at least, not called in time), the nextend_exclusive()would be issue.
Quoted 8 lines
Quoted 3 lines
Also use
TARGET_SIGSEGVinstead of SIGSEGV, sincequeue_signal()is for TARGET_*, at present,queue_signal()is a normal function which may callforce_sig(), or return (may kill pid or queue signal, then return).It would be helpful to mention the affected target architecture (and/or function name) in the commit message, because
main.ccovers a lot of ground.
OK, thanks, I shall notice about it, next.
Quoted 5 lines
Quoted 5 lines
Signed-off-by Chen Gang <[email protected]>--- linux-user/main.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
Quoted 17 lines
linux-user/main.c segv: · line 520
Quoted 10 lines
linux-user/main.c +1
-1@@ -517,14 +517,12 @@ segv:end_exclusive ();/* We get the PC of the entry address - which is as good as anything, on a real kernel what you get depends on which mode it uses. */ - info.si_signo =SIGSEGV ; + info.si_signo =TARGET_SIGSEGV ;I think this is a correct bug fix, but it's not really related to the main point of the patch (fixing
end_exclusive()) and there are actually a lot of instances of it in this file and possibly others. Could you fix it (and those others) in a separate patch, please?
OK, thanks, I shall send related patch for it within 2 days.
Quoted 11 lines
linux-user/main.c segv: · line 526
Quoted 8 lines
linux-user/main.c +0
-2info.si_errno =0 ;/* XXX: check env->error_code */ info.si_code =TARGET_SEGV_MAPERR ; info._sifields._sigfault._addr = env->exception.vaddress;queue_signal (env, info.si_signo, &info); - -end_exclusive (); }This change is correct.
OK, thanks.
Signature · 3 lines
Chen Gang Open, share, and attitude like air, water, and life which God blessed