[Qemu-devel] [PATCH] linux-user: fix GPROF build failure

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/20190502092728.32727-1-alex.bennee@linaro.org
linux-user/exit.c    | 3 +++
linux-user/syscall.c | 3 ---
2 files changed, 3 insertions(+), 3 deletions(-)
[Qemu-devel] [PATCH] linux-user: fix GPROF build failure
Posted by Alex Bennée 4 years, 12 months ago
When linux-user/exit was introduced we failed to move the gprof
include at the same time. The CI didn't notice because it only builds
system emulation. Fix it for those that still find gprof useful.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 linux-user/exit.c    | 3 +++
 linux-user/syscall.c | 3 ---
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/linux-user/exit.c b/linux-user/exit.c
index 14e94e28fa..bdda720553 100644
--- a/linux-user/exit.c
+++ b/linux-user/exit.c
@@ -18,6 +18,9 @@
  */
 #include "qemu/osdep.h"
 #include "qemu.h"
+#ifdef TARGET_GPROF
+#include <sys/gmon.h>
+#endif
 
 #ifdef CONFIG_GCOV
 extern void __gcov_dump(void);
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 96cd4bf86d..f2d9883aef 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -59,9 +59,6 @@
 #ifdef CONFIG_TIMERFD
 #include <sys/timerfd.h>
 #endif
-#ifdef TARGET_GPROF
-#include <sys/gmon.h>
-#endif
 #ifdef CONFIG_EVENTFD
 #include <sys/eventfd.h>
 #endif
-- 
2.20.1


Re: [Qemu-devel] [PATCH] linux-user: fix GPROF build failure
Posted by Laurent Desnogues 4 years, 12 months ago
Hello,

On Thu, May 2, 2019 at 11:31 AM Alex Bennée <alex.bennee@linaro.org> wrote:
>
> When linux-user/exit was introduced we failed to move the gprof
> include at the same time. The CI didn't notice because it only builds
> system emulation. Fix it for those that still find gprof useful.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

Tested-by: Laurent Desnogues <laurent.desnogues@gmail.com>

Thanks,

Laurent

> ---
>  linux-user/exit.c    | 3 +++
>  linux-user/syscall.c | 3 ---
>  2 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/linux-user/exit.c b/linux-user/exit.c
> index 14e94e28fa..bdda720553 100644
> --- a/linux-user/exit.c
> +++ b/linux-user/exit.c
> @@ -18,6 +18,9 @@
>   */
>  #include "qemu/osdep.h"
>  #include "qemu.h"
> +#ifdef TARGET_GPROF
> +#include <sys/gmon.h>
> +#endif
>
>  #ifdef CONFIG_GCOV
>  extern void __gcov_dump(void);
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index 96cd4bf86d..f2d9883aef 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -59,9 +59,6 @@
>  #ifdef CONFIG_TIMERFD
>  #include <sys/timerfd.h>
>  #endif
> -#ifdef TARGET_GPROF
> -#include <sys/gmon.h>
> -#endif
>  #ifdef CONFIG_EVENTFD
>  #include <sys/eventfd.h>
>  #endif
> --
> 2.20.1
>
>

Re: [Qemu-devel] [PATCH] linux-user: fix GPROF build failure
Posted by Alex Bennée 4 years, 12 months ago
Laurent Desnogues <laurent.desnogues@gmail.com> writes:

> Hello,
>
> On Thu, May 2, 2019 at 11:31 AM Alex Bennée <alex.bennee@linaro.org> wrote:
>>
>> When linux-user/exit was introduced we failed to move the gprof
>> include at the same time. The CI didn't notice because it only builds
>> system emulation. Fix it for those that still find gprof useful.
>>
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>
> Tested-by: Laurent Desnogues <laurent.desnogues@gmail.com>

Sadly running programs then fails because of the SIG_PROF signal getting
passed to the guest. I wonder how this ever worked?

--
Alex Bennée

[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

Re: [Qemu-devel] [PATCH] linux-user: fix GPROF build failure
Posted by Laurent Vivier 4 years, 11 months ago
On 02/05/2019 11:27, Alex Bennée wrote:
> When linux-user/exit was introduced we failed to move the gprof
> include at the same time. The CI didn't notice because it only builds
> system emulation. Fix it for those that still find gprof useful.
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   linux-user/exit.c    | 3 +++
>   linux-user/syscall.c | 3 ---
>   2 files changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/linux-user/exit.c b/linux-user/exit.c
> index 14e94e28fa..bdda720553 100644
> --- a/linux-user/exit.c
> +++ b/linux-user/exit.c
> @@ -18,6 +18,9 @@
>    */
>   #include "qemu/osdep.h"
>   #include "qemu.h"
> +#ifdef TARGET_GPROF
> +#include <sys/gmon.h>
> +#endif
>   
>   #ifdef CONFIG_GCOV
>   extern void __gcov_dump(void);
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index 96cd4bf86d..f2d9883aef 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -59,9 +59,6 @@
>   #ifdef CONFIG_TIMERFD
>   #include <sys/timerfd.h>
>   #endif
> -#ifdef TARGET_GPROF
> -#include <sys/gmon.h>
> -#endif
>   #ifdef CONFIG_EVENTFD
>   #include <sys/eventfd.h>
>   #endif
> 

Applied to my linux-user branch.

Thanks,
Laurent