Reid Spencer
2005-Mar-08 01:32 UTC
[LLVMdev] GCC assembler rejects native code generated by LLVM
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>
Vyacheslav Akhmechet
2005-Mar-08 01:45 UTC
[LLVMdev] GCC assembler rejects native code generated by LLVM
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 > > >
Vyacheslav Akhmechet
2005-Mar-08 03:16 UTC
[LLVMdev] GCC assembler rejects native code generated by LLVM
Ok, I just tried the patch with some modifications (added msvc target and used WIN32 instead of __MINGW32__ for preprocessor) and everything worked beautifully. Thanks for the help! On Mon, 7 Mar 2005 20:45:40 -0500, Vyacheslav Akhmechet <coffeemug at gmail.com> 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 > > > > > > >
Jeff Cohen
2005-Mar-08 03:17 UTC
[LLVMdev] GCC assembler rejects native code generated by LLVM
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 > > > >
Maybe Matching Threads
- [LLVMdev] GCC assembler rejects native code generated by LLVM
- [LLVMdev] GCC assembler rejects native code generated by LLVM
- [LLVMdev] GCC assembler rejects native code generated by LLVM
- [LLVMdev] GCC assembler rejects native code generated by LLVM
- [LLVMdev] GCC assembler rejects native code generated by LLVM