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.