其中负责指令生成的部分在后端,涉及的源代码文件包括inst-cmit.c、inst-flags.h、inst-config.h、inst-code.h、inst-extrax.h、inst-oPINit.c、inst-output.c等。此外,作为机器描述的machine.h、machine.md、machine.h文件也必须加以考虑,相当一部分以inst开头的文件是由GCC提供的一组gen*工具根据这3个机器描述文件自动生成的。
修改GAS相对简单,只须修改GAS源代码中的tcmips.c文件,但效率相对低于修改GCC源代码。
直接修改GCC编译器的效率且一劳永逸,但由于编译器的实现原理和 操作系统 大相径庭,所以此方法难度较大,可能会拖延移植工作进度,而编译器修改其本身的测试工作由于要和 Linux 操作系统的移植工作混合在一起进行,对软件Debug来说也是相当复杂的,所以,在系统开发早期推荐使用修改保留指令例外处理程序的方法,当软硬件都能保证相当的正确性时再使用修改GCC编译器的方法。
结语
本文根据一个特定的开发平台,介绍了如何将Linux操作系统移植到MIPS体系结构系统上的大致流程和主要技术,就移植过程中所遇到的问题,以4条非对齐指令为例,具体讨论了如何解决实际实现的指令集未能完全覆盖标准指令集而产生保留指令例外的问题,文中详细介绍了修改保留指令例外处理程序的方法,简述了修改GCC或GAS的方法,掌握这些移植流程和修改技术,对于开发嵌入式系统相当的实用价值,对于由其他体系结构实现的开发平台也具有相当的参考意义。