diff options
author | Frank Ch. Eigler <fche@elastic.org> | 2008-06-27 21:45:37 -0400 |
---|---|---|
committer | Frank Ch. Eigler <fche@elastic.org> | 2008-06-27 21:45:37 -0400 |
commit | 53ca410a6a6032c2cde6aac6e95b57c68585e48a (patch) | |
tree | 79cda31e77dd2fee51b8f2f20e2e76989f4c8ad7 /runtime | |
parent | 4494bb1367876f3067d0e7c90b1466b9bd88633f (diff) | |
parent | cfa2ca3cbf2da7bbabcdf35c3085a969bd2370e4 (diff) | |
download | systemtap-steved-53ca410a6a6032c2cde6aac6e95b57c68585e48a.tar.gz systemtap-steved-53ca410a6a6032c2cde6aac6e95b57c68585e48a.tar.xz systemtap-steved-53ca410a6a6032c2cde6aac6e95b57c68585e48a.zip |
Merge commit 'origin/master' into pr6429-comp-unwindsyms
* commit 'origin/master':
Always include libdw using link groups.
Fix bug in handling process(PID) probes.
Added tests for 'process(PID)' variants.
This commit makes changes to the VFS tapset. The changes include deprecation of
syscalls2.stp: Add sys_renameat.
Only probe lines once for the :* wildcard line pattern.
Revert checking address in runtime
bz451707: fix conversions.exp test $name
Cleanup in tapsets.cxx
Added powerpc support to runtime/syscall.h.
Remove validating _stext due to many aliased symbols
PR6646: Add checking address in runtime
Fixed offset argument to vm_callback.
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/ChangeLog | 10 | ||||
-rw-r--r-- | runtime/syscall.h | 48 | ||||
-rw-r--r-- | runtime/task_finder.c | 12 | ||||
-rw-r--r-- | runtime/transport/ChangeLog | 10 | ||||
-rw-r--r-- | runtime/transport/symbols.c | 4 |
5 files changed, 76 insertions, 8 deletions
diff --git a/runtime/ChangeLog b/runtime/ChangeLog index fb92dccc..6da5814c 100644 --- a/runtime/ChangeLog +++ b/runtime/ChangeLog @@ -1,5 +1,15 @@ +2008-06-24 David Smith <dsmith@redhat.com> + + From: Srinivasa DS <srinivasa@in.ibm.com> + * syscall.h: Added powerpc support. + 2008-06-23 David Smith <dsmith@redhat.com> + * task_finder.c (__stp_utrace_task_finder_target_quiesce): Fixed + vm_callback offset by shifting it left PAGE_SHIFT bits. + (__stp_target_call_vm_callback): Ditto. + (__stp_utrace_task_finder_target_syscall_exit): Ditto. + * task_finder.c (__stp_utrace_task_finder_report_exec): Handles relative exec paths correctly. diff --git a/runtime/syscall.h b/runtime/syscall.h index 36fed2ff..3d1034e6 100644 --- a/runtime/syscall.h +++ b/runtime/syscall.h @@ -49,6 +49,13 @@ # endif #endif +#if defined(__powerpc__) +#define MMAP_SYSCALL_NO(tsk) 90 +#define MPROTECT_SYSCALL_NO(tsk) 125 +#define MUNMAP_SYSCALL_NO(tsk) 91 +#define MREMAP_SYSCALL_NO(tsk) 163 +#endif + #if !defined(MMAP_SYSCALL_NO) || !defined(MPROTECT_SYSCALL_NO) \ || !defined(MUNMAP_SYSCALL_NO) || !defined(MREMAP_SYSCALL_NO) #error "Unimplemented architecture" @@ -59,12 +66,20 @@ static inline unsigned long __stp_user_syscall_nr(struct pt_regs *regs) { #if defined(STAPCONF_X86_UNIREGS) - return regs->orig_ax; + return regs->orig_ax; #elif defined(__x86_64__) - return regs->orig_rax; + return regs->orig_rax; #elif defined (__i386__) - return regs->orig_eax; + return regs->orig_eax; +#endif +} #endif + +#if defined(__powerpc__) +static inline unsigned long +__stp_user_syscall_nr(struct pt_regs *regs) +{ + return regs->gpr[0]; } #endif @@ -94,6 +109,14 @@ __stp_user_syscall_return_value(struct task_struct *task, struct pt_regs *regs) } #endif +#if defined(__powerpc__) +static inline long * +__stp_user_syscall_return_value(struct task_struct *task, struct pt_regs *regs) +{ + return ®s->gpr[3]; +} +#endif + #if defined(__i386__) || defined(__x86_64__) static inline long * __stp_user_syscall_arg(struct task_struct *task, struct pt_regs *regs, @@ -157,4 +180,23 @@ __stp_user_syscall_arg(struct task_struct *task, struct pt_regs *regs, } #endif +#if defined(__powerpc__) +static inline long * +__stp_user_syscall_arg(struct task_struct *task, struct pt_regs *regs, + unsigned int n) +{ + switch (n) { + case 0: return ®s->gpr[3]; + case 1: return ®s->gpr[4]; + case 2: return ®s->gpr[5]; + case 3: return ®s->gpr[6]; + case 4: return ®s->gpr[7]; + case 5: return ®s->gpr[8]; + default: + _stp_error("syscall arg > 5"); + return NULL; + } +} +#endif + #endif /* _SYSCALL_H_ */ diff --git a/runtime/task_finder.c b/runtime/task_finder.c index 71b11569..07610864 100644 --- a/runtime/task_finder.c +++ b/runtime/task_finder.c @@ -586,7 +586,8 @@ __stp_utrace_task_finder_target_quiesce(struct utrace_attached_engine *engine, rc = tgt->vm_callback(tsk, 1, mmpath, vma->vm_start, vma->vm_end, - vma->vm_pgoff); + (vma->vm_pgoff + << PAGE_SHIFT)); if (rc != 0) { _stp_error("vm callback for %d failed: %d", (int)tsk->pid, rc); @@ -709,7 +710,8 @@ __stp_target_call_vm_callback(struct stap_task_finder_target *tgt, } else { rc = tgt->vm_callback(tsk, 1, mmpath, vma->vm_start, - vma->vm_end, vma->vm_pgoff); + vma->vm_end, + (vma->vm_pgoff << PAGE_SHIFT)); if (rc != 0) { _stp_error("vm callback for %d failed: %d", (int)tsk->pid, rc); @@ -819,7 +821,8 @@ __stp_utrace_task_finder_target_syscall_exit(struct utrace_attached_engine *engi rc = tgt->vm_callback(tsk, 0, NULL, entry->vm_start, entry->vm_end, - entry->vm_pgoff); + (entry->vm_pgoff + << PAGE_SHIFT)); if (rc != 0) { _stp_error("vm callback for %d failed: %d", (int)tsk->pid, rc); @@ -852,7 +855,8 @@ __stp_utrace_task_finder_target_syscall_exit(struct utrace_attached_engine *engi rc = tgt->vm_callback(tsk, 0, NULL, entry->vm_start, entry->vm_end, - entry->vm_pgoff); + (entry->vm_pgoff + << PAGE_SHIFT)); if (rc != 0) { _stp_error("vm callback for %d failed: %d", (int)tsk->pid, rc); diff --git a/runtime/transport/ChangeLog b/runtime/transport/ChangeLog index 2e59ff90..98548afa 100644 --- a/runtime/transport/ChangeLog +++ b/runtime/transport/ChangeLog @@ -1,3 +1,13 @@ + + +2008-06-23 Wenji Huang <wenji.huang@oracle.com> + PR 6646 + * symbols.c (_stp_validate_addr): Revert the previous code. + +2008-06-23 Wenji Huang <wenji.huang@oracle.com> + PR 6646 + * symbols.c (_stp_validate_addr): Add validating address in runtime. + 2008-06-13 Wenji Huang <wenji.huang@oracle.com> * control.c (_stp_ctl_write_dbug): Remove STP_UNWIND support. diff --git a/runtime/transport/symbols.c b/runtime/transport/symbols.c index 4a3c4e17..9299fc67 100644 --- a/runtime/transport/symbols.c +++ b/runtime/transport/symbols.c @@ -205,11 +205,13 @@ static int _stp_init_kernel_symbols(void) _dbug("Lookup of _stext failed. Exiting.\n"); return -1; } + _stp_modules[0]->data = _stp_kallsyms_lookup_name("_etext"); if (_stp_modules[0]->data == 0) { _dbug("Lookup of _etext failed. Exiting.\n"); return -1; } + _stp_modules[0]->text_size = _stp_modules[0]->data - _stp_modules[0]->text; _stp_modules_by_addr[0] = _stp_modules[0]; @@ -609,7 +611,7 @@ static int _stp_init_modules(void) void *res; struct module *mod; const struct seq_operations *modules_op = (const struct seq_operations *)_stp_kallsyms_lookup_name("modules_op"); - + if (modules_op == NULL) { _dbug("Lookup of modules_op failed.\n"); return -1; |