[Qemu-devel] [PATCH v1 10/10] linux-user: add gcov support to preexit_cleanup

Alex Bennée posted 10 patches 7 years, 4 months ago
[Qemu-devel] [PATCH v1 10/10] linux-user: add gcov support to preexit_cleanup
Posted by Alex Bennée 7 years, 4 months ago
As we don't always take the normal exit path when running a guest we
can skip the normal exit destructors where gcov normally dumps it's
info. The GCC manual suggests long running programs use __gcov_dump()
to flush out the coverage state periodically so we use that here.

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

diff --git a/linux-user/exit.c b/linux-user/exit.c
index aed8713fae..14e94e28fa 100644
--- a/linux-user/exit.c
+++ b/linux-user/exit.c
@@ -19,10 +19,17 @@
 #include "qemu/osdep.h"
 #include "qemu.h"
 
+#ifdef CONFIG_GCOV
+extern void __gcov_dump(void);
+#endif
+
 void preexit_cleanup(CPUArchState *env, int code)
 {
 #ifdef TARGET_GPROF
         _mcleanup();
+#endif
+#ifdef CONFIG_GCOV
+        __gcov_dump();
 #endif
         gdb_exit(env, code);
 }
-- 
2.17.1


Re: [Qemu-devel] [PATCH v1 10/10] linux-user: add gcov support to preexit_cleanup
Posted by Philippe Mathieu-Daudé 7 years, 4 months ago
Hi Alex,

On 06/25/2018 08:19 AM, Alex Bennée wrote:
> As we don't always take the normal exit path when running a guest we
> can skip the normal exit destructors where gcov normally dumps it's
> info. The GCC manual suggests long running programs use __gcov_dump()
> to flush out the coverage state periodically so we use that here.

Shouldn't we also check for this symbol in the ./configure script?

> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

> ---
>  linux-user/exit.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/linux-user/exit.c b/linux-user/exit.c
> index aed8713fae..14e94e28fa 100644
> --- a/linux-user/exit.c
> +++ b/linux-user/exit.c
> @@ -19,10 +19,17 @@
>  #include "qemu/osdep.h"
>  #include "qemu.h"
>  
> +#ifdef CONFIG_GCOV
> +extern void __gcov_dump(void);
> +#endif
> +
>  void preexit_cleanup(CPUArchState *env, int code)
>  {
>  #ifdef TARGET_GPROF
>          _mcleanup();
> +#endif
> +#ifdef CONFIG_GCOV
> +        __gcov_dump();
>  #endif
>          gdb_exit(env, code);
>  }
> 

Re: [Qemu-devel] [PATCH v1 10/10] linux-user: add gcov support to preexit_cleanup
Posted by Alex Bennée 7 years, 4 months ago
Philippe Mathieu-Daudé <f4bug@amsat.org> writes:

> Hi Alex,
>
> On 06/25/2018 08:19 AM, Alex Bennée wrote:
>> As we don't always take the normal exit path when running a guest we
>> can skip the normal exit destructors where gcov normally dumps it's
>> info. The GCC manual suggests long running programs use __gcov_dump()
>> to flush out the coverage state periodically so we use that here.
>
> Shouldn't we also check for this symbol in the ./configure script?

Sure - I couldn't find it exported anywhere - just mentioned in the
documentation. I think it has been there a while though.
>
>>
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>
> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>
>> ---
>>  linux-user/exit.c | 7 +++++++
>>  1 file changed, 7 insertions(+)
>>
>> diff --git a/linux-user/exit.c b/linux-user/exit.c
>> index aed8713fae..14e94e28fa 100644
>> --- a/linux-user/exit.c
>> +++ b/linux-user/exit.c
>> @@ -19,10 +19,17 @@
>>  #include "qemu/osdep.h"
>>  #include "qemu.h"
>>
>> +#ifdef CONFIG_GCOV
>> +extern void __gcov_dump(void);
>> +#endif
>> +
>>  void preexit_cleanup(CPUArchState *env, int code)
>>  {
>>  #ifdef TARGET_GPROF
>>          _mcleanup();
>> +#endif
>> +#ifdef CONFIG_GCOV
>> +        __gcov_dump();
>>  #endif
>>          gdb_exit(env, code);
>>  }
>>


--
Alex Bennée