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.
Some things to note:Bugs:
Should the `dtsp_inline`, `dtsp_entry` and `dtsp_return` flags be mergedInline functions that are all defined as `static` will not appear in the DWARF
into a `dtsp_flags` field?fo, which will result in dt_sugar thinking that, since we didn't find an
inline copy of it, this is a probe to be converted to FBT. This is incorrect
behaviour and dtrace(1) will exit.
Some things to note:
Are the `warn*()`/`err*()` calls appropriate here? DTrace's `xywarn()` and
`dt_handle_liberr()` are not really want I want.
`dt_sugar_kinst_find_caller_func()` has x86-only code, we'll have to visit it
again when kinst is ported to new platforms. Perhaps an `#ifdef` would be
better than splitting the code into multiple files.