将gcc移植到新目标

将gcc移植到新目标,c,gcc,compiler-construction,backend,C,Gcc,Compiler Construction,Backend,我正在尝试将gcc移植到一个新目标。目标是一个新的处理器,我们自行设计,拥有完整的指令集。我们希望能够在gcc中为我们的新处理器编译c代码。为了能够做到这一点,我们需要为这个特定的目标移植gcc。我已经阅读了一些gcc文档如何做到这一点。到目前为止,我已经编辑/入侵了gcc的一个现有目标,并将其用于我们的目标,这意味着gcc将为我们的特定处理器生成汇编代码。因此,我使用gcc为这个新目标编译gcc。然后,gcc将生成编译器myprocessor gcc。这个编译器将能够为我们的目标生成汇编代码。

我正在尝试将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命令,如
run
where

给我们看一些代码?这是你自己设计的编译器?我们能看看你的CFG吗?我正试图通过机器描述符将gcc移植到我的8位处理器上,实际上我正在攻击一个现有的机器描述符。我能够生成一些汇编代码,但它还没有完成。如果我能看到一些调试打印,那将非常有用,../../configure--target=ag--prefix=location\u for\u my\u编译器--enable languages=“c”。ag是我端口的名称。我真的很好奇这个编译器是为什么芯片设计的,你为哪家公司工作。@DavidGrayson这是一个我和我同事作为爱好项目设计的芯片。我们正在Logisim中模拟芯片。目标是用c编译器构建一个全功能处理器。很难让gcc接受处理器只有8位且只有一个通用寄存器(累加器)的事实。如果我的同事同意的话,我们可能会把这个项目发布到网上,processor+gcc编译器。不确定是否有很多芯片+编译器爱好者。我正在cygwin中运行它。我应该下载gdb吗?如何使用-g选项构建交叉编译器。我正在使用configure…,make,然后make install。他们似乎都不接受-g切换我不知道如何在cygwin中下载gdb,但我相信你可以找到答案,或者你可以在虚拟Linux机器上使用熟悉的分发/包管理器进行开发。我看过的几个GNU项目默认启用了-g选项,因此它可能已经启用了,但如果没有启用,则执行类似于
/configure--help
的操作,并查找与“debug”相关的任何选项。我只是想指出你的方法中的错误,那就是你试图使用
-g
来编译嵌入式程序,而实际上你需要调试编译器;它不是
make
configure
的选项,但可能有一个
configure
标志与之相关。我找不到任何标志,但我怀疑默认情况下它是启用的,我还向myprocessor.h文件添加了一个宏,它是我的gcc端口的一部分。假定此宏启用调试,但不确定它是否可以工作。我下载了用于cygwin的gdb,发现了这篇有助于调试的伟大文章