Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F135497554
D27766.id82019.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D27766.id82019.diff
View Options
Index: sys/cddl/dev/dtrace/aarch64/dtrace_subr.c
===================================================================
--- sys/cddl/dev/dtrace/aarch64/dtrace_subr.c
+++ sys/cddl/dev/dtrace/aarch64/dtrace_subr.c
@@ -49,6 +49,7 @@
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 @@
{
struct timespec curtime;
- nanouptime(&curtime);
+ dtrace_getnanouptime(&curtime);
return (curtime.tv_sec * 1000000000UL + curtime.tv_nsec);
Index: sys/cddl/dev/dtrace/arm/dtrace_subr.c
===================================================================
--- sys/cddl/dev/dtrace/arm/dtrace_subr.c
+++ sys/cddl/dev/dtrace/arm/dtrace_subr.c
@@ -54,6 +54,7 @@
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 @@
{
struct timespec curtime;
- nanouptime(&curtime);
+ dtrace_getnanouptime(&curtime);
return (curtime.tv_sec * 1000000000UL + curtime.tv_nsec);
Index: sys/cddl/dev/dtrace/riscv/dtrace_subr.c
===================================================================
--- sys/cddl/dev/dtrace/riscv/dtrace_subr.c
+++ sys/cddl/dev/dtrace/riscv/dtrace_subr.c
@@ -52,6 +52,7 @@
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 @@
{
struct timespec curtime;
- nanouptime(&curtime);
+ dtrace_getnanouptime(&curtime);
return (curtime.tv_sec * 1000000000UL + curtime.tv_nsec);
Index: sys/cddl/dev/fbt/aarch64/fbt_isa.c
===================================================================
--- sys/cddl/dev/fbt/aarch64/fbt_isa.c
+++ sys/cddl/dev/fbt/aarch64/fbt_isa.c
@@ -96,6 +96,22 @@
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);
+
+ /*
+ * Some assembly language function implementations lack proper
+ * prologues and epilogues, which can confuse the current FBT
+ * implementation (which would ideally detect this directly).
+ */
+ if (strcmp(name, "memcpy") == 0 || strcmp(name, "bcopy") == 0)
+ return (1);
+
instr = (uint32_t *)(symval->value);
limit = (uint32_t *)(symval->value + symval->size);
Index: sys/cddl/dev/fbt/fbt.c
===================================================================
--- sys/cddl/dev/fbt/fbt.c
+++ sys/cddl/dev/fbt/fbt.c
@@ -127,6 +127,17 @@
return (1);
}
+ /*
+ * 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.
*/
Index: sys/kern/kern_tc.c
===================================================================
--- sys/kern/kern_tc.c
+++ sys/kern/kern_tc.c
@@ -146,6 +146,7 @@
static void cpu_tick_calibrate(int);
void dtrace_getnanotime(struct timespec *tsp);
+void dtrace_getnanouptime(struct timespec *tsp);
static int
sysctl_kern_boottime(SYSCTL_HANDLER_ARGS)
@@ -997,6 +998,20 @@
GETTHMEMBER(tsp, th_nanotime);
}
+/*
+ * This is a clone of getnanouptime used for time since boot.
+ * The dtrace_ prefix prevents fbt from creating probes for
+ * it so an uptime that can be safely used in all fbt probes.
+ */
+void
+dtrace_getnanouptime(struct timespec *tsp)
+{
+ struct bintime bt;
+
+ GETTHMEMBER(&bt, th_offset);
+ bintime2timespec(&bt, tsp);
+}
+
/*
* System clock currently providing time to the system. Modifiable via sysctl
* when the FFCLOCK option is defined.
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Nov 11, 8:15 AM (6 h, 57 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25150002
Default Alt Text
D27766.id82019.diff (4 KB)
Attached To
Mode
D27766: Various changes to DTrace FBT to avoid crashed on FreeBSD/arm64.
Attached
Detach File
Event Timeline
Log In to Comment