一种目标处理器上系统调用的侵入式半本地化仿真方法技术方案

技术编号:32127140 阅读:12 留言:0更新日期:2022-01-29 19:18
本发明专利技术提供的本发明专利技术提供的一种目标处理器上系统调用的侵入式半本地化仿真方法,使用本地化仿真技术,可利用自定义指令标记系统调用入口,不受处理器指令集的限制;根据本发明专利技术提出的步骤对仿真平台进行很小改动,则可扩展新的系统调用支持。通过本发明专利技术提高了仿真平台上调用本地系统调用的通用性和扩展性,各种系统调用使用同一块共享内存,提高了资源的利用率。率。率。

【技术实现步骤摘要】
一种目标处理器上系统调用的侵入式半本地化仿真方法


[0001]本专利技术涉及仿真平台领域,尤其涉及一种目标处理器上系统调用的侵入式半本地化仿真方法。

技术介绍

[0002]在嵌入式领域,半主机调试是将目标板卡的IO请求从应用程序传递到远程运行调试器主机的一种调试机制。用户通过这种机制可以在目标程序中使用通用的输入/输出接口,比如printf、fread等,提高调试的效率。接口需要运行时库和底层系统调用的支持。
[0003]机制的运行依赖于硬件仿真器支持,随着仿真技术的发展,目前越来越多的仿真平台支持该调试机制,但是多依赖于处理器本身特定的指令,比如陷阱指令,来实现系统调用,此类方法不具备通用性,使得仿真平台必须为不同的处理器架构定制半主机调试模块,难以设计统一的仿真支撑组件。
[0004]在仿真平台中,现有的半本地化仿真技术的缺点,主要存在两方面:通用性不足:处理器型号众多,差异较大。在仿真平台中,半本地化仿真技术需要依赖具体的处理器指令集,导致现有的本地化仿真技术通用性严重不足。可扩展性不足:现有的仿真平台中,目标处理器扩展支持新的系统调用,都需要针对该处理器定制新的系统调用标识,扩展难度大。

技术实现思路

