在bfd中添加处理vdsp文件的target
2019-07-13 17:45发布
生成海报
快乐虾
http://blog.csdn.net/lights_joy/
lights@hb165.com
本文适用于
bfinutils-2.19
vs2008
欢迎转载,但请保留作者信息
doj文件是visual dsp生成的最小单元的目标文件,类似于.o或者.obj,采用elf格式,不过加了一些bfd无法识别的东西,可以归结为四类:
第一类是elf文件头中的e_machine标志,doj文件中采用了一个特殊的值。
第二类是符号表,vdsp采用了一些扩展的指令。
第三类是dwarf调试信息,doj使用了一些bfd无法识别的tag。
第四类是辅助section,doj文件添加了一些辅助的section,比如.processor之类的东西。
如果能够让bfd生成与doj兼容的文件,那么就可以直接使用vdsp的链接器了,呵呵!参照elf32-bfin的实现试试看。
1.1 添加新的target
elf32-bfin的目标定义在elf32-bfin.c中:
#define TARGET_LITTLE_SYM bfd_elf32_bfin_vec
#define TARGET_LITTLE_NAME "elf32-bfin"
#define ELF_ARCH bfd_arch_bfin
#define ELF_MACHINE_CODE EM_BLACKFIN
#define ELF_MAXPAGESIZE 0x1000
#define elf_symbol_leading_char '_'
……………………………………
#include "elf32-target.h"
没看到bfd_target,奥秘在elf32-target.h中:
#ifdef TARGET_LITTLE_SYM
const bfd_target TARGET_LITTLE_SYM =
{
/* name: identify kind of target */
TARGET_LITTLE_NAME,
………………………………
/* backend_data: */
&elf32_bed
};
#endif
经过宏替换,就出现了一个叫bfd_elf32_bfin_vec的全局变量。
同样仿造这种方式定义一个叫的bfd_elf32_bfin_vdsp_vec全局变量来处理vdsp文件。
#undef TARGET_LITTLE_SYM
#define TARGET_LITTLE_SYM bfd_elf32_bfin_vdsp_vec
#undef TARGET_LITTLE_NAME
#define TARGET_LITTLE_NAME "elf32-bfin-vdsp"
#define ELF_ARCH bfd_arch_bfin
#define ELF_MACHINE_CODE EM_BLACKFIN
………………….
#include "elf32-target.h"
这样,就有了一个和elf32-bfin功能完全相同的target。
1.2 让bfd使用自定义target
要让bfd使用刚刚定义的target,需要修改targets.c:
extern const bfd_target bfd_elf32_bfin_vec;
extern const bfd_target bfd_elf32_bfin_vdsp_vec; // 刚加的
extern const bfd_target bfd_elf32_bfinfdpic_vec;
…………..
static const bfd_target * const _bfd_target_vector[] =
{
……………………
&bfd_elf32_bfin_vec,
&bfd_elf32_bfin_vdsp_vec,
……………………..
NULL /* end of list marker */
};
const bfd_target * const *bfd_target_vector = _bfd_target_vector;
这样,在elf32-bfin尝试失败后,就轮到elf32-bfin-vdsp上场了!
下面,可以准备修改了!let’s go………………..
bfd对多目标的支持(2008-9-25)
bfd对elf32格式的支持(2008-11-7)
objdump与readelf的区别(2008-11-10)
objdump代码分析(2008-11-10)
bfd的文件格式识别(2008-11-10)
bfd的后端数据表示(2008-11-10)
Bfd中的内存泄漏(2008-11-13)
Bfd对elf文件头的处理(2008-11-27)
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