Re: [PATCH] Make `obsolete params' work correctly if MODULE_SYMBOL_PRE

Richard B. Johnson (root@chaos.analogic.com)
Mon, 13 Jan 2003 15:28:45 -0500 (EST)


On 13 Jan 2003, Kai Henningsen wrote:

> rusty@rustcorp.com.au (Rusty Russell) wrote on 11.01.03 in <20030111224007$7807@gated-at.bofh.it>:
>
> > In message <Pine.LNX.4.44.0301102134150.9532-100000@home.transmeta.com> you
> > wri te:
> > >
> > > On Sat, 11 Jan 2003, Rusty Russell wrote:
> > > >
> > > > Just in case someone names a variable over 2000 chars, and uses it as
> > > > an old-style module parameter?
> > >
> > > No. Just because variable-sized arrays aren't C, and generate crappy code.
> > >
> > > > for (i = 0; i < num; i++) {
> > > > + char sym_name[strlen(obsparm[i].name)
> > > > + + sizeof(MODULE_SYMBOL_PREFIX)];
> > >
> > > It's still there.
> >
> > OK, *please* explain to me in little words so I can understand.
>
> Do "char sym_name[CONSTANT];". What's so hard to understand about that?
>
> > Variable-sized arrays are C, as of C99. They've been a GNU extension
> > forever.
>
> Actually, the gcc thing and the C99 thing are significantly different, and
> neither is a sub- or superset of the other. In fact, gcc's C99-conformance
> page (http://gcc.gnu.org/c99status.html) still lists VLAs as "broken".
>
> See here for at least some explanation:
> http://gcc.gnu.org/ml/gcc/2002-10/msg00470.html
>
> > While gcc 2.95.4 generates fairly horrible code, gcc 3.0 does better
> > (the two compilers I have on my laptop).
> >
> > Both generate correct code.
>
> For the GNU extension, maybe.
>
> MfG Kai

In principle, the idea of variable-length arrays should cause
the compiler to generate very reasonable code because the
length is only a value to subtract from ESP.

void foo(int len)
{
char use[0x100];
char bar[len];
}

In the case of 'use', the compiler subtracts (0x100 * sizeof(char))
from the current stack value and uses that as the location for 'use'.
In the case of 'bar' the compiler subtracts (len * sizeof(char))
from the current stack value and uses that as the location for 'bar'.

Cheers,
Dick Johnson
Penguin : Linux version 2.4.18 on an i686 machine (797.90 BogoMips).
Why is the government concerned about the lunatic fringe? Think about it.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/