[U-Boot] [WIP, PATCH] initcall: An outline of the idea

Laurence Withers lwithers at guralp.com
Sun Mar 4 12:58:27 CET 2012


On Sat, Mar 03, 2012 at 11:46:01PM +1100, Graeme Russ wrote:
> > Perhaps the macro could be expanded to include a prototype for the function,
> 
> How so - Can you provide a code example?

Sure, since all the functions are int(*)(void), just something like this:

+#define INIT_FUNC(fn, init_name, deps) \
+    static int ##fn (void); \
+    static const char __init_func_ ## fn[] __used \
+    __attribute__((__section__(".initfuncs"))) = \
+    "(" #fn ":" #init_name ";" #deps ")\n";

(I'm guessing static is OK for this use case?).

The patch overall looks like it will make it a lot simpler to understand and
change the sequence initialisation functions are called, which is a very good
thing. I'm just mindful of getting easy-to-diagnose error messages back when
things go wrong.

An example:

	static int f1(int x)
	{
		return x + 1;
	}

	#define INIT_FUNC(fn) \
		static void fn(int)

	INIT_FUNC(f1);

gcc immediately throws the following error:

	t2.c:9: error: conflicting types for ‘f1’
	t2.c:1: note: previous definition of ‘f1’ was here

which is pretty clear.

Bye for now,
-- 
Laurence Withers, <lwithers at guralp.com>                http://www.guralp.com/
Direct tel:+447753988197 or tel:+443333408643               Software Engineer
General support queries: <support at guralp.com>         CMG-DCM CMG-EAM CMG-NAM


More information about the U-Boot mailing list