Module Name: src
Committed By: riastradh
Date: Wed Feb 12 01:10:25 UTC 2020
Modified Files:
src/external/cddl/osnet/dev/fbt/aarch64: fbt_isa.c
Log Message:
Count the number of artificial frames in aarch64 fbt probe correctly.
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/external/cddl/osnet/dev/fbt/aarch64/fbt_isa.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/cddl/osnet/dev/fbt/aarch64/fbt_isa.c
diff -u src/external/cddl/osnet/dev/fbt/aarch64/fbt_isa.c:1.4 src/external/cddl/osnet/dev/fbt/aarch64/fbt_isa.c:1.5
--- src/external/cddl/osnet/dev/fbt/aarch64/fbt_isa.c:1.4 Wed Feb 12 01:09:48 2020
+++ src/external/cddl/osnet/dev/fbt/aarch64/fbt_isa.c Wed Feb 12 01:10:25 2020
@@ -52,6 +52,17 @@
#define FBT_ENTRY "entry"
#define FBT_RETURN "return"
+/*
+ * How many artificial frames appear between dtrace_probe and the
+ * interrupted function call?
+ *
+ * fbt_invop
+ * dtrace_invop
+ * dtrace_invop_start
+ * el1_trap_exit
+ */
+#define FBT_AFRAMES 4
+
int
fbt_invop(uintptr_t addr, struct trapframe *frame, uintptr_t r0)
{
@@ -152,7 +163,7 @@ fbt_provide_module_cb(const char *name,
#endif
fbt->fbtp_name = name;
fbt->fbtp_id = dtrace_probe_create(fbt_id, modname,
- name, FBT_ENTRY, 3, fbt);
+ name, FBT_ENTRY, FBT_AFRAMES, fbt);
fbt->fbtp_patchpoint = instr;
#ifdef __FreeBSD__
fbt->fbtp_ctl = lf;
@@ -206,7 +217,7 @@ again:
fbt->fbtp_name = name;
if (retfbt == NULL) {
fbt->fbtp_id = dtrace_probe_create(fbt_id, modname,
- name, FBT_RETURN, 3, fbt);
+ name, FBT_RETURN, FBT_AFRAMES, fbt);
} else {
retfbt->fbtp_next = fbt;
fbt->fbtp_id = retfbt->fbtp_id;