From: Suparna Bhattacharya <suparna@in.ibm.com>
To: Andi Kleen <ak@muc.de>
Cc: prasanna@in.ibm.com, linux-kernel@vger.kernel.org,
torvalds@osdl.org, akpm@osdl.org
Subject: Re: [1/3] kprobes-func-args-268-rc3.patch
Date: Thu, 5 Aug 2004 17:54:31 +0530 [thread overview]
Message-ID: <20040805122431.GA4411@in.ibm.com> (raw)
In-Reply-To: <m3acx9yh6t.fsf@averell.firstfloor.org>
On Thu, Aug 05, 2004 at 01:09:46PM +0200, Andi Kleen wrote:
> Prasanna S Panchamukhi <prasanna@in.ibm.com> writes:
> > traps again to restore processor state and switch back to the
> > probed function. Linus noted correctly at KS that we need to be
> > careful as gcc assumes that the callee owns arguments. For the
> > time being we try to avoid tailcalls in the probe function; in
> > the long run we should probably also save and restore enough
> > stack bytes to cover argument space.
> >
> > Sample Usage:
> > static int jip_queue_xmit(struct sk_buff *skb, int ipfragok)
> > {
> > ... whatever ...
> > jprobe_return();
> > /*No tailcalls please */
> > return 0;
> > }
>
> I think you misunderstood Linus' suggestion. The problem with
> modifying arguments on the stack frame is always there because the C
> ABI allows it. One suggested solution was to use a second function
I did realise that it is the ABI which allows this, but I thought
that the only situation in which we know gcc to actually clobber
arguments from the callee in practice is for tailcall optimization.
So I was looking for ways to avoid that ... assuming the way we code
the probe function is under our control.
I'm not sure if that can be guaranteed and yes saving bytes from
stack would avoid the problem totally (hence the comment) and make
it less tied to expected innards of the compiler. The only issue
with that is deciding the maximum number of arguments so it is
generic enough.
> call that passes the arguments again to get a private copy. But the
> compiler's tail call optimization could sabotate that when you a
> are not careful.
>
> That's all quite hackish and compiler dependent. I would suggest an
> assembly wrapper that copies the arguments when !CONFIG_REGPARM.
> Just assume the function doesn't have more than a fixed number
> of arguments, that should be good enough.
>
> This way you avoid any subtle compiler dependencies.
> With CONFIG_REGPARM it's enough to just save/restore pt_regs,
> which kprobes will do anyways.
> >
Even with CONFIG_REGPARM, if you have a large
number of arguments for example, is spill over into stack
a possibility ?
Regards
Suparna
--
Suparna Bhattacharya (suparna@in.ibm.com)
Linux Technology Center
IBM Software Lab, India
next prev parent reply other threads:[~2004-08-05 12:15 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <2pMJz-13N-9@gated-at.bofh.it>
2004-08-05 11:09 ` [1/3] kprobes-func-args-268-rc3.patch Andi Kleen
2004-08-05 12:24 ` Suparna Bhattacharya [this message]
2004-08-05 12:54 ` Andi Kleen
2004-08-05 13:33 ` Suparna Bhattacharya
2004-08-05 13:51 ` Andi Kleen
2004-08-05 15:05 ` Suparna Bhattacharya
2004-08-05 9:24 Prasanna S Panchamukhi
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=20040805122431.GA4411@in.ibm.com \
--to=suparna@in.ibm.com \
--cc=ak@muc.de \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=prasanna@in.ibm.com \
--cc=torvalds@osdl.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