[PATCH 2/2] first stab at NOFORK applet support

Rob Landley rob at landley.net
Tue May 9 04:20:14 UTC 2006


On Saturday 06 May 2006 1:29 am, Denis Vlasenko wrote:
> Consolidating globals consists of consolidating bss and consolidating data.
> Data consolidation is done exactly like bss (that is, all data variables
> are to be put into a structure) with the addition of one
> memcpy(data_buffer, data_template, sizeof(struct DATA))

I just did a cleanup on sed.c, moving all its globals and statics into a 
single global structure called "bbg" (busybox globals).  (I left out the 
"static const" strings, since they're read-only data which doesn't count for 
this purpose.  They might as well be #defines...)

On the whole, the optimizer treated the structure members about the same way 
it treated the statics.  I ran bloatcheck between each variable I moved into 
the structure, and 90% of the time it made no difference.  There were a few 
points where it added a couple extra instructions, but also a few cases where 
it shrank when I converted.

On the whole sed wound up a total of 17 bytes bigger after I'd moved 
everything into the structure, and 10 bytes of that was me having to manually 
initialize a value since everything in the structure starts at 0 now.  Which 
was annoying but within the noise, and I suspect the initalization just moved 
from a bit where bloatcheck can't see it to where it can, since I shrank a 
couple strings and that didn't affect bloatcheck's results, which means nm 
isn't outputting preinitialized data...

I did a couple other small cleanups anyway to bring the size down about 30 
bytes, just to feel better about it.  And I played with the assembly dumps a 
bit to see what it was doing, and the changes were all places where the 
optimizer had put the code through a blender.

Anyway: Dennis.  There's an example of an app with its globals in a structure, 
and although the gcc 4.0 optimizer isn't perfect it at least isn't doing 
anything actively stupid.  (Considering how much work they put into 
optimizing c++, I suspected that would be the case.)

If we want sed to be reentrant, we can memset the structure and live should be 
good modulo resource leaks (memory, open files, etc) which I think 
FEATURE_CLEAN_UP is properly handling right now but it may need a tweak.

What do you think?

Rob
-- 
Never bet against the cheap plastic solution.



More information about the busybox mailing list