summaryrefslogtreecommitdiffstats
path: root/runtime/regs-ia64.c
diff options
context:
space:
mode:
authorFrank Ch. Eigler <fche@elastic.org>2008-04-12 11:03:19 -0400
committerFrank Ch. Eigler <fche@elastic.org>2008-04-12 11:03:19 -0400
commit1c86aa2adc1165906057cdde4cc7484468726fc4 (patch)
treee4da7047f20489b9fc4b11cf501d42cf59c4b283 /runtime/regs-ia64.c
parentb53c1feef55dc74501a90257e4beff6c1a9cf03b (diff)
parent48899faa2d1280f7715b0abf892fb8b4b5c8ff43 (diff)
downloadsystemtap-steved-1c86aa2adc1165906057cdde4cc7484468726fc4.tar.gz
systemtap-steved-1c86aa2adc1165906057cdde4cc7484468726fc4.tar.xz
systemtap-steved-1c86aa2adc1165906057cdde4cc7484468726fc4.zip
Merge branch 'master' into unwind
* master: 2008-04-11 David Smith <dsmith@redhat.com> 2008-04-11 David Smith <dsmith@redhat.com> 2008-04-11 David Smith <dsmith@redhat.com> 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> removing another part of retired LKET removing abandoned experiment: safety/* disassembly/symbol checks Conflicts: .gitignore ChangeLog runtime/ChangeLog
Diffstat (limited to 'runtime/regs-ia64.c')
-rw-r--r--runtime/regs-ia64.c15
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,