1 Sep 2007 01:02
Re: maturity and status and attributes, oh my!
Dave Jones <davej <at> redhat.com>
2007-08-31 23:02:15 GMT
2007-08-31 23:02:15 GMT
On Fri, Aug 31, 2007 at 05:38:34PM -0400, Robert P. J. Day wrote: > it may be that some people had a different understanding of what was > meant by "maturity" than i did. what *i* meant by that attribute is > a feature's current position in the normal software life cycle, and > that would be one of: > > experimental -> normal (stable) -> deprecated -> obsolete Life isn't so black and white. * We have stuff go into the tree that isn't experimental on a regular basis, due to proving outside of Linus' tree, be that in -mm, or a distro tree, or anywhere else. * We've had code become undeprecated a few times. * Likewise stuff has sometimes got so fucked up that it's become experimental again (see the longhaul driver for a great example of a catastrophe in motion). > it's a natural progression and, at any point, a feature cannot > possibly have more than one maturity value. it would be as absurd as > saying that someone was a teenager *and* was a twenty-something at the > same time. not possible. Again, not so black and white. It's feasible that something can be experimental on one architecture, stable on another (typically x86), or even deprecated on x86, but still supported on other architectures. It's not just a per arch thing either, in some cases, we've had differing levels of maturity based upon other hardware constraints, or even varying versions of system software.(Continue reading)
simplify_symbols() -> resolve_symbol() is called to resolve /external/
symbols that the module-being-loaded references, and error out in case
no such (global, exported) symbol was currently found.
So the "sym[i]" there refers to the (as yet unresolved) symbol referenced
in the _dependent module B_, that it sees exported as a weak symbol
(probably because marked as such in some header prototype). That check is
to support usage where we still allow B to load without A being loaded,
because it's somehow ensured that B will never call that function at
runtime unless it is available ... something like:
extern void mod_a_func(void) __attribute__((weak));
static int __init mod_b_init(void)
{
if (mod_a_func)
mod_a_func();
else {
RSS Feed