Author: markj
Date: Thu Nov 19 05:33:15 2015
New Revision: 291057
URL: https://svnweb.freebsd.org/changeset/base/291057

Log:
  Fix a bug in the amd64 dtrace_getarg() implementation: when unwinding the
  stack, take into account the copy of rsi pushed between the breakpoint
  trapframe and the dtrace_invop frame. Prior to r287644, this was covered
  by the fact that sizeof(struct amd64_frame) was 24 rather than 16.
  
  Reported by:  smh

Modified:
  head/sys/cddl/dev/dtrace/amd64/dtrace_isa.c

Modified: head/sys/cddl/dev/dtrace/amd64/dtrace_isa.c
==============================================================================
--- head/sys/cddl/dev/dtrace/amd64/dtrace_isa.c Thu Nov 19 04:41:16 2015        
(r291056)
+++ head/sys/cddl/dev/dtrace/amd64/dtrace_isa.c Thu Nov 19 05:33:15 2015        
(r291057)
@@ -385,8 +385,8 @@ dtrace_getarg(int arg, int aframes)
                         * we're seeking is passed in regsiters, we can just
                         * load it directly.
                         */
-                       struct trapframe *tf =
-                           (struct trapframe *)((uintptr_t)&fp[1]);
+                       struct trapframe *tf = (struct trapframe *)
+                           ((uintptr_t)&fp[1] + sizeof(uintptr_t));
 
                        if (arg <= inreg) {
                                switch (arg) {
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to