[发明专利]基于寄存器传输语言确定静态函数调用关系的方法有效
| 申请号: | 201410016117.9 | 申请日: | 2014-01-14 |
| 公开(公告)号: | CN103744678B | 公开(公告)日: | 2017-05-03 |
| 发明(设计)人: | 向勇;汤卫东;杜香燕;孙卫真;马东超;杨彦卿;陆慧梅 | 申请(专利权)人: | 清华大学 |
| 主分类号: | G06F9/44 | 分类号: | G06F9/44 |
| 代理公司: | 北京中伟智信专利商标代理事务所11325 | 代理人: | 张岱 |
| 地址: | 100084*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 基于 寄存器 传输 语言 确定 静态 函数 调用 关系 方法 | ||
1.一种基于寄存器传输语言确定静态函数调用关系的方法,其特征在于,所述方法包括:
将源程序文件编译过程中产生的中间表示文件以寄存器传输语言的文件格式作为中间结果进行输出、转存;
对所述中间结果进行分析,得到各级目录的内部和外部调用函数关系文件;
基于所述各级目录的内部和外部调用函数关系文件,生成以函数、文件、模块为节点,以所述的函数、文件、各级目录之间的函数调用的次数为边的函数调用关系图来描述静态函数调用关系;
和/或基于所述各级目录的内部和外部调用函数关系文件,生成函数、文件、各级目录之间的函数调用关系列表来描述静态函数调用关系;
所述函数调用关系图的生成方法具体包括步骤:
S1将第n级目录下的源程序文件W编译过程中得到中间表示文件以寄存器传输语言的文件格式作为中间结果进行输出、转存,其中所述中间结果包括所述源程序文件W的函数定义文件Z1和函数调用信息文件Z2;
S2对所述源程序文件W的函数定义文件Z1和函数调用信息文件Z2进行分析,将所述源程序文件W中带有指定标示的函数名写入同一文件,生成所述源程序文件W的定义函数名列表文件W1;
将所述函数调用信息文件Z2中的被调用函数的函数名写入同一文件,形成所述源程序文件W的被调用函数名列表文件W2;
S3将所述定义函数名列表文件W1中的函数名和所述被调用函数名列表文件W2中的函数名进行匹配,
若函数名相匹配,则生成文件W的内部函数调用关系文件W3;
若函数名不匹配,则将所述被调用函数列表文件W2中的函数名和所述函数名对应的所述定义函数名列表文件W1中的函数名写入同一文件,生成源程序文件W的外部函数调用关系文件W4,并将不匹配的被调用函数的函数名写入同一文件,生成源程序文件W的未定义函数名列表文件W5;
S4对第n级目录下的每个源程序文件重复上述步骤S1至S3,得到每个源程序文件的定义函数名列表文件,未定义函数名列表文件、内部调用函数关系文件和外部函数关系调用文件;
S5将第n级目录下所有的定义函数名列表文件中的函数名写入同一文件中,形成n级目录的定义函数名列表文件n1;
将n级目录下所有的未定义函数名列表文件中的函数名写入同一文件,形成第n级目录的未定义函数名列表文件n2;
S6将所述定义函数名列表文件n1中的函数名和所述未定义函数名列表文件n2中的函数名进行匹配,
若函数名相匹配,则生成第n级目录的内部函数调用关系文件n3;
若函数名不匹配,则将所述未定义函数名列表文件n2中的函数名和所述未定义函数名列表文件n2中的函数名对应的所述定义函数名列表文件n1中的函数名写入同一文件,生成第n级目录的的外部函数调用关系文件n4,并将不匹配的被调用函数名写入同一文件,生成第n级目录的未定义函数名列表文件n5;
重复步骤S1-S6直至根目录,将根目录下的未定义函数名列表文件的函数名和根目录下的定义函数名列表文件中的函数名进行匹配,并生成根目录下的内部调用函数文件;
基于上述各级目录的内部函数调用和外部函数调用关系文件,生成以函数、文件、各级目录为节点,以他们之间的调用次数为边的函数调用关系图;
所述函数调用关系列表的生成包括步骤:
a1将第n级目录下的源程序文件编译过程中得到中间表示文件以寄存器传输语言的文件格式作为中间结果进行输出、转存,其中所述中间结果包括所述源程序文件的函数定义文件和函数调用信息文件;
a2对第n级目录下的源程序文件A的函数定义文件和函数调用文件进行分析,得到源程序文件A的内部函数调用列表文件,以及生成源程序文件A的未定义的被调用函数列表文件;
a3在第n级目录下,查找是否存在源程序文件B,所述源程序文件B的定义函数的定义路径和所述源程序文件A的未定义的被调用函数列表的定义路径a相同,
若存在,则生成源程序文件A对源程序文件B的调用列表,相应函数调用次数增加1,判断第n级目录下的函数调用信息文件中是否包含函数定义路径a,若已定义,则不作处理;若没有定义,则将被调用函数相关信息增加到第n级目录下的函数调用信息文件中;
若不存在,则在第n级目录的上层目录第n-1级目录下查找是否存源程序文件的定义路径与所述源程序文件A内未定义的被调用函数定义路径a相同,
若查找到,则生成相应的调用关系列表,相应的函数调用次数增加1;
若查找不到,则在第n-2级目录下查找,逐级向上层目录查找直至生成相应的函数调用关系列表文件。
2.根据权利要求1所述的基于寄存器传输语言确定静态函数调用关系的方法,其特征在于:所述方法还包括对生成的函数调用关系图和/或函数调用关系列表进行存储和显示的步骤。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于清华大学,未经清华大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410016117.9/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种业务流程处理方法及装置
- 下一篇:一种用于数据存储的方法与设备





