diff options
author | Frank Ch. Eigler <fche@elastic.org> | 2008-04-11 00:54:56 -0400 |
---|---|---|
committer | Frank Ch. Eigler <fche@elastic.org> | 2008-04-11 00:54:56 -0400 |
commit | 68eef6bdafca37b9b05dbc6d773a642ccafd9962 (patch) | |
tree | 8c7065afbd175ab315f391318a6dd7f9bb229fb9 /runtime/regs-ia64.c | |
parent | dce99706064883364724188687dd0499b5f4440c (diff) | |
parent | ec5d7273b73c56dacb4ac9b167186ff1ea964e63 (diff) | |
download | systemtap-steved-68eef6bdafca37b9b05dbc6d773a642ccafd9962.tar.gz systemtap-steved-68eef6bdafca37b9b05dbc6d773a642ccafd9962.tar.xz systemtap-steved-68eef6bdafca37b9b05dbc6d773a642ccafd9962.zip |
Merge branch 'master' of git://sources.redhat.com/git/systemtap
* 'master' of git://sources.redhat.com/git/systemtap:
PR2949: add missing line
PR2949: listings mode (stap -l PROBE)
PR6393: don't bother print build (configure) date any more, with reliable git ids
PR6393: regenerate git_version.h at every make
PR6393: git version tagging at build time
2008-04-09 David Smith <dsmith@redhat.com>
2008-04-04 Masami Hiramatsu <mhiramat@redhat.com>
2008-04-04 David Smith <dsmith@redhat.com>
2008-04-04 Masami Hiramatsu <mhiramat@redhat.com>
Diffstat (limited to 'runtime/regs-ia64.c')
-rw-r--r-- | runtime/regs-ia64.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/runtime/regs-ia64.c b/runtime/regs-ia64.c index 2a5a1d17..66dc60f3 100644 --- a/runtime/regs-ia64.c +++ b/runtime/regs-ia64.c @@ -35,7 +35,7 @@ static void ia64_stap_get_arbsp(struct unw_frame_info *info, void *arg) lp->address = 0; } -static long ia64_fetch_register(int regno, struct pt_regs *pt_regs) +static long ia64_fetch_register(int regno, struct pt_regs *pt_regs, unsigned long **cache) { struct ia64_stap_get_arbsp_param pa; @@ -47,12 +47,15 @@ static long ia64_fetch_register(int regno, struct pt_regs *pt_regs) else if (regno < 32 || regno > 127) return 0; - pa.ip = pt_regs->cr_iip; - unw_init_running(ia64_stap_get_arbsp, &pa); - if (pa.address == 0) - return 0; + if (!*cache) { + pa.ip = pt_regs->cr_iip; + unw_init_running(ia64_stap_get_arbsp, &pa); + if (pa.address == 0) + return 0; + *cache = pa.address; + } - return *ia64_rse_skip_regs(pa.address, regno-32); + return *ia64_rse_skip_regs(*cache, regno-32); } static void ia64_store_register(int regno, |