[LLVMdev] GCC assembler rejects native code generated by LLVM

Vyacheslav Akhmechet coffeemug at gmail.com
Mon Mar 7 16:39:23 PST 2005


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.
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: hello.c.s
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20050307/09270a51/attachment.ksh>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: hello.c
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20050307/09270a51/attachment.c>


More information about the llvm-dev mailing list