summaryrefslogtreecommitdiff
path: root/lib/std/backtrace+x64.myr
blob: 61d66253dea263f77aae6825ae665355fe24384c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use "types"
use "fmt"

pkg std =
	const backtrace	: (pc	: void#[:] -> std.size)
;;

type stackrec = struct
	next	: stackrec#
	pc	: void#
;;

extern const getbp	: (-> stackrec#)
const backtrace = {pc
	var bp, i, len

	i = 0
	len = pc.len
	bp = getbp()
	while bp != (0 : stackrec#) && i < len
		pc[i++] = bp.pc
		bp = bp.next
	;;
	-> i
}