GCC后端移植杂记
为GCC后端移植新的处理器架构的确是一件非常痛苦的事情。
拿到GCC源码时,发现它的规模比预想中庞大得多,但好在体系结构十分清晰,前端后端高度解耦。解耦的关键就在于内部的RTL中间代码(表达形式类似于LISP语言)。
用了大概半个月时间研究RTL原理。之后用了一周时间编写机器描述文件和基于C语言的指令序列生成逻辑。然后用汇编实现libgcc里各种软件浮点和定点乘除操作,最后花了十分钟完成CRT启动部分的核心代码。关键是,这些都是利用零碎的课余时间完成的。
最终,配合之前适配的Binutils(包括AS汇编器、LD链接器),GCC已经可以正常编译出新架构的ELF文件了。
(图左下:用于测试的C源代码;右上:GCC生成的汇编代码;左上:利用objdump反汇编GCC生成的目标文件得到的结果(重定向到了文件)。
然而到现在,我们还没有一个可用的C Runtime Library。接下来计划继续移植NewLib。(ˉ▽ˉ;)
长路漫漫。。。
==================
ps: 处理器架构Github主页在此:https://github.com/sci-dev-git/OpenProcessor-64k

GCC后端移植杂记的更多相关文章
- gcc和g++
一.GCC GNU编译器套件(GNU Compiler Collection)包括C.C++.Objective-C.Fortran.Java.Ada和Go语言的前端,也包括了这些语言的库(如libs ...
- c 各种编译器(gcc clang)
很多时候,出现一些类似GNU,GCC,CLANG,LLVM等与编译器有关的名词的时候,都不太清楚它到底是干嘛的,理解这些东西后, 对于xcode中很多配置型的需求修改起来都会得心应手,因此有必要了解透 ...
- GCC 三
前记: 经常浏览博客园的同学应该会觉得本文有标题党之嫌,这个标题的句式来自于MiloYip大牛的大作<C++强大背后>,在此,向Milo兄致意. GCC,全称GNU Compiler Co ...
- WINDOWS下如何安装GCC(转载http://nirvana.cublog.cn;作者:北斗星君(黄庠魁))
第一章 在视窗操作系统下的GCC 第一节 GCC家族概览 GCC 是一个原本用于 Unix-like 系统下编程的编译器.不过,现在 GCC 也有了许多 Win32 下的移植版本.所以,也许对于许多 ...
- linux上gcc
查看gcc版本号 rpm -qa | grep gcc gnu的gcc是linux/unix下开发的,不能直接在window下运行.window下有gcc的移植版本.就是楼上说的MinGW和cygwi ...
- Gcc\MingW\Cygwin\Msys简介
一.GCC的历史GCC是一个原本用于Unix-like系统下编程的编译器.不过,现在GCC也有了许多Win32下的移植版本.所以,也许对于许多Windows开发者来说,GCC还是一个比较陌生的东西.所 ...
- 关于GCC Cygwin MinGW MSYS
[转载]关于Gcc/MinGW/Cygwin/Msys http://blog.sciencenet.cn/blog-778757-616920.html 一.GCC的历史 GCC是一个原本用于Uni ...
- Gcc/MinGW/Cygwin/Msys 分别是什么?
一.GCC的历史 GCC是一个原本用于Unix-like系统下编程的编译器. 不过,现在GCC也有了许多Win32下的移植版本. 所以,也许对于许多Windows开发者来说,GCC还是一个比较陌生的东 ...
- gcc for Windows 开发环境介绍
导读: 在Windows操作系统下的gcc 第一节 GCC家族概览 GCC是一个原本用于Unix-like系统下编程的编译器. 只是,如今GCC也有了很多Win32下的移植版本号.所以,或许对于很多W ...
随机推荐
- 51nod 1162 质因子分解
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1162 数据范围大约是2^97,需要高精度计算 可以使用pollard- ...
- 报错:Exception in thread "main" java.lang.NoClassDefFoundError: Lorg/apache/hadoop/fs/FileSystem
报错现象: Exception in thread "main" java.lang.NoClassDefFoundError: Lorg/apache/hadoop/fs/Fil ...
- Java程序国际化学习代码一
Java程序国际化初识 1.基本思路 Java程序的国际化的思路是将程序中的标签.提示等信息放在资源文件中,程序需要支持哪些国家.语言环境,就对应提供相应的资源文件.资源文件是key-value对,每 ...
- About Gnu Linker1
1 OverView ld combines a number of object and archive files, relocates their data and ties up symbol ...
- Windows编程1
一个最简单的windows必须包括两个函数: 1.入口函数:WinMain 2.窗口过程回调函数:WndProc 结构如下: #include <windows.h> //窗口过程回调函数 ...
- Win 10更新版1709有哪些新功能值得关注!
windows 10秋季创意者更新版1709发布已经有段时间了,也有很多用户选择升级这次更新的系统.那么,这次Win 10 更新版1709有哪些新功能值得关注呢?下面,一起随主机吧来看一看吧! 1. ...
- Oracle常见错误:ORA-06550、ORA-00911、ORA-02085
ORA-06550:检查标点符号,如果是在写存储过程时候,切记每行每条语句都应该以“;”结束 ORA-00911: invalid character 包含中文报错 ORA-02085:数据库连接 X ...
- DLC 复合逻辑运算
与非逻辑运算 或非逻辑运算 与或非逻辑运算 异或逻辑运算 同或逻辑运算
- GIT教程的好文章
Git 教學(1):Git的基本使用 Git 教學(2):Git Branch 的操作與基本工作流程 Git 情境劇:告訴你使用 Git 時什麼情況該下什麼指令
- 利用jvisualvm使用btrace进行线上调试案例
用途:btrace主要用于线上调试.通过btrace,可在不改动代码的前提下,方便的发现以下问题: 1.定位性能慢的接口服务: 2.实时打印堆栈信息,定位死锁位置: 3.定位占用大量内存空间的代码块: ...