[LLVMdev] GCC assembler rejects native code generated by LLVM

Jeff Cohen jeffc at jolt-lang.org
Mon Mar 7 19:17:17 PST 2005


Yes, but it won't work in the future because the VC++ build will use 
Intel syntax, not AT&T.

If you have mingw installed, why not use it to build LLVM?  It's a lot 
more functional.  Mixing and matching Microsoft and GNU tool chains is 
not good for your sanity.

Vyacheslav Akhmechet wrote:

>Reid,
>
>This patch won't work for me. I compile llvm toolset with MSVC Express
>(hence __MINGW32__ won't be defined for me at compile time). I only
>try to feed the generated assembly into gcc (pretty much gnu
>assembler, I suppose). I don't use mingw tools at the earlier stage.
>However it's obvious for me how to modify the code now (just add MSVC
>at that line), thanks! I'll try it as soon as I can.
>
>Thanks,
>- Vyacheslav.
>
>
>On Mon, 07 Mar 2005 17:32:00 -0800, Reid Spencer <reid at x10sys.com> wrote:
>  
>
>>Vyacheslav,
>>
>>I've tracked down the change and I have a fix for you to test. The
>>attached patch should be applied to the CVS head (version 1.132) of
>>X86AsmPrinter.cpp in llvm/lib/Target/X86. The patch just includes MINGW
>>targets in the same set of choices that it makes for Cygwin. Could you
>>please try the patch and let me know if it solves your problem? If it
>>does, I'll commit the patch.
>>
>>Thanks,
>>
>>Reid.
>>
>>
>>On Mon, 2005-03-07 at 16:39, Vyacheslav Akhmechet wrote:
>>    
>>
>>>Ok, I got home so I have more details. Here's the sample C program:
>>>----------------- C program ---------------
>>>   #include <stdio.h>
>>>   int main() {
>>>     printf("hello world\n");
>>>     return 0;
>>>   }
>>>------------- end C program -------------
>>>
>>>This is compiled using llvm online demo into the following llvm code
>>>(target removed):
>>>----------------- LLVM code --------------
>>>deplibs = [ "stdc++", "c", "crtend" ]
>>>%.str_1 = internal constant [13 x sbyte] c"hello world\0A\00"; <[13 x
>>>sbyte]*> [#uses=1]
>>>
>>>implementation   ; Functions:
>>>
>>>declare int %printf(sbyte*, ...)
>>>
>>>int %main() {
>>>entry:
>>>call void %__main( )
>>>%tmp.0 = call int (sbyte*, ...)* %printf( sbyte* getelementptr ([13 x
>>>sbyte]* %.str_1, int 0, int 0) ); <int> [#uses=0]
>>>ret int 0
>>>}
>>>
>>>declare void %__main()
>>>------------- End LLVM code -----------
>>>
>>>which in turn produces the following assembly code:
>>>
>>>------------- Assembly code -------------
>>>      .text
>>>      .align  16
>>>      .globl  main
>>>      .type   main, @function
>>>main:
>>>      subl $12, %esp
>>>      fnstcw 10(%esp)
>>>      movb $2, 11(%esp)
>>>      fldcw 10(%esp)
>>>      call __main
>>>      movl $l1__2E_str_1, %eax
>>>      movl %eax, (%esp)
>>>      call printf
>>>      movl $0, %eax
>>>      #IMPLICIT_USE
>>>      addl $12, %esp
>>>      ret
>>>
>>>
>>>      .data
>>>      .align  1
>>>      .type l1__2E_str_1, at object
>>>      .size l1__2E_str_1,13
>>>l1__2E_str_1:                         # [13 x sbyte]* %.str_1 =  c"hello world\0A\00"
>>>      .ascii  "hello world\n\000"
>>>---------- End assembly code ----------
>>>
>>>When I try to assemble the above code using
>>>gcc hello.c.s -o hello.exe
>>>I get the following errors:
>>>
>>>hello.c.s: Assembler messages:
>>>hello.c.s:6: Warning: .type pseudo-op used outside of .def/.endef ignored.
>>>hello.c.s:6: Error: junk at end of line, first unrecognized character is `m'
>>>hello.c.s:24: Warning: .type pseudo-op used outside of .def/.endef ignored.
>>>hello.c.s:24: Error: junk at end of line, first unrecognized character is `l'
>>>hello.c.s:25: Warning: .size pseudo-op used outside of .def/.endef ignored.
>>>hello.c.s:25: Error: junk at end of line, first unrecognized character is `l'
>>>
>>>Sorry for the long email. I attach all relevant files for clarity.
>>>
>>>______________________________________________________________________
>>>_______________________________________________
>>>LLVM Developers mailing list
>>>LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>>>http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev
>>>      
>>>
>>
>>    
>>
>
>_______________________________________________
>LLVM Developers mailing list
>LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
>  
>




More information about the llvm-dev mailing list