Tune DTrace 'aframes' for the FBT and profile providers on arm64.

In both cases, too few frames were trimmed, leading to exception handling
or DTrace internals being exposed in stack traces exposed by D's stack()
primitive.

Reviewed by:	emaste, andrew
Differential Revision:	https://reviews.freebsd.org/D29356

(cherry picked from commit 599fb1d198)
This commit is contained in:
Robert Watson 2021-03-21 00:01:54 +00:00 committed by Ed Maste
parent 828e6b5f5e
commit fcc700abe4
2 changed files with 4 additions and 4 deletions

View file

@ -44,6 +44,7 @@
#define FBT_PATCHVAL (AARCH64_BRK | AARCH64_BRK_IMM16_VAL)
#define FBT_ENTRY "entry"
#define FBT_RETURN "return"
#define FBT_AFRAMES 4
int
fbt_invop(uintptr_t addr, struct trapframe *frame, uintptr_t rval)
@ -141,7 +142,7 @@ fbt_provide_module_function(linker_file_t lf, int symindx,
fbt = malloc(sizeof (fbt_probe_t), M_FBT, M_WAITOK | M_ZERO);
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;
fbt->fbtp_ctl = lf;
fbt->fbtp_loadcnt = lf->loadcnt;
@ -183,7 +184,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_probenext = fbt;
fbt->fbtp_id = retfbt->fbtp_id;

View file

@ -140,8 +140,7 @@ struct profile_probe_percpu;
#endif
#ifdef __aarch64__
/* TODO: verify */
#define PROF_ARTIFICIAL_FRAMES 10
#define PROF_ARTIFICIAL_FRAMES 12
#endif
#ifdef __riscv