diff options
author | Frank Ch. Eigler <fche@elastic.org> | 2008-09-09 20:00:13 -0400 |
---|---|---|
committer | Frank Ch. Eigler <fche@elastic.org> | 2008-09-09 20:00:13 -0400 |
commit | 23b3bb31858e54b8a10ad570a3bc8ad49487d725 (patch) | |
tree | 0096ff3573baefdb7cffc55574266587e0e8283b /runtime/regs-ia64.c | |
parent | 5ff217f44e1e069fcfbd59c27866afef35a61c9a (diff) | |
parent | 256d22cfb336b4cf0ec5b35bab89ca55ff5ce9ee (diff) | |
download | systemtap-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.c | 21 |
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, |