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. MFC after: 3 days Reviewed by: emaste, andrew
This commit is contained in:
parent
9f88bee146
commit
599fb1d198
@ -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)
|
||||
@ -154,7 +155,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;
|
||||
@ -196,7 +197,7 @@ fbt_provide_module_function(linker_file_t lf, int symindx,
|
||||
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;
|
||||
|
@ -123,8 +123,7 @@ struct profile_probe_percpu;
|
||||
#endif
|
||||
|
||||
#ifdef __aarch64__
|
||||
/* TODO: verify */
|
||||
#define PROF_ARTIFICIAL_FRAMES 10
|
||||
#define PROF_ARTIFICIAL_FRAMES 12
|
||||
#endif
|
||||
|
||||
#ifdef __riscv
|
||||
|
Loading…
Reference in New Issue
Block a user