[Qemu-devel] [PATCH] linux-user: avoid treading on gprof's SIGPROF signals

Alex Bennée posted 1 patch 4 years, 12 months ago
Test docker-clang@ubuntu failed
Test asan failed
Test docker-mingw@fedora failed
Test checkpatch passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20190502145846.26226-1-alex.bennee@linaro.org
linux-user/signal.c | 5 +++++
1 file changed, 5 insertions(+)
[Qemu-devel] [PATCH] linux-user: avoid treading on gprof's SIGPROF signals
Posted by Alex Bennée 4 years, 12 months ago
The guest tends to get confused when it receives signals it doesn't
know about. Given the gprof magic has also set up it's own handler we
would do well to avoid stomping on it as well.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 linux-user/signal.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/linux-user/signal.c b/linux-user/signal.c
index e2c0b37173..44b2d3b35a 100644
--- a/linux-user/signal.c
+++ b/linux-user/signal.c
@@ -508,6 +508,11 @@ void signal_init(void)
     act.sa_flags = SA_SIGINFO;
     act.sa_sigaction = host_signal_handler;
     for(i = 1; i <= TARGET_NSIG; i++) {
+#ifdef TARGET_GPROF
+        if (i == SIGPROF) {
+            continue;
+        }
+#endif
         host_sig = target_to_host_signal(i);
         sigaction(host_sig, NULL, &oact);
         if (oact.sa_sigaction == (void *)SIG_IGN) {
-- 
2.20.1


Re: [Qemu-devel] [PATCH] linux-user: avoid treading on gprof's SIGPROF signals
Posted by Laurent Vivier 4 years, 12 months ago
On 02/05/2019 16:58, Alex Bennée wrote:
> The guest tends to get confused when it receives signals it doesn't
> know about. Given the gprof magic has also set up it's own handler we
> would do well to avoid stomping on it as well.
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>  linux-user/signal.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/linux-user/signal.c b/linux-user/signal.c
> index e2c0b37173..44b2d3b35a 100644
> --- a/linux-user/signal.c
> +++ b/linux-user/signal.c
> @@ -508,6 +508,11 @@ void signal_init(void)
>      act.sa_flags = SA_SIGINFO;
>      act.sa_sigaction = host_signal_handler;
>      for(i = 1; i <= TARGET_NSIG; i++) {
> +#ifdef TARGET_GPROF
> +        if (i == SIGPROF) {
> +            continue;
> +        }
> +#endif
>          host_sig = target_to_host_signal(i);
>          sigaction(host_sig, NULL, &oact);
>          if (oact.sa_sigaction == (void *)SIG_IGN) {
> 

Perhaps merge this with the previous one and send a v2: it will ease
bisecting.

Thanks,
Laurent

Re: [Qemu-devel] [PATCH] linux-user: avoid treading on gprof's SIGPROF signals
Posted by Laurent Desnogues 4 years, 12 months ago
On Thu, May 2, 2019 at 6:17 PM Laurent Vivier <laurent@vivier.eu> wrote:
>
> On 02/05/2019 16:58, Alex Bennée wrote:
> > The guest tends to get confused when it receives signals it doesn't
> > know about. Given the gprof magic has also set up it's own handler we
> > would do well to avoid stomping on it as well.
> >
> > Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> > ---
> >  linux-user/signal.c | 5 +++++
> >  1 file changed, 5 insertions(+)
> >
> > diff --git a/linux-user/signal.c b/linux-user/signal.c
> > index e2c0b37173..44b2d3b35a 100644
> > --- a/linux-user/signal.c
> > +++ b/linux-user/signal.c
> > @@ -508,6 +508,11 @@ void signal_init(void)
> >      act.sa_flags = SA_SIGINFO;
> >      act.sa_sigaction = host_signal_handler;
> >      for(i = 1; i <= TARGET_NSIG; i++) {
> > +#ifdef TARGET_GPROF
> > +        if (i == SIGPROF) {
> > +            continue;
> > +        }
> > +#endif
> >          host_sig = target_to_host_signal(i);
> >          sigaction(host_sig, NULL, &oact);
> >          if (oact.sa_sigaction == (void *)SIG_IGN) {
> >
>
> Perhaps merge this with the previous one and send a v2: it will ease
> bisecting.

I agree it would be better, though it should be noted that the signal
issue has existed for at least 8 years (that's when I had to add a
specific patch in my private repository).

Thanks,

Laurent

Re: [Qemu-devel] [PATCH] linux-user: avoid treading on gprof's SIGPROF signals
Posted by Laurent Vivier 4 years, 12 months ago
On 02/05/2019 18:27, Laurent Desnogues wrote:
> On Thu, May 2, 2019 at 6:17 PM Laurent Vivier <laurent@vivier.eu> wrote:
>>
>> On 02/05/2019 16:58, Alex Bennée wrote:
>>> The guest tends to get confused when it receives signals it doesn't
>>> know about. Given the gprof magic has also set up it's own handler we
>>> would do well to avoid stomping on it as well.
>>>
>>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>>> ---
>>>  linux-user/signal.c | 5 +++++
>>>  1 file changed, 5 insertions(+)
>>>
>>> diff --git a/linux-user/signal.c b/linux-user/signal.c
>>> index e2c0b37173..44b2d3b35a 100644
>>> --- a/linux-user/signal.c
>>> +++ b/linux-user/signal.c
>>> @@ -508,6 +508,11 @@ void signal_init(void)
>>>      act.sa_flags = SA_SIGINFO;
>>>      act.sa_sigaction = host_signal_handler;
>>>      for(i = 1; i <= TARGET_NSIG; i++) {
>>> +#ifdef TARGET_GPROF
>>> +        if (i == SIGPROF) {
>>> +            continue;
>>> +        }
>>> +#endif
>>>          host_sig = target_to_host_signal(i);
>>>          sigaction(host_sig, NULL, &oact);
>>>          if (oact.sa_sigaction == (void *)SIG_IGN) {
>>>
>>
>> Perhaps merge this with the previous one and send a v2: it will ease
>> bisecting.
> 
> I agree it would be better, though it should be noted that the signal
> issue has existed for at least 8 years (that's when I had to add a
> specific patch in my private repository).

I can also apply the second first, and the first then...

Thanks,
Laurent


Re: [Qemu-devel] [PATCH] linux-user: avoid treading on gprof's SIGPROF signals
Posted by Laurent Vivier 4 years, 11 months ago
On 02/05/2019 16:58, Alex Bennée wrote:
> The guest tends to get confused when it receives signals it doesn't
> know about. Given the gprof magic has also set up it's own handler we
> would do well to avoid stomping on it as well.
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   linux-user/signal.c | 5 +++++
>   1 file changed, 5 insertions(+)
> 
> diff --git a/linux-user/signal.c b/linux-user/signal.c
> index e2c0b37173..44b2d3b35a 100644
> --- a/linux-user/signal.c
> +++ b/linux-user/signal.c
> @@ -508,6 +508,11 @@ void signal_init(void)
>       act.sa_flags = SA_SIGINFO;
>       act.sa_sigaction = host_signal_handler;
>       for(i = 1; i <= TARGET_NSIG; i++) {
> +#ifdef TARGET_GPROF
> +        if (i == SIGPROF) {
> +            continue;
> +        }
> +#endif
>           host_sig = target_to_host_signal(i);
>           sigaction(host_sig, NULL, &oact);
>           if (oact.sa_sigaction == (void *)SIG_IGN) {
> 

Applied to my linux-user branch.

Thanks,
Laurent