[LLVMdev] GCC assembler rejects native code generated by LLVM
Reid Spencer
reid at x10sys.com
Mon Mar 7 17:19:25 PST 2005
Vyacheslav,
This is the same problem that I had with Cygwin .. nearly identical.
The issue was documented in PR492 if you want some background. I'm
currently trying to dig up what I did to fix this in December for Cygwin
and see if I can apply the same change for mingw.
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 --------------
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/f34cdf94/attachment.sig>
More information about the llvm-dev
mailing list