git: 599fb1d198ec - main - 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.

Robert Watson rwatson at FreeBSD.org
Mon Mar 22 23:49:54 UTC 2021


The branch main has been updated by rwatson:

URL: https://cgit.FreeBSD.org/src/commit/?id=599fb1d198ec6792ba062114d2589ca9f01a3568

commit 599fb1d198ec6792ba062114d2589ca9f01a3568
Author:     Robert Watson <rwatson at FreeBSD.org>
AuthorDate: 2021-03-21 00:01:54 +0000
Commit:     Robert Watson <rwatson at FreeBSD.org>
CommitDate: 2021-03-22 23:49:41 +0000

    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
---
 sys/cddl/dev/fbt/aarch64/fbt_isa.c | 5 +++--
 sys/cddl/dev/profile/profile.c     | 3 +--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/sys/cddl/dev/fbt/aarch64/fbt_isa.c b/sys/cddl/dev/fbt/aarch64/fbt_isa.c
index 12be95ea2217..f9b99febe8d1 100644
--- a/sys/cddl/dev/fbt/aarch64/fbt_isa.c
+++ b/sys/cddl/dev/fbt/aarch64/fbt_isa.c
@@ -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 @@ 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;
diff --git a/sys/cddl/dev/profile/profile.c b/sys/cddl/dev/profile/profile.c
index 6074354af18d..1e7a84c272cd 100644
--- a/sys/cddl/dev/profile/profile.c
+++ b/sys/cddl/dev/profile/profile.c
@@ -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


More information about the dev-commits-src-main mailing list