Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/xlint/lint1 lint: add hierarchical debug logging for...



details:   https://anonhg.NetBSD.org/src/rev/a810568c2a1a
branches:  trunk
changeset: 959616:a810568c2a1a
user:      rillig <rillig%NetBSD.org@localhost>
date:      Sat Feb 20 15:23:07 2021 +0000

description:
lint: add hierarchical debug logging for initializations

No functional change for default mode.

diffstat:

 usr.bin/xlint/lint1/init.c |  220 +++++++++++++++++++++++++++++++-------------
 1 files changed, 154 insertions(+), 66 deletions(-)

diffs (truncated from 576 to 300 lines):

diff -r 25f0d91ac7aa -r a810568c2a1a usr.bin/xlint/lint1/init.c
--- a/usr.bin/xlint/lint1/init.c        Sat Feb 20 14:51:06 2021 +0000
+++ b/usr.bin/xlint/lint1/init.c        Sat Feb 20 15:23:07 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: init.c,v 1.67 2021/02/19 22:16:12 rillig Exp $ */
+/*     $NetBSD: init.c,v 1.68 2021/02/20 15:23:07 rillig Exp $ */
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: init.c,v 1.67 2021/02/19 22:16:12 rillig Exp $");
+__RCSID("$NetBSD: init.c,v 1.68 2021/02/20 15:23:07 rillig Exp $");
 #endif
 
 #include <stdlib.h>
@@ -113,9 +113,57 @@
 static bool    initstack_string(tnode_t *);
 
 #ifndef DEBUG
-#define DPRINTF(a)
+#define debug_printf(fmt, ...) (void)0
+#define debug_indent() (void)0
+#define debug_enter(a) (void)0
+#define debug_step(fmt, ...) (void)0
+#define debug_leave(a) (void)0
 #else
-#define DPRINTF(a) printf a
+static int debug_ind = 0;
+
+static void __printflike(1, 2)
+debug_printf(const char *fmt, ...)
+{
+       va_list va;
+
+       va_start(va, fmt);
+       vfprintf(stdout, fmt, va);
+       va_end(va);
+}
+
+static void
+debug_indent(void)
+{
+       debug_printf("%*s", 2 * debug_ind, "");
+}
+
+static void
+debug_enter(const char *func)
+{
+       printf("%*s+ %s\n", 2 * debug_ind++, "", func);
+}
+
+static void __printflike(1, 2)
+debug_step(const char *fmt, ...)
+{
+       va_list va;
+
+       printf("%*s", 2 * debug_ind, "");
+       va_start(va, fmt);
+       vfprintf(stdout, fmt, va);
+       va_end(va);
+       printf("\n");
+}
+
+static void
+debug_leave(const char *func)
+{
+       printf("%*s- %s\n", 2 * --debug_ind, "", func);
+}
+
+#define debug_enter() debug_enter(__func__)
+#define debug_leave() debug_leave(__func__)
+
 #endif
 
 void
