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
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 > >
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
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
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
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
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
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
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
© 2016 - 2024 Red Hat, Inc.