[Varnish] #577: 64bit Catch 22 on Solaris (gcc _builtin_xxx functions)

Varnish varnish-bugs at projects.linpro.no
Thu Nov 12 02:22:09 CET 2009

#577: 64bit Catch 22 on Solaris (gcc _builtin_xxx functions)
 Reporter:  whocares  |        Type:  defect
   Status:  new       |    Priority:  normal
Milestone:            |   Component:  build 
  Version:  2.0       |    Severity:  normal
 Keywords:            |  
 Until recently, I was using Sun Studio 12.1 to compile Varnish on Solaris
 10/x86_64. This is no longer possible, because compilation will fail here:

 /opt/SUNWspro/bin/cc -xc99=all -fast -xtarget=opteron -xarch=sse3 -m64 -mt
  -Kpic -o .libs/varnishadm varnishadm.o
  ../../lib/libvarnish/.libs/libvarnish.so -lrt -lm
  ../../lib/libvarnishcompat/.libs/libvarnishcompat.so -lumem -lnsl
 Undefined                       first referenced
  symbol                             in file
 ld: fatal: Symbol referencing errors. No output written to

 This is quite understandable since `__builtin_frame_address` and
 `__builtin_return_address` are functions specific to `gcc`. I'm not really
 happy with theses close ties to `gcc` but, well, that's not for me to
 decide anyway.

 Ok, so I tried to compile using `gcc 3.4.6` from !SunFreeware.com. This
 '''will''' work but only for 32-bit binaries. The `gcc` version supplied
 by !SunFreeware.com just isn't capable of building 64-bit binaries.

 So I did what is "general practice" to build 64-bit binaries on Solaris
 with `gcc`: I used the `gcc 3.4.3` supplied by Sun with Solaris 10. The
 problem there:

 libtool: link: gcc -std=gnu99 -g -O2 -m64 -o .libs/varnishadm varnishadm.o
  -L/usr/sfw/lib/64 ../../lib/libvarnish/.libs/libvarnish.so -lrt -lm
  ../../lib/libvarnishcompat/.libs/libvarnishcompat.so -lnsl -lsocket
   -R/opt/soft/varnish/lib -R/usr/sfw/lib/64
 Undefined                       first referenced
  symbol                             in file

 At this point I decided to build `gcc 4.4.2` from scratch. That seemed to
 work, however now I'm stuck with Varnish not compiling the initial VCL and
 not starting its child processes. I already tried setting VCC_CC to
 different values but couldn't make it work.

 Any ideas? I could quite easily provide access to my dev environment if
 that would help / be of interest.

 Ah, lest I forget: The reason I need to use 64bit binaries is that Varnish
 shall run on a system where it is to use 6 GB of memory based cache. And
 that'll only work with a 64bit binary.


Ticket URL: <http://varnish.projects.linpro.no/ticket/577>
Varnish <http://varnish.projects.linpro.no/>
The Varnish HTTP Accelerator

More information about the varnish-bugs mailing list