[PATCH] dissect: use struct symbol::visited/inspected instead of ::examined/evaluated

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

 



The dissect client uses struct symbol's fields 'examined' & 'evaluated'
to avoid reprocessing the same symbols. But these fields are used
internally by sparse for type examination & evaluation and despite
dissect not doing these operations explicitly, they can be done
implicitly (for example to handle static assertions or when the
value of a constant expression is needed).

So, add a new field to struct symbol: 'inspected' and use it, as
well as the existing 'visited', instead of 'evaluated' & 'examined'.

Note: when used on the kernel, this patch avoids a lot of warnings:
	"warning: r_member bad sym type=7 kind=0"
	"warning: r_member bad mem->kind = 0"
      and creates substantially more normal output.

Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx>
---
 dissect.c | 8 ++++----
 symbol.h  | 1 +
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/dissect.c b/dissect.c
index fd09707dbf67..582e8fc32e46 100644
--- a/dissect.c
+++ b/dissect.c
@@ -204,9 +204,9 @@ static void examine_sym_node(struct symbol *node, struct symbol *parent)
 	struct ident *name = node->ident;
 	struct symbol *base, *dctx;
 
-	if (node->examined)
+	if (node->visited)
 		return;
-	node->examined = 1;
+	node->visited = 1;
 	node->kind = 'v';
 
 	while ((base = node->ctype.base_type) != NULL)
@@ -228,9 +228,9 @@ static void examine_sym_node(struct symbol *node, struct symbol *parent)
 			break;
 
 		case SYM_STRUCT: case SYM_UNION: //case SYM_ENUM:
-			if (base->evaluated)
+			if (base->inspected)
 				return;
-			base->evaluated = 1;
+			base->inspected = 1;
 			base->kind = 's';
 
 			if (!base->symbol_list)
diff --git a/symbol.h b/symbol.h
index c2b60ce91c27..08d1134a7d82 100644
--- a/symbol.h
+++ b/symbol.h
@@ -209,6 +209,7 @@ struct symbol {
 		struct {			/* sparse ctags */
 			char kind;
 			unsigned char visited:1;
+			unsigned char inspected:1;
 		};
 	};
 	pseudo_t pseudo;
-- 
2.28.0




[Index of Archives]     [Newbies FAQ]     [LKML]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Trinity Fuzzer Tool]

  Powered by Linux