From: mathieu lacage <Mathieu.Lacage@sophia.inria.fr>
To: Richard J Moore <richardj_moore@uk.ibm.com>
Cc: systemtap@sources.redhat.com
Subject: Re: Hitachi djprobe mechanism
Date: Sun, 09 Oct 2005 16:47:00 -0000 [thread overview]
Message-ID: <434949A9.3020401@sophia.inria.fr> (raw)
In-Reply-To: <OF9AF3E881.D016BF14-ON41257094.007761F8-41257094.00788843@uk.ibm.com>
hi,
>So the assumption here is that:
>1) we are dealing with non-optimized code.
>
>
Sorry ? Where did I say that ?
>2) we are dealing with gcc generated code.
>
>
I did not say that either.
Here is the algorithm proposed:
1) have a function which can tell you the length of an instruction based
on a pointer to the start of the instruction. This is pretty horrible to
get right on x86 but it is quite possible and my sample code shows this.
2) have a function which can tell you if an instruction is one of:
- a direct or indirect call
- a ret
- a direct relative or absolute jump
- an indirect relative or absolute jump
3) input of the algorithm is the start and end address of a function.
For each instruction located between start and end, execute 4, 5, 6, and 7
4) for each direct or indirect call, mark the following instruction as a
block boundary
5) for each ret, mark the following instruction as a block boundary
6) for each direct relative or absolute jump, mark the following
instruction as a block boundary
7) for each indirect relative of absolute jump, mark the function as
non-parseable.
8) once you have executed 3 and if you have not stumbled upon 7), you
have a list of all the instructions which are basic block boundaries
which means you have solved the problem. end of story.
If you have hit 7), you can only place probes on 5 bytes big
instructions. Otherwise, you can place probes anywhere in blocks bigger
than 5 bytes.
None of the items presented above rely on code being generated by gcc or
specific optimization levels being used.
>Whilst it's unlikely that compilers other than gcc are used, it's not
>impossible - e.g. Intel's IA64 compiler. And the likelihood of non-gcc
>compilers increases when we consider user-space probes. But also it is
>
>
Placing probes in userspace will simply increse the probability that you
have to fallback to the 5bytes per inst mechanism because a lot of
userspace code is built with -fPIC which increases the probability of
finding indirect jumps.
Should you be interested in these probabilities, I can come up quite
easily with definite numbers on a number of linux-standard applications.
Which applications are you interested in ?
>Are we able to guard against these exceptions automatically, or do we have
>
>
The detection of the "bad case" (i.e., indirect jumps) is automatic and
inherent to the algorithm proposed which means that the fallback to
5bytes instructions is automatic.
[snip]
>Not sure about that. I think I can find an example of c-code for which it
>is impossible to determine the function boundaries from the assembler code,
>but looks perfectly reasonable from the C perspective.
>
>
Oh, well, of course, you can do that. Detecting function boundaries is
really hard. However, one of the major assumptions here is that you have
access to the debugging information which gives you these function
boundaries. If this assumption is not valid, then I don't think the idea
of parsing basic block boundaries is reasonable for the application you
are interested in.
Mathieu
next prev parent reply other threads:[~2005-10-09 16:47 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-07-27 21:05 Keshavamurthy, Anil S
2005-07-28 1:51 ` Karim Yaghmour
2005-07-28 2:10 ` Karim Yaghmour
2005-07-28 16:23 ` Masami Hiramatsu
2005-07-28 16:28 ` Karim Yaghmour
2005-07-28 17:36 ` Mathieu Desnoyers
[not found] ` <20050728110717.A30199@unix-os.sc.intel.com>
2005-07-28 18:33 ` Mathieu Desnoyers
[not found] ` <20050728133456.A32210@unix-os.sc.intel.com>
2005-07-28 23:53 ` Richard J Moore
2005-07-29 5:59 ` Mathieu Desnoyers
2005-07-29 7:55 ` Andi Kleen
2005-07-29 8:44 ` Richard J Moore
2005-07-29 8:46 ` Andi Kleen
2005-07-29 15:51 ` Mathieu Desnoyers
2005-07-30 15:55 ` Andi Kleen
2005-07-30 16:54 ` Mathieu Desnoyers
2005-07-31 22:03 ` Andi Kleen
2005-07-31 23:11 ` Mathieu Desnoyers
2005-08-01 15:37 ` Andi Kleen
2005-08-01 8:44 ` Richard J Moore
2005-08-01 13:21 ` Mathieu Desnoyers
2005-08-01 19:57 ` Satoshi Oshima
2005-08-01 20:21 ` Karim Yaghmour
2005-08-01 22:12 ` Satoshi Oshima
2005-08-01 22:54 ` Karim Yaghmour
2005-08-02 18:42 ` Satoshi Oshima
2005-08-03 14:50 ` Karim Yaghmour
2005-08-04 1:19 ` Mathieu Desnoyers
2005-08-04 3:31 ` Mathieu Desnoyers
2005-08-02 9:42 ` Mathieu Lacage
2005-08-02 15:09 ` Karim Yaghmour
2005-10-07 15:35 ` Richard J Moore
2005-10-08 18:33 ` mathieu lacage
2005-10-08 21:59 ` Richard J Moore
2005-10-08 23:24 ` Roland McGrath
2005-10-22 11:49 ` mathieu lacage
2005-10-22 22:09 ` Roland McGrath
2005-10-24 6:33 ` Mathieu Lacage
2005-10-24 19:48 ` Roland McGrath
[not found] ` <43621B0D.70204@sophia.inria.fr>
2005-11-07 10:04 ` mathieu lacage
2005-11-07 10:06 ` mathieu lacage
2005-11-08 9:49 ` Richard J Moore
2005-10-09 16:47 ` mathieu lacage [this message]
2005-08-02 15:33 ` Mathieu Lacage
2005-08-02 15:36 ` Mathieu Lacage
2005-08-02 16:12 ` Karim Yaghmour
2005-08-02 16:30 ` Mathieu Lacage
2005-08-02 16:46 ` Karim Yaghmour
2005-08-04 17:09 ` Mathieu Lacage
2005-08-03 14:46 ` Andi Kleen
2005-07-29 16:06 ` Frank Ch. Eigler
2005-07-29 18:24 ` sugita
2005-07-28 18:13 ` Richard J Moore
-- strict thread matches above, loose matches on Subject: below --
2005-08-01 22:49 Keshavamurthy, Anil S
2005-08-01 23:05 ` Karim Yaghmour
2005-08-01 23:18 ` Karim Yaghmour
2005-08-01 22:41 Keshavamurthy, Anil S
2005-08-02 3:21 ` Roland McGrath
2005-08-02 3:35 ` Karim Yaghmour
2005-08-01 20:46 Keshavamurthy, Anil S
2005-08-01 21:08 ` Karim Yaghmour
2005-08-01 16:14 Keshavamurthy, Anil S
2005-08-01 20:31 ` Roland McGrath
2005-08-04 0:28 ` Mathieu Desnoyers
2005-08-04 10:01 ` Andi Kleen
2005-08-05 16:25 ` Mathieu Desnoyers
2005-08-05 16:39 ` Andi Kleen
2005-08-01 15:50 Keshavamurthy, Anil S
2005-08-01 16:03 ` Mathieu Desnoyers
2005-07-29 0:18 Keshavamurthy, Anil S
2005-07-29 1:48 ` Karim Yaghmour
2005-07-29 3:41 ` Mathieu Desnoyers
2005-07-29 3:47 ` Karim Yaghmour
2005-07-29 1:53 ` Frank Ch. Eigler
2005-08-01 9:02 ` Mathieu Lacage
2005-08-01 13:18 ` Mathieu Desnoyers
2005-08-02 7:07 ` Mathieu Lacage
2005-07-22 18:09 Frank Ch. Eigler
2005-07-21 22:32 Richard J Moore
2005-07-21 22:52 ` Roland McGrath
2005-07-22 2:52 ` Richard J Moore
2005-07-26 7:14 ` Masami Hiramatsu
2005-07-26 7:53 ` Roland McGrath
2005-07-27 13:02 ` Masami Hiramatsu
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=434949A9.3020401@sophia.inria.fr \
--to=mathieu.lacage@sophia.inria.fr \
--cc=richardj_moore@uk.ibm.com \
--cc=systemtap@sources.redhat.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 read-only IMAP folder(s) and NNTP newsgroup(s).