[LLVMdev] GCC assembler rejects native code generated by LLVM

Reid Spencer reid at x10sys.com
Mon Mar 7 17:32:00 PST 2005


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
-------------- next part --------------
Index: X86AsmPrinter.cpp
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/Target/X86/X86AsmPrinter.cpp,v
retrieving revision 1.132
diff -r1.132 X86AsmPrinter.cpp
89c89
< #ifdef __CYGWIN__
---
> #if defined(__CYGWIN__) || defined(__MINGW32__)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20050307/f02fe591/attachment.sig>


More information about the llvm-dev mailing list