overlay符号表建立和查找的方法、装置及程序调制系统的制作方法

文档序号:6382871阅读:216来源:国知局

专利名称::overlay符号表建立和查找的方法、装置及程序调制系统的制作方法
技术领域
:本发明涉及程序开发领域,更具体地说,涉及overlay符号表建立和查找的方法、装置及程序调制系统。
背景技术
:⑶B(GNUDebugger,开源组织调试器)是开源组织发布的一个强大的UNIX下的程序调试工具。调试人员可以自定义程序或指令的运行方式;可以让被调试的程序或指令停止在设定的断点处,以使调试人员检测程序或指令的运行过程。⑶B包括用户交互界面、符号表处理模块和控制模块;其运行过程为,调试人员通过交互界面输入命令,命令和符号通过解析后,经由控制模块处理后转换为RSP协议命令到目标端;目标端解析RSP协议命令后,执行相应的命令,生成结果;符号表处理模块解析所述结果并将解析后的结果输出到交互界面。在对命令进行编译的过程中,在内存中镜像处理器的一级缓存的地址中的代码段时,往往都是在内存中按照地址顺序来分配空间;现有技术中,可以采用overlay调试技术以缓解一级缓存空间不足,该调试技术的技术方案具体包括在建立overlay符号表时,首先在overlay的代码段建立〈VMA,LMA>的地址关系表,从而可以实现访问VMA对应的已经映射的代码段,其中,LMA为加载内存地址,S卩,LoadMemoryAddr;VMA为虚拟内存地址,即VirtualMemoryAddr。在映射完成后,建立矢量块,并将矢量块的起始地址按照由高到低的地址顺序建立块链表;建立符号表的linetable,即,代码段与地址之间的对应关系表,并按照代码段所属PC的地址由高到低建立linetable的链表。但是,发明人经过研究发现,现有技术至少存在以下缺陷,当采用多核处理器进行overlay调试时,由于在符号表中不能区分处理器中的多个核,所以在为一个处理器核建立blockvector列表后,在获取符号时可能会显不符号错误,即有可能是另外一个处理器核的符号;此外,基于相同的原因,在建立链表后,当通过顺序查找表项并显示代码和行号信息时,也可能会产生错误的结果,即,有可能会显示另外一个处理器核上一级缓存上的对应的行号信息,从而造成调试错误。
发明内容有鉴于此,本发明实施例提供一种建立overlay符号表的方法,以解决现有技术存在的,当采用多核处理器进行overlay调试时,获取block时显示符号错误的问题。本发明实施例是这样实现的—方面,本申请提供了一种overlay符号表建立方法,包括建立overlay代码段的虚拟内存VMA和加载内存LMA的地址关系表,所述地址关系表包括VMA、LMA和核标识的三元关系,其中,所述核标识从overlay表overlay_table中获取;判断映射是否正确,包括将所述代码段的VMA和LMA与所述地址关系表中的VMA和LMA与中进行匹配,若匹配成功,则判断代码段对应的全局代码段所属的image所对应的核信息与所述地址关系表中的核标识是否匹配,若匹配成功,则认为映射正确;建立矢量块blockvector,并按照所述blockvector的起始地址由高到低的顺序建立所述blockvector的块链表,所述块链表中包括所述blockvector的核标识;建立线性表linetable,并按所述代码段所属PC的地址由低到高顺序建立linetable链表。进一步的,所述核标识为通过在线读取对象target上的overlay_table而获得。进一步的,所述核标识为通过读取链接脚本中overlayjable的配置信息而获得。—方面,本申请还提供了一种overlay符号表查找方法,包括查找当前执行程序中指令所对应的块信息,包括判断块中核标识是否和当前执行程序中指令的被调试核对应;查找当前执行程序中指令所对应的symtable_and_line信息,包括在最接近的PC值的表项〈PC,line)中查找与所述PC对应的symbol中最小行号的值最接近的值。进一步的,还包括判断代码段是否为已映射,包括判断所述代码段中块信息中的所述核标识是否与当前被调试核对应。一方面,本申请还提供了一种程序调试方法,包括建立overlay符号表方法和查找overlay符号表方法;所述建立overlay符号表方法,包括建立overlay代码段的虚拟内存VMA和加载内存LMA的地址关系表,所述地址关系表包括VMA、LMA和核标识的三元关系,其中,所述核标识从overlay表overlay_table中获取;判断映射是否正确,包括将所述代码段的VMA和LMA与所述地址关系表中的VMA和LMA与中进行匹配,若匹配成功,则判断代码段对应的全局代码段所属的image所对应的核信息与所述地址关系表中的核标识是否匹配,若匹配成功,则认为映射正确;建立矢量块blockvector,并按照所述blockvector的起始地址由高到低的顺序建立所述blockvector的块链表,所述块链表中包括所述blockvector的核标识;建立线性表linetable,并按所述代码段所属PC的地址由低到高顺序建立linetable链表所述查找overlay符号表方法包括查找当前执行程序中指令所对应的块信息,包括判断块中核标识是否和当前执行程序中指令的被调试核对应;查找当前执行程序中指令所对应的symtable_and_line信息,包括在最接近的PC值的表项〈PC,line)中查找与所述PC对应的symbol中最小行号的值最接近的值。进一步的,还包括判断代码段是否为已映射,包括判断所述代码段中块信息中的所述核标识是否与当前被调试核对应。6进一步的,所述核标识为通过在线读取对象target上的overlay_table而获得。—table进一步的,所述核标识为通过读取链接脚本中overlayjable的配置信息而获得。—方面,本申请还提供了一种overlay符号表建立装置,包括关系表建立模块,用于建立overlay代码段的虚拟内存VMA和加载内存LMA的地址关系表,所述地址关系表包括VMA、LMA和核标识的三元关系,其中,所述核标识从overlay表overlay_table中获取;映射匹配模块,用于判断映射是否_正ta确ble,包括将所述代码段的VMA和LMA与所述地址关系表中的VMA和LMA与中进行匹配,若匹配成功,则判断代码段对应的全局代码段所属的image所对应的核信息与所述地址关系表中的核标识是否匹配,若匹配成功,则认为映射正确;矢量块建立模块,用于建立矢量块blockvector,并按照所述blockvector的起始地址由高到低的顺序建立所述blockvector的块链表,所述块链表中包括所述blockvector的核标识;Linetable建立模块,用于建立线性表linetable,并按所述代码段所属PC的地址由低到高顺序建立linetable链表。进一步的,所述关系表建立|旲块包括核标识获取单元,用于通过读取链接脚本中overlay_table的配置信息在线读取target上的overlay_tabl获得核标识。—方面,本申请还提供了一种overlay符号表查找装置,包括块信息查找模块,用于查找当前执行程序中指令所对应的块信息,包括判断块中核标识是否和当前执行程序中指令的被调试核对应;symtabIe_and_line信息查找模块,用于查找当前执行程序中指令所对应的symtable_and_line信息,包括在最接近的PC值的表项〈PC,line〉中查找与所述PC对应的symbol中最小行号的值最接近的值。进一步的,还包括映射判断模块,用于在判断代码段是否为已映射时,判断所述代码段中块信息中的所述核标识是否与当前被调试核对应。一方面,本申请还提供了一种程序调试系统,包括overlay符号表建立装置和overlay符号表查找装置所述overlay符号表建立装置包括关系表建立模块,用于建立overlay代码段的虚拟内存VMA和加载内存LMA的地址关系表,所述地址关系表包括VMA、LMA和核标识的三元关系,其中,所述核标识从overlay表overlay_table中获取;映射匹配模块,用于判断映射是否正确,包括将所述代码段的VMA和LMA与所述地址关系表中的VMA和LMA与中进行匹配,若匹配成功,则判断代码段对应的全局代码段所属的image所对应的核信息与所述地址关系表中的核标识是否匹配,若匹配成功,则认为映射正确;矢量块建立模块,用于建立矢量块blockvector,并按照所述blockvector的起始地址由高到低的顺序建立所述blockvector的块链表,所述块链表中包括所述blockvector的核标识;Linetable建立模块,用于建立线性表linetable,并按所述代码段所属PC的地址由低到高顺序建立linetable链表;所述overlay符号表查找装置包括块信息查找模块,用于查找当前执行程序中指令所对应的块信息,包括判断块中核标识是否和当前执行程序中指令的被调试核对应;symtabIe_and_line信息查找模块,用于查找当前执行程序中指令所对应的symtable_and_line信息,包括在最接近的PC值的表项〈PC,line〉中查找与所述PC对应的symbol中最小行号的值最接近的值。从上述的技术方案可以看出,本申请通过建立包括VMA、LMA和核标识三元关系的地址关系表;在判断映射是否正确时,增加判断代码段对应的全局代码段所属的image所对应的核信息与地址关系表中的核标识是否匹配;建立矢量块时,按矢量块的起始地址由低到高顺序建立矢量块的块链表;并在块链表中包括有所述矢量块的核标识;建立linetable时,按PC地址由低到高顺序建立linetable链表。由于在程序调试时,可以根据核标识查找对应的块信息和对应的symtabIe_and_line信息,并且通过核标识还可以判断代码段是否为已映射;从而建立blockvector列表后,获取block时会显示正确的符号;此外,在根据PC地址查找符号表行号信息时可以通过PC地址对应的当前核标识来识别正确的行号信息,从而避免了多核环境下在采用overlay方式进行程序调试时出现的调试错误。为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图I为本申请中所述overlay符号表建立方法的步骤示意图2为本申请中所述overlay符号表查找方法的步骤示意图3为本申请中所述程序调制方法的步骤示意图4为本申请中所述overlay符号表建立装置的结构示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。为了解决现有技术中,多核环境下在采用overlay方式进行程序调试时出现的调试错误的问题,本实施例提供了一种overlay符号表建立方法,如图I所示,包括SII、建立overlay代码段的虚拟内存VMA和加载内存LMA的地址关系表,所述地址关系表包括VMA、LMA和核标识的三元关系,其中,所述核标识从overlay表overlay_table中获取;现有技术中,多核处理器环境下,进行overlay调试时,之所以会造成建立矢量块列表后,获取block时会显示符号错误,以及,在建立linetable链表后,当通过顺序查找最近一个〈PC,line)大于等于PC的表项来显示代码和行号信息时,会产生错误的结果;其原因是,在建立blockvector时,并不区分多核处理器中的各个核,多核处理器中的每个核的一级缓存中的地址映射到内存中的地址是有可能相同的,这样,由于在查找块的时候,采用的是二分查找法来获取,所以获取的块都是最后排列的块,进而造成显示符号错误。此外,由于现有技术中建立的linetable链表,也无法区分多核处理器中的各个核,从而使得通过顺序查找最近一个〈PC,line)大于等于PC的表项来显示代码和行号信息时,会产生错误的结果。在本发明实施例中,为了使得在通过PC查找对应的块信息时,能够辨识块是属于哪一个核的,在建立地址关系表时,加入与所述代码段对应的处理器内核的核标识的属性。具体的,在建立overlay代码段的虚拟内存VMA和加载内存LMA的地址关系表时,建立包括VMA、LMA和核标识的三元关系表;这样,地址关系表中所包括的属性除了虚拟内存地址VMA和加载内存地址LMA以外,还包括了核属性C0RE,比如,overlay代码段的虚拟内存VMA和加载内存LMA的地址关系表可以为〈VMA,LMA,CORE〉;在这里,核标识可以通过在线读取target上的overlay_table获得;也可以通过读取链接脚本中overlay_table的配置信息获得。S12、判断映射是否正确,包括将所述代码段的VMA和LMA与所述地址关系表中的VMA和LMA与中进行匹配,若匹配成功,则判断代码段对应的全局代码段所属的image所对应的核信息与所述地址关系表中的核标识是否匹配,若匹配成功,则认为映射正确;由于在地址关系表中包括了核标识,所以在判断映射是否正确时,不但需要向现有技术中那样地址关系表判断VMA和LMA的地址是否匹配,而且,还要判断代码段对应的全局代码段所属的image所对应的核信息与所述地址关系表中的核标识是否匹配。由于在多核环境中对指定代码段进行解析时,代码段中的多个程序会分配给不同的处理器核,这样,在建立image时就会包含有核信息,通过该核信息即可识别处理器核。在代码段对应的全局代码段所属的image所对应的核信息与地址关系表中的核标识匹配通过后,即可确定映射为正确。S13、建立矢量块blockvector,并按照blockvector的起始地址由高到低的顺序建立blockvector的块链表,所述块链表中包括blockvector的核标识;由于获得了核标识,所以在建立blockvector后,按startaddr地址由低到高顺序组成块链表时,可以在块链表中加入核标识属性,并赋值为对应代码段的映射核标识的值;比如可以是将处理器中的第一核赋值为01,则映射核标识属性,即CORE属性的值可以为01;处理器中的第二核赋值为02,则映射核标识属性,即CORE属性的值可以为02。由于在本申请中,建立的块链表中,包括了核标识,所以在通过PC查找对应的块信息时,可以通过在判断条件中加入判断块中核标识是否和当前被调试核对应;这样,在判断条件中,除了判断地址以外,还需要判断核属性是否和当前被调试的核一致,从而可以找到与核对应的块。进而避免了在获取符号时会可能显示符号错误的问题。S14、建立线性表linetable,并按所述代码段所属PC的地址由低到高顺序建立linetable链表;此外,本申请在通过PC查找对应的symtable_and_line信息时,除了查找最接近的PC值的〈PC,line)表项外,还需要与该PC对应的symbol中最小行号的值最接近的值。从而避免了错误显示代码和行号信息。在本申请的另一方面,还提供了一种overlay符号表查找方法,如图2所示,包括S21、查找当前执行程序中指令所对应的块信息,包括判断块中核标识是否和当前执行程序中指令的被调试核对应;本实施例是与图I所对应的实施例中建立overlay符号表建立方法相对应的overlay符号表查找方法,也就是说,在建立overlay符号表时,采用了图I所对应的实施例中的方法的基础上,来实施本实施例中的overlay符号表查找方法。由于在本申请中,建立的块链表中,包括了核标识,所以在通过PC查找当前执行程序中指令对应的块信息时,可以通过在判断条件中加入判断块中核标识是否和当前被调试核对应;这样,在判断条件中,除了判断地址以外,还需要判断核属性是否和当前被调试的核一致,从而可以找到与核对应的块。进而避免了在获取符号时会可能显示符号错误的问题。S22、查找当前执行程序中指令所对应的symtabIe_and_line信息,包括在最接近的PC值的表项〈PC,line〉中查找与所述PC对应的symbol中最小行号的值最接近的值。本申请在通过PC查找对应的symtabIe_and_line信息时,除了查找最接近的PC值的〈PC,line)表项外,还需要与该PC对应的symbol中最小行号的值最接近的值。从而避免了错误显示代码和行号信息。在本实施例中,还可以包括有步骤判断代码段是否为已映射,包括判断所述代码段中块信息中的所述核标识是否与当前被调试核对应。通过加入判断代码段是否为已映射这一步骤,从而可以避免代码段在没有被映射至LMA时,所造成的调试错误。在本申请中,还提供了一种程序调试方法,如图3所示,包括建立overlay符号表方法和查找overlay符号表方法;建立overlay符号表方法,包括S31、建立overlay代码段的虚拟内存VMA和加载内存LMA的地址关系表时,建立包括VMA、LMA和核标识的三元关系表,所述核标识获取自overlay_table;在本发明实施例中,为了使得在通过PC查找对应的块信息时,能够辨识块是属于哪一个核的,在建立地址关系表时,加入与所述代码段对应的处理器内核的核标识的属性。具体的,在建立overlay代码段的虚拟内存VMA和加载内存LMA的地址关系表时,建立包括VMA、LMA和核标识的三元关系表;这样,地址关系表中所包括的属性除了虚拟内存地址VMA和加载内存地址LMA以外,还包括了核属性C0RE,比如,overlay代码段的虚拟内存VMA和加载内存LMA的地址关系表可以为〈VMA,LMA,CORE〉;在这里,核标识可以通过在线读取target上的overlay_table获得;也可以通过读取链接脚本中overlay_table的配置信息获得。S32、判断映射是否正确,包括将所述代码段的VMA和LMA与所述地址关系表中的VMA和LMA与中进行匹配,若匹配成功,则判断代码段对应的全局代码段所属的image所对应的核信息与所述地址关系表中的核标识是否匹配,若匹配成功,则认为映射正确;由于在地址关系表中包括了核标识,所以在判断映射是否正确时,不但需要向现有技术中那样地址关系表判断VMA和LMA的地址是否匹配,而且,还要判断代码段对应的全局代码段所属的image所对应的核信息与所述地址关系表中的核标识是否匹配。由于在多核环境中对指定代码段进行解析时,代码段中的多个程序会分配给不同的处理器核,这样,在建立image时就会包含有核信息,通过该核信息即可识别处理器核。在代码段对应的全局代码段所属的image所对应的核信息与地址关系表中的核标识匹配通过后,即可确定映射为正确。S33、建立矢量块blockvector,并按照blockvector的起始地址由高到低的顺序建立blockvector的块链表,所述块链表中包括blockvector的核标识;由于获得了核标识,所以在建立blockvector后,按startaddr地址由低到高顺序组成块链表时,可以在块链表中加入核标识属性,并赋值为对应代码段的映射核标识的值;比如可以是将处理器中的第一核赋值为01,则映射核标识属性,即CORE属性的值可以为01;处理器中的第二核赋值为02,则映射核标识属性,即CORE属性的值可以为02。由于在本申请中,建立的块链表中,包括了核标识,所以在通过PC查找对应的块信息时,可以通过在判断条件中加入判断块中核标识是否和当前被调试核对应;这样,在判断条件中,除了判断地址以外,还需要判断核属性是否和当前被调试的核一致,从而可以找到与核对应的块。进而避免了在获取符号时会可能显示符号错误的问题。S34、建立线性表linetable,并按所述代码段所属PC的地址由低到高顺序建立linetable链表;此外,本申请在通过PC查找对应的symtable_and_line信息时,除了查找最接近的PC值的〈PC,line)表项外,还需要与该PC对应的symbol中最小行号的值最接近的值。从而避免了错误显示代码和行号信息。查找overlay符号表方法包括S35、查找当前执行程序中指令所对应的块信息,包括判断块中核标识是否和当前执行程序中指令的被调试核对应;由于在本申请中,建立的块链表中,包括了核标识,所以在通过PC查找当前执行程序中指令对应的块信息时,可以通过在判断条件中加入判断块中核标识是否和当前被调试核对应;这样,在判断条件中,除了判断地址以外,还需要判断核属性是否和当前被调试的核一致,从而可以找到与核对应的块。进而避免了在获取符号时会可能显示符号错误的问题。S36、查找当前执行程序中指令所对应的symtabIe_and_line信息,包括在最接近的PC值的表项〈PC,line〉中查找与所述PC对应的symbol中最小行号的值最接近的值。本申请在通过PC查找对应的symtable_and_line信息时,除了查找最接近的PC值的〈PC,line)表项外,还需要与该PC对应的symbol中最小行号的值最接近的值。从而避免了错误显示代码和行号信息。在本实施例中,还可以包括有步骤判断代码段是否为已映射,包括判断所述代码段中块信息中的所述核标识是否与当前被调试核对应。通过加入判断代码段是否为已映射这一步骤,从而可以避免代码段在没有被映射至LMA时,所造成的调试错误。在本申请中,还提供了一种overlay符号表建立装置,如图4所示,包括关系表建立模块11,用于建立overlay代码段的虚拟内存VMA和加载内存LMA的地址关系表时,建立包括VMA、LMA和核标识的二兀关系表,核标识犾取自overlay_table;现有技术中,多核处理器环境下,进行overlay调试时,之所以会造成建立矢量块列表后,获取block时会显示符号错误,以及,在建立linetable链表后,当通过顺序查找最近一个〈PC,line)大于等于PC的表项来显示代码和行号信息时,会产生错误的结果;其原因是,在建立blockvector时,并不区分多核处理器中的各个核,多核处理器中的每个核的一级缓存中的地址映射到内存中的地址是有可能相同的,这样,由于在查找块的时候,采用的是二分查找法来获取,所以获取的块都是最后排列的块,进而造成显示符号错误。此外,由于现有技术中建立的linetable链表,也无法区分多核处理器中的各个核,从而使得通过顺序查找最近一个〈PC,line〉大于等于PC的表项来显示代码和行号信息时,会产生错误的结果。在本发明实施例中,为了使得在通过PC查找对应的块信息时,能够辨识块是属于哪一个核的,在建立地址关系表时,通过关系表建立模块,加入与所述代码段对应的处理器内核的核标识的属性。具体的,在建立overlay代码段的虚拟内存VMA和加载内存LMA的地址关系表时,建立包括VMA、LMA和核标识的三元关系表;这样,地址关系表中所包括的属性除了虚拟内存地址VMA和加载内存地址LMA以外,还包括了核属性C0RE,比如,verlay代码段的虚拟内存VMA和加载内存LMA的地址关系表可以为〈VMA,LMA,CORE〉;在这里,核标识可以通过在线读取target上的overlay_table获得;也可以通过读取链接脚本中overlay_table的配置信息获得。映射匹配模块12,用于在判断映射是否正确时,包括将所述代码段的VMA和LMA与所述地址关系表中的VMA和LMA与中进行匹配,若匹配成功,则判断代码段对应的全局代码段所属的image所对应的核信息与所述地址关系表中的核标识是否匹配,若匹配成功,则认为映射正确;由于在地址关系表中包括了核标识,所以在判断映射是否正确时,映射匹配模块12不但需要向现有技术中那样地址关系表判断VMA和LMA的地址是否匹配,而且,还要判断代码段对应的全局代码段所属的image所对应的核信息与所述地址关系表中的核标识是否匹配。由于在多核环境中对指定代码段进行解析时,代码段中的多个程序会分配给不同的处理器核,这样,在建立image时就会包含有核信息,通过该核信息即可识别处理器核。在代码段对应的全局代码段所属的image所对应的核信息与地址关系表中的核标识匹配通过后,即可确定映射为正确。矢量块建立模块13,用于建立矢量块blockvector,并按照blockvector的起始地址由高到低的顺序建立blockvector的块链表,所述块链表中包括blockvector的核标由于获得了核标识,所以矢量块建立模块13在建立blockvector后,按startaddr地址由低到高顺序组成块链表时,可以在块链表中加入核标识属性,并赋值为对应代码段的映射核标识的值;比如可以是将处理器中的第一核赋值为01,则映射核标识属性,即CORE属性的值可以为01;处理器中的第二核赋值为02,则映射核标识属性,即CORE属性的值可以为02。由于在本申请中,建立的块链表中,包括了核标识,所以在通过PC查找对应的块信息时,可以通过在判断条件中加入判断块中核标识是否和当前被调试核对应;这样,在判断条件中,除了判断地址以外,还需要判断核属性是否和当前被调试的核一致,从而可以找到与核对应的块。进而避免了在获取符号时会可能显示符号错误的问题。Linetable建立模块14,用于建立线性表linetable,并按代码段所属PC的地址由低到高顺序建立所述linetable链表。在Linetable建立模块14建立线性表linetable后,本申请在通过PC查找对应的symtabIe_and_line信息时,除了查找最接近的PC值的〈PC,line〉表项外,还需要与该PC对应的symbol中最小行号的值最接近的值。从而避免了错误显示代码和行号信息。在本申请中,还提供了一种overlay符号表查找装置,包括块信息查找模块,用于查找当前执行程序中指令所对应的块信息,包括判断块中核标识是否和当前执行程序中指令的被调试核对应;本实施例是与图4所对应的实施例中建立overlay符号表建立装置相对应的overlay符号表查找装置,也就是说,在建立overlay符号表时,采用了图4所对应的实施例中的装置的基础上,来通过本实施例中的overlay符号表查找装置实施本实施例。由于在本申请中,建立的块链表中,包括了核标识,所以由块信息查找模块在通过PC查找当前执行程序中指令所对应的块信息时,可以通过在判断条件中加入判断块中核标识是否和当前被调试核对应;这样,在判断条件中,除了判断地址以外,还需要判断核属性是否和当前被调试的核一致,从而可以找到与核对应的块。进而避免了在获取符号时会可能显示符号错误的问题。symtabIe_and_line信息查找模块,用于查找当前执行程序中指令所对应的symtable_and_line信息,包括在最接近的PC值的表项〈PC,line〉中查找与所述PC对应的symbol中最小行号的值最接近的值。本申请在通过PC查找对应的symtable_and_line信息时,除了查找最接近的PC值的〈PC,line)表项外,还需要与该PC对应的symbol中最小行号的值最接近的值。从而避免了错误显示代码和行号信息。进一步的,在本实施例中,还可以包括有映射判断模块,用于在判断代码段是否为已映射时,判断所述代码段中块信息中的所述核标识是否与当前被调试核对应。通过加入映射判断模块,从而使得在判断代码段是否为已映射时,可以避免代码段在没有被映射至LMA时,所造成的调试错误。在本申请中,还提供了一种程序调试系统,包括overlay符号表建立装置和overlay符号表查找装置;所述overlay符号表建立装置包括关系表建立模块,用于建立overlay代码段的虚拟内存VMA和加载内存LMA的地址关系表,所述地址关系表包括VMA、LMA和核标识的三元关系,其中,所述核标识从overlay表overlay_table中获取;映射匹配模块,用于判断映射是否正确,包括将所述代码段的VMA和LMA与所述地址关系表中的VMA和LMA与中进行匹配,若匹配成功,则判断代码段对应的全局代码段所属的image所对应的核信息与所述地址关系表中的核标识是否匹配,若匹配成功,则认为映射正确;矢量块建立模块,用于建立矢量块blockvector,并按照所述blockvector的起始地址由高到低的顺序建立所述blockvector的块链表,所述块链表中包括所述blockvector的核标识;Linetable建立模块,用于建立线性表linetable,并按所述代码段所属PC的地址由低到高顺序建立linetable链表;所述overlay符号表查找装置包括块信息查找模块,用于查找当前执行程序中指令所对应的块信息,包括判断块中核标识是否和当前执行程序中指令的被调试核对应;symtabIe_and_line信息查找模块,用于查找当前执行程序中指令所对应的symtable_and_line信息,包括在最接近的PC值的表项〈PC,line〉中查找与所述PC对应的symbol中最小行号的值最接近的值。由于在本实施例中的overlay符号表建立装置与图4所对应实施例中的建立overlay符号表建立装置类似,且,本实施例中的overlay符号表查找装置与上述实施例中查找overlay符号表查找装置类似,其技术方案和技术效果也相同,所以在此就不再赘述。本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。权利要求1.ー种overlay符号表建立方法,其特征在于,包括建立overlay代码段的虚拟内存VMA和加载内存LMA的地址关系表,所述地址关系表包括VMA、LMA和核标识的三元关系,其中,所述核标识从overlay表overlay_table中获取;判断映射是否正确,包括将所述代码段的VMA和LMA与所述地址关系表中的VMA和LMA与中进行匹配,若匹配成功,则判断代码段对应的全局代码段所属的image所对应的核信息与所述地址关系表中的核标识是否匹配,若匹配成功,则认为映射正确;建立矢量块blockvector,并按照所述blockvector的起始地址由高到低的顺序建立所述blockvector的块链表,所述块链表中包括所述blockvector的核标识;建立线性表Iinetable,并按所述代码段所属PC的地址由低到高顺序建立Iinetable链表。2.根据权利要求1所述overlay符号表建立方法,其特征在于,所述核标识为通过在线读取对象target上的overlay_table而获得。3.根据权利要求1所述overlay符号表建立方法,其特征在于,所述核标识为通过读取链接脚本中overlay_table的配置信息而获得。4.ー种overlay符号表查找方法,其特征在于,包括查找当前执行程序中指令所对应的块信息,包括判断块中核标识是否和当前执行程序中指令的被调试核对应;查找当前执行程序中指令所对应的符号表及行号symtable_and_line信息,包括在最接近的PC值的表项〈PC,line)中查找与所述PC对应的符号symbol中最小行号的值最接近的值。5.根据权利要求4所述overlay符号表查找方法,其特征在于,还包括判断代码段是否为已映射,包括判断所述代码段中块信息中的所述核标识是否与当前被调试核对应。6.一种程序调试方法,其特征在于,包括建立overlay符号表方法和查找overlay符号表方法;所述建立overlay符号表方法,包括建立overlay代码段的虚拟内存VMA和加载内存LMA的地址关系表,所述地址关系表包括VMA、LMA和核标识的三元关系,其中,所述核标识从overlay表overlay_table中获取;判断映射是否正确,包括将所述代码段的VMA和LMA与所述地址关系表中的VMA和LMA与中进行匹配,若匹配成功,则判断代码段对应的全局代码段所属的image所对应的核信息与所述地址关系表中的核标识是否匹配,若匹配成功,则认为映射正确;建立矢量块blockvector,并按照所述blockvector的起始地址由高到低的顺序建立所述blockvector的块链表,所述块链表中包括所述blockvector的核标识;建立线性表Iinetable,并按所述代码段所属PC的地址由低到高顺序建立Iinetable链表所述查找overlay符号表方法包括查找当前执行程序中指令所对应的块信息,包括判断块中核标识是否和当前执行程序中指令的被调试核对应;查找当前执行程序中指令所对应的symtable_and_line信息,包括在最接近的PC值的表项〈PC,line)中查找与所述PC对应的symbol中最小行号的值最接近的值。7.根据权利要求6所述程序调试方法,其特征在于,还包括判断代码段是否为已映射,包括判断所述代码段中块信息中的所述核标识是否与当前被调试核对应。8.根据权利要求7所述程序调试方法,其特征在于,所述核标识为通过在线读取对象target上的overlay_table而获得。9.根据权利要求7所述程序_调tab试Ie方法,其特征在于,所述核标识为通过读取链接脚本中overlay_table的配置信息而获得。10.一种overlay符号表建立装置,其特征在于,包括关系表建立模块,用于建立overlay代码段的虚拟内存VMA和加载内存LMA的地址关系表,所述地址关系表包括VMA、LMA和核标识的三元关系,其中,所述核标识从overlay表overlay_table中获取;映射匹配模块,用于判断映射是否正确,包括将所述代码段的VMA和LMA与所述地址关系表中的VMA和LMA与中进行匹配,若匹配成功,则判断代码段对应的全局代码段所属的image所对应的核信息与所述地址关系表中的核标识是否匹配,若匹配成功,则认为映射正确;矢量块建立模块,用于建立矢量块blockvector,并按照所述blockvector的起始地址由高到低的顺序建立所述blockvector的块链表,所述块链表中包括所述blockvector的核标识;Linetable建立模块,用于建立线性表Iinetable,并按所述代码段所属PC的地址由低到高顺序建立Iinetable链表。11.根据权利要求10所述overlay符号表建立装置,其特征在于,所述关系表建立模块包括核标识获取单元,用于通过读取链接脚本中overlay_table的配置信息在线读取target上的overlay_tabl获得核标识。12.—种overlay符号表查找装置,其特征在于,包括块信息查找模块,用于查找当前执行程序中指令所对应的块信息,包括判断块中核标识是否和当前执行程序中指令的被调试核对应;symtable_and_line信息查找模块,用于查找当前执行程序中指令所对应的symtable_and_line信息,包括在最接近的PC值的表项〈PC,line〉中查找与所述PC对应的symbol中最小行号的值最接近的值。13.根据权利要求12所述overlay符号表查找装置,其特征在于,还包括映射判断模块,用于在判断代码段是否为已映射时,判断所述代码段中块信息中的所述核标识是否与当前被调试核对应。14.一种程序调试系统,包括overlay符号表建立装置和overlay符号表查找装置所述overlay符号表建立装置包括关系表建立模块,用于建立overlay代码段的虚拟内存VMA和加载内存LMA的地址关系表,所述地址关系表包括VMA、LMA和核标识的三元关系,其中,所述核标识从overlay表overlay_table中获取;映射匹配模块,用于判断映射是否正确,包括将所述代码段的VMA和LMA与所述地址关系表中的VMA和LMA与中进行匹配,若匹配成功,则判断代码段对应的全局代码段所属的image所对应的核信息与所述地址关系表中的核标识是否匹配,若匹配成功,则认为映射正确;矢量块建立模块,用于建立矢量块blockvector,并按照所述blockvector的起始地址由高到低的顺序建立所述blockvector的块链表,所述块链表中包括所述blockvector的核标识;Linetable建立模块,用于建立线性表Iinetable,并按所述代码段所属PC的地址由低到高顺序建立Iinetable链表;所述overlay符号表查找装置包括块信息查找模块,用于查找当前执行程序中指令所对应的块信息,包括判断块中核标识是否和当前执行程序中指令的被调试核对应;symtable_and_line信息查找模块,用于查找当前执行程序中指令所对应的symtable_and_line信息,包括在最接近的PC值的表项〈PC,line〉中查找与所述PC对应的symbol中最小行号的值最接近的值。全文摘要本发明实施例公开了overlay符号表建立和查找的方法、装置及程序调制系统,其中overlay符号表建立方法包括建立VMA和LMA的地址关系表时包括核标识;在判断映射是否正确时包括判断代码段对应的全局代码段所属的image所对应的核信息与地址关系表中的核标识是否匹配;建立blockvector的块链表,块链表中包括有blockvector的核标识。由于本申请中在程序调试时,可以根据核标识查找对应的块信息和对应的symtable_and_line信息,从而建立blockvector列表后,获取block时会显示正确的符号;避免了多核环境下在采用overlay方式进行程序调试时出现的调试错误。文档编号G06F11/36GK102981956SQ20121050500公开日2013年3月20日申请日期2012年11月30日优先权日2012年11月30日发明者卓玉樟,崔世强申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1