[U-Boot] [RFC] New init sequence processing without init_sequence array
Wolfgang Denk
wd at denx.de
Wed Aug 24 08:48:18 CEST 2011
Dear Graeme Russ,
In message <CALButCLX42Q=u33gCOKA+LoZZ+RZO1Y-SXNhE8MK66DfrU9YPA at mail.gmail.com> you wrote:
>
> > But frankly: do you consider this list above _readable_?
...
> grep is your friend - All you need to to is grep for GLOBAL (actually I
> think COMMON is a better name) and the ARCH, SOC, and BOARD keywords in
> the namespace for your board and voila - You have a sorted list of the
> init sequence for you board
Yes, this is exactly what I mean. I will need additional tools to
be able to read the code. I cannot - for example - print a few pages
of source code and check the lines that worked, or similar.
> > It would be trivial to enable printing the names from the loop; we
> > can't do it because we don't have the needed prerequisites yet in most
> > cases.
>
> How so? I cannot see how you could create a macro which when used in the
> static array initialiser would send the function pointers to one array and
> the string names (or pointers to) to another array.
See the example in the CPP info pages: cpp.info, Node: Concatenation:
#define COMMAND(NAME) { #NAME, NAME ## _command }
> How does debugging in that case work now? There is no difference between
> the two implementations - the only thing I am changing is:
Right. So we cannot say that the initcall code is any improvment here.
> > The difference is that I have a source file for reference.
>
> Huh? You still do in the initcall case
Agreed. I should have written: I have a _readable_ source file that
can be parsed without additional tools.
> > With the init.h as above I have no such reference.
>
> No reference to what? - the static array of function pointers? This is of
> little use anyway as all your debug stepping will do is pick up the next
> value from the array
But I can _see_ what the next entry will be.
> No, it becomes a clean linear list of the init sequence from which you
> can easily grep out the noise. This list will never have an init step
> defined out-of-order. If INIT_YOUR_BOARD_ETHERNET occurs after
> INIT_YOUR_ARCH_PCI in the list then you know your board initialises its
> Ehternet after the arch has initialised PCI
If I see some INIT_YOUR_ARCH_FOO in this list - how can I see if this
is actually being executed on my specific board? This might depend on
a number of feature selections, so it is run on one board but not on
another.
Yes, you remove the #ifdef's - but here in this case this is exactly
the information that would be needed one way or another.
I bet that rather sooner than later you will end up with some toold
that parses either the ELF file or the linker map or the symbol table
to generate a readable list for the current build. I bet a case of
beer that you will need such a tool. We don't need it now.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
If there are self-made purgatories, then we all have to live in them.
-- Spock, "This Side of Paradise", stardate 3417.7
More information about the U-Boot
mailing list