diff mbox series

[3/3] dissect: Show typedefs

Message ID 20211102140645.83081-4-gladkov.alexey@gmail.com (mailing list archive)
State Mainlined, archived
Headers show
Series semind: Index more symbols | expand

Commit Message

Alexey Gladkov Nov. 2, 2021, 2:06 p.m. UTC
For indexing purposes, it is useful to see type definitions.

$ semind search __kernel_ulong_t
(def) include/uapi/asm-generic/posix_types.h 16 23 typedef unsigned long   __kernel_ulong_t;

Signed-off-by: Alexey Gladkov <gladkov.alexey@gmail.com>
---
 dissect.c      | 13 ++++++++++++-
 test-dissect.c |  2 ++
 2 files changed, 14 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/dissect.c b/dissect.c
index 7d5d92c9..300d5ca9 100644
--- a/dissect.c
+++ b/dissect.c
@@ -615,6 +615,11 @@  static inline bool is_macro(struct symbol *sym)
 	return (sym->namespace == NS_MACRO || sym->namespace == NS_UNDEF);
 }
 
+static inline bool is_typedef(struct symbol *sym)
+{
+	return (sym->namespace == NS_TYPEDEF);
+}
+
 static inline struct symbol *do_symbol(struct symbol *sym)
 {
 	struct symbol *type = base_type(sym);
@@ -659,7 +664,7 @@  static void do_sym_list(struct symbol_list *list)
 
 static inline bool valid_namespace(enum namespace ns)
 {
-	return (ns == NS_MACRO || ns == NS_UNDEF || ns == NS_STRUCT || ns == NS_SYMBOL);
+	return (ns == NS_TYPEDEF || ns == NS_MACRO || ns == NS_UNDEF || ns == NS_STRUCT || ns == NS_SYMBOL);
 }
 
 static void do_file(char *file)
@@ -673,6 +678,12 @@  static void do_file(char *file)
 
 	DO_LIST(file_scope->symbols, sym,
 		if (input_streams[sym->pos.stream].fd != -1 && valid_namespace(sym->namespace)) {
+			if (is_typedef(sym)) {
+				sym->kind = 't';
+				reporter->r_symdef(sym);
+				continue;
+			}
+
 			if (is_macro(sym)) {
 				sym->kind = 'd';
 				reporter->r_symdef(sym);
diff --git a/test-dissect.c b/test-dissect.c
index 3d870a97..65b205f8 100644
--- a/test-dissect.c
+++ b/test-dissect.c
@@ -63,6 +63,8 @@  static void r_symbol(unsigned mode, struct position *pos, struct symbol *sym)
 		if (sym->type == SYM_STRUCT || sym->type == SYM_UNION)
 			break;
 		goto err;
+	case 't':
+		break;
 	case 'f':
 		if (sym->type != SYM_BAD && sym->ctype.base_type->type != SYM_FN)
 			goto err;