From: Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Ingo Molnar <mingo@elte.hu>
Subject: Re: [BUG] gcov causes vread_tsc to increment kernel memory
Date: Thu, 02 Jul 2009 13:58:13 +0200 [thread overview]
Message-ID: <4A4CA0D5.6010103@linux.vnet.ibm.com> (raw)
In-Reply-To: <alpine.DEB.2.00.0907011245230.22887@gandalf.stny.rr.com>
Steven Rostedt wrote:
> On bootup of the latest kernel my init segfaults. Debugging it, I found
> that vread_tsc (a vsyscall) increments some strange kernel memory:
>
> 0000000000000000 <vread_tsc>:
> 0: 55 push %rbp
> 1: 48 ff 05 00 00 00 00 incq 0(%rip) # 8 <vread_tsc+0x8>
> 4: R_X86_64_PC32 .bss+0x3c
> 8: 48 89 e5 mov %rsp,%rbp
> b: 66 66 90 xchg %ax,%ax
> e: 48 ff 05 00 00 00 00 incq 0(%rip) # 15 <vread_tsc+0x15>
> 11: R_X86_64_PC32 .bss+0x44
> 15: 66 66 90 xchg %ax,%ax
> 18: 48 ff 05 00 00 00 00 incq 0(%rip) # 1f <vread_tsc+0x1f>
> 1b: R_X86_64_PC32 .bss+0x4c
> 1f: 0f 31 rdtsc
>
>
> Those "incq" is very bad to happen in vsyscall memory, since userspace can
> not modify it. You need to make something prevent profiling of vsyscall
> memory (like I do with ftrace).
>
> -- Steve
You're right, I missed that file. This should be fixed with the patch
below. As the problem didn't occur on my test machine, please retest
with the patch applied. Thanks!
Also seeing as function tracer and gcov work on a similar basis and
require similar files to be excluded from profiling, it would be nice
if we wouldn't need to mark those files separately. Instead it would
be great if the Makefile could be used to specify that a certain
object file has a certain property (e.g. PROPERTY_USERPACE_file.o := y)
and the mechanism (e.g. function tracer) would only need to specify
that the extra gcc options should not be applied when that property is
set. What do you think?
=================
Subject: [PATCH] gcov: exclude code operating in userspace from profiling
From: Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
Fix for this issue on x86_64:
rostedt@goodmis.org wrote:
> On bootup of the latest kernel my init segfaults. Debugging it,
> I found that vread_tsc (a vsyscall) increments some strange
> kernel memory:
>
> 0000000000000000 <vread_tsc>:
> 0: 55 push %rbp
> 1: 48 ff 05 00 00 00 00 incq 0(%rip)
> # 8 <vread_tsc+0x8>
> 4: R_X86_64_PC32 .bss+0x3c
> 8: 48 89 e5 mov %rsp,%rbp
> b: 66 66 90 xchg %ax,%ax
> e: 48 ff 05 00 00 00 00 incq 0(%rip)
> # 15 <vread_tsc+0x15>
> 11: R_X86_64_PC32 .bss+0x44
> 15: 66 66 90 xchg %ax,%ax
> 18: 48 ff 05 00 00 00 00 incq 0(%rip)
> # 1f <vread_tsc+0x1f>
> 1b: R_X86_64_PC32 .bss+0x4c
> 1f: 0f 31 rdtsc
>
>
> Those "incq" is very bad to happen in vsyscall memory, since
> userspace can not modify it. You need to make something prevent
> profiling of vsyscall memory (like I do with ftrace).
Signed-off-by: Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
---
arch/x86/kernel/Makefile | 2 ++
1 file changed, 2 insertions(+)
Index: linux-2.6.31-rc1/arch/x86/kernel/Makefile
===================================================================
--- linux-2.6.31-rc1.orig/arch/x86/kernel/Makefile
+++ linux-2.6.31-rc1/arch/x86/kernel/Makefile
@@ -26,6 +26,8 @@ CFLAGS_tsc.o := $(nostackp)
CFLAGS_paravirt.o := $(nostackp)
GCOV_PROFILE_vsyscall_64.o := n
GCOV_PROFILE_hpet.o := n
+GCOV_PROFILE_tsc.o := n
+GCOV_PROFILE_paravirt.o := n
obj-y := process_$(BITS).o signal.o entry_$(BITS).o
obj-y += traps.o irq.o irq_$(BITS).o dumpstack_$(BITS).o
next prev parent reply other threads:[~2009-07-02 12:01 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-01 16:54 [BUG] gcov causes vread_tsc to increment kernel memory Steven Rostedt
2009-07-02 11:58 ` Peter Oberparleiter [this message]
2009-07-02 13:30 ` Steven Rostedt
2009-07-03 7:13 ` Ingo Molnar
2009-07-03 8:17 ` Peter Oberparleiter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4A4CA0D5.6010103@linux.vnet.ibm.com \
--to=oberpar@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox