diff options
author | Frank Ch. Eigler <fche@elastic.org> | 2008-05-14 14:35:48 -0400 |
---|---|---|
committer | Frank Ch. Eigler <fche@elastic.org> | 2008-05-14 14:35:48 -0400 |
commit | 0fe2b97c7b967d833b5588dbf1ef763bb4440ed3 (patch) | |
tree | fcce9345c9ebacb7d5bc1f510f155bfdcea08dc4 /tapset/errno.stp | |
parent | a007b4068d20af2d4488d54bf3ef2edbf47f2f06 (diff) | |
parent | c3799d720b60bd74a60de4addcd0d77a90f7842a (diff) | |
download | systemtap-steved-0fe2b97c7b967d833b5588dbf1ef763bb4440ed3.tar.gz systemtap-steved-0fe2b97c7b967d833b5588dbf1ef763bb4440ed3.tar.xz systemtap-steved-0fe2b97c7b967d833b5588dbf1ef763bb4440ed3.zip |
Merge commit 'origin/master' into pr6429-comp-unwindsyms
* commit 'origin/master':
PR 5955 - Accept ; terminated globals
Factored returnval() out of returnstr(), for use in dwarfless probing.
Converted more aliases to use arg numbers instead of names. In particular,
Revert "PR6487: extend blacklist with relay/timer subsystem"
Add syscalls_by_pid.meta, syscalls_by_proc.meta,
PR6487: extend blacklist with relay/timer subsystem
Adjust iotime.meta description.
* iotime.meta: New.
Fix for PR 6500.
Update ChangeLog
* sleeptime.meta, wait4time.meta: New.
systemtap.examples futexes.meta change futex.stp to futexes.stp.
In ioblock.stp ioblock.end set bytes_done depending on kernel version.
PR6492: make listing mode warning-free
PR5648: Fix unaligned access warning in stp_print_flush on ia64
PR5648: Fix memcpy's endianess issue.
futexes.meta, nettop.meta, pf2.meta: New.
Clean up output.
Diffstat (limited to 'tapset/errno.stp')
-rw-r--r-- | tapset/errno.stp | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/tapset/errno.stp b/tapset/errno.stp index 550e5d4f..2523d846 100644 --- a/tapset/errno.stp +++ b/tapset/errno.stp @@ -351,33 +351,45 @@ function errno_str:string (err:long) %{ /* pure */ strlcpy (THIS->__retvalue, errlist[e], MAXSTRINGLEN); %} -/* for syscall tapset. set returnp = 1 for decimal, 2 for hex */ -function returnstr:string (returnp:long) %{ /* pure */ - long ret; - - /* XXX: unfortunate duplication with return.stp:retval() */ - - if (CONTEXT->regs) { +%{ +static long _stp_returnval(struct pt_regs *regs) { + if (regs) { #if defined (STAPCONF_X86_UNIREGS) && (defined (__x86_64__) || defined (__i386__)) - ret = CONTEXT->regs->ax; + return regs->ax; #elif defined (__i386__) - ret = CONTEXT->regs->eax; + return regs->eax; #elif defined (__x86_64__) - ret = CONTEXT->regs->rax; + // TODO: Handle -m32 apps. + return regs->rax; #elif defined (__powerpc64__) - ret = CONTEXT->regs->gpr[3]; + return regs->gpr[3]; #elif defined (__ia64__) - ret = CONTEXT->regs->r8; + return regs->r8; #elif defined (__sparc64__) - ret = CONTEXT->regs->u_regs[UREG_RETPC]; + return regs->u_regs[UREG_RETPC]; #elif defined (__s390x__) - ret = CONTEXT->regs->gprs[2]; + return regs->gprs[2]; #elif defined (__arm__) - ret = CONTEXT->regs->ARM_r0; + return regs->ARM_r0; #else - goto no_ret; + _stp_error("returnval() not defined for this architecture"); + return 0; #endif + } else { + _stp_error("returnval() not defined in this context"); + return 0; + } +} +%} + +function returnval:long () %{ /* pure */ + THIS->__retvalue = _stp_returnval(CONTEXT->regs); +%} +/* for syscall tapset. set returnp = 1 for decimal, 2 for hex */ +function returnstr:string (returnp:long) %{ /* pure */ + if (CONTEXT->regs) { + long ret = _stp_returnval(CONTEXT->regs); if (ret < 0 && ret > -Maxerrno && errlist[-ret]) snprintf (THIS->__retvalue, MAXSTRINGLEN, "%ld (%s)", ret, errlist[-ret]); else if (THIS->returnp == 2) |