Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 29 Feb 2012 20:21:16 GMT
From:      Oleksandr Tymoshenko <gonzo@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 207108 for review
Message-ID:  <201202292021.q1TKLGhs064854@skunkworks.freebsd.org>

next in thread | raw e-mail | index | archive | help

http://p4web.freebsd.org/@@207108?ac=10

Change 207108 by gonzo@gonzo_thinkpad on 2012/02/29 20:20:46

	- Implement stackdepth handler

Affected files ...

.. //depot/projects/dtrace-mips/sys/cddl/dev/dtrace/mips/dtrace_isa.c#6 edit

Differences ...

==== //depot/projects/dtrace-mips/sys/cddl/dev/dtrace/mips/dtrace_isa.c#6 (text+ko) ====

@@ -327,8 +327,31 @@
 int
 dtrace_getstackdepth(int aframes)
 {
-	printf("IMPLEMENT ME: %s\n", __func__);
-	return (0);
+	register_t sp, ra, pc;
+	int depth = 0;
+
+	sp = (register_t)(intptr_t)__builtin_frame_address(0);
+	ra = (register_t)(intptr_t)__builtin_return_address(0);
+
+       	__asm __volatile(
+		"jal 99f\n"
+		"nop\n"
+		"99:\n"
+		"move %0, $31\n" /* get ra */
+		"move $31, %1\n" /* restore ra */
+		: "=r" (pc)
+		: "r" (ra));
+
+	for (;;) {
+		if (next_frame(&pc, &sp, NULL, NULL) < 0)
+			break;
+		depth++;
+	}
+
+	if (depth < aframes)
+		return 0;
+	else
+		return depth - aframes;
 }
 
 ulong_t



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201202292021.q1TKLGhs064854>