The following code implements inline tracing for the kinst DTrace
provider.
Briefly explained, what the code does is, for each probe of the form:
kinst::<inline_func>:<entry/return>
libdtrace checks to see if <inline_func> is indeed an inline function,
where in this case it finds all inline copies of it and creates new
probes for each one of them. Otherwise, it converts the probe to an FBT
one so that we don't duplicate FBT's functionality in kinst.
Notes:
Unlike FBT, leaving the probe name empty won't trace both entry and
return. kinst goes into "inline-tracing mode" only when it sees
entry/return in the probe name, otherwise it thinks it's a regular kinst
probe, in which case the dtrace(1) invocation will fail if we try to
trace an inline function with an empty probe name.
Sponsored by: The FreeBSD Foundation
MFC after: 1 week