summaryrefslogtreecommitdiff
path: root/usr/src/uts/intel/dtrace/sdt.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/intel/dtrace/sdt.c')
-rw-r--r--usr/src/uts/intel/dtrace/sdt.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/usr/src/uts/intel/dtrace/sdt.c b/usr/src/uts/intel/dtrace/sdt.c
index 27cb19e06c..e98f6a30c0 100644
--- a/usr/src/uts/intel/dtrace/sdt.c
+++ b/usr/src/uts/intel/dtrace/sdt.c
@@ -25,6 +25,7 @@
/*
* Copyright (c) 2012, Joyent, Inc. All rights reserved.
+ * Copyright (c) 2013, 2014 by Delphix. All rights reserved.
*/
#include <sys/modctl.h>
@@ -329,16 +330,17 @@ sdt_getarg(void *arg, dtrace_id_t id, void *parg, int argno, int aframes)
* In the case of amd64, we will use the pointer to the
* regs structure that was pushed when we took the
* trap. To get this structure, we must increment
- * beyond the frame structure. If the argument that
- * we're seeking is passed on the stack, we'll pull
- * the true stack pointer out of the saved registers
- * and decrement our argument by the number of
- * arguments passed in registers; if the argument
+ * beyond the frame structure, the calling RIP, and
+ * padding stored in dtrace_invop(). If the argument
+ * that we're seeking is passed on the stack, we'll
+ * pull the true stack pointer out of the saved
+ * registers and decrement our argument by the number
+ * of arguments passed in registers; if the argument
* we're seeking is passed in regsiters, we can just
* load it directly.
*/
struct regs *rp = (struct regs *)((uintptr_t)&fp[1] +
- sizeof (uintptr_t));
+ sizeof (uintptr_t) * 2);
if (argno <= inreg) {
stack = (uintptr_t *)&rp->r_rdi;