[DTrace-devel] [PATCH 6/6] Disassembler: coding-style taste test
Kris Van Hees
kris.van.hees at oracle.com
Wed Mar 31 22:45:01 PDT 2021
Let's not do this. I don't think there is any real gain from making those
two functions one-liners based on a larger macro.
On Fri, Mar 19, 2021 at 01:45:34PM -0400, eugene.loh at oracle.com wrote:
> From: Eugene Loh <eugene.loh at oracle.com>
>
> The previous patch for the disassembler replaces
> dt_dis_varname()
> with
> dt_dis_varname_id() and
> dt_dis_varname_off()
>
> Since the two new functions are very similar, this patch proposes
> a preprocessor macro that essentially implements both, making each
> function basically a one-liner. Is this an improvement? I don't
> know. Take a look.
>
> This patch should either be discarded or squashed into the earlier
> disassembler patch. The earlier commit message could be used without
> change.
>
> Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
> ---
> libdtrace/dt_dis.c | 38 ++++++++++++++++----------------------
> 1 file changed, 16 insertions(+), 22 deletions(-)
>
> diff --git a/libdtrace/dt_dis.c b/libdtrace/dt_dis.c
> index 1a589bca..5505b339 100644
> --- a/libdtrace/dt_dis.c
> +++ b/libdtrace/dt_dis.c
> @@ -44,23 +44,27 @@ reg(int r)
> return name[r];
> }
>
> +#define DT_DIS_VARNAME_LOOKUP(field, x) \
> + for (i = 0; i < dp->dtdo_varlen; i++) { \
> + const dtrace_difv_t *dvp = &dp->dtdo_vartab[i]; \
> + if (dvp->field == (x) && \
> + dvp->dtdv_scope == scope && \
> + dvp->dtdv_insn_from <= addr && \
> + dvp->dtdv_insn_to >= addr) { \
> + if (dvp->dtdv_name < dp->dtdo_strlen) \
> + return dp->dtdo_strtab + dvp->dtdv_name; \
> + break; \
> + } \
> + } \
> + return NULL
> +
> static const char *
> dt_dis_varname_id(const dtrace_difo_t *dp, uint_t id, uint_t scope, uint_t addr)
> {
> - const dtrace_difv_t *dvp = dp->dtdo_vartab;
> uint_t i;
>
> id &= 0x0fff;
> - for (i = 0; i < dp->dtdo_varlen; i++, dvp++) {
> - if (dvp->dtdv_id == id && dvp->dtdv_scope == scope &&
> - dvp->dtdv_insn_from <= addr && addr <= dvp->dtdv_insn_to) {
> - if (dvp->dtdv_name < dp->dtdo_strlen)
> - return dp->dtdo_strtab + dvp->dtdv_name;
> - break;
> - }
> - }
> -
> - return NULL;
> + DT_DIS_VARNAME_LOOKUP(dtdv_id, id); /* look up by id */
> }
>
> static const char *
> @@ -68,17 +72,7 @@ dt_dis_varname_off(const dtrace_difo_t *dp, uint_t off, uint_t scope, uint_t add
> {
> uint_t i;
>
> - for (i = 0; i < dp->dtdo_varlen; i++) {
> - const dtrace_difv_t *dvp = &dp->dtdo_vartab[i];
> - if (dvp->dtdv_offset == off && dvp->dtdv_scope == scope &&
> - dvp->dtdv_insn_from <= addr && addr <= dvp->dtdv_insn_to) {
> - if (dvp->dtdv_name < dp->dtdo_strlen)
> - return dp->dtdo_strtab + dvp->dtdv_name;
> - break;
> - }
> - }
> -
> - return NULL;
> + DT_DIS_VARNAME_LOOKUP(dtdv_offset, off); /* look up by offset */
> }
>
> /*ARGSUSED*/
> --
> 2.18.4
>
>
> _______________________________________________
> DTrace-devel mailing list
> DTrace-devel at oss.oracle.com
> https://oss.oracle.com/mailman/listinfo/dtrace-devel
More information about the DTrace-devel
mailing list