[BusyBox] Re: Long term code compactness regression

Aaron Lehmann aaronl at vitelus.com
Fri Oct 26 18:35:43 UTC 2001


On Sat, Oct 27, 2001 at 12:46:52AM +0200, Jan Hubicka wrote:
> For i386, you may try -mpreferred-stack-boundary=2 that is the most common
> cause of code size growth on 2.95.0+ compilers for i386.

I ran my tests again with -mpreferred-stack-boundary=2 where
available.

gcc version		options								size
2.7.2.3			-O2									214284
3.0.2			-O2 -mpreferred-stack-boundary=2	212844
2.95.4-pre		-O2	-mpreferred-stack-boundary=2	204076
HEAD			-O2 -mpreferred-stack-boundary=2	202616

Well, that is looking better!

I did have the problem that gcc from HEAD ICE'd on telnet.c:

/usr/local/gcc/bin/gcc -I /home/aaronl/src/busybox/newbus/include -Wall -Wstrict-prototypes -Wshadow -Os -fomit-frame-pointer -D_GNU_SOURCE  -mpreferred-stack-boundary=2   -c -o telnet.o telnet.c
[snip warnings]
telnet.c: In function `telnet_main':
telnet.c:627: Internal compiler error in eliminate_regs, at reload1.c:2576
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.

I wanted to submit the preprocessed source, but, oddly, the problem
does not occur when I preprocess the source using cpp. When I used gcc
-E, the preprocessed source did exhibit the problem. I ran diff on the
two outputs and it seems that only gcc -E would expand things such as
htons():

-        addr->sin_port = htons(port);
+        addr->sin_port = (__extension__ ({ register unsigned short int __v; if (__builtin_constant_p (port)) __v = ((((port) >> 8) & 0xff) | (((port) & 0xff) << 8)); else __asm__ __volatile__ ("rorw $8, %w0" : "=r" (__v) : "0" ((unsigned short int) (port)) : "cc"); __v; %})); 

I'm not sure why, but I've put the one that does exhibit the problem
up at http://people.debian.org/~aaronl/telnet.gcc-E.i.gz. It will
cause an ICE when compiled with -O[23s], on gcc 3.1 20011026
(experimental).





More information about the busybox mailing list