c - 将 gcc 移植到新目标

标签 c gcc compiler-construction backend

我正在尝试将 gcc 移植到一个新目标。目标是我们自己设计的具有完整指令集的新处理器。我们希望能够在 gcc 中为我们的新处理器编译 c 代码。为了能够做到这一点,我们需要为这个特定目标移植 gcc。我已经阅读了一些 gcc 文档如何做。到目前为止,我已经编辑/破解了 gcc 的现有目标并将其用于我们的目标,这意味着 gcc 将为我们的特定处理器生成汇编代码。所以我正在使用 gcc 为这个新目标编译 gcc。然后 gcc 将生成一个编译器 myprocessor-gcc。该编译器将能够为我们的目标生成汇编代码。通过使用我的编译器为它提供以下内容:

myprocessor-gcc test.c

test.c 看起来像:

void __main(void);


void main(void)
{
  return;
}

void __main(void)
{
int i = 0;
int i2 = 1;
int i3 = 2;
  i = i2+i3;

  return;
}

gcc 能够编译此代码并生成我所期望的正确汇编语言。

所以我详细阐述了我的测试函数:

void __main(void)
{
int i = 0;
int i2 = 1;
int i3 = 2;
int i4 = 3;
  i = i2+i3+i4;

  return;
}

在那之后 gcc 给了我一个段错误。我想调试这个段错误,我需要 gcc 可以给我的所有调试打印。所以当我输入:

myprocessor-gcc test.c -g

我想查看一些调试打印,以便我可以在内部调试 gcc。对不起,如果我不清楚,如果仍然不清楚,我会详细说明。

最佳答案

您需要确保您的交叉编译器本身是使用 -g 选项编译的,以便它具有调试符号。然后运行 ​​gdb myprocessor-gcc test.c 以查看编译器中发生段错误的位置。您将必须学习一些 gdb 命令,例如 runwhere

关于c - 将 gcc 移植到新目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24305202/

相关文章:

linux - gcc 编译的二进制文件给出 "cannot execute binary file"

c - 当操作数是 C 中的指针时,编译器如何处理运算符 +

c - 使用 sed,如何在 C 函数的开头插入一行 - 右括号、换行符、左大括号

c++ - C 和 Matlab : Why does this one line in Matlab become so many lines in C++ code generated by Matlab Coder?

c - 破解项目欧拉问题3,我的解决方案正确吗?

c - 如何使用 GCC/Clang 编译器了解/限制 C 程序中的静态堆栈大小?

c++ - 为什么这个无操作循环没有被优化掉?

parsing - 使用 ANTLR 手动发出 token

java - 异常: "Invalid action number found in internal parse table." Polyglot Exception

c++ fscanf %c 无法正常工作