@@ -123,7 +171,7 @@
 {
        namlist_t *nam = xcalloc(1, sizeof (namlist_t));
        nam->n_name = sb->sb_name;
-       DPRINTF(("%s: %s %p\n", __func__, nam->n_name, nam));
+       debug_step("%s: %s %p", __func__, nam->n_name, nam);
        if (namedmem == NULL) {
                /*
                 * XXX: Why is this a circular list?
@@ -143,7 +191,7 @@
 static void
 pop_member(void)
 {
-       DPRINTF(("%s: %s %p\n", __func__, namedmem->n_name, namedmem));
+       debug_step("%s: %s %p", __func__, namedmem->n_name, namedmem);
        if (namedmem->n_next == namedmem) {
                free(namedmem);
                namedmem = NULL;
@@ -157,19 +205,20 @@
 }
 
 static void
-named_member_dprint(void)
+debug_named_member(void)
 {
        namlist_t *name;
 
        if (namedmem == NULL)
                return;
        name = namedmem;
-       DPRINTF(("named member:"));
+       debug_indent();
+       debug_printf("named member:");
        do {
-               DPRINTF((" %s", name->n_name));
+               debug_printf(" %s", name->n_name);
                name = name->n_next;
        } while (name != namedmem);
-       DPRINTF(("\n"));
+       debug_printf("\n");
 }
 
 /*
@@ -190,7 +239,7 @@
                free(istk);
        }
 
-       DPRINTF(("%s\n", __func__));
+       debug_step("%s", __func__);
 
        /*
         * If the type which is to be initialized is an incomplete type,
@@ -210,50 +259,54 @@
        istk_t  *istk;
        sym_t   *m;
 
+       debug_enter();
+
        istk = initstk;
-       DPRINTF(("%s: pop type=%s, brace=%d remaining=%d named=%d\n", __func__,
+       debug_step("pop type=%s, brace=%d remaining=%d named=%d",
            type_name(istk->i_type ? istk->i_type : istk->i_subt),
-           istk->i_brace, istk->i_remaining, istk->i_namedmem));
+           istk->i_brace, istk->i_remaining, istk->i_namedmem);
 
        initstk = istk->i_next;
        free(istk);
        istk = initstk;
        lint_assert(istk != NULL);
 
-       DPRINTF(("%s: top type=%s, brace=%d remaining=%d named=%d\n", __func__,
+       debug_step("top type=%s, brace=%d remaining=%d named=%d",
            type_name(istk->i_type ? istk->i_type : istk->i_subt),
-           istk->i_brace, istk->i_remaining, istk->i_namedmem));
+           istk->i_brace, istk->i_remaining, istk->i_namedmem);
 
        istk->i_remaining--;
        lint_assert(istk->i_remaining >= 0);
 
-       DPRINTF(("%s: top remaining=%d rhs.name=%s\n", __func__,
-           istk->i_remaining, namedmem ? namedmem->n_name : "*null*"));
+       debug_step("top remaining=%d rhs.name=%s",
+           istk->i_remaining, namedmem ? namedmem->n_name : "*null*");
 
        if (istk->i_remaining >= 0 && namedmem != NULL) {
 
-               DPRINTF(("%s: named remaining=%d type=%s, rhs.name=%s\n",
-                   __func__, istk->i_remaining,
-                   type_name(istk->i_type), namedmem->n_name));
+               debug_step("named remaining=%d type=%s, rhs.name=%s",
+                   istk->i_remaining, type_name(istk->i_type),
+                   namedmem->n_name);
 
                for (m = istk->i_type->t_str->sou_first_member;
                     m != NULL; m = m->s_next) {
-                       DPRINTF(("%s: pop lhs.name=%s rhs.name=%s\n", __func__,
-                           m->s_name, namedmem->n_name));
+                       debug_step("pop lhs.name=%s rhs.name=%s",
+                           m->s_name, namedmem->n_name);
                        if (m->s_bitfield && m->s_name == unnamed)
                                continue;
                        if (strcmp(m->s_name, namedmem->n_name) == 0) {
                                istk->i_subt = m->s_type;
                                istk->i_remaining++;
                                pop_member();
+                               debug_leave();
                                return;
                        }
                }
                /* undefined struct/union member: %s */
                error(101, namedmem->n_name);
-               DPRINTF(("%s: end rhs.name=%s\n", __func__, namedmem->n_name));
+               debug_step("end rhs.name=%s", namedmem->n_name);
                pop_member();
                istk->i_namedmem = true;
+               debug_leave();
                return;
        }
        /*
@@ -265,10 +318,11 @@
                do {
                        m = istk->i_mem = istk->i_mem->s_next;
                        lint_assert(m != NULL);
-                       DPRINTF(("%s: pop %s\n", __func__, m->s_name));
+                       debug_step("pop %s", m->s_name);
                } while (m->s_bitfield && m->s_name == unnamed);
                istk->i_subt = m->s_type;
        }
+       debug_leave();
 }
 
 /*
@@ -280,13 +334,13 @@
 {
        bool brace;
 
-       DPRINTF(("%s\n", __func__));
+       debug_enter();
        do {
                brace = initstk->i_brace;
-               DPRINTF(("%s: loop brace=%d\n", __func__, brace));
+               debug_step("loop brace=%d", brace);
                initstack_pop_item();
        } while (!brace);
-       DPRINTF(("%s: done\n", __func__));
+       debug_leave();
 }
 
 /*
@@ -297,11 +351,11 @@
 initstack_pop_nobrace(void)
 {
 
-       DPRINTF(("%s\n", __func__));
+       debug_enter();
        while (!initstk->i_brace && initstk->i_remaining == 0 &&
               !initstk->i_nolimit)
                initstack_pop_item();
-       DPRINTF(("%s: done\n", __func__));
+       debug_leave();
 }
 
 static void
@@ -311,11 +365,13 @@
        int     cnt;
        sym_t   *m;
 
+       debug_enter();
+
        istk = initstk;
 
        /* Extend an incomplete array type by one element */
        if (istk->i_remaining == 0) {
-               DPRINTF(("%s(extend) %s\n", __func__, type_name(istk->i_type)));
+               debug_step("(extend) %s", type_name(istk->i_type));
                /*
                 * Inside of other aggregate types must not be an incomplete
                 * type.
@@ -338,17 +394,17 @@
 again:
        istk = initstk;
 
-       DPRINTF(("%s(%s)\n", __func__, type_name(istk->i_type)));
+       debug_step("typename %s", type_name(istk->i_type));
        switch (istk->i_type->t_tspec) {
        case ARRAY:
                if (namedmem != NULL) {
-                       DPRINTF(("%s: ARRAY %s brace=%d\n", __func__,
-                           namedmem->n_name, istk->i_brace));
+                       debug_step("ARRAY %s brace=%d",
+                           namedmem->n_name, istk->i_brace);
                        goto pop;
                } else if (istk->i_next->i_namedmem) {
                        istk->i_brace = true;
-                       DPRINTF(("%s ARRAY brace=%d, namedmem=%d\n", __func__,
-                           istk->i_brace, istk->i_next->i_namedmem));
+                       debug_step("ARRAY brace=%d, namedmem=%d",
+                           istk->i_brace, istk->i_next->i_namedmem);
                }
 
                if (is_incomplete(istk->i_type) &&
@@ -356,14 +412,15 @@
                        /* initialisation of an incomplete type */
                        error(175);
                        initerr = true;
+                       debug_leave();
                        return;
                }
                istk->i_subt = istk->i_type->t_subt;
                istk->i_nolimit = is_incomplete(istk->i_type);
                istk->i_remaining = istk->i_type->t_dim;
-               DPRINTF(("%s: elements array %s[%d] %s\n", __func__,
+               debug_step("elements array %s[%d] %s",
                    type_name(istk->i_subt), istk->i_remaining,
-                   namedmem ? namedmem->n_name : "*none*"));
+                   namedmem ? namedmem->n_name : "*none*");
                break;
        case UNION:
                if (tflag)
@@ -375,19 +432,20 @@
                        /* initialisation of an incomplete type */
                        error(175);



Home | Main Index | Thread Index | Old Index