Messages in this thread | | | Date | Mon, 13 Jan 2003 15:28:45 -0500 (EST) | From | "Richard B. Johnson" <> | Subject | Re: [PATCH] Make `obsolete params' work correctly if MODULE_SYMBOL_PRE |
| |
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/
| |