[LLVMdev] Executable file size comparison

Richard Pennington rich at pennware.com
Thu Dec 8 14:46:49 PST 2011


On Thursday, December 08, 2011 02:46:39 AM Csaba Raduly wrote:
> On Wed, Dec 7, 2011 at 9:43 PM, Richard Pennington  wrote:
> > I compiled a program and standard library using clang/LLVM and found the
> > results interesting:
> > 
> >   text    data     bss     dec     hex filename
> >  141312    4076   16668  162056   27908 bzip2.arm
> >  131764    4076   16668  152508   253bc bzip2.armv7
> >  134748    4048   16624  155420   25f1c bzip2.i386
> >  259112    4028   16732  279872   44540 bzip2.microblaze
> >  168044    4040   16816  188900   2e1e4 bzip2.mips
> >  167860    4040   16816  188716   2e12c bzip2.mips32r2
> >  179032    4040   16816  199888   30cd0 bzip2.mips32r2elsf
> >  179008    4040   16816  199864   30cb8 bzip2.mips32r2sf
> >  168060    4040   16816  188916   2e1f4 bzip2.mipsel
> >  156312    4028   16784  177124   2b3e4 bzip2.ppc
> >  163572   10896   19280  193748   2f4d4 bzip2.ppc64
> >  145443    4696   19368  169507   29623 bzip2.x86_64
> > 
> > The libraries were compiled with -O1 and the program was compiled with
> > -O2. The whole thing was statically linked. I verified that each
> > executable was correct by running the bzip2 test cases under QEMU.
> > 
> > It is interesting to see how the architecture (and maybe maturity of the
> > code generator) affects code size.
> 
> What could be so different in ppc64 that causes "data" to be more than
> twice the size than on any other platform?
> 
> Csaba

Csaba,

It turns out that most of the data space used by the ppc64 is for a little 
table created for each function defined in the program. The table has two 64 
bit pointers in it, one is the address of the function. This is how Linux 
ppc64 executables are built: the table is used to indirectly call functions. 
There are many of these little tables in the program because it is statically 
linked with the standard library.

-Rich



More information about the llvm-dev mailing list