GCC Cross Compiler无法通过void main()测试

时间:2011-06-01 17:31:56

标签: gcc cross-compiling

我正在构建一个交叉编译器,它将c代码转换为我正在使用的处理器的程序集。经过几个小时的工作,我设法得到xgcc.exe进行编译,以便我可以开始使用它来吐出实际的操作码。但是,在尝试编译一个简单的void主代码时,我遇到了麻烦:

void main(){}

当我运行它时,我得到以下内部编译器错误

(call_ins 3 2 5 2 (call (mem SI ("__main") [flags 0x41]) [0 S4 A8])

(const_int 0 [0])) test.c:1 -1

(expr_list REG_EH_REGION (const_int 0 [0]) (nil)) (nil))

Internal compiler error: in extract_insn, at recog.c: 2109

我确实从类似于我的工作处理器(moxie)复制了一个机器描述符文件,但它仍然会产生相同的错误。应该与此错误协作的行是:

(define_expand "call_value"
  [(set (match_operand:SI 0 "memory_operand" "")
        (call (match_operand:SI 1 "memory_operand" "")
         (match_operand:SI 2 "memory_operand" "")))]
  ""
{
  gcc_assert (MEM_P (operands[1]));
})"

但是我已经改变了很多部分,但我还没有成功。有关导致此错误的原因的任何想法?

1 个答案:

答案 0 :(得分:0)

经过一番黑客攻击后,我解决了这个问题:

(define_expand "call"
  [(call (match_operand:SI 0 "memory_operand" "")
        (match_operand 1 "general_operand" ""))]
  ""
{
  gcc_assert (MEM_P (operands[0]));
})


(define_insn "*call"
  [(call (mem:SI (match_operand:SI
          0 "nonmemory_operand" "i,r"))
     (match_operand 1 "" ""))]
  ""
  "@
   call   %0
   call   %0"
)

简而言之,它没有找到调用指令,因为它不匹配。