From: "Wangnan (F)" <wangnan0@huawei.com>
To: Will Deacon <will.deacon@arm.com>
Cc: <takahiro.akashi@linaro.org>, <guohanjun@huawei.com>,
<linux-arm-kernel@lists.infradead.org>,
<linux-kernel@vger.kernel.org>, <pi3orama@163.com>,
Fengguang Wu <fengguang.wu@intel.com>,
Jiri Olsa <jolsa@kernel.org>
Subject: Re: [PATCH v2] arm64: Store breakpoint single step state into pstate
Date: Tue, 5 Jan 2016 09:41:26 +0800 [thread overview]
Message-ID: <568B1F46.8050206@huawei.com> (raw)
In-Reply-To: <20160104165535.GI1616@arm.com>
On 2016/1/5 0:55, Will Deacon wrote:
> Hello,
>
> On Thu, Dec 24, 2015 at 01:42:42AM +0000, Wang Nan wrote:
>> Two 'perf test' fail on arm64:
>>
>> # perf test overflow
>> 17: Test breakpoint overflow signal handler : FAILED!
>> 18: Test breakpoint overflow sampling : FAILED!
>>
>> When breakpoint raises, after perf_bp_event, breakpoint_handler()
>> temporary disables breakpoint and enables single step. Then in
>> single_step_handler(), reenable breakpoint. Without doing this
>> the breakpoint would be triggered again.
>>
>> However, if there's a pending signal and it have signal handler,
>> control would be transfer to signal handler, so single step handler
>> would be applied to the first instruction of signal handler. After
>> the handler return, the instruction triggered the breakpoint would be
>> executed again. At this time the breakpoint is enabled, so the
>> breakpoint is triggered again.
> Whilst I appreciate that you're just trying to get those tests passing
> on arm64, I really don't think its a good idea for us to try and emulate
> the x86 debug semantics here. This doesn't happen for ptrace, and I think
> we're likely to break more than we fix if we try to do it for perf too.
>
> The problem seems to be that we take the debug exception before the
> breakpointed instruction has been executed and call perf_bp_event at
> that moment, so when we single-step the faulting instruction we actually
> step into the SIGIO handler and end up getting stuck.
Understand.
> Your fix doesn't really address this afaict,
I don't think so. After applying my patch, the entry of signal handler won't
be single-stepped. Please have a look at signal_toggle_single_step(): when
signal arises, single step handler is turned off, so signal handler won't
be stepped.
I thing the following 4 cases you mentioned should not causes error in
theory:
> in that you don't (can't?)
> handle:
>
> * A longjmp out of a signal handler
The signal frame is dropped so stepping is omitted.
> * A watchpoint and a breakpoint that fire on the same instruction
Watchpoints and breakpoints are controlled separatly. In this case it would
generated twp nested signals. I will try this.
> * User-controlled single-step from a signal handler that enables a
> breakpoint explicitly
debug_info->suspended_step controls this.
> * Nested signals
I think nested signals can be dealt correctly because we save state in
signal frame.
However I'll try the above cases you mentioned above.
Thank you.
next prev parent reply other threads:[~2016-01-05 1:45 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-23 8:52 [RESEND PATCH] arm64: Store breakpoint single step state into pstate Wang Nan
2015-12-23 10:44 ` kbuild test robot
2015-12-24 1:42 ` [PATCH v2] " Wang Nan
2016-01-04 16:55 ` Will Deacon
2016-01-05 1:41 ` Wangnan (F) [this message]
2016-01-05 4:58 ` [RFC PATCH] arm64: perf test: Improbe bp_signal Wang Nan
2016-01-05 5:09 ` Wangnan (F)
2016-01-05 8:53 ` Jiri Olsa
2016-01-05 9:00 ` Jiri Olsa
2016-01-05 9:05 ` Jiri Olsa
2016-01-05 9:09 ` Jiri Olsa
2016-01-05 5:06 ` [PATCH v2] arm64: Store breakpoint single step state into pstate Wangnan (F)
2016-01-12 17:06 ` Will Deacon
2016-01-15 8:20 ` xiakaixu
2016-01-21 8:06 ` xiakaixu
2016-01-18 11:39 ` Wangnan (F)
2016-01-05 9:57 ` [RFC PATCH v2] perf test: Improve bp_signal Wang Nan
2016-01-05 10:07 ` Jiri Olsa
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=568B1F46.8050206@huawei.com \
--to=wangnan0@huawei.com \
--cc=fengguang.wu@intel.com \
--cc=guohanjun@huawei.com \
--cc=jolsa@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pi3orama@163.com \
--cc=takahiro.akashi@linaro.org \
--cc=will.deacon@arm.com \
/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;
as well as URLs for NNTP newsgroup(s).