本文遵从 GNU Free Documentation License (see http://www.gnu.org/copyleft/fdl.html ),并特别对 冒充另类(TeaWater) 的《移植GDB》一文表示感谢 (see http://teawater.spaces.live.com )。由于大体和细节的东西在《GDB Internal》和《移植 GDB》两文中已经有了很多描述,所以本文的目的在于 Howto,step by step 地描述如何为 GDB 添加新的目标机,并对某些以上两文中阐释不清的地方做出自己的解释。
2.对所需添加进 gdb 目录的文件的功能介绍
这部分和 《GDB Internal》中的 9.12 Adding a New Target 一部分是重合的,不过我添加一些实例和自己的介绍。
’gdb/config/solrex/solrex.mt’:这个文件里的东西会添加到 Makefile 里面,很简单,给个例子:
$ cat gdb/config/solrex/solrex.mt
TDEPFILES= solrex-tdep.o
DEPRECATED_TM_FILE= tm-solrex.h
第一个就是要编译 solrex 的 target 需要的文件,solrex-tdep.o 是下面要讲的 solrex-tdep.c 的目标文件,还可以加一个 TDEPLIBS= ,意思是需要的 lib。 DEPRECATED_TM_FILE= tm-solrex.h 的意思这种做法已经 deprecated 了,但是我们仍然可以使用,是 target 所需要的头文件,下面会讲到这个文件,但是这个文件如果没有的话可以不要。
’gdb/config/solrex/tm-solrex.h’:这个文件里可以定义一些通用的宏,给个例子:
$ cat gdb/config/solrex/tm-solrex.h
#define GDBINIT_FILENAME ".solrex-gdbinit"
#define DEFAULT_PROMPT "(gdb-solrex) "
第一个是 GDB 启动时候的默认读取文件名,第二个就是 GDB 的缺省 prompt。这个头文件会变成编译时候的 tm.h 文件,这些宏定义会覆盖 GDB 的本身设定,当然,如果你不需要这些宏完全可以不要此文件。
’gdb/solrex-tdep.h’ && ’gdb/solrex-tdep.c’:这两个文件是最重要的文件,也是 GDB 能够识别 solrex-elf 这个 target 的根据,这两个文件中定义了很多 solrex arch 特定的东西,比如:target 是 big-endian 还是 little-endian 的?target 的 registers map;target 的字长,register 的类型,返回值的存放,等等等等,这些后面的文章都会仔细介绍,也是主要介绍的部分。