CN108196905A - 一种基于dsp的动态加载方法 - Google Patents

一种基于dsp的动态加载方法 Download PDF

Info

Publication number
CN108196905A
CN108196905A CN201711458538.7A CN201711458538A CN108196905A CN 108196905 A CN108196905 A CN 108196905A CN 201711458538 A CN201711458538 A CN 201711458538A CN 108196905 A CN108196905 A CN 108196905A
Authority
CN
China
Prior art keywords
elf
address
symbol
file
addr
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201711458538.7A
Other languages
English (en)
Other versions
CN108196905B (zh
Inventor
韩辉
蒋太金
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Wing Hui Information Technology Co Ltd
Original Assignee
Beijing Wing Hui Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Wing Hui Information Technology Co Ltd filed Critical Beijing Wing Hui Information Technology Co Ltd
Priority to CN201711458538.7A priority Critical patent/CN108196905B/zh
Publication of CN108196905A publication Critical patent/CN108196905A/zh
Application granted granted Critical
Publication of CN108196905B publication Critical patent/CN108196905B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种基于DSP的动态加载方法,包括ELF文件预处理、ELF文件读取与解析、符号导出、符号重定位和运行模块,其中,ELF文件预处理包括:ELF预处理、在汇编文件中查找符号地址和计算出某个地址对应指令在ELF文件中的位置三个流程。本发明基于CCS编译器实现DSP动态加载的方法解决了B14切换问题;提高可重定位代码执行效率,用于CCS编译器以及GCC编译器所编译的可重定位代码。

Description

一种基于DSP的动态加载方法
技术领域
本发明涉及计算机技术,特别是涉及一种基于DSP的动态加载方法。
背景技术
动态加载(英语:Dynamic Loading)是一种实现应用程序与操作系统分离的方法,它能使操作系统可以在运行时加载应用程序或动态库(或者其他二进制对象)到内存中,检索库中函数和变量的地址,执行这些函数或访问这些变量,并能将库从内存中卸载。
CCS是TI公司提供的高效的C编译器和集成开发环境。针对DSP处理器,CCS编译的程序执行效率高。GCC也可以支持DSP处理器,但程序的执行效率很低。
瑞典Enea的OSEck操作系统是目前较为流行的DSP商业实时操作系统,提供较为丰富的操作系统管理组件,并且使用CCS编译器,效率高。该系统中应用程序与操作系统绑定在一起,每次升级都要升级整个操作系统和应用。随着程序规模的扩大,会不断增加升级的时间及耦合度,不利于程序的开发调试和维护。
ucLinux操作系统使用gcc编译器,它的应用程序和操作系统分离,并支持动态加载技术,有利于开发和维护。但针对DSP处理器,ucLinux使用的GCC编译器的效率无法与CCS编译器相比。
OSEck操作系统使用CCS编译器,与DSP处理器的契合度非常好,程序运行效率高,但不支持动态加载技术;ucLinux操作系统使用gcc编译器,应用程序和操作系统分离,并支持动态加载技术,有利于开发和维护,但程序的运行效率低下。这两个系统各有特点,但都无法兼顾动态加载技术和程序的运行效率。
发明内容
发明目的:为解决现有技术的不足,提供一种在CCS编译器基础上实现程序的动态加载,同时优化程序中的函数调用跳转流程,提高代码的运行效率的基于DSP的动态加载方法。
技术方案:本发明的一种基于DSP的动态加载方法,包括以下步骤:
(1)ELF文件预处理;
(2)ELF文件读取与解析
ELE文件是可执行程序的特有文件格式,里面包含了所有文件执行所需要的相关信息,加载的第一步就是读取和解析文件,建立ELF模块结构;
(3)符号导出
一个ELF模块需要导出一些符号,给其它模块使用,加载过程需为每个ELF模块建立一个符号表;
(4)符号重定位
一个ELF模块需要用到其它ELF模块的符号,加载器为每个ELF模块建立一个导入符号表,针对每个外部符号,通过步骤(2)所属方法查找到符号地址,并填写到本模块的导入符号表;
(5)运行模块
调用ELF格式中记录的初始化函数和模块入口函数。
进一步的,所述步骤(1)包括以下步骤:
(11)反汇编ELF文件,生成汇编文件;
(12)定位到汇编文件头,;
(13)从汇编文件读取一行,判断是否文件结束,若文件结束,则处理结束;否则执行步骤(14);
(14)判断其是否为跳转指令
匹配正则表达式$(ADDR)CALL PLT_$(FUNC_NAME),如果匹配成功,则说明是跳转指令,执行步骤(15);否则返回到步骤(13);
(15)查找目标符号位置
在本汇编文件中查找步骤(14)所匹配到的FUNC_NAME字段对应的符号地址;
(16)判断目标符号是否在本模块内
如果目标符号在本模块内没有找到,则回到步骤(13);否则,执行步骤(17);
(17)判断目标地址是否超出相对跳转范围
将符号地址减去步骤(14)匹配到的$(ADDR),得到相对跳转偏移,如果偏移超过CALL指令相对跳转的最大值,则返回步骤(13);否则执行步骤(18);
(18)计算地址对应的ELF文件位置
计算出$(ADDR)地址对应指令在ELF文件中的位置,执行步骤(19);
(19)修改地址对应ELF指令
根据偏移生成新的“CALL+偏移”指令,修改步骤(18)计算得到的ELF文件位置,更新其内容为新生成的“CALL+偏移”指令。
更进一步的,所述步骤(15)中查找符号地址的方法包括以下步骤:
(21)定位到汇编文件头;
(22)从汇编文件读取一行;
(23)判断是否文件结束
如果文件结束,则返回0,表示未找到符号地址;否则执行步骤(24);
(24)匹配正则表达式“$(ADDR)$(NAME):”,匹配成功则执行步骤(25);否则回到步骤(22);
(25)如果$(NAME)与传入的$(FUNC_NAME)相等,则返回$(ADDR)所代表的地址;否则回到步骤(22)。
更进一步的,所述步骤(18)中计算$(ADDR)地址对应指令在ELF文件中的位置的方法,包括以下步骤:
(31)读取ELF头,分析ELF段表,每个段由“段起始地址”,“段长度”,“段在ELF文件中的偏移”组成;
(32)处理指针定位到段表头;
(33)针对处理指针指向的表项,执行以下操作:
比较$(ADDR)是否在该段内,即“段起始地址<=$(ADDR)且段起始地址+段长度>$(ADDR)”,如果表达式成立,则返回“段在ELF文件中的偏移+$(ADDR)-段起始地址”,否则执行步骤(34);
(34)段表指针移动到下一个段表项,回到步骤(33)。
进一步的,所述步骤(4)中的导入符号表为GOT表,在DSP中,寄存器B14总是指向GOT首地址。
有益效果:与现有技术相比,本发明的基于DSP的动态加载方法,在使用CCS编译器的前提下实现了模块动态加载,同时优化了程序中的函数调用跳转流程,既保证了程序的运行效率,又为程序的调试和维护提供了方便。该基于CCS编译器实现DSP动态加载的方法解决了B14切换问题;提高可重定位代码执行效率,用于CCS编译器以及GCC编译器所编译的可重定位代码。
附图说明
图1是现有技术的加载器执行完第一步后的模块结构示意图;
图2是现有技术的加载器执行完第二步后的模块结构示意图;
图3是现有技术的加载器执行完第三步后的模块结构示意图;
图4是本发明的DSP动态加载方法流程图;
图5是ELF文件预处理流程图;
图6是在汇编文件中查找符号地址的方法流程图;
图7是计算某个地址对应指令在ELF文件中的位置的方法流程图;
图8是本发明预处理后的模块结构示意图。
具体实施方式
下面结合附图对本发明的技术方案进行详细的说明。
DSP C6X系列处理器使用B14保存每个模块的数据段起始地址,程序中所有对全局数据的访问都使用“B14+偏移”的方式寻址。各个可加载模块有各自的数据,因此当程序指令流在模块间切换时(如:函数跨模块调用时),需保存和切换B14的值,否则会导致数据访问错误。
CCS编译器为能够被外部模块调用的大部分函数(没有使用static定义的函数)生成了保存和设置B14的指令。CCS编译器为提高代码执行效率,如果发现函数中没有使用全局变量或调用本原文件以外的函数,则不产生保存和设置B14的指令。CCS编译器认为调用本文件内部的函数不会使用B14,但是这里存在一个问题,当函数调用本文件内的其它非static函数时,并不是直接跳转到目标函数地址,而是使用了PLT跳转表,PLT跳转表(Procedure Linkage Table)是一段中间代码,其功能是跳转到目标函数,而这段中间代码使用了B14,因此,在编译器优化掉B14设置指令时,执行PLT中间代码会存在问题。
可见,出现问题的原因是中间代码使用了B14而编译器没有生产B14切换指令,如果不使用中间代码而直接跳转到目标函数则不会产生该问题。经研究分析,对于本模块内的目标函数,因为其与调用指令的相对偏移是固定的,所以完全可以使用相对跳转指令调用目标函数。而对于目标函数不在本模块内的情况,由于目标函数地址不确定,需要使用PLT配合GOT(Global Offset Table)实现函数的重定位,而此种条件下,编译器肯定不会优化掉B14的切换代码。
基于以上原理,本发明扫描目标文件中的跳转指令,如果发现跳转目标在本模块内,则使用相对跳转直接跳转到目标地址,否则不修改。不但解决了前面所述问题,而且减少了大量中间代码以及多余的跳转,提高了代码执行效率。这种提高代码执行效率的方法不但可用于CCS编译的DSP程序,也适用于GCC编译的ARM、X86、MIPS、PPC等其它体系结构的程序。
现有技术中加载器工作的通用方法为:
(1)ELF(Executable and Linking Format)文件读取与解析
ELE文件是可执行程序的特有文件格式,里面包含了所有文件执行所需要的相关信息,加载的第一步就是读取和解析文件,建立ELF模块结构。
(2)符号导出
一个ELF模块可能需要导出一些符号(如,一个函数),给其它模块使用。加载过程需为每个ELF模块建立一个符号表,该符号表保存所有从符号名到符号地址的映射关系。当其它模块需要使用本模块导出符号时,首先查找符号表,获取符号地址。
(3)符号重定位
一个ELF模块可能需要用到其它ELF模块的符号(如:调用其它模块的函数)。加载器为每个ELF模块建立一个导入符号表,针对每个外部符号,通过第2部所属方法查找到符号地址,并填写到本模块的导入符号表(这个导入符号表就是GOT表(Globaloffsettable),在DSP中,寄存器B14总是之上GOT首地址)。
(4)运行模块
调用ELF格式中记录的初始化函数和模块入口函数。
实施例:有modA和modB两个程序,分别编译出ELF文件。modA实现并导出了函数funA,并调用了modB的funB函数。modB实现并导出了funB和funC函数,funB调用了funC函数。
加载器执行完上述步骤(1)后,模块结构如图1所示。
由于编译器编译modA时并不知道funB的地址,所以funA中的CALL funB指令留空。
执行完步骤(2)后,模块结构如图2所示。
执行完步骤(3)后,模块结构如图3所示。
加载器将CALL funB修改为CALL GOTA+0,而在GOTA+0的数组位置填入jump funB,跳转到加载器查找到的funB地址。
编译器为了简化流程,针对所有的函数调用都通过GOT表进行,也就是说funB对funC的调用虽然是模块内部调用,但是也通过GOT表进行。
步骤(4)即为简单的查找地址和调用。
本发明的方法采用DSP进行加载,而DSP使用寄存器B14保存GOT首地址,当程序在不同模块间切换时需要切换B14的值,切换B14的代码由编译器自动添加到模块所有导出函数头和尾。同样以上面的例子说明:
funB在编译后的伪代码为:
加载后的伪代码为:
以上伪代码理论上没问题,但是TI cl6x编译器在实现时存在一个bug,当它检测到funC为本模块内部函数是,没有切换B14,实际的代码为:
此时B14没有被设置为GOTB,函数调用出现问题。
另外前面所述“编译器为了简化流程,针对所有的函数调用都通过GOT表进行,也就是说funB对funC的调用虽然是模块内部调用,但是也通过GOT表进行”会导致代码执行效率变低,因此每次内部函数的调用都经过了GOT表二次跳转。
本发明方法修正了这个问题,在编译完成后,ELF文件加载前,对ELF进行了处理,将所有目标符号为模块内部函数的CALL指令直接设置为跳转到目标地址,无须经过GOT表,也不再依赖B14。如图4所示,本发明的基于DSP的动态加载方法,包括以下步骤:
(1)ELF文件预处理,如图5所示,包括以下步骤:
(11)调用cl6x-dis-all命令反汇编ELF文件,生成汇编文件;
(12)定位到汇编文件头;
(13)从汇编文件读取一行,判断是否文件结束,若文件结束,则处理结束;否则执行步骤(14);
(14)判断其是否为跳转指令
匹配正则表达式$(ADDR)CALL PLT_$(FUNC_NAME),如果匹配成功,则说明是跳转指令,执行步骤(15);否则返回到步骤(13);
(15)查找目标符号位置
在本汇编文件中查找步骤(14)所匹配到的FUNC_NAME字段对应的符号地址,查找符号地址的方法参考流程1;
(16)判断目标符号是否在本模块内
如果在本模块内没有找到目标符号,则回到步骤(13),否则,执行步骤(17);
(17)判断目标地址是否超出相对跳转范围
将符号地址减去步骤(14)匹配到的$(ADDR),得到相对跳转偏移,如果偏移超过CALL指令相对跳转的最大值(正负1MB),则返回第(13)步;否则执行步骤(18);
(18)计算地址对应的ELF文件位置
计算出$(ADDR)地址对应指令在ELF文件中的位置,具体计算方法参考流程2;然后执行步骤(19);
(19)修改地址对应ELF指令
根据偏移生成新的“CALL+偏移”指令,修改步骤(18)计算得到ELF文件位置,更新其内容为新生成的“CALL+偏移”指令。
流程1:在汇编文件中查找符号地址
输入为符号名$(FUNC_NAME),返回符号地址。如图6所示,包括以下步骤:
(21)定位到文件头;
(22)从汇编文件读取一行;
(23)判断是否文件结束
如果文件结束,则返回0,表示未找到符号地址;否则执行步骤(24);
(24)匹配正则表达式“$(ADDR)$(NAME):”,匹配成功则执行步骤(25);否则回到步骤(22);
(25)如果$(NAME)与传入的$(FUNC_NAME)相等,则返回$(ADDR)所代表的地址;否则回到步骤(22)。
流程2:计算出某个地址对应指令在ELF文件中的位置
输入为指令地址$(ADDR),返回ELF文件偏移。如图7所示,包括以下步骤:
(31)读取ELF头,分析ELF段表,每个段由“段起始地址”,“段长度”,“段在ELF文件中的偏移”组成;
(32)处理指针定位到段表头;
(33)针对处理指针指向的表项,执行以下操作:
比较$(ADDR)是否在该段内,即“段起始地址<=$(ADDR)且段起始地址+段长度>$(ADDR)”,如果表达式成立,则返回“段在ELF文件中的偏移+$(ADDR)-段起始地址”,否则执行步骤(34);
(34)段表指针移动到下一个段表项,回到步骤(33)。
(2)ELF文件读取与解析
ELE文件是可执行程序的特有文件格式,里面包含了所有文件执行所需要的相关信息,加载的第一步就是读取和解析文件,建立ELF模块结构。
(3)符号导出
一个ELF模块可能需要导出一些符号(如,一个函数),给其它模块使用。加载过程需为每个ELF模块建立一个符号表,该符号表保存所有从符号名到符号地址的映射关系。当其它模块需要使用本模块导出符号时,首先查找符号表,获取符号地址。
(4)符号重定位
一个ELF模块可能需要用到其它ELF模块的符号(如:调用其它模块的函数)。加载器为每个ELF模块建立一个导入符号表,针对每个外部符号,通过步骤(2)所述方法查找到符号地址,并填写到本模块的导入符号表(这个导入符号表就是GOT表(Globaloffsettable),在DSP中,寄存器B14总是指向GOT首地址)。
(5)运行模块
调用ELF格式中记录的初始化函数和模块入口函数。
经过本发明预处理过的ELF文件funB的代码为:
经过本发明预处理后的模块结构如图8所示,由图8可知经过处理后的funB不再依赖GOT,不需要重定位,加载后的伪代码保持不变。如此既解决了B14切换的编译器bug,也提高了程序加载和执行的效率。

Claims (5)

1.一种基于DSP的动态加载方法,其特征在于,包括以下步骤:
(1)ELF文件预处理;
(2)ELF文件读取与解析
ELE文件是可执行程序的特有文件格式,里面包含了所有文件执行所需要的相关信息,加载的第一步就是读取和解析文件,建立ELF模块结构;
(3)符号导出
一个ELF模块需要导出一些符号,给其它模块使用,加载过程需为每个ELF模块建立一个符号表;
(4)符号重定位
一个ELF模块需要用到其它ELF模块的符号,加载器为每个ELF模块建立一个导入符号表,针对每个外部符号,通过步骤(2)所属方法查找到符号地址,并填写到本模块的导入符号表;
(5)运行模块
调用ELF格式中记录的初始化函数和模块入口函数。
2.根据权利要求1所述的一种基于DSP的动态加载方法,其特征在于,所述步骤(1)包括以下步骤:
(11)反汇编ELF文件,生成汇编文件;
(12)定位到汇编文件头;
(13)从汇编文件读取一行,判断是否文件结束,若文件结束,则处理结束;否则执行步骤(14);
(14)判断其是否为跳转指令
匹配正则表达式$(ADDR)CALL PLT_$(FUNC_NAME),如果匹配成功,则说明是跳转指令,执行步骤(15);否则返回到步骤(13);
(15)查找目标符号位置
在本汇编文件中查找步骤(14)所匹配到的FUNC_NAME字段对应的符号地址;
(16)判断目标符号是否在本模块内
如果目标符号在本模块内没有找到,则回到步骤(13);否则,执行步骤(17);
(17)判断目标地址是否超出相对跳转范围
将符号地址减去步骤(14)匹配到的$(ADDR),得到相对跳转偏移,如果偏移超过CALL指令相对跳转的最大值,则返回步骤(13);否则执行步骤(18);
(18)计算地址对应的ELF文件位置
计算出$(ADDR)地址对应指令在ELF文件中的位置,执行步骤(19);
(19)修改地址对应ELF指令
根据偏移生成新的“CALL+偏移”指令,修改步骤(18)计算得到的ELF文件位置,更新其内容为新生成的“CALL+偏移”指令。
3.根据权利要求2所述的一种基于DSP的动态加载方法,其特征在于,所述步骤(15)中查找符号地址的方法包括以下步骤:
(21)定位到汇编文件头;
(22)从汇编文件读取一行;
(23)判断是否文件结束
如果文件结束,则返回0,表示未找到符号地址;否则执行步骤(24);
(24)匹配正则表达式“$(ADDR)$(NAME):”,匹配成功则执行步骤(25);否则回到步骤(22);
(25)如果$(NAME)与传入的$(FUNC_NAME)相等,则返回$(ADDR)所代表的地址;否则回到步骤(22)。
4.根据权利要求2所述的一种基于DSP的动态加载方法,其特征在于,所述步骤(18)中计算$(ADDR)地址对应指令在ELF文件中的位置的方法,包括以下步骤:
(31)读取ELF头,分析ELF段表,每个段由“段起始地址”,“段长度”,“段在ELF文件中的偏移”组成;
(32)处理指针定位到段表头;
(33)针对处理指针指向的表项,执行以下操作:
比较$(ADDR)是否在该段内,即“段起始地址<=$(ADDR)且段起始地址+段长度>$(ADDR)”,如果表达式成立,则返回“段在ELF文件中的偏移+$(ADDR)-段起始地址”,否则执行步骤(34);
(34)段表指针移动到下一个段表项,回到步骤(33)。
5.根据权利要求1所述的一种基于DSP的动态加载方法,其特征在于,所述步骤(4)中的导入符号表为GOT表,在DSP中,寄存器B14总是指向GOT首地址。
CN201711458538.7A 2017-12-28 2017-12-28 一种基于dsp的动态加载方法 Active CN108196905B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711458538.7A CN108196905B (zh) 2017-12-28 2017-12-28 一种基于dsp的动态加载方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711458538.7A CN108196905B (zh) 2017-12-28 2017-12-28 一种基于dsp的动态加载方法

Publications (2)

Publication Number Publication Date
CN108196905A true CN108196905A (zh) 2018-06-22
CN108196905B CN108196905B (zh) 2019-03-22

Family

ID=62584923

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711458538.7A Active CN108196905B (zh) 2017-12-28 2017-12-28 一种基于dsp的动态加载方法

Country Status (1)

Country Link
CN (1) CN108196905B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109683900A (zh) * 2018-11-14 2019-04-26 浙江零跑科技有限公司 针对elf文件调试信息的通用上位机符号查找与解析方法
CN111913762A (zh) * 2020-08-20 2020-11-10 北京机电工程研究所 一种预留运行内存空间的dsp动态加载方法
CN112463164A (zh) * 2020-12-14 2021-03-09 记忆科技(深圳)有限公司 SoC程序执行的显示定位方法、装置、计算机设备及存储介质
CN114546481A (zh) * 2022-01-28 2022-05-27 龙芯中科(成都)技术有限公司 跳转表查找方法、装置、电子设备及存储介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6338130B1 (en) * 1999-03-11 2002-01-08 International Business Machines Corporation Adaptive method and apparatus for allocation of DSP resources in a communication system
CN101378509A (zh) * 2008-10-06 2009-03-04 合肥优视嵌入式技术有限责任公司 Bf561的双核协调工作方法
CN101697131A (zh) * 2009-11-04 2010-04-21 中兴通讯股份有限公司 一种可重定位文件动态加载的方法及装置
US20110271148A1 (en) * 2010-04-30 2011-11-03 Eigler Frank Ch Preloading unwind data for non-intrusive backtracing
CN104239084A (zh) * 2013-06-24 2014-12-24 南京南瑞继保电气有限公司 一种dsp程序自动加载的实现方法
CN104392181A (zh) * 2014-11-18 2015-03-04 北京奇虎科技有限公司 So文件的保护方法、装置及安卓安装包的加固方法和系统
CN106354536A (zh) * 2016-08-31 2017-01-25 北京奇虎科技有限公司 在Windows系统中加载Linux系统ELF文件的方法及装置
CN106355049A (zh) * 2016-08-19 2017-01-25 北京奇虎科技有限公司 一种加固安卓安装包的动态链接库so文件的方法和装置

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6338130B1 (en) * 1999-03-11 2002-01-08 International Business Machines Corporation Adaptive method and apparatus for allocation of DSP resources in a communication system
CN101378509A (zh) * 2008-10-06 2009-03-04 合肥优视嵌入式技术有限责任公司 Bf561的双核协调工作方法
CN101697131A (zh) * 2009-11-04 2010-04-21 中兴通讯股份有限公司 一种可重定位文件动态加载的方法及装置
US20110271148A1 (en) * 2010-04-30 2011-11-03 Eigler Frank Ch Preloading unwind data for non-intrusive backtracing
CN104239084A (zh) * 2013-06-24 2014-12-24 南京南瑞继保电气有限公司 一种dsp程序自动加载的实现方法
CN104392181A (zh) * 2014-11-18 2015-03-04 北京奇虎科技有限公司 So文件的保护方法、装置及安卓安装包的加固方法和系统
CN106355049A (zh) * 2016-08-19 2017-01-25 北京奇虎科技有限公司 一种加固安卓安装包的动态链接库so文件的方法和装置
CN106354536A (zh) * 2016-08-31 2017-01-25 北京奇虎科技有限公司 在Windows系统中加载Linux系统ELF文件的方法及装置

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
CHEN JUTAO;ZHENG HUAYAO;HUANG XUEWU: "ARM+DSP Embedded System Applied in Marine Electric Propulsion Dynamic Load Simulation System", 《2007 8TH INTERNATIONAL CONFERENCE ON ELECTRONIC MEASUREMENT AND INSTRUMENTS IN IEEE》 *
SWEETKING1987: "ELF文件的加载和动态链接过程", 《百度文库》 *
季末一枫: "ARM-ELF文件格式与GNU ARM Linker机制", 《百度文库》 *
江华: "基于TigerSHARC的可再配置DSP系统动态加载技术", 《中国优秀硕士论文全文数据库 信息科技辑》 *
牛金海: "《TMS320C66x KeyStone架构多核DSP入门与实例精解》", 30 April 2014 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109683900A (zh) * 2018-11-14 2019-04-26 浙江零跑科技有限公司 针对elf文件调试信息的通用上位机符号查找与解析方法
CN111913762A (zh) * 2020-08-20 2020-11-10 北京机电工程研究所 一种预留运行内存空间的dsp动态加载方法
CN111913762B (zh) * 2020-08-20 2024-04-19 北京机电工程研究所 一种预留运行内存空间的dsp动态加载方法
CN112463164A (zh) * 2020-12-14 2021-03-09 记忆科技(深圳)有限公司 SoC程序执行的显示定位方法、装置、计算机设备及存储介质
CN112463164B (zh) * 2020-12-14 2024-02-13 记忆科技(深圳)有限公司 SoC程序执行的显示定位方法、装置、计算机设备及存储介质
CN114546481A (zh) * 2022-01-28 2022-05-27 龙芯中科(成都)技术有限公司 跳转表查找方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
CN108196905B (zh) 2019-03-22

Similar Documents

Publication Publication Date Title
CN108196905B (zh) 一种基于dsp的动态加载方法
US11314490B2 (en) Special calling sequence for caller-sensitive methods
Diaz et al. Design and implementation of the gnu prolog system
US8099721B2 (en) Parsing of declarations in all branches of preprocessor conditionals
US8079023B2 (en) Typed intermediate language support for existing compilers
EP2487585B1 (en) Method and device for dynamically loading relocatable file
US6434742B1 (en) Symbol for automatically renaming symbols in files during the compiling of the files
US20200125366A1 (en) Branch target buffer for emulation environments
CN101299192A (zh) 一种非对齐访存的处理方法
CN104134039A (zh) 病毒查杀方法、客户端、服务器以及病毒查杀系统
CN103412754A (zh) 动态语言代码执行方法和装置
CN102364433A (zh) 在ARM处理器上实现Wine构建工具移植的方法
US20030009750A1 (en) Optimizing an executable computer program having linkage functions
US20140196019A1 (en) Method and Apparatus for Substituting Compiler Built-in Helper Functions with Machine Instructions
US7802080B2 (en) Null exception handling
US20020010913A1 (en) Program profiling
CN114546409A (zh) 一种编译产物与源码隔离的方法、系统及存储介质
Meurer OCamlJIT 2.0-Faster Objective Caml
CN100476736C (zh) 在虚拟机环境下调用方法的方法和包括虚拟机的系统
Farvardin et al. Compiling with Continuations and LLVM
Dot et al. Erico: Effective removal of inline caching overhead in dynamic typed languages
Hanson lcc. NET: targeting the. NET Common Intermediate Language from Standard C
D'monte et al. A lightweight code storage container for the eclipse OMR ahead-of-time compiler
Marcelino PyJL: A Source-to-Source Python Compiler to Julia
Negrini A hybrid approach for automatic recognition of C++ objects in optimized binaries

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant