Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 17 Jun 1997 00:19:42 +0900
From:      Shigio Yamaguchi <shigio@wafu.netgate.net>
To:        freebsd-hackers@FreeBSD.ORG
Cc:        shigio@wafu.netgate.net
Subject:   an inconvenience about macro [/usr/src/sys/sys/kernel.h]
Message-ID:  <199706160722.HAA10719@wafu.netgate.net>

next in thread | raw e-mail | index | archive | help
Hello hackers.

I found an inconvenience in kernel source. (It is not a bug.)
What do you think?

---------------------------------------------------------------------------
Inconvenience about Macro
---------------------------------------------------------------------------

In /usr/src/sys/kern/init_main.c, SYSINIT macro is used. It is like this.

	[/usr/src/sys/kern/init_main.c]
	SYSINIT(placeholder, SI_SUB_DUMMY,SI_ORDER_ANY, NULL, NULL)

SYSINIT doesn't end with ';', because the definition already has it.

	[/usr/src/sys/sys/kern.h]
	#define	SYSINIT(uniquifier, subsystem, order, func, ident)	\
		static struct sysinit uniquifier ## _sys_init = {	\
			subsystem,					\
			order,						\
			func,						\
			ident,						\
			SI_TYPE_DEFAULT					\
		};							\
		DATA_SET(sysinit_set,uniquifier ## _sys_init);
							     ^
							     |
                                                        END WITH ';'

But ctags(1) cannot treat this pattern.

For example, in these code

	[/usr/src/sys/kern/init_main.c]
	SYSINIT(placeholder, SI_SUB_DUMMY,SI_ORDER_ANY, NULL, NULL)	... (a)

	.....
	void
	main(framep)							... (b)
		void *framep;
	{
	.....
	}								... (c)

Ctags(1) assumes SYSINIT start at (a) and end at (c). As the result that
main() functin is skipped.

I think the definition of SYSINIT should not end with ';' and the referenced
point should end with ';' like this.

	SYSINIT(placeholder, SI_SUB_DUMMY,SI_ORDER_ANY, NULL, NULL);

By the way, in the same source file(/usr/src/sys/sys/kern.h), MAKE_SET's code
is good.

	[/usr/src/sys/sys/kern.h]
	#define MAKE_SET(set, sym, type) \
		static void const * const __set_##set##_sym_##sym = &sym; \
		asm(".stabs \"_" #set "\", " #type ", 0, 0, _" #sym)

In this macro, the first statement ends with ';' and the second (=last)
statement doesn't end with ';'. It should be so.
--
Shigio Yamaguchi (Freelance programmer)
	Mail: shigio@wafu.netgate.net, WWW: http://wafu.netgate.net/tama/



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199706160722.HAA10719>