Add a central location for exclusion checks. We check
here if function is excluded from FBT instrumentation. Reviewed by: andrew, emaste, markj Differential Revision: https://reviews.freebsd.org/D2899
This commit is contained in:
parent
27e54fb59e
commit
0ff41755cd
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=285004
@ -111,6 +111,37 @@ static struct cdev *fbt_cdev;
|
||||
static int fbt_probetab_size;
|
||||
static int fbt_verbose = 0;
|
||||
|
||||
int
|
||||
fbt_excluded(const char *name)
|
||||
{
|
||||
|
||||
if (strncmp(name, "dtrace_", 7) == 0 &&
|
||||
strncmp(name, "dtrace_safe_", 12) != 0) {
|
||||
/*
|
||||
* Anything beginning with "dtrace_" may be called
|
||||
* from probe context unless it explicitly indicates
|
||||
* that it won't be called from probe context by
|
||||
* using the prefix "dtrace_safe_".
|
||||
*/
|
||||
return (1);
|
||||
}
|
||||
|
||||
/* Exclude some internal functions */
|
||||
if (name[0] == '_' && name[1] == '_')
|
||||
return (1);
|
||||
|
||||
/*
|
||||
* When DTrace is built into the kernel we need to exclude
|
||||
* the FBT functions from instrumentation.
|
||||
*/
|
||||
#ifndef _KLD_MODULE
|
||||
if (strncmp(name, "fbt_", 4) == 0)
|
||||
return (1);
|
||||
#endif
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void
|
||||
fbt_doubletrap(void)
|
||||
{
|
||||
|
@ -58,6 +58,7 @@ int fbt_invop(uintptr_t, uintptr_t *, uintptr_t);
|
||||
void fbt_patch_tracepoint(fbt_probe_t *, fbt_patchval_t);
|
||||
int fbt_provide_module_function(struct linker_file *, int,
|
||||
struct linker_symval *, void *);
|
||||
int fbt_excluded(const char *name);
|
||||
|
||||
extern dtrace_provider_id_t fbt_id;
|
||||
extern fbt_probe_t **fbt_probetab;
|
||||
|
Loading…
Reference in New Issue
Block a user