[0005]鉴于上述问题,提出了本专利技术以便提供克服上述问题或者至少部分地解决上述问题的一种目标处理器上系统调用的侵入式半本地化仿真方法。
[0006]根据本专利技术的一个方面,提供了一种目标处理器上系统调用的侵入式半本地化仿真方法,所述仿真方法包括:
[0007]目标处理器的运行时库提供能够标识系统调用入口的标签$SYSCall$,并在标签地址插入一条空指令;
[0008]所述运行时库提供存放系统调用输入消息和输出消息的标签$SYSBuffer$;处理不同的系统调用时,所述标签$SYSBuffer$地址之后的内容可重复使用;
[0009]在程序执行到系统调用时,进入系统调用的入口之前,运行时库识别该系统调用的类型、参数信息,并在所述标签$SYSBuffer$位置写入输入消息,所述输入消息包括可变长参数长度,系统调用类型,系统调用参数列表;
[0010]如果可变参数长度不为0,则在参数列表后写入可变长参数内容;
[0011]自定义一条调试指令insn_sys,作为在调试状态触发系统调用时的处理入口,需确保该指令不与处理器指令集冲突;
[0012]在仿真平台初始化时将所述调试指令insn_sys替换目标程序所述$SYSCall$所在的空指令;
[0013]目标程序执行后,当遇到系统调用时,仿真平台从所述标签$SYSBuffer$的位置获取当前系统调用的可变长参数长度,系统调用类型,定长参数列表,可变长参数内容;
[0014]识别系统调用类型,为本地的系统调用接口传入参数后,执行本地系统调用,当系统调用涉及句柄时,建立主机和客户机两个句柄的映射关系;
[0015]执行系统调用的返回值和返回参数仍旧写入到所述标签$SYSBuffer$的位置;
[0016]目标程序从所述标签$SYSBuffer$位置获取到系统调用的返回值、参数以及可变长参数数据,完成系统调用。
[0017]可选的,所述目标程序执行后,当遇到系统调用时,仿真平台从所述标签$SYSBuffer$的位置获取当前系统调用的可变长参数长度,系统调用类型,定长参数列表,可变长参数内容具体包括:
[0018]利用仿真平台符号表模块接口提取系统调用参数缓存区所述标签$SYSBuffer$在客户机的地址;
[0019]传输系统调用参数的数据结构包括可变长参数长度,系统调用类型,定长参数列表,可变长参数4部分,其中可变长参数长度,系统调用类型,定长参数列表为定长数据,则利用仿真平台内存模块接口将获取的客户机地址所指向的系统调用参数定长数据传送到宿主机的存储器空间;
[0020]解析系统调用参数定长数据,获取到可变长参数长度后,根据该值大小再利用仿真平台内存模块接口获取可变长参数;
[0021]识别系统调用的类型,将获取的系统调用参数转化成适用宿主机系统调用的参数类型,执行宿主机的系统调用。
[0022]可选的,所述识别系统调用类型,为本地的系统调用接口传入参数后,执行本地系统调用,当系统调用涉及句柄时,建立主机和客户机两个句柄的映射关系具体包括:
[0023]当在客户机上对某个文件或设备申请操作句柄时,在宿主机也会申请一个本地操作句柄,如果所述本地操作句柄申请成功,则建立具有唯一性的映射并添加到映射关系<虚拟机句柄,本地句柄>结构中,如果所述本地操作句柄申请失败则不建立映射关系;
[0024]当客户机使用操作句柄时,客户机操作自己申请的句柄,传递给宿主机,宿主机根据客户机和主机句柄之间的映射关系,得到宿主机本身的句柄;
[0025]写入系统调用的输出消息,输出消息数据项包括可变长参数长度,系统调用的参数列表,如果可变参数长度不为0,在参数列表后写入可变长参数内容。
[0026]本专利技术提供的一种目标处理器上系统调用的侵入式半本地化仿真方法,使用本地化仿真技术,可利用自定义指令标记系统调用入口,不受处理器指令集的限制;根据本专利技术提出的步骤对仿真平台进行很小改动,则可扩展新的系统调用支持。通过本专利技术提高了仿真平台上调用本地系统调用的通用性和扩展性,各种系统调用使用同一块共享内存,提高了资源的利用率。
[0027]上述说明仅是本专利技术技术方案的概述,为了能够更清楚了解本专利技术的技术手段,而可依照说明书的内容予以实施,并且为了让本专利技术的上述和其它目的、特征和优点能够更明显易懂,以下特举本专利技术的具体实施方式。
附图说明
[0028]为了更清楚地说明本专利技术实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本
领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
[0029]图1为本专利技术实施例提供的仿真平台本地化系统调用功能示意图。
具体实施方式
[0030]下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
[0031]本专利技术的说明书实施例和权利要求书及附图中的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元。
[0032]下面结合附图和实施例,对本专利技术的技术方案做进一步的详细描述。
[0033]如图1所示,一种目标处理器上系统调用的侵入式半本地化仿真方法,仿真方法包括:
[0034]目标处理器的运行时库提供能够标识系统调用入口的标签$SYSCall$,并在标签本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种目标处理器上系统调用的侵入式半本地化仿真方法,其特征在于,所述仿真方法包括:目标处理器的运行时库提供能够标识系统调用入口的标签$SYSCall$,并在标签地址插入一条空指令;所述运行时库提供存放系统调用输入消息和输出消息的标签$SYSBuffer$;处理不同的系统调用时,所述标签$SYSBuffer$地址之后的内容可重复使用;在程序执行到系统调用时,进入系统调用的入口之前,运行时库识别该系统调用的类型、参数信息,并在所述标签$SYSBuffer$位置写入输入消息,所述输入消息包括可变长参数长度,系统调用类型,系统调用参数列表;如果可变参数长度不为0,则在参数列表后写入可变长参数内容;自定义一条调试指令insn_sys,作为在调试状态触发系统调用时的处理入口,需确保该指令不与处理器指令集冲突;在仿真平台初始化时将所述调试指令insn_sys替换目标程序所述$SYSCall$所在的空指令;目标程序执行后,当遇到系统调用时,仿真平台从所述标签$SYSBuffer$的位置获取当前系统调用的可变长参数长度,系统调用类型,定长参数列表,可变长参数内容;识别系统调用类型,为本地的系统调用接口传入参数后,执行本地系统调用,当系统调用涉及句柄时,建立主机和客户机两个句柄的映射关系;执行系统调用的返回值和返回参数仍旧写入到所述标签$SYSBuffer$的位置;目标程序从所述标签$SYSBuffer$位置获取到系统调用的返回值、参数以及可变长参数数据,完成系统调用。2.根据权利要求1所述的一种目标处理器上系统调用的侵入式半本地化仿真方法,其特征在于,所述目标程序执行后,当遇到系统调用时,仿真平台从所述标签$S...

【专利技术属性】
技术研发人员:程胜王明邱化强赵新鹏王勋王龙
申请(专利权)人:北京神舟航天软件技术股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1