やっと動いたよー
langhook = namespace { function callgraph_expand ( t ) { gcc.tree_rest_of_compilation( t ); } }; function build_assignment( dst, src ) { return gcc.build2( gcc.MODIFY_EXPR, types.integer_type_node, dst, src ); } function build_return( func, retval ) { var ret = func.result; return gcc.build1( gcc.RETURN_EXPR, types.void_type_node, build_assignment(ret,retval) ); } var functype = gcc.build_function_type( types.integer_type_node, [types.void_type_node] ); var func = gcc.build_decl( gcc.FUNCTION_DECL, `main, functype ); func.static = 1; func.public = 1; func.arguments = null; var result = gcc.build_decl( gcc.RESULT_DECL, null, types.integer_type_node ); result.context = func; func.result = result; gcc.allocate_struct_function( func ); var block = gcc.build_block( null, null, null, null, null ); var body = gcc.alloc_stmt_list(); body.append_to( build_return(func,0) ); func.saved_tree = gcc.build3( gcc.BIND_EXPR, types.void_type_node, block.vars, body, block ); func.initial = block; gcc.gimplify_function_tree( func ); gcc.cgraph_finalize_function( func, false ); gcc.cgraph_finalize_compilation_unit(); gcc.cgraph_optimize();
これが、
.file "a.c}" .text .globl main .type main, @function main: pushl %ebp movl %esp, %ebp movl $0, %eax leave ret .size main, .-main .ident "GCC: (GNU) 4.0.1" .section .note.GNU-stack,"",@progbits
こんな感じ。
http://morihyphen.hp.infoseek.co.jp/files/ilog-vmkinen.tar.gz
記念に今までのを置いときます。使いかたは今度書く。