[LLVMdev] Patches for Solaris on x86 solaris
Nathan Keynes
Nathan.Keynes at Sun.COM
Thu May 29 22:17:08 PDT 2008
Hi all,
As mentioned earlier, we've been working on getting LLVM to build on
Solaris on x86/x86-64. The changes required turned out to be fairly
minor, so it's perhaps a bit of a stretch to call it a "port". There
were two main issues that we ran into here:
1. The Solaris x86 ABI by default defines the x86 registers CS,
DS, ES, etc in the system headers, which clashes with their use in
LLVM. It is possible to exclude these defines with -
D_POSIX_C_SOURCE=199506L -U_XOPEN_SOURCE, which will compile LLVM
successfully, but unfortunately llvm-gcc-4.2 will not build with these
flags.
Possible solutions:
a. Add #undefs for all register names to the relevant header
files
b. Rename all clashing variable names in LLVM (some 950-odd
lines)
c. Rename all clashing variable names in LLVM include files,
and compile LLVM only with the above flags
The patches below implement the last solution above, as it's the
smallest change - if there's a preference for a different approach I'm
happy to modify accordingly. The global rename is perhaps the better
solution long-term, but it would require changes to the current naming
scheme. (eg CallSite CS, FileStream FS)
2. The output from Solaris nm is just sufficiently different from
GNU nm to break GenLibDeps.pl - modified the latter to be slightly
more permissive. An alternative fix would be to ensure that a GNU nm
is located by configure, but this seems to be the simpler fix for now.
Outstanding issues:
1. make check fails to run on default *-*-solaris* installations,
primarily due to dependencies on GNU tools (grep, sh, etc).
2. llvm-gcc-4.2 fails to generate valid object code on Solaris
(but does generate perfectly normal LLVM output with --emit-llvm). It
also requires quite a complex configure line[0], but this looks to be
an upstream (GCC 4.2) issue.
Attached patches against svn trunk:
llvm-solaris-1.patch - Add macro definitions to CXX.Flags for
SunOS only
llvm-solaris-2.patch - Lowercase all instances of CS/DS/ES/FS in
llvm include files
llvm-solaris-3.patch - Modify GenLibDeps.pl to accept Solaris nm
output
llvm-gcc-4.2-solaris.patch - Lowercase all instances of CS/DS/ES/
FS in llvm-gcc-4.2 source
Built successfully on i386-pc-solaris2.10 (32- & 64-bit), i386-pc-
solaris2.11 (32- & 64-bit), sparc-sun-solaris2.10[1], and i686-apple-
darwin9.
Cheers,
Nathan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: llvm-solaris-1.patch
Type: application/octet-stream
Size: 547 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20080530/4457449f/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: llvm-solaris-2.patch
Type: application/octet-stream
Size: 13605 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20080530/4457449f/attachment-0001.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: llvm-solaris-3.patch
Type: application/octet-stream
Size: 479 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20080530/4457449f/attachment-0002.obj>
-------------- next part --------------
-------------- next part --------------
A non-text attachment was scrubbed...
Name: llvm-gcc-4.2-solaris.patch
Type: application/octet-stream
Size: 949 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20080530/4457449f/attachment-0003.obj>
-------------- next part --------------
[0] e.g. ../llvm-gcc-4.2/configure --enable-llvm=${LLVMTARGET} --
disable-shared --with-gnu-as --with-as=/usr/sfw/bin/gas --without-gnu-
ld --with-ld=/usr/ccs/bin/ld --enable-languages=c,c++
[1] There seems to be an unrelated issue preventing llvm-gcc-4.2
compilation on SPARC, but LLVM itself builds without problems.
More information about the llvm-dev
mailing list