2.6 kernel, switch/case statement and stack usage

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello:

I have run into an annoying problem writing some kernel code in AS 4 update 4 environment. I was seeing stack overflows and found the problem.

Some not very long case/switch cases (15-25 statements) are compiled by gcc compiler to use between 500 and 2000 bytes of stack space. This even for using enums that run from 0 to N without holes (in which case gcc optimizer is supposed to generate a table). Kbuild is used to build all code, I do not use stack variables at all (except for 2 or 3 ints and function args), and some of the code is even as simple as calling a separate function for each case statement. Re-writing the code to use a call function table for consecutive enums solved the problem in that specific code -- nearly 0 stack usage. But there is also code that uses kernel non-consecutive enums and does not necessarily call functions for case entries (these are also most problematic places where compiler "eats" up to 2 KB of stack). Writing my own hash implementation and jump table instead of switch/case statement seems an annoying ugly hack to me even though I can do it.

Is it a known gcc/kernel 4K stack limitation (i.e. switch/case is a problem in 2.6 with 4K stack)? Is there an option to tell gcc "stack is small, do not over-use it" ?

My concern is that there is core kernel code affected by this. I do not think the problem is specific to AS 4, but will show up in Fedora as well.

I am sure there is no mistake, and the problem is switch/case construct and not what is under case (this has been verified). BTW, using if/else if/else if generates nearly identical code and does not solve the stack usage problem.

Comments?

--
----------------------------------------
Constantine Gavrilov
Kernel Developer
Qlusters Software Ltd
1 Azrieli Center, Tel-Aviv
Phone: +972-3-6081977
Fax:   +972-3-6081841
----------------------------------------


[Index of Archives]     [Fedora General Discussion]     [Older Fedora Users Archive]     [Fedora Advisory Board]     [Fedora Security]     [Fedora Devel Java]     [Fedora Legacy]     [Fedora Desktop]     [ATA RAID]     [Fedora Marketing]     [Fedora Mentors]     [Fedora Package Announce]     [Fedora Package Review]     [Fedora Music]     [Fedora Packaging]     [Centos]     [Fedora SELinux]     [Coolkey]     [Yum Users]     [Tux]     [Yosemite News]     [KDE Users]     [Fedora Art]     [Fedora Docs]     [USB]     [Asterisk PBX]

  Powered by Linux