DSP

在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 第四类是辅助sectiondoj文件添加了一些辅助的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 bfdelf32格式的支持(2008-11-7) objdumpreadelf的区别(2008-11-10) objdump代码分析(2008-11-10) bfd的文件格式识别2008-11-10 bfd的后端数据表示(2008-11-10) Bfd中的内存泄漏2008-11-13 Bfdelf文件头的处理(2008-11-27)