aboutsummaryrefslogtreecommitdiff
path: root/sys/cddl
diff options
context:
space:
mode:
Diffstat (limited to 'sys/cddl')
-rw-r--r--sys/cddl/dev/dtrace/aarch64/dtrace_subr.c3
-rw-r--r--sys/cddl/dev/dtrace/arm/dtrace_subr.c3
-rw-r--r--sys/cddl/dev/dtrace/riscv/dtrace_subr.c3
-rw-r--r--sys/cddl/dev/fbt/aarch64/fbt_isa.c8
-rw-r--r--sys/cddl/dev/fbt/fbt.c11
5 files changed, 25 insertions, 3 deletions
diff --git a/sys/cddl/dev/dtrace/aarch64/dtrace_subr.c b/sys/cddl/dev/dtrace/aarch64/dtrace_subr.c
index 000de0094492..2d59b29b850b 100644
--- a/sys/cddl/dev/dtrace/aarch64/dtrace_subr.c
+++ b/sys/cddl/dev/dtrace/aarch64/dtrace_subr.c
@@ -49,6 +49,7 @@ __FBSDID("$FreeBSD$");
extern dtrace_id_t dtrace_probeid_error;
extern int (*dtrace_invop_jump_addr)(struct trapframe *);
extern void dtrace_getnanotime(struct timespec *tsp);
+extern void dtrace_getnanouptime(struct timespec *tsp);
int dtrace_invop(uintptr_t, struct trapframe *, uintptr_t);
void dtrace_invop_init(void);
@@ -163,7 +164,7 @@ dtrace_gethrtime()
{
struct timespec curtime;
- nanouptime(&curtime);
+ dtrace_getnanouptime(&curtime);
return (curtime.tv_sec * 1000000000UL + curtime.tv_nsec);
diff --git a/sys/cddl/dev/dtrace/arm/dtrace_subr.c b/sys/cddl/dev/dtrace/arm/dtrace_subr.c
index 8cd9c9c1f204..e98a9ded5442 100644
--- a/sys/cddl/dev/dtrace/arm/dtrace_subr.c
+++ b/sys/cddl/dev/dtrace/arm/dtrace_subr.c
@@ -54,6 +54,7 @@ __FBSDID("$FreeBSD$");
extern dtrace_id_t dtrace_probeid_error;
extern int (*dtrace_invop_jump_addr)(struct trapframe *);
extern void dtrace_getnanotime(struct timespec *tsp);
+extern void dtrace_getnanouptime(struct timespec *tsp);
int dtrace_invop(uintptr_t, struct trapframe *, uintptr_t);
void dtrace_invop_init(void);
@@ -174,7 +175,7 @@ dtrace_gethrtime()
{
struct timespec curtime;
- nanouptime(&curtime);
+ dtrace_getnanouptime(&curtime);
return (curtime.tv_sec * 1000000000UL + curtime.tv_nsec);
diff --git a/sys/cddl/dev/dtrace/riscv/dtrace_subr.c b/sys/cddl/dev/dtrace/riscv/dtrace_subr.c
index 463465e119f9..c1ac339b3a26 100644
--- a/sys/cddl/dev/dtrace/riscv/dtrace_subr.c
+++ b/sys/cddl/dev/dtrace/riscv/dtrace_subr.c
@@ -52,6 +52,7 @@ __FBSDID("$FreeBSD$");
extern dtrace_id_t dtrace_probeid_error;
extern int (*dtrace_invop_jump_addr)(struct trapframe *);
extern void dtrace_getnanotime(struct timespec *tsp);
+extern void dtrace_getnanouptime(struct timespec *tsp);
int dtrace_invop(uintptr_t, struct trapframe *);
void dtrace_invop_init(void);
@@ -165,7 +166,7 @@ dtrace_gethrtime()
{
struct timespec curtime;
- nanouptime(&curtime);
+ dtrace_getnanouptime(&curtime);
return (curtime.tv_sec * 1000000000UL + curtime.tv_nsec);
diff --git a/sys/cddl/dev/fbt/aarch64/fbt_isa.c b/sys/cddl/dev/fbt/aarch64/fbt_isa.c
index 581f390baf89..3c5070785614 100644
--- a/sys/cddl/dev/fbt/aarch64/fbt_isa.c
+++ b/sys/cddl/dev/fbt/aarch64/fbt_isa.c
@@ -96,6 +96,14 @@ fbt_provide_module_function(linker_file_t lf, int symindx,
if (fbt_excluded(name))
return (0);
+ /*
+ * Instrumenting certain exception handling functions can lead to FBT
+ * recursion, so exclude from instrumentation.
+ */
+ if (strcmp(name, "handle_el1h_sync") == 0 ||
+ strcmp(name, "do_el1h_sync") == 0)
+ return (1);
+
instr = (uint32_t *)(symval->value);
limit = (uint32_t *)(symval->value + symval->size);
diff --git a/sys/cddl/dev/fbt/fbt.c b/sys/cddl/dev/fbt/fbt.c
index cf5971d2d9bd..a378ae0eb317 100644
--- a/sys/cddl/dev/fbt/fbt.c
+++ b/sys/cddl/dev/fbt/fbt.c
@@ -128,6 +128,17 @@ fbt_excluded(const char *name)
}
/*
+ * Omit instrumentation of functions that are probably in DDB. It
+ * makes it too hard to debug broken FBT.
+ *
+ * NB: kdb_enter() can be excluded, but its call to printf() can't be.
+ * This is generally OK since we're not yet in debugging context.
+ */
+ if (strncmp(name, "db_", 3) == 0 ||
+ strncmp(name, "kdb_", 4) == 0)
+ return (1);
+
+ /*
* Lock owner methods may be called from probe context.
*/
if (strcmp(name, "owner_mtx") == 0 ||