DSP

无心插柳-在vs2005中编译GCC4

2019-07-13 16:30发布

      前一阵子,一直在研究Visual DSP与uclinux的二进制兼容问题,一个偶然的机会看到了blackfin.uclinux.org上的一段话: Blackfin patch: Delete code to handle certain relocs
  • From: Bernd Schmidt
  • To: binutils at sources dot redhat dot com
  • Date: Sat, 25 Mar 2006 19:20:15 +0100
  • Subject: Blackfin patch: Delete code to handle certain relocs
The Blackfin port has some ancient code that was written for compatibility with the in-house VDSP compiler. We support a relocation stack, so that you can encode arbitrary arithmetic in relocations. 呵呵,原来如此! 为了完成一个长久的心愿,看来还得费点劲把链接器的这些代码找出来再做些修改才行,估计ld的代码应该也不是特别复杂。 不过长时间在linux和windows之间切换,总觉得不爽。结果就是将ld搞到vs2005下编译了一道。事已至此,又冒出一个想法,不知道gcc是否也可以在vs2005下编译,这样研究起来岂非简单很多。(典型的见异思迁!!) 又经过一段时间,终于搞定!聊记下来以供以后参考!当然,此处仅仅是一个c compiler而已,不包含libc这样的东西。 bfin-gcc-4.1 首先在linux平台下切换到gcc4.1源码的目录: ./configure make 这样除了生成可执行文件之外,还会生成很多动态的.c和.h文件,因为在windows平台下这些文件可是很难生成的呦,也没有必要在这些枝节上费工夫。把这些文件都copy到windows下备用。.c和.h文件,当然是可以用到工程中去的,至于.o文件,则是很直观地揭示了工程中应该包含的文件,总比分析Makefile来得容易! 下面就该到vs2005上场了。 针对gcc的几个目录建了相应的lib,在这样做之前其实也不知道为什么,就是看见在每个目录下都生成了一个config.h文件。 再建了一个叫gcc4的exe工程。 也不知道应该加入什么文件,由少到多吧,先加入main,链接器提示少什么再往里加!就是再这样的原则下,最多的时候大概有600个链接错误,最后借助链接器和.o文件的帮助,统统杀无赦,最后就得到了一个gcc4.exe。 写个最简单的C程序试一个: void main(void) { } 运行gcc4 main.c,生成了一个main.s:        .file "main.c"        .text .globl main        .type       main, @function main:        leal   4(%esp), %ecx        andl $-16, %esp        pushl       -4(%ecx)        pushl       %ebp        movl       %esp, %ebp        pushl       %ecx        popl %ecx        leave        leal   -4(%ecx), %esp        ret        .size main, .-main        .ident      "GCC: (GNU) 4.1 2008-1-10 release 2007"        .section   .note.GNU-stack,"",@progbits   386的代码,不是希望的bf561! 看来是后端生成代码这一块搞错了,研究中…..