summaryrefslogtreecommitdiffstats
path: root/runtime/regs-ia64.c
diff options
context:
space:
mode:
authorFrank Ch. Eigler <fche@elastic.org>2008-09-09 20:00:13 -0400
committerFrank Ch. Eigler <fche@elastic.org>2008-09-09 20:00:13 -0400
commit23b3bb31858e54b8a10ad570a3bc8ad49487d725 (patch)
tree0096ff3573baefdb7cffc55574266587e0e8283b /runtime/regs-ia64.c
parent5ff217f44e1e069fcfbd59c27866afef35a61c9a (diff)
parent256d22cfb336b4cf0ec5b35bab89ca55ff5ce9ee (diff)
downloadsystemtap-steved-23b3bb31858e54b8a10ad570a3bc8ad49487d725.tar.gz
systemtap-steved-23b3bb31858e54b8a10ad570a3bc8ad49487d725.tar.xz
systemtap-steved-23b3bb31858e54b8a10ad570a3bc8ad49487d725.zip
Merge branch 'master' of ssh://sources.redhat.com/git/systemtap
* 'master' of ssh://sources.redhat.com/git/systemtap: Added tests for utrace-syscall probe context variables. Add $return context variables on per-process-syscall.return probes Add $argN context variables on per-process-syscall probes Add $name context variable support on marker probes Utrace on ia64 fast fetch-register support Add ia64 utrace support Correct this_section_offset calculation in _stp_kallsyms_lookup. tiny grammar fix in NEWS separated Scripts, edited accordingly PR1288: runtime functions for avoiding certain addresses remove test tag added content for Ch1 and 2, to add more later
Diffstat (limited to 'runtime/regs-ia64.c')
-rw-r--r--runtime/regs-ia64.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/runtime/regs-ia64.c b/runtime/regs-ia64.c
index fd8d8ca8..8ce3e4c3 100644
--- a/runtime/regs-ia64.c
+++ b/runtime/regs-ia64.c
@@ -61,27 +61,36 @@ static void ia64_stap_get_arbsp(struct unw_frame_info *info, void *arg)
-(__offset + (regs->cr_ifs & 127)));\
}
-static long ia64_fetch_register(int regno, struct pt_regs *pt_regs, unsigned long **cache)
+static long *
+__ia64_fetch_register(int regno, struct pt_regs *pt_regs, unsigned long **cache)
{
struct ia64_stap_get_arbsp_param pa;
if (regno == 12)
- return pt_regs->r12;
+ return &pt_regs->r12;
if (regno >= 8 && regno <= 11)
- return *(unsigned long *)(&pt_regs->r8 + regno - 8);
+ return (long *)(&pt_regs->r8 + regno - 8);
else if (regno < 32 || regno > 127)
- return 0;
+ return NULL;
if (!*cache) {
pa.ip = pt_regs->cr_iip;
unw_init_running(ia64_stap_get_arbsp, &pa);
if (pa.address == 0)
- return 0;
+ return NULL;
*cache = pa.address;
}
- return *ia64_rse_skip_regs(*cache, regno-32);
+ return ia64_rse_skip_regs(*cache, regno-32);
+}
+
+static long
+ia64_fetch_register(int regno, struct pt_regs *pt_regs, unsigned long **cache)
+{
+ long *reg;
+ reg = __ia64_fetch_register(regno, pt_regs, cache);
+ return (reg != NULL)? *reg : 0;
}
static void ia64_store_register(int regno,