[DTrace-devel] [PATCH 5/7] Introduce a 'raw' error reporting mechanism
Eugene Loh
eugene.loh at oracle.com
Tue Dec 6 23:05:33 UTC 2022
Reviewed-by: Eugene Loh <eugene.loh at oracle.com>
though I don't really understand the architecture here.
On 12/6/22 16:50, Kris Van Hees via DTrace-devel wrote:
> The error handling mechanism between libdtrace and consumer front-ends
> (like dtrace) only allowed the reporting of error messages related to
> probing activity. There is a need to allow libdtrace API functions
> the ability to report error conditions to the consumer front-end.
> Especially errors encountered while enabling probes can benefit from
> this mechanism to report the issues.
>
> Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
> ---
> libdtrace/dt_handle.c | 20 ++++++++++++++++++++
> libdtrace/dt_impl.h | 1 +
> 2 files changed, 21 insertions(+)
>
> diff --git a/libdtrace/dt_handle.c b/libdtrace/dt_handle.c
> index 3c8f0287..670b521e 100644
> --- a/libdtrace/dt_handle.c
> +++ b/libdtrace/dt_handle.c
> @@ -209,6 +209,26 @@ no_addr:
> return 0;
> }
>
> +int
> +dt_handle_rawerr(dtrace_hdl_t *dtp, const char *errmsg)
> +{
> + dtrace_errdata_t err;
> +
> + err.dteda_ddesc = NULL;
> + err.dteda_pdesc = NULL;
> + err.dteda_cpu = -1;
> + err.dteda_action = -1;
> + err.dteda_offset = -1;
> + err.dteda_fault = DTRACEFLT_LIBRARY;
> + err.dteda_addr = 0;
> + err.dteda_msg = errmsg;
> +
> + if ((*dtp->dt_errhdlr)(&err, dtp->dt_errarg) == DTRACE_HANDLE_ABORT)
> + return dt_set_errno(dtp, EDT_ERRABORT);
> +
> + return 0;
> +}
> +
> int
> dt_handle_liberr(dtrace_hdl_t *dtp, const dtrace_probedata_t *data,
> const char *faultstr)
> diff --git a/libdtrace/dt_impl.h b/libdtrace/dt_impl.h
> index 4b8ce0a6..3e14d69d 100644
> --- a/libdtrace/dt_impl.h
> +++ b/libdtrace/dt_impl.h
> @@ -786,6 +786,7 @@ extern int dt_print_llquantize(dtrace_hdl_t *, FILE *, const void *, size_t,
> extern int dt_print_agg(const dtrace_aggdata_t *, void *);
>
> extern int dt_handle(dtrace_hdl_t *, dtrace_probedata_t *);
> +extern int dt_handle_rawerr(dtrace_hdl_t *, const char *);
> extern int dt_handle_liberr(dtrace_hdl_t *,
> const dtrace_probedata_t *, const char *);
> extern int dt_handle_cpudrop(dtrace_hdl_t *, processorid_t,
More information about the DTrace-devel
mailing list