[cfe-dev] clang builds on Sparc/Linux!

Kelly Wilson wilsonk at cpsc.ucalgary.ca
Tue Jul 24 02:10:07 PDT 2007


Hello everyone,

I am not sure if this is the correct list for this, but I think so,
because llvm-gcc didn't build error-free on Sparc/Linux last time I
tried....but clang does!

I am running an Enterprise 250 with Dual UltraSparc II's and 2 Gb ram
running Aurora Sparc Linux 2.0 (2.6.13 kernel for Aurora is based on
Fedora Core 3). GCC version 3.4.2.

I built llvm-2.0 (not the svn version but the download version) by just
typing "./configure;make". I then downloaded clang from the svn
repository (revision 40382) and changed to it's directory
under .../llvm/tools/clang. I did a "make" without incident for clang,
as well. Woohoo.

I tried a few examples and everything seemed to work fine, as far as
llvm, some simple clang functionality and the JIT examples go. Then I
ran this contrived example through clang and llvm:

int x;
int func1 (int g) {
   return g;
}
int main()
{
   printf("Hello World %d times\n", func1(5));
}


with this command:

clang ./ex1.c -emit-llvm | llvm-as | opt -std-compile-opts | llc
-march=sparc > ex1.S




This worked fine and the code gen looked fine, except for two things:

         .text
         .align  16
         .globl  func1
         .type   func1, #function
func1:
         save -96, %o6, %o6<---------------change
         restore %g0, %g0, %g0
         retl
         nop


         .align  16
         .globl  main
         .type   main, #function
main:
         save -96, %o6, %o6<---------------change
         sethi %hi(.str), %l0
         add %l0, %lo(.str), %o0
         or %g0, 5, %o1
         call printf
         nop
         !IMPLICIT_DEF %i0
         restore %g0, %g0, %g0
         retl
         nop


         .globl x
.bss <-------------------------------------remove
         .align 4
         .type x,#object
         .size x,4
x:
         .skip   4


.data
         .align 1
         .type .str,#object
         .size .str,22
.str:
         .asciz  "Hello World %d times\n"



The two problems with this output. "save -96, %o6, %o6" should read
"save %o6, -96, %o6" at both function entry points, and the ".bss"
section identifier needs to be removed. THEN GCC CAN ASSEMBLE/LINK THIS
AND IT RUNS!!!!! Cool, now you have a new OS/arch pair to run LLVM on,
though I may be the only one running this pair ;)


Let me know if anyone wants anymore information. I will do some more
testing and let you know how it goes.

Thanks,
Kelly Wilson


P.S. Maybe I should cross-post this to llvm-dev so that the Sparc
backend writers can see it? I also have a couple very small diff's to
fix these two problems in the Sparc backend...should I post them to
llvm-dev?







More information about the cfe-dev mailing list