本發(fā)明實施例涉及處理器指令級功能驗證,尤其涉及一種隨機測試程序生成方法及裝置。
背景技術:
隨機測試程序生成是一種處理器指令級功能驗證方法。一個處理器在功能上為程序員提供了一系列指令以及相關的邏輯寄存器和內(nèi)存虛地址空間。處理器執(zhí)行一條指令實現(xiàn)一個特定的功能,例如:讀取兩個寄存器的數(shù)據(jù)相加后寫入某個寄存器、將內(nèi)存某個地址的數(shù)據(jù)拷貝到某個寄存器或?qū)⒁粋€寄存器的數(shù)據(jù)拷貝到內(nèi)存某個地址等。為了保證處理器設計的正確性,需要對設計的功能進行驗證。通過隨機測試程序生成方法隨機產(chǎn)生一段指令序列,即一個程序,然后在處理器上進行仿真,執(zhí)行該段指令序列并檢查執(zhí)行結(jié)果是否正確。
隨機測試程序生成與執(zhí)行實際程序的不同之處在于,執(zhí)行實際程序之前,所有指令和初始數(shù)據(jù)都已經(jīng)存放在內(nèi)存中,而隨機生成程序時,內(nèi)存最初為空,指令和數(shù)據(jù)隨著指令的生成不斷添加到內(nèi)存中,因此隨機測試程序生成需要考慮如何合理使用內(nèi)存空間,保證新生成的指令不會覆蓋已存在的指令和數(shù)據(jù),以及新寫入內(nèi)存的數(shù)據(jù)不會覆蓋已存在的指令。其中,有兩類指令需要特別關注:一種是跳轉(zhuǎn)指令,即可能改變下一條指令默認地址的指令;默認情況下,一條指令的下一條指令緊鄰其后;一種是訪存指令,即可能從內(nèi)存讀數(shù)據(jù)或向內(nèi)存寫數(shù)據(jù)的指令。內(nèi)存空間都是以字節(jié)為單位編址,第一個字節(jié)的地址為0,第二個字節(jié)的地址為1,如此排列。指令和數(shù)據(jù)的大小都是字節(jié)的整數(shù)倍,并且一個處理器的所有指令的大小都是一樣的,指令地址則是該指令第一個字節(jié)的地址。但是一個訪存指令所訪問的數(shù)據(jù)的大小可以不定,訪存地址則是所訪問數(shù)據(jù)的第一個字節(jié)的地址。
現(xiàn)有的隨機測試程序生成方法,在生成每條指令之前,如果檢查到當前 指令地址已經(jīng)存放了指令或數(shù)據(jù),則終止指令生成,然而此時,在內(nèi)存中可能仍有剩余的空閑空間,因而,造成現(xiàn)有技術無法充分利用內(nèi)存空間。
技術實現(xiàn)要素:
本發(fā)明實施例提供一種隨機測試程序生成方法及裝置,以解決現(xiàn)有技術無法充分利用內(nèi)存空間的問題。
第一方面,本發(fā)明實施例提供一種隨機測試程序生成方法,其中,所述方法包括:
若確定起始于隨機測試程序的當前指令地址的第一空閑塊的大小小于閾值,則生成以所述當前指令地址為起始地址的重定向指令段;
通過所述重定向指令段將所述當前指令地址重定向為重定向地址;
以所述重定向地址為起始地址生成所述當前指令。
根據(jù)第一方面,在第一方面的第一種可能的實現(xiàn)方式中,所述重定向地址不同于所述當前指令地址且未存放指令和數(shù)據(jù),且起始于所述重定向地址的第二空閑塊的大小不小于所述閾值;所述重定向指令段包含n條指令,所述閾值為n+1條指令所占用的內(nèi)存空間的大?。凰龅谝豢臻e塊和所述第二空閑塊分別指未存放指令和數(shù)據(jù)的最大連續(xù)內(nèi)存空間。
根據(jù)第一方面或者第一方面的第一種可能的實現(xiàn)方式,在第一方面的第二種可能的實現(xiàn)方式中,若所述隨機測試程序中將要生成的指令為跳轉(zhuǎn)指令,則所述生成所述隨機測試程序具體包括:
確定所述跳轉(zhuǎn)指令的跳轉(zhuǎn)地址;其中,所述跳轉(zhuǎn)地址不同于所述當前指令地址且未存放指令和數(shù)據(jù),且起始于所述跳轉(zhuǎn)地址的第三空閑塊的大小不小于所述閾值;所述第三空閑塊指未存放指令和數(shù)據(jù)的最大連續(xù)內(nèi)存空間。
根據(jù)第一方面或者第一方面的第一種可能的實現(xiàn)方式,在第一方面的第三種可能的實現(xiàn)方式中,若所述隨機測試程序中將要生成的指令為訪存指令,則所述生成所述隨機測試程序具體包括:
確定所述訪存指令的訪存地址;其中,所述訪存地址不能位于第四空閑塊中;所述第四空閑塊起始于所述當前指令地址,且所述第四空閑塊的大小等于所述閾值;所述第四空閑塊指未存放指令和數(shù)據(jù)的最大連續(xù)內(nèi)存空間。
根據(jù)第一方面或者第一方面的第一種可能的實現(xiàn)方式,在第一方面的第 四種可能的實現(xiàn)方式中,所述重定向指令段包括:第一指令和第二指令;其中,所述第一指令用于確定所述重定向指令段的重定向地址;所述第二指令用于跳轉(zhuǎn)至所述重定向地址。
第二方面,本發(fā)明實施例提供一種隨機測試程序生成裝置,其中,所述裝置包括:
確定模塊,用于確定起始于隨機測試程序的當前指令地址的第一空閑塊的大小是否小于閾值;
生成模塊,用于若所述確定模塊確定起始于隨機測試程序的當前指令地址的第一空閑塊的大小小于閾值,則生成以所述當前指令地址為起始地址的重定向指令段;
重定向模塊,用于通過所述重定向指令段將所述當前指令地址重定向為重定向地址;
所述生成模塊,還用于以所述重定向地址為起始地址生成所述當前指令。
根據(jù)第二方面,在第二方面的第一種可能的實現(xiàn)方式中,所述重定向地址不同于所述當前指令地址且未存放指令和數(shù)據(jù),且起始于所述重定向地址的第二空閑塊的大小不小于所述閾值;所述重定向指令段包含n條指令,所述閾值為n+1條指令所占用的內(nèi)存空間的大小;所述第一空閑塊和所述第二空閑塊分別指未存放指令和數(shù)據(jù)的最大連續(xù)內(nèi)存空間。
根據(jù)第二方面或者第二方面的第一種可能的實現(xiàn)方式,在第二方面的第二種可能的實現(xiàn)方式中,所述生成模塊具體用于;
若所述隨機測試程序中將要生成的指令為跳轉(zhuǎn)指令,則確定所述跳轉(zhuǎn)指令的跳轉(zhuǎn)地址;其中,所述跳轉(zhuǎn)地址不同于所述當前指令地址且未存放指令和數(shù)據(jù),且起始于所述跳轉(zhuǎn)地址的第三空閑塊的大小不小于所述閾值;所述第三空閑塊指未存放指令和數(shù)據(jù)的最大連續(xù)內(nèi)存空間。
根據(jù)第二方面或者第二方面的第一種可能的實現(xiàn)方式,在第二方面的第三種可能的實現(xiàn)方式中,所述生成模塊具體用于;
若所述隨機測試程序中將要生成的指令為訪存指令,則確定所述訪存指令的訪存地址;其中,所述訪存地址不能位于第四空閑塊中;所述第四空閑塊起始于所述當前指令地址,且所述第四空閑塊的大小等于所述閾值;所述第四空閑塊指未存放指令和數(shù)據(jù)的最大連續(xù)內(nèi)存空間。
根據(jù)第二方面或者第二方面的第一種可能的實現(xiàn)方式,在第二方面的第四種可能的實現(xiàn)方式中,所述重定向指令段包括:第一指令和第二指令;其中,所述第一指令用于確定所述重定向指令段的重定向地址;所述第二指令用于跳轉(zhuǎn)至所述重定向地址。
本發(fā)明實施例提供的隨機測試程序生成方法及裝置,在生成隨機測試程序之前,首先檢查起始于當前指令地址的第一空閑塊的大小,若確定所述第一空閑塊的大小小于閾值,則生成以當前指令地址為起始地址的重定向指令段;通過重定向指令段將隨機測試程序的當前指令地址重定向為重定向地址,起始于重定向地址的第二空閑塊的大小不小于所述閾值;由于第二空閑塊能夠容納更多的指令,既可以保證生成的指令序列的長度,又充分利用了內(nèi)存空間,解決了現(xiàn)有技術無法充分利用內(nèi)存空間的問題。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例提供的隨機測試程序生成方法的流程圖;
圖2為現(xiàn)有技術中隨機測試程序生成方法的示例圖;
圖3為本發(fā)明實施例中隨機測試程序生成方法的示例圖;
圖4為現(xiàn)有技術中隨機測試程序生成方法的另一示例圖;
圖5為本發(fā)明實施例中隨機測試程序生成方法的另一示例圖;
圖6為本發(fā)明實施例提供的隨機測試程序生成裝置的結(jié)構(gòu)示意圖。
具體實施方式
為使本發(fā)明實施例的目的、技術方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
圖1為本發(fā)明實施例提供的隨機測試程序生成方法的流程圖。所述方法的執(zhí)行主體為隨機測試程序生成裝置,所述隨機測試程序生成裝置例如可以是處理器。如圖1所示,本發(fā)明實施例提供的隨機測試程序生成方法,包括:
101、若確定起始于隨機測試程序的當前指令地址的第一空閑塊的大小小于閾值,則生成以所述當前指令地址為起始地址的重定向指令段。
本發(fā)明實施例中提及的隨機測試程序,可以是現(xiàn)有技術中處理器在功能上為程序員提供的任意指令,例如可以為跳轉(zhuǎn)指令、訪存指令等。所述當前指令地址為隨機測試程序中將要生成的指令的地址;所述第一空閑塊指內(nèi)存中未存放指令和數(shù)據(jù)的最大連續(xù)內(nèi)存空間。所述重定向指令段包含n條指令,所述閾值為n+1條指令所占用的內(nèi)存空間的大小。
102、通過所述重定向指令段將所述當前指令地址重定向為重定向地址。
所述重定向地址不同于所述當前指令地址且未存放指令和數(shù)據(jù),且起始于所述重定向地址的第二空閑塊的大小不小于所述閾值。所述第二空閑塊指未存放指令和數(shù)據(jù)的最大連續(xù)內(nèi)存空間。一旦執(zhí)行重定向指令段就能跳轉(zhuǎn)到重定向地址,將隨機測試程序的當前指令地址重定向為該重定向地址。需要說明的是,在執(zhí)行本發(fā)明實施例的技術方案過程中,若無法找到滿足條件的重定向地址時,則無法生成重定向指令段,終止指令生成。
103、以所述重定向地址為起始地址生成所述當前指令。
本發(fā)明實施例在生成隨機測試程序時,首先檢查起始于當前指令地址的第一空閑塊的大小,若確定所述第一空閑塊的大小小于閾值,則認為所述第一空閑塊的大小有限,其所能存儲的指令和數(shù)據(jù)也有限;此時,選擇一個重定向地址,其中,重定向地址要求滿足:1)未存放指令和數(shù)據(jù);2)不同于當前指令地址;3)起始于重定向地址的第二空閑塊的大小不小于所述閾值;生成以當前指令地址為起始地址的重定向指令段;通過重定向指令段將隨機測試程序的當前指令地址重定向為重定向地址;生成當前指令。需要說明的是,生成當前指令的過程可以包括:確定存放指令的地址、生成指令、存放指令;其中,確定存放指令的地址是很關鍵的一個環(huán)節(jié),在本發(fā)明實施例中,起始于重定向地址的第二空閑塊的大小不小于所述閾值,與第一空閑塊相比,可以認為第二空閑塊為較大的空閑塊,顯然,第二空閑塊能夠容納更多的指令,既可以保證生成的指令序列的長度,又充分利用了內(nèi)存空間,解決了現(xiàn) 有技術無法充分利用內(nèi)存空間的問題。
下面結(jié)合具體的示例對本發(fā)明實施例提供的技術方案進行示例說明:
示例一,
圖2為現(xiàn)有技術中隨機測試程序生成方法的示例圖。圖3為本發(fā)明實施例中隨機測試程序生成方法的示例圖。圖2示出了現(xiàn)有技術中隨機測試程序生成的一個示例,數(shù)字表示指令序號,如圖2所示,在該示例中,指令3為一個跳轉(zhuǎn)指令,用于跳轉(zhuǎn)至指令1前部;然后從跳轉(zhuǎn)地址起繼續(xù)生成指令4、指令5、指令6、指令7、指令8、指令9,在生成指令9之后,檢查到當前指令地址沒有空閑空間可繼續(xù)用于指令生成,因而終止指令生成,然而此時,至少在圖2中指令3之后仍有剩余的空閑空間,從而圖2示出的現(xiàn)有技術存在無法充分利用內(nèi)存空間的問題。
針對圖2示出的現(xiàn)有技術的問題,圖3示出了本發(fā)明實施例中隨機測試程序生成的一個示例,數(shù)字表示指令序號,如圖3所示,在該示例中,指令3同樣為一個跳轉(zhuǎn)指令,指令3同樣跳轉(zhuǎn)至指令1前部;然后從跳轉(zhuǎn)地址起繼續(xù)生成指令4、指令5、指令6,與圖2不同的是,圖3示出的方案在生成指令6之后,在生成指令7之前,若確定緊鄰指令6之后的空閑塊的大小小于閾值(也即僅能容納一個重定向指令段),則生成重定向指令段,重定向地址為緊鄰指令3的下一地址,通過重定向指令段將指令7的起始地址重定向為重定向地址(即緊鄰指令3的地址),并跳轉(zhuǎn)至指令3后部,緊鄰指令3生成指令7,并依次繼續(xù)生成指令8、指令9;在指令9之后,可以繼續(xù)進行指令生成,相比于圖2,圖3示出的方案能夠生成的指令序列的長度更長,同時也充分利用了內(nèi)存空間,克服了圖2中存在的無法充分利用內(nèi)存空間的問題。
示例二,
圖4為現(xiàn)有技術中隨機測試程序生成方法的另一示例圖。圖5為本發(fā)明實施例中隨機測試程序生成方法的另一示例圖。圖4示出了現(xiàn)有技術中隨機測試程序生成的另一個示例,數(shù)字表示指令序號,如圖4所示,在該示例中,指令3為一個訪存指令,在其后部寫入了一個數(shù)據(jù);緊鄰指令3生成了指令4、指令5、指令6,在生成指令6之后,檢查到當前指令地址沒有空閑的內(nèi)存空間可繼續(xù)用于指令生成,因而終止指令生成,然而此時,至少在圖4中 數(shù)據(jù)之后仍有剩余的空閑空間,從而圖4示出的現(xiàn)有技術存在無法充分利用內(nèi)存空間的問題。
針對圖4示出的現(xiàn)有技術的問題,圖5示出了本發(fā)明實施例中隨機測試程序生成的另一個示例,數(shù)字表示指令序號,如圖5所示,在該示例中,指令3同樣為一個訪存指令,并在其后部寫入了一個數(shù)據(jù);與圖4不同的是,圖5示出的方案在生成指令3之后,在生成指令4之前,若確定緊鄰指令3之后的空閑塊的大小小于閾值(也即僅能容納一個重定向指令段),則生成重定向指令段,重定向地址為緊鄰指令3寫入數(shù)據(jù)的存放地址的下一地址,通過重定向指令段將指令4的起始地址重定向為重定向地址(即緊鄰指令3寫入數(shù)據(jù)的存放地址的下一地址),并跳轉(zhuǎn)至指令3寫入的數(shù)據(jù)的后部,緊鄰指令3寫入數(shù)據(jù)的存放地址生成指令4,并依次生成指令5、指令6;在指令6之后,可以繼續(xù)進行指令生成,相比于圖4,圖5示出的方案能夠生成的指令序列的長度更長,同時也充分利用了內(nèi)存空間,克服了圖4中存在的無法充分利用內(nèi)存空間的問題。
在本發(fā)明的一實施例中,重定向指令段可以是一個指令序列,至少包括:第一指令和第二指令;其中,第一指令用于確定重定向指令段的重定向地址;第二指令為跳轉(zhuǎn)指令,用于跳轉(zhuǎn)至重定向地址。
具體地,第一指令用于確定重定向指令段的重定向地址,保證在第二指令的跳轉(zhuǎn)地址的可選擇范圍中可以找到滿足條件的重定向地址,即所述重定向地址不同于所述當前指令地址且未存放指令和數(shù)據(jù),且起始于所述重定向地址的第二空閑塊的大小不小于所述閾值。需要說明的是,在一個重定向指令段中,跳轉(zhuǎn)指令一般位于指令序列的尾部。例如,在MIPS64處理器中的一個實際的重定向指令段為:
LUI $X,A
ORI $X,$X,B
DSLL $X,$X,16
ORI $X,$X,C
DSLL $X,$X,16
ORI $X,$X,D
JR $X
NOP
執(zhí)行該重定向指令段可以跳轉(zhuǎn)至64位地址ABCD,其中A、B、C和D均為16位任意二進制數(shù)。前6條指令用于將ABCD存入通用寄存器堆中寄存器號為X的寄存器,后兩條指令用于跳轉(zhuǎn)至該寄存器所存放的地址。
在本發(fā)明的一實施例中,若所述隨機測試程序中將要生成的指令為跳轉(zhuǎn)指令,則在確定該跳轉(zhuǎn)指令的跳轉(zhuǎn)地址時,要求跳轉(zhuǎn)地址滿足:1)跳轉(zhuǎn)地址不同于當前指令地址且未存放指令和數(shù)據(jù);2)起始于跳轉(zhuǎn)地址的第三空閑塊的大小不小于所述閾值。所述第三空閑塊指內(nèi)存中未存放指令和數(shù)據(jù)的最大連續(xù)內(nèi)存空間。
具體地,在當前將要生成的隨機測試程序的指令類型為跳轉(zhuǎn)指令的場景中,現(xiàn)有技術對于跳轉(zhuǎn)指令的跳轉(zhuǎn)地址的要求是:不同于當前指令地址且未存放任何的指令和數(shù)據(jù)。不同于現(xiàn)有技術,本發(fā)明實施例對跳轉(zhuǎn)指令的跳轉(zhuǎn)地址做了簡單的控制,除了要求跳轉(zhuǎn)地址不同于當前指令地址且未存放任何的指令和數(shù)據(jù),還要求起始于跳轉(zhuǎn)地址的第三空閑塊的大小不小于所述閾值;這樣要求的目的在于,保證跳轉(zhuǎn)指令改變當前指令地址后,起始于新的當前指令地址的空閑塊足夠大,可容納一個重定向指令段,隨著指令的逐個生成,可用的空閑塊隨之變小,當空閑塊的剩余部分僅能容納一個重定向指令段時,及時生成重定向指令段,并跳轉(zhuǎn)到較大的空閑塊,該較大的空閑塊能夠容納更多的指令,既可以保證生成的指令序列的長度,又充分利用了內(nèi)存中的空閑空間,解決了現(xiàn)有技術無法充分利用內(nèi)存空間的問題。
在本發(fā)明的一實施例中,若所述隨機測試程序中將要生成的指令為訪存指令,則在確定該訪存指令的訪存地址時,要求訪存地址滿足;所述訪存地址不能位于第四空閑塊中;所述第四空閑塊起始于所述當前指令地址,且所述第四空閑塊的大小等于所述閾值。所述第四空閑塊指內(nèi)存中未存放指令和數(shù)據(jù)的最大連續(xù)內(nèi)存空間。
具體地,在當前將要生成的隨機測試程序的指令類型為訪存指令的場景中,現(xiàn)有技術對于訪存指令的訪存地址并無特別要求。不同于現(xiàn)有技術,本發(fā)明實施例對訪存指令的訪存地址做了簡單的控制,要求:訪存地址不能位于緊鄰當前隨機測試程序之后且容納一個重定向指令段的第四空閑塊中。這樣要求的目的在于:如果該隨機測試程序的當前指令地址與訪存地址之間的 空閑塊太小而無法容納一個重定向指令段,那么由于該空閑塊所能容納的指令和數(shù)據(jù)有限,隨著指令的繼續(xù)生成,該空閑塊中很快就會沒有空閑的內(nèi)存空間可繼續(xù)用于指令生成,也沒有空閑空間可生成重定向指令段,然而同時,在內(nèi)存中可能仍有剩余的空閑空間,因而,造成未能充分利用內(nèi)存中的空閑空間,也限制了生成的指令序列的長度;鑒于此,本發(fā)明實施例中要求訪存地址不能位于緊鄰當前隨機測試程序之后且容納一個重定向指令段的第四空閑塊中;隨著指令的逐個生成,可用的空閑塊也隨之變小,當空閑塊的剩余部分僅能容納一個重定向指令段時,可及時生成重定向指令段,并跳轉(zhuǎn)到內(nèi)存中其他較大的空閑塊,該較大的空閑塊能夠容納更多的指令,既可以保證生成的指令序列的長度,又充分利用了內(nèi)存空間,解決了現(xiàn)有技術無法充分利用內(nèi)存空間的問題。
圖6為本發(fā)明實施例提供的隨機測試程序生成裝置的結(jié)構(gòu)示意圖。如圖6所示,本發(fā)明實施例提供的隨機測試程序生成裝置600,包括:
確定模塊601,用于確定起始于隨機測試程序的當前指令地址的第一空閑塊的大小是否小于閾值;
生成模塊602,用于若所述確定模塊601確定起始于隨機測試程序的當前指令地址的第一空閑塊的大小小于閾值,則生成以所述當前指令地址為起始地址的重定向指令段;
重定向模塊603,用于通過所述重定向指令段將所述當前指令地址重定向為重定向地址;
所述生成模塊602,還用于以所述重定向地址為起始地址生成所述當前指令。
可選的,所述重定向地址不同于所述當前指令地址且未存放指令和數(shù)據(jù),且起始于所述重定向地址的第二空閑塊的大小不小于所述閾值;所述重定向指令段包含n條指令,所述閾值為n+1條指令所占用的內(nèi)存空間的大?。凰龅谝豢臻e塊和所述第二空閑塊分別指未存放指令和數(shù)據(jù)的最大連續(xù)內(nèi)存空間。
本發(fā)明實施例在生成隨機測試程序之前,首先檢查起始于當前指令地址的第一空閑塊的大小,若確定所述第一空閑塊的大小小于閾值,則生成以當前指令地址為起始地址的重定向指令段;通過重定向指令段將隨機測試程序 的當前指令地址重定向為重定向地址,起始于重定向地址的第二空閑塊的大小不小于所述閾值;由于第二空閑塊能夠容納更多的指令,既可以保證生成的指令序列的長度,又充分利用了內(nèi)存空間,解決了現(xiàn)有技術無法充分利用內(nèi)存空間的問題。
在上述實施例的基礎上,在本發(fā)明的一實施例中,所述生成模塊602具體用于若所述隨機測試程序中將要生成的指令為跳轉(zhuǎn)指令,則確定所述跳轉(zhuǎn)指令的跳轉(zhuǎn)地址;其中,所述跳轉(zhuǎn)地址不同于所述當前指令地址且未存放指令和數(shù)據(jù),且起始于所述跳轉(zhuǎn)地址的第三空閑塊的大小不小于所述閾值;所述第三空閑塊指未存放指令和數(shù)據(jù)的最大連續(xù)內(nèi)存空間。
在當前將要生成的隨機測試程序的指令類型為跳轉(zhuǎn)指令的場景中,現(xiàn)有技術對于跳轉(zhuǎn)指令的跳轉(zhuǎn)地址的要求是:不同于當前指令地址且未存放任何的指令和數(shù)據(jù)。不同于現(xiàn)有技術,本發(fā)明實施例對跳轉(zhuǎn)指令的跳轉(zhuǎn)地址做了簡單的控制,除了要求跳轉(zhuǎn)地址不同于當前指令地址且未存放任何的指令和數(shù)據(jù),還要求起始于跳轉(zhuǎn)地址的第三空閑塊的大小不小于所述閾值;這樣要求的目的在于,保證跳轉(zhuǎn)指令改變當前指令地址后,起始于新的當前指令地址的空閑塊足夠大,可容納一個重定向指令段,隨著指令的逐個生成,可用的空閑塊隨之變小,當空閑塊的剩余部分僅能容納一個重定向指令段時,及時生成重定向指令段,并跳轉(zhuǎn)到較大的空閑塊,該較大的空閑塊能夠容納更多的指令,既可以保證生成的指令序列的長度,又充分利用了內(nèi)存中的空閑空間,解決了現(xiàn)有技術無法充分利用內(nèi)存空間的問題。
在本發(fā)明的一實施例中,所述生成模塊602具體用于若所述隨機測試程序中將要生成的指令為訪存指令,則確定所述訪存指令的訪存地址;其中,所述訪存地址不能位于第四空閑塊中;所述第四空閑塊起始于所述當前指令地址,且所述第四空閑塊的大小等于所述閾值;所述第四空閑塊指未存放指令和數(shù)據(jù)的最大連續(xù)內(nèi)存空間。
在當前將要生成的隨機測試程序的指令類型為訪存指令的場景中,現(xiàn)有技術對于訪存指令的訪存地址并無特別要求。不同于現(xiàn)有技術,本發(fā)明實施例對訪存指令的訪存地址做了簡單的控制,要求:訪存地址不能位于緊鄰當前隨機測試程序之后且容納一個重定向指令段的第四空閑塊中。這樣要求的目的在于:如果該隨機測試程序的當前指令地址與訪存地址之間的空閑塊太 小而無法容納一個重定向指令段,那么由于該空閑塊所能容納的指令和數(shù)據(jù)有限,隨著指令的繼續(xù)生成,該空閑塊中很快就會沒有空閑的內(nèi)存空間可繼續(xù)用于指令生成,也沒有空閑空間可生成重定向指令段,然而同時,在內(nèi)存中可能仍有剩余的空閑空間,因而,造成未能充分利用內(nèi)存中的空閑空間,也限制了生成的指令序列的長度;鑒于此,本發(fā)明實施例中要求訪存地址不能位于緊鄰當前隨機測試程序之后且容納一個重定向指令段的第四空閑塊中;隨著指令的逐個生成,可用的空閑塊也隨之變小,當空閑塊的剩余部分僅能容納一個重定向指令段時,可及時生成重定向指令段,并跳轉(zhuǎn)到內(nèi)存中其他較大的空閑塊,該較大的空閑塊能夠容納更多的指令,既可以保證生成的指令序列的長度,又充分利用了內(nèi)存空間,解決了現(xiàn)有技術無法充分利用內(nèi)存空間的問題。
在本發(fā)明的一實施例中,所述重定向指令段包括:第一指令和第二指令;其中,所述第一指令用于確定所述重定向指令段的重定向地址;所述第二指令用于跳轉(zhuǎn)至所述重定向地址。
最后應說明的是:以上各實施例僅用以說明本發(fā)明的技術方案,而非對其限制;盡管參照前述各實施例對本發(fā)明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分或者全部技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質(zhì)脫離本發(fā)明各實施例技術方案的范圍。