亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

計算機和編譯方法

文檔序號:6629222閱讀:189來源:國知局
計算機和編譯方法
【專利摘要】本發(fā)明涉及一種計算機和編譯方法。提供了適于對計算機程序的執(zhí)行進行跟蹤的新指令和設備。在實施例中,CPU被配置為響應于對具有表示常量的立即字段的第一指令的解碼而將常量提供給跟蹤單元。另外,跟蹤單元被配置為響應于CPU中的第一指令的執(zhí)行而輸出包括常量的跟蹤數(shù)據(jù)。
【專利說明】計算機和編譯方法
[0001]相關申請的交叉引用
[0002]于2013年9月30日提交的包括說明書、附圖、以及摘要的日本專利申請N0.2013-203680的公開通過引用被整體包含在此。

【技術領域】
[0003]本發(fā)明涉及一種計算機并且適于用于例如基于程序的執(zhí)行來輸出跟蹤數(shù)據(jù)的計算機。

【背景技術】
[0004]多道程序環(huán)境是指其中通過響應于事件的發(fā)生而周期性地切換程序或者切換要執(zhí)行的程序來所謂并行執(zhí)行多個程序的環(huán)境??梢詫⒍嗟莱绦蚍Q為多進程、多線程、多任務等等。進程、線程、以及任務是指在多道程序環(huán)境中并行執(zhí)行的處理單元。雖然這些術語通常被混合并使用,但是通常處理是諸如存儲器空間的程序執(zhí)行環(huán)境被獨立地分配到并且與其它進程高度無關的并行處理單元。另一方面,線程是包含在并行處理的進程中的較小并行處理單元。在多線程環(huán)境中,進程包括多個線程。每個線程可訪問分配給進程的資源,并且同一進程中的多個線程共用存儲器空間。可以將線程和進程稱為任務。
[0005]為了支持對在多道程序環(huán)境中執(zhí)行的程序的調試,如圖1所示,存在已知的下述工具,所述工具顯示示出了函數(shù)、線程、或者進程的執(zhí)行以及這些的轉換的圖。在圖1的示例中,可視地顯示任務(即線程或進程)的時間轉換。同時,函數(shù)是包括用于執(zhí)行特定處理的指令序列的封裝程序模塊。在本說明書中所使用的術語“函數(shù)”是指包括根據(jù)典型結構化編程語言的C和C++的、在嚴格意義上返回返回值的函數(shù)以及不返回返回值的過程的概念??蓪⒃诒菊f明書中所使用的術語“函數(shù)”稱為子例程、子程序、或者方法。
[0006]為了掌握函數(shù)、線程、或者進程的轉換,在從源代碼產(chǎn)生匯編碼的編譯中,將稱作標記指令或檢查點指令的代碼插入?yún)R編碼中。標記指令或檢查點指令與用于執(zhí)行在源代碼中所描述的初始處理的算術指令和加載/存儲指令不同并且是被定義為跟蹤程序的執(zhí)行的調試指令。在被配置為基于程序的執(zhí)行來輸出跟蹤數(shù)據(jù)的計算機上執(zhí)行標記指令或檢查點指令。
[0007]例如,日本專利特開N0.1998-78889(專利文獻I)公開了一種包括CPU(中央處理單元)和監(jiān)控器單元的計算機。在專利文獻I中,CPU(中央處理單元)將標記解碼信號(脈沖信號)提供給監(jiān)控器單元以便響應于對標記指令的解碼而激活監(jiān)控器單元。另外,響應于標記解碼信號的接收,監(jiān)控器單元提取標記指令的地址(程序計數(shù)器值)以及累加器的值,并且輸出包括表示標記指令的標識符(例如諸如“M”的標識符)、標記指令的地址、以及累加器的值的跟蹤數(shù)據(jù)。


【發(fā)明內容】

[0008]如專利文獻I所示,通常使用標記指令(或檢查點指令)以便輸出包括表示標記指令的標識符(例如諸如"M"的標識符)、標記指令的地址、以及諸如累加器的寄存器的值的跟蹤數(shù)據(jù)。然而,標記指令(或檢查點指令)以及根據(jù)標記指令的計算機的操作可能會不足以跟蹤復雜計算機程序的執(zhí)行。
[0009]例如,考慮計算機執(zhí)行其中標記指令被安排在緊接在函數(shù)之前的程序這樣的情況。在這種情況下,認為調試器(調試主機)通過準備定義在標記指令與函數(shù)ID (標識符)之間的對應關系的表格并且通過對包含在跟蹤數(shù)據(jù)中的標記指令的地址與表格進行比較來識別與標記指令的地址相對應的函數(shù)ID。然而,不必需唯一地確定與標記指令的地址相對應的函數(shù)ID。例如,在覆蓋程序等等中,不同程序可以使用相同指令地址。因此,不可能僅通過指令地址來唯一地區(qū)分函數(shù)ID。當跟蹤數(shù)據(jù)包括具有相同指令地址的多個標記指令的執(zhí)行結果時,很難基于標記指令的指令地址來識別由計算機所執(zhí)行的函數(shù)。因此,存在當計算機運行時難以基于跟蹤數(shù)據(jù)來掌握函數(shù)、線程、或者進程的轉換的第一問題。
[0010]另外,例如,需要輸出多個寄存器的值(例如函數(shù)或線程的多個自變量或多個返回值)作為跟蹤數(shù)據(jù)。在這種情況下,通常,在程序中必須安排其數(shù)目與寄存器的數(shù)目相對應的多個指令。因此,存在其中需要多個指令(通常指令的數(shù)目與輸出其值的寄存器的數(shù)目相同)以便輸出多個寄存器的值作為跟蹤數(shù)據(jù)的第二問題。
[0011]在下文中,將描述可有助于解決包括上述第一和第二問題的多個問題中的至少一個的多個實施例。從對本說明書和附圖的描述可顯而易見地得知本發(fā)明的其它問題及新特征。
[0012]問題的解決手段
[0013]在實施例中,CPU響應于對具有表示常量的立即字段的第一指令的解碼而將常量提供給跟蹤單元。另外,跟蹤單元響應于CPU中的第一指令的執(zhí)行而輸出包括常量的跟蹤數(shù)據(jù)。
[0014]在另一實施例中,CPU響應于對具有表示多個寄存器的字段的一個指令的解碼而將多個寄存器的值提供給跟蹤單元。另外,跟蹤單元響應于CPU中的一個指令的執(zhí)行而輸出包括寄存器的值的跟蹤數(shù)據(jù)。
[0015]如上所述的多個實施例可有助于解決上述第一和第二問題中的至少一個。

【專利附圖】

【附圖說明】
[0016]圖1是示出了根據(jù)【背景技術】的任務的轉換的圖的示例;
[0017]圖2是示出了根據(jù)第一實施例的計算機以及計算機的外圍設備的框圖;
[0018]圖3是示出了根據(jù)第一實施例的DBTAG指令的指令格式的示例的示意圖;
[0019]圖4是示出了根據(jù)第一實施例的CPU的操作的示例的流程圖;
[0020]圖5是示出了根據(jù)第一實施例的計算機的配置示例的框圖;
[0021]圖6是示出了根據(jù)第一實施例的CPU的配置的示例的框圖;
[0022]圖7是示出了根據(jù)第二實施例的計算機以及計算機的外圍設備的框圖;
[0023]圖8是示出了根據(jù)第二實施例的DBPUSH指令的指令格式的示例的示意圖;
[0024]圖9是示出了根據(jù)第二實施例的DBPUSH指令的指令格式的另一示例的示意圖;
[0025]圖10是示出了根據(jù)第二實施例的CPU的操作的示例的流程圖;
[0026]圖11是示出了根據(jù)第二實施例的CPU的配置的示例的框圖;
[0027]圖12是示出了根據(jù)第三實施例的計算機以及計算機的外圍設備的框圖;
[0028]圖13是示出了根據(jù)第三實施例的CPU的配置的示例的框圖;
[0029]圖14是示出了從根據(jù)第三實施例的CPU輸出的跟蹤信息的時序圖;
[0030]圖15是示出了根據(jù)第三實施例的由跟蹤單元所產(chǎn)生的跟蹤數(shù)據(jù)的格式的示例的示意圖;
[0031]圖16是示出了根據(jù)第四實施例的計算機以及計算機的外圍設備的框圖;
[0032]圖17是示出了根據(jù)第四實施例的過濾器的第一配置示例的框圖;
[0033]圖18是示出了根據(jù)第四實施例的過濾器的第二配置示例的框圖;
[0034]圖19是示出了根據(jù)第四實施例的過濾器的第三配置示例的框圖;
[0035]圖20是示出了根據(jù)第五實施例的計算機系統(tǒng)的配置示例的框圖;
[0036]圖21是示出了將源代碼轉換成可執(zhí)行程序的處理的示意圖;以及
[0037]圖22是示出了根據(jù)第五實施例的編譯處理的示例的流程圖。

【具體實施方式】
[0038]在下文中,參考附圖對特定實施例進行詳細地描述。在每個附圖中,向相同或相應部件給出相同附圖標記并且必要時為了描述清楚起見省去冗余描述。
[0039](第一實施例)
[0040]圖2是示出了根據(jù)本實施例的計算機I以及計算機I的外圍設備的框圖。根據(jù)本實施例的計算機I例如是微處理器、微計算機、微控制器、或者SoC(片上系統(tǒng))。計算機I可以是由僅一個IC芯片構成或者可以是由多個IC芯片構成。計算機I提供了多道程序環(huán)境。將計算機I配置成執(zhí)行計算機程序(可執(zhí)行程序)并且基于計算機程序的執(zhí)行來輸出跟蹤數(shù)據(jù),并且計算機I與存儲器50和存儲設備60相連接。
[0041]存儲器50存儲要在計算機I中執(zhí)行的計算機程序(指令組)、要在計算機I中計算的數(shù)據(jù)、已在計算機I中計算的數(shù)據(jù)等等。換句話說,存儲器50包括指令存儲器(或指令高速緩存)和數(shù)據(jù)存儲器(或數(shù)據(jù)高速緩存)。存儲器50可以是由易失性存儲器、非易失性存儲器、或者這些的組合構成。易失性存儲器例如是SRAM(靜態(tài)隨機存取存儲器)、DRAM(動態(tài)隨機存取存儲器)、或者這些的組合。非易失性存儲器例如是掩蔽R0M(只讀存儲器)、可編程ROM、閃存、硬盤驅動器、或者這些的組合。
[0042]存儲設備60存儲從計算機I輸出的跟蹤數(shù)據(jù)。存儲設備60可以是由易失性存儲器、非易失性存儲器、或者這些的組合構成??梢詫⒋鎯υO備60安排在與計算機I相同的芯片上(片上)或者可以安排在計算機I的外部(片外)??梢詫⒋鎯υO備60安排在執(zhí)行調試器軟件并且對包括計算機I和存儲器50的目標系統(tǒng)的調試進行控制的計算機系統(tǒng)(即調試主機)中。
[0043]計算機I包括CPU(中央處理單元)10和跟蹤單元15。可將CPUlO稱為MPU(微處理單元)、CPU內核、MPU內核、或者處理器內核。CPUlO從存儲器50讀取包含在計算機程序中的指令,對該指令進行解碼,并且根據(jù)該指令執(zhí)行諸如計算、存儲器存取(加載和存儲)等等的處理。此外,CPUlO操作以便響應于為調試或跟蹤所定義的、包含在計算機程序中的指令的解碼而產(chǎn)生跟蹤信息并且將該跟蹤信息提供給跟蹤單元15。CPUlO可以包括高速緩存存儲器、指令提取單元、指令解碼單元、諸如序列發(fā)生器的控制單元、ALU(算術邏輯單元)、加載/存儲單元、以及其它功能單元。ALU包括:諸如加法器、乘法器、以及除法器的算術運算單元;邏輯操作單元;移位器等等。
[0044]跟蹤單元15接收來自CPUlO的跟蹤信息,通過對跟蹤信息進行格式化而產(chǎn)生跟蹤數(shù)據(jù),并且將該跟蹤數(shù)據(jù)輸出到存儲設備60。跟蹤單元15可以包括控制跟蹤的跟蹤控制器、臨時存儲跟蹤信息的跟蹤緩沖器、以及用于與存儲設備60進行通信的接口。
[0045]此外,在根據(jù)本實施例的計算機I中,響應于對具有表示常量的立即字段的DBTAG指令的解碼,CPUlO操作以便將在DBTAG指令的立即字段中所表示的常量提供給跟蹤單元15。另外,跟蹤單元15操作以便響應于CPUlO中的DBTAG指令的執(zhí)行而輸出包括在DBTAG指令的立即字段中所表示的常量的跟蹤數(shù)據(jù)。
[0046]DBTAG指令是為了對在CPUlO中所執(zhí)行的計算機程序的執(zhí)行進行跟蹤所定義的指令。例如,可使用DBTAG指令以便對包含在計算機程序中的函數(shù)、線程、進程、或者任務的執(zhí)行進行跟蹤。在這種情況下,DBTAG指令的立即字段可以表示包含在計算機程序中的函數(shù)、線程、進程、或者任務的標識符。可以將DBTAG指令安排在靠近與計算機程序中的函數(shù)、線程、進程、或者任務相對應的模塊(即指令組)。例如,在指令組中,可以將DBTAG指令安排在緊接在函數(shù)、線程、進程、或者任務的指令組之前或者緊接在指令組之后??梢栽谄渲袕脑创a產(chǎn)生匯編碼的編譯處理期間通過編譯器將函數(shù)、線程、進程、或者任務的標識符自動插入到匯編碼中。
[0047]另外,DBTAG指令可以用于其它使用。例如,DBTAG指令可以用于用戶(程序員)以輸出任何位串或字符串以作為跟蹤數(shù)據(jù)。在這種情況下,用戶(程序員)可以在C語言、C++語言等等中所描述的高級語言的源代碼中安排具有表示任何位串的立即字段的調試指令。此外,編譯器可以將調試指令轉換成一個DBTAG指令。
[0048]圖3示出了 DBTAG指令的指令格式的示例。在圖3所示的示例中,DBTAG指令具有包括6位長度的操作碼字段11以及10位長度的立即字段12的整個32位長度。操作碼字段11表示指令是DBTAG指令。如上所述,使用立即字段12以便表示例如函數(shù)、線程、進程、或者任務的標識符。同時,圖3是示例,并且DBTAG指令的位長度可以不是32位,操作碼字段11的位長度可以不是6位,并且立即字段12的位長度可以不是10位。
[0049]圖4是示出了執(zhí)行包括DBTAG指令的計算機程序(可執(zhí)行程序)的CPUlO的操作的示例的流程圖。在步驟sil,CPUlO對從存儲器50所提取的指令的操作碼進行分析。當在步驟Sll所解碼的指令是DBTAG指令時(在步驟S12為是),CPUlO將DBTAG指令的立即字段的值以及程序計數(shù)器(PC)的值提供給跟蹤單元15 (步驟S13)。程序計數(shù)器(PC)是為了表示存儲CPUlO接下來要執(zhí)行的指令的存儲器中的地址所使用的指令地址寄存器。在步驟S13提供給跟蹤單元15的PC值表示在步驟Sll所解碼的DBTAG指令的地址。另一方面,當在步驟Sll所解碼的指令不是DBTAG指令時(在步驟S12為否),CPUlO根據(jù)解碼指令執(zhí)行處理(步驟S14)。
[0050]從上面的描述可清楚的是,在根據(jù)本實施例的計算機I中,響應于對具有表示常量的立即字段的DBTAG指令的解碼,CPUlO操作以便將在DBTAG指令的立即字段中所表示的常量提供給跟蹤單元15。另外,跟蹤單元15操作以便響應于CPUlO中的DBTAG指令的執(zhí)行而輸出包括在DBTAG指令的立即字段中所表示的常量的跟蹤數(shù)據(jù)。
[0051]例如,DBTAG指令的立即字段可以被使用以便表示包含在計算機程序中的函數(shù)、線程、進程、或者任務的標識符。由此,調試器(調試主機)通過參考在包含在跟蹤數(shù)據(jù)中的DBTAG指令的立即字段中所表示的常量值可直接獲取函數(shù)、線程、進程、或者任務的標識符。換句話說,調試器(調試主機)不需要準備定義DBTAG指令的地址與函數(shù)ID (線程ID、進程ID、或者任務ID)之間的對應關系的表格并且不需要基于DBTAG指令的地址來估計函數(shù)ID(線程ID、進程ID、或者任務ID)。因此,即使當對其中不同程序可以使用相同指令地址的重疊程序進行調試時,也可基于DBTAG指令的立即字段中的值來唯一地識別函數(shù)ID (線程ID、進程ID、或者任務ID)。
[0052]此外,可以將根據(jù)本實施例的CPUlO配置成,當對DBTAG指令進行解碼時CPUlO將DBTAG指令的立即值提供給跟蹤單元15而無需將DBTAG指令的立即值存儲在通用寄存器(GPR)中。認為在現(xiàn)有技術中所描述的標記指令和檢查點指令用于下述應用,所述應用輸出預先存儲諸如函數(shù)ID的任何值的GPR的值。然而,為了這樣做,CPU必須在執(zhí)行標記指令和檢查點指令之前執(zhí)行將諸如函數(shù)ID的任何值存儲在GPR中的指令(例如MOV指令)。此夕卜,在將諸如函數(shù)ID的任何值臨時存儲在GPR中的方法中,為另一目的而可以由用戶程序使用的GPR用于與原始程序流不相干的跟蹤。因此,可以重寫由用戶程序所使用的GPR中的值。為了避免寄存器故障,必須在將諸如函數(shù)ID的任何值存儲在GPR中之前將GPR的值臨時保存在存儲器等等中。另外,必須在執(zhí)行標記指令和檢查點指令之后將保存在存儲器等等中的值再次存儲在原始GPR中。自然地,由于上述處理的增加,所以CPU的程序大小以及處理時間增大。因此,通過將DBTAG指令的立即值提供給跟蹤單元15而無需將DBTAG指令的立即值存儲在GPR中,可在跟蹤數(shù)據(jù)中有效地包括諸如函數(shù)ID的任何值,而無需執(zhí)行冗余指令和處理。
[0053]此外,可以將DBTAG指令定義為一個指令。換句話說,可以將DBTAG指令描述為匯編碼中的一個匯編指令。由此,可減少添加到用于調試或者跟蹤的程序的指令數(shù)目,并且從而縮小了程序代碼大小。
[0054]在下文中,對根據(jù)本實施例的計算機I的配置和操作的特定示例進行更詳細地描述。圖5示出了包含在計算機I中的CPUlO和跟蹤單元15的配置示例。
[0055]在圖5的配置示例中,CPUlO包括指令提取單元101、指令解碼單元102、控制單元103、通用寄存器(GPR)文件104、指令執(zhí)行單元105、以及完成單元106。指令提取單元101從存儲器50提取指令。指令解碼單元102對所提取的指令進行解碼。
[0056]控制單元103基于指令的解碼結果對CPUlO中的函數(shù)單元(例如指令解碼單元102、通用寄存器文件104、以及指令執(zhí)行單元105)的操作進行控制。也就是說,控制單元103將根據(jù)解碼指令的信號輸出到CPUlO中的函數(shù)單元(例如,指令解碼單元102、通用寄存器文件104、以及指令執(zhí)行單元105)。例如,控制單元103將表示計算類型的控制信號輸出到指令執(zhí)行單元105。此外,當指令是立即指令時,控制單元103將立即值提供給指令執(zhí)行單元105??刂茊卧?03可以包括用于對多周期指令的發(fā)布進行控制的序列發(fā)生器(多周期序列發(fā)生器)??梢詫⒖刂茊卧?03稱為命令產(chǎn)生單元并且還可以稱為分派單元。
[0057]通用寄存器文件104包括多個通用寄存器(GPR)。通用寄存器文件104多用途地用于臨時存儲輸入到指令執(zhí)行單元105中的數(shù)據(jù)以及從指令執(zhí)行單元105輸出的數(shù)據(jù)。因此,通常將包含在通用寄存器文件104中的GPR指定為由CPUlO所執(zhí)行的指令中的寄存器操作數(shù)。
[0058]指令執(zhí)行單元105根據(jù)諸如算術運算、邏輯操作、以及加載/存儲的指令來執(zhí)行特定數(shù)據(jù)處理。指令執(zhí)行單元105包括ALU (算術邏輯單元)和加載/存儲單元。ALU包括諸如加法器、乘法器以及除法器的算術運算單元、邏輯操作單元、以及移位器。當執(zhí)行一般算術運算指令、一般邏輯運算指令、以及具有寄存器操作數(shù)的一般寄存器傳輸指令時,指令執(zhí)行單元105接收來自通用寄存器文件104的寄存器中的值并且執(zhí)行運算。指令執(zhí)行單元105經(jīng)由完成單元106將操作結果寫回到通用寄存器文件104。
[0059]完成單元106控制指令的完成(退回)。例如,完成單元106從流水線丟棄中斷之后的指令或者與異常有關的指令的入口。此外,本實施例的完成單元106具有與跟蹤單元15的接口并且將執(zhí)行諸如DBTAG指令的跟蹤指令所產(chǎn)生的跟蹤信息提供給跟蹤單元15。
[0060]接下來,將對圖5所示的跟蹤單元15的配置示例進行描述。圖5所示的跟蹤單元15包括跟蹤控制器151、跟蹤緩沖器152、以及接口 153。跟蹤控制器151包括與CPUlO的接口以及與跟蹤緩沖器152的接口。跟蹤控制器151接收來自CPUlO的跟蹤信息,將跟蹤信息安排成跟蹤數(shù)據(jù)的格式,并且使跟蹤數(shù)據(jù)累加在跟蹤緩沖器152中。跟蹤緩沖器152是用于臨時累加跟蹤數(shù)據(jù)的存儲區(qū)。跟蹤控制器151提取累加在跟蹤緩沖器152中的跟蹤數(shù)據(jù)并且經(jīng)由接口 153將跟蹤數(shù)據(jù)寫入到存儲設備60。
[0061]隨后,在下文中,參考圖6,將描述當CPUlO對DBTAG指令進行解碼時CPUlO的操作的特定示例。在圖6的示例中,將CPUlO配置成在DBTAG指令的執(zhí)行中CPUlO不存儲在DBTAG指令的立即字段中所表示的常量,但是將該常量提供給跟蹤單元15。具體地說,響應于對DBTAG指令的解碼,指令解碼單元102向控制單元103通知表示DBTAG指令、DBTAG指令的指令地址(PC值)PC、以及DBTAG指令的立即值(立即字段中的值)IMMEDIATE的通知DBTAG??刂茊卧?03產(chǎn)生表示DBTAG指令的控制信號并且將該控制信號、DBTAG指令的指令地址(PC值)、以及DBTAG指令的立即值提供給指令執(zhí)行單元105。
[0062]圖6所示的指令執(zhí)行單元105包括執(zhí)行算術運算、邏輯運算等等的ALU1051、保持ALU1051的輸出數(shù)據(jù)的鎖存器1052、以及鎖存器1053至1055。將鎖存器1053至1055安排成保持表示DBTAG指令、DBTAG指令的指令地址(PC值)、以及DBTAG指令的立即值的控制信號。在DBTAG指令的執(zhí)行周期中指令執(zhí)行單元105將表示DBTAG指令、DBTAG指令的指令地址(PC值)、以及DBTAG指令的立即值的控制信號保持在鎖存器1053至1055處,并且在下一周期中將這些數(shù)據(jù)輸出到完成單元106。也就是說,指令執(zhí)行單元105不將DBTAG指令的立即值提供給ALU1051并且不將DBTAG指令的立即值寫入到通用寄存器文件104。通過圖6中的虛線所示的通用寄存器文件104、ALU1051、以及鎖存器1052表示這些部件不是用于DBTAG指令的執(zhí)行。
[0063]完成單元106接收來自指令執(zhí)行單元105的表示DBTAG指令、DBTAG指令的指令地址(PC值)、以及DBTAG指令的立即值的控制信號。完成單元106響應于表示DBTAG指令的控制信號的接收而檢測到對來自指令執(zhí)行單元105的指令地址(PC值)和立即值的接收是有效的。另外,完成單元106將DBTAG跟蹤有效信號、DBTAG指令的指令地址(PC值)、以及DBTAG指令的立即值輸出到跟蹤單元15。在這里,DBTAG跟蹤有效信號向跟蹤單元15通知包括指令地址以及DBTAG指令的立即值的跟蹤信息是有效的事實。
[0064]根據(jù)圖6所示的CPUlO的配置和操作,可將DBTAG指令的立即字段中的值有效地提供給跟蹤單元15。作為示例,當DBTAG指令的立即字段表示函數(shù)ID (線程ID、進程ID、或者任務ID)時,圖6中的CPUlO可將函數(shù)ID(線程ID、進程ID、或者任務ID)有效地提供給跟蹤單元15。這是因為圖6所示CPUlO不需要諸如將DBTAG指令的立即字段的值寫入到通用寄存器文件104的冗余操作。此外,這是因為圖6所示的CPUlO不需要:(a)在執(zhí)行標記指令和檢查點指令之前將通用寄存器文件104中的GPR的值臨時保存在存儲器中等等的處理;(b)在執(zhí)行標記指令和檢查點指令時將諸如函數(shù)ID的任何值存儲到GRP中的處理;以及(c)在執(zhí)行標記指令和檢查點指令之后將保存在存儲器等等中的值存儲到原始GPR中的處理。
[0065]從上面的描述可知,在根據(jù)本實施例的計算機I中,響應于對具有表示常量的立即字段的DBTAG指令的解碼,CPUlO操作以便將在DBTAG指令的立即字段中所表示的常量提供給跟蹤單元15。另外,跟蹤單元15操作以便響應于CPUlO中的DBTAG指令的執(zhí)行而輸出包括在DBTAG指令的立即字段中所表示的常量的跟蹤數(shù)據(jù)。例如,DBTAG指令的立即字段可以用于表示包含在計算機程序中的函數(shù)、線程、進程、或者任務的標識符。從而,調試器(調試主機)通過參考在包含在跟蹤數(shù)據(jù)中的DBTAG指令的立即字段中所表示的常量值可直接獲取函數(shù)、線程、進程、或者任務的標識符。因此,即使當對其中不同程序可以使用相同指令地址的重疊程序進行調試時,能夠通過利用根據(jù)本實施例的計算機1,也可基于DBTAG指令的立即字段中的值來唯一地識別函數(shù)ID(線程ID、進程ID、或者任務ID)。
[0066](第二實施例)
[0067]圖7是示出了根據(jù)本實施例的計算機2以及計算機2的外圍設備的框圖。根據(jù)本實施例的計算機2包括CPU20以及與CPU20相連接的跟蹤單元25。計算機2的整個配置與圖2或圖5所示的第一實施例的計算機I的配置示例相同。
[0068]在計算機2中,響應于對具有表示多個寄存器的字段的一個DBPUSH指令的解碼,CPU20操作以便將由DBPUSH指令所指定的寄存器的值提供給跟蹤單元25。跟蹤單元25操作以便響應于CPU20中的一個DBPUSH指令的執(zhí)行而輸出包括由DBPUSH指令所指定的寄存器的值的跟蹤數(shù)據(jù)。
[0069]DBPUSH指令是為了跟蹤在CPU20中所執(zhí)行的計算機程序的執(zhí)行所定義的指令。DBPUSH指令可用于輸出在CPU20中實現(xiàn)的多個通用寄存器的值以作為跟蹤數(shù)據(jù),并且通過一個DBPUSH指令輸出通用寄存器的值作為跟蹤數(shù)據(jù)。因此,為了輸出作為跟蹤數(shù)據(jù)的通用寄存器的值,不需要多個指令,并且因而DBPUSH指令具有可縮小程序代碼大小的優(yōu)點。
[0070]例如,DBPUSH指令可用于輸出包含在計算機程序中的函數(shù)的多個自變量或者多個返回值。在這種情況下,DBPUSH指令表示保持函數(shù)的自變量的多個通用寄存器或者保持函數(shù)的返回值的通用寄存器??梢詫BPUSH指令安排成接近與函數(shù)(即指令組)相對應的模塊。例如,可以將DBPUSH指令安排在緊接在函數(shù)的指令組之前、安排在函數(shù)的指令組的先頭位置、安排在函數(shù)的指令組的最后位置、或者安排在緊接在函數(shù)的指令組之后。在編譯處理中可以通過編譯器將DBPUSH指令自動插入到匯編碼中。
[0071]DBPUSH指令可以用于用戶(程序員)對多個任何寄存器的值進行跟蹤。在這種情況下,通過用戶(程序員)可以將DBPUSH指令安排在高級語言的源代碼中。另外,在編譯處理中可以通過編譯器將DBPUSH指令自動插入到匯編碼中。
[0072]圖8示出了 DBPUSH指令的指令格式的示例。在圖8所示的示例中,DBPUSH指令具有包括6位長度的操作碼字段21、5位長度的第一寄存器操作數(shù)字段22、以及5位長度的第二寄存器操作數(shù)字段23的整個32位長度。操作碼字段21表示指令是DBTAG指令。第一和第二寄存器操作數(shù)字段22和23表示作為跟蹤數(shù)據(jù)輸出的通用寄存器的范圍。例如,第一寄存器操作數(shù)字段22表示要輸出的頂部寄存器的寄存器號并且第二寄存器操作數(shù)字段23表示要輸出的尾部寄存器的寄存器號。例如,當?shù)谝患拇嫫鞑僮鲾?shù)字段22表示寄存器號2 (通用寄存器R2)并且第二寄存器操作數(shù)字段23表示寄存器號5 (通用寄存器R5)時,輸出通用寄存器R2,R3,R4,R5的四個寄存器值。
[0073]圖9示出了 DBPUSH指令的指令格式的另一示例。在圖9的示例中,指定要作為跟蹤數(shù)據(jù)輸出的寄存器列表而不是寄存器的范圍。具體地說,圖9所示的DBPUSH指令具有包括6位長度的操作碼字段21以及26位長度的立即字段24的整個32位長度。使26位長度的立即字段24的每個位與多個通用寄存器中的任何一個一對一地相關聯(lián)。在圖9的示例中,十二個通用寄存器R20至R31與立即字段24的十二位相關聯(lián)。
[0074]圖10是示出了執(zhí)行包括DBPUSH指令的計算機程序(可執(zhí)行程序)的CPU20的操作的示例的流程圖。在步驟S21,CPU20對從存儲器50所提取的指令的操作碼進行分析。當在步驟S21所解碼的指令是DBPUSH指令時(在步驟S22為是),CPU20將DBPUSH指令的程序計數(shù)器(PC)值提供給跟蹤單元25 (步驟S23)。程序計數(shù)器(PC)是表示指令地址寄存器,其用于存儲CPU20接下來要執(zhí)行的指令所在的存儲器中的地址。在步驟S23提供給跟蹤單元25的PC值表示在步驟S21所解碼的DBPUSH指令的地址。在步驟S24至S26中,CPU20按順序地讀取由DBPUSH指令所指定的通用寄存器并且將所讀取的寄存器值以及通用寄存器的寄存器號提供給跟蹤單元25。CPU20重復步驟S24至S26以直至已經(jīng)讀取了由DBPUSH指令所指定的所有通用寄存器。另一方面,如果在步驟S21所解碼的指令不是DBPUSH指令(在步驟S22為否),那么CPU20根據(jù)解碼指令執(zhí)行處理(步驟S27)。
[0075]隨后,在下文中,參考圖11描述當CPU20對DBPUSH指令進行解碼時CPU20的操作的特定示例。響應于對DBPUSH指令的解碼,指令解碼單元202向控制單元203通知表示DBPUSH指令、DBPUSH指令的指令地址(PC值)PC、以及由DBPUSH指令所指定的多個寄存器號(或者由頂部寄存器號和尾部寄存器號所定義的寄存器范圍)REGISTER NOS.的通知DBPUSH0控制單元203產(chǎn)生表示DBPUSH指令的控制信號并且將控制信號以及DBPUSH指令的指令地址(PC值)提供給指令執(zhí)行單元205。
[0076]此外,控制單元203向通用寄存器文件204分配寄存器號以便從通用寄存器文件204讀取寄存器值。通用寄存器文件204將從控制單元203所分配的寄存器號的寄存器值提供給指令執(zhí)行單元205。在圖11中,控制單元203與通用寄存器文件204之間的信號線分支并且將寄存器號還提供給指令執(zhí)行單元205。此外,控制單元203具有多周期序列發(fā)生器2031。對每個周期按順序地執(zhí)行讀取由DBPUSH指令所指定的每個通用寄存器。因此,多周期序列發(fā)生器2031控制在多個周期中從通用寄存器文件204讀取多個寄存器值并且控制將命令發(fā)布到指令執(zhí)行單元205。
[0077]圖11所示的指令執(zhí)行單元205具有執(zhí)行算術運算、邏輯運算等等的ALU2051、保持ALU2051的輸出數(shù)據(jù)的鎖存器2052、以及鎖存器2053至2056。將鎖存器2053至2056安排成保持表示DBTAG指令、指令地址(PC值)、寄存器號、以及DBPUSH指令的寄存器值的控制信號。在DBPUSH指令的執(zhí)行周期中指令執(zhí)行單元205將表示DBPUSH指令、指令地址(PC值)、寄存器號、以及DBPUSH指令的寄存器值的控制信號保持在鎖存器2053至2056處,并且在下一周期中將這些數(shù)據(jù)輸出到完成單元206。也就是說,指令執(zhí)行單元205不將基于DBPUSH指令從通用寄存器文件204輸出的寄存器值提供給ALU2051。通過圖11中的虛線所示的ALU2051以及鎖存器2052表示這些部件不用于執(zhí)行DBPUSH指令。
[0078]完成單元206接收來自指令執(zhí)行單元205的表示DBPUSH指令、DBPUSH指令的指令地址(PC值)、通用寄存器號、以及基于DBPUSH指令從通用寄存器文件204輸出的寄存器值的控制信號。完成單元206響應于對表示DBPUSH指令的控制信號的接收而檢測到對來自指令執(zhí)行單元205的指令地址(PC值)、寄存器號、以及寄存器值的接收是有效的。另夕卜,完成單元206將DBPUSH跟蹤有效信號、指令地址(PC值)、寄存器號、以及DBPUSH指令的寄存器值輸出到跟蹤單元25。在這里,DBPUSH跟蹤有效信號向跟蹤單元25通知包括指令地址、寄存器號、以及DBPUSH指令的寄存器值的跟蹤信息是有效的事實。
[0079]從上面的描述可知,在根據(jù)本實施例的計算機2中,響應于對具有表示多個寄存器的字段的一個DBPUSH指令的解碼,CPU20操作以便將由DBPUSH指令所指定的寄存器的值提供給跟蹤單元25。另外,跟蹤單元25操作以便響應于CPU20中的一個DBPUSH指令的執(zhí)行而輸出包括由DBPUSH指令所指定的寄存器的值的跟蹤數(shù)據(jù)。DBPUSH指令可用于輸出在CPU20中實現(xiàn)的多個通用寄存器的值作為跟蹤數(shù)據(jù),并且通過一個DBPUSH指令輸出作為跟蹤數(shù)據(jù)的通用寄存器的值。因此,通過使用根據(jù)本實施例的計算機2,為了輸出作為跟蹤數(shù)據(jù)的通用寄存器的值,不需要多個指令,并且因而可縮小程序代碼大小。
[0080](第三實施例)
[0081]在本實施例中,將描述對如上所述的第二實施例的修改。圖12是示出了根據(jù)本實施例的計算機3以及計算機3的外圍設備的框圖。計算機3包括CPU30以及與CPU30相連接的跟蹤單元35。計算機3的整個配置與圖2或圖5所示的第一實施例的計算機I的配置示例相同。
[0082]計算機3的基本操作與在第二實施例中所描述的計算機2相同。也就是說,響應于對具有表示多個寄存器的字段的一個DBPUSH指令的解碼,CPU30操作以便將由DBPUSH指令所指定的寄存器的值提供給跟蹤單元35。跟蹤單元35操作以便響應于CPU30中的一個DBPUSH指令的執(zhí)行而輸出包括由DBPUSH指令所指定的寄存器的值的跟蹤數(shù)據(jù)。
[0083]此外,根據(jù)本實施例的計算機3通過如下所述的描述和操作基于DBPUSH指令可縮小跟蹤數(shù)據(jù)的數(shù)據(jù)大小。也就是說,將CPU30配置成在將DBPUSH指令所指定的寄存器的值按順序地提供給跟蹤單元35中將多周期信號(在下文中稱為多周期狀態(tài)信號)提供給跟蹤單元35。多周期狀態(tài)信號表示CPU30執(zhí)行多周期指令。另外,跟蹤單元35識別多周期狀態(tài)信號并且確定在發(fā)布多周期狀態(tài)信號時按順序地輸出基于一個DBPUSH指令的多個寄存器值。此后,跟蹤單元35使一個DBPUSH指令的指令地址(PC值)與基于跟蹤數(shù)據(jù)中的一個DBPUSH指令的多個寄存器號和寄存器值的輸出相關聯(lián)。換句話說,跟蹤單元35消除了包含在跟蹤數(shù)據(jù)中的DBPUSH指令的指令地址(PC值)的冗余。從而,縮小了包含在跟蹤數(shù)據(jù)中的表示DBPUSH指令的地址的數(shù)據(jù)塊的數(shù)目以便數(shù)據(jù)塊的數(shù)目小于由DBPUSH指令所指定的寄存器數(shù)目。
[0084]在下文中,參考圖13對當CPU30對DBPUSH指令進行解碼時的CPU30的操作的特定示例進行描述。指令解碼單元302的操作與圖11中的指令解碼單元202相同??刂茊卧?03具有與圖11所示的控制單元203相同的配置和功能。此外,控制單元303操作以便當執(zhí)行DBPUSH指令時將多周期狀態(tài)信號提供給指令執(zhí)行單元305。
[0085]通用寄存器文件304具有與圖11所示的通用寄存器文件204相同的配置和功能。指令執(zhí)行單元305也具有與圖11所示的指令執(zhí)行單元205相同的配置和功能。ALU3051和鎖存器3052至3056與圖11所示的ALU2051和鎖存器2052至2056相對應。然而,除了表示DBPUSH指令的控制信號之外,鎖存器3053還鎖存多周期狀態(tài)信號。
[0086]完成單元306按照與圖11所示的完成單元206相同的方式將DBPUSH跟蹤有效信號、指令地址(PC值)、寄存器號、以及DBPUSH指令的寄存器值輸出到跟蹤單元35。此外,除了這些數(shù)據(jù)之外,控制單元306將多周期狀態(tài)信號提供給跟蹤單元35。
[0087]接下來,參考圖14和15對計算機3所引起的跟蹤數(shù)據(jù)的數(shù)據(jù)大小減小效果進行描述。圖14是示出了從CPU30提供給跟蹤單元35的跟蹤信息(基于DBPUSH指令的跟蹤信息)的時序圖。圖14示出了其中輸出寄存器號為O至31的32個寄存器RO至R31的值的示例。
[0088]圖14中的波形(A)示出了時鐘信號。圖14中的波形(B)示出了 DBPUSH跟蹤有效信號。DBPUSH跟蹤有效信號的高電平是指從CPU30的跟蹤信息的輸出是有效的。圖14中的波形(C)示出了多周期狀態(tài)信號。多周期狀態(tài)信號的高電平是指跟蹤信息與多周期指令有關。
[0089]圖14中的波形⑶示出了指令地址(PC值)的輸出。在圖14的示例中,在多周期狀態(tài)信號(波形(C))處于高電平時,指令地址(PC值)具有表示DBPUSH指令的相同值(0x4000)。圖14中的波形(E)和(F)示出了基于DBPUSH指令輸出的寄存器號和寄存器值。雖然多周期狀態(tài)信號(波形(C))處于高電平,但是可按順序地輸出從寄存器RO至寄存器R31的寄存器的寄存器號和寄存器值。
[0090]圖15示出了當跟蹤單元35接收到圖14所示的跟蹤信息時所產(chǎn)生的跟蹤數(shù)據(jù)的示例。在圖15的示例中,僅頂部寄存器RO (寄存器號=O)的跟蹤數(shù)據(jù)包括DBPUSH指令的地址(0x4000)。然而,寄存器Rl (寄存器號=I)的跟蹤數(shù)據(jù)不包括DBPUSH指令的地址(0x4000)。按照與寄存器Rl的跟蹤數(shù)據(jù)相同的方式,未說明的寄存器R2至R31的跟蹤數(shù)據(jù)不包括DBPUSH指令的地址(0x4000)。在基于一個DBPUSH指令的多個寄存器的跟蹤數(shù)據(jù)中重復包含表示相同DBPUSH指令的相同指令地址是多余的。因此,在圖15的示例中,從寄存器Rl至R31的跟蹤數(shù)據(jù)除去DBPUSH指令的地址(0x4000)。
[0091](第四實施例)
[0092]在本實施例中,對如上所述的第一至第三實施例的修改進行描述。圖16示出了根據(jù)本實施例的計算機4的配置示例。計算機4包括CPU40以及跟蹤單元45。CPU40具有與在第一至第三實施例中所述的CPU10、20或者30相同的配置和功能。跟蹤單元45具有與在第一至第三實施例中所述的跟蹤單元15、25或者35相同的配置和功能。此外,跟蹤單元45具有用于選擇性地輸出特定DBTAG指令的跟蹤數(shù)據(jù)或者特定DBPUSH指令的跟蹤數(shù)據(jù)的過濾器454。
[0093]跟蹤控制器451對過濾器454從CPU40所接收到的跟蹤信息進行過濾,僅選擇與過濾器條件相符的跟蹤信息,并且使跟蹤信息累加在跟蹤緩沖器452中。另外,跟蹤控制器451經(jīng)由接口 453將與過濾器條件相符的且累加在跟蹤緩沖器452中的跟蹤信息寫入到存儲設備60。
[0094]在下文中,參考圖17至19對過濾器454的配置示例進行描述。圖17所示的過濾器454利用指令地址(PC值)執(zhí)行過濾。過濾器值寄存器4541存儲要與跟蹤信息中的指令地址(PC值)進行比較的地址的值。掩蔽值寄存器4542保持指令地址的每個位的掩蔽值。在圖17的示例中,將要比較的位的值設置為O并且將要掩蔽的位的值設置為I??山?jīng)由調試通信端口(例如JTAG (聯(lián)合測試行動組)端口 )從外部調試主機來設置過濾器值寄存器4541和掩蔽值寄存器4542。
[0095]同或門4543是XNOR門。同或門4543逐位地對指令地址(PC)與過濾器值寄存器4541的值進行比較,并且當兩個輸入位具有相同值時輸出I并且當兩個輸入位具有不同值時輸出O。OR門4544逐位地對同或門4543的值與掩蔽值寄存器4542的值進行比較并且計算每個位的邏輯OR。AND電路4545計算來自OR門4544的輸出值的所有位的邏輯AND。來自AND電路4545的輸出表不匹配結果,并且I的輸出值表不匹配并且O的輸出值表不不匹配。
[0096]在圖18中,執(zhí)行利用包含在第一實施例中所述的DBTAG指令的跟蹤信息中的立即值進行過濾。過濾器值寄存器4546存儲要與跟蹤信息中的立即值進行比較的值。掩蔽值寄存器4547保持立即值的每個位的掩蔽值。在圖18的示例中,將要比較的位的值設置為O并且將要掩蔽的位的值設置為I??山?jīng)由調試通信端口(例如JTAG(聯(lián)合測試行動小組)端口 )從外部調試主機設置過濾器值寄存器4546和掩蔽值寄存器4547。
[0097]圖18的配置示例與圖17相同。也就是說,同或門4548逐位地對跟蹤信息中的立即值與過濾器值寄存器4546的值進行比較,并且當兩個輸入位具有相同值時輸出I并且當兩個輸入位具有不同值時輸出O。OR門4549逐位地比較同或門4548的輸出值與掩蔽值寄存器4547的值并且計算每個位的邏輯OR。AND電路4550計算來自OR門4549的輸出值的所有位的邏輯AND。從AND電路4550的輸出表示匹配結果。I的輸出值表示匹配并且O的輸出值表示不匹配。
[0098]圖19所示的過濾器454執(zhí)行利用包含在第二和第三實施例中所述的DBPUSH指令的跟蹤信息中的寄存器號進行過濾。過濾器值寄存器4551存儲要與跟蹤信息中的寄存器號進行比較的值。過濾器值寄存器4551的每個位與寄存器號的任何一個相關聯(lián)。例如,當過濾器值寄存器4551是32位寄存器時,從寄存器的最低有效位開始的32位按順序地與32個寄存器RO至R31相關聯(lián)。
[0099]位轉換電路4552接收跟蹤信息中的十進制計數(shù)法的寄存器號并且產(chǎn)生其中與十進制計數(shù)法的寄存器號相對應的位被設置為I并且其它位被設置為O的輸出數(shù)據(jù)。例如,考慮其中存在32位通用寄存器并且由跟蹤信息所表示的寄存器號是O至31的情況。當寄存器號是O時,位轉換電路4552輸出其中所有位被位置為O的32位數(shù)據(jù)。當寄存器號是I時,位轉換電路4552輸出其中最低有效位被位置為I并且所有其它31位被位置為O的32位數(shù)據(jù)。當寄存器號是31時,位轉換電路4552輸出其中最高有效位被位置為I并且所有其它31位被設置為O的32位數(shù)據(jù)。
[0100]AND門4553逐位地對位轉換電路4552的輸出值與過濾器值寄存器4551的值進行比較并且計算每個位的邏輯AND。OR電路4554計算來自AND門4553的輸出值的所有位的邏輯0R。來自OR電路4554的輸出表示匹配結果。I的輸出值表示匹配并且O的輸出值表示不匹配。
[0101]本實施例可僅選擇并輸出特定跟蹤數(shù)據(jù)。例如,本實施例可僅選擇并輸出其中指令地址(PC值)與特定值或者特定范圍相符的跟蹤數(shù)據(jù)。此外,本實施例可僅選擇并輸出其中DBTAG指令的立即值與特定值或者特定范圍相符的跟蹤數(shù)據(jù)。此外,本實施例可僅選擇并輸出其中基于DBPUSH指令輸出的多個寄存器值當中的寄存器號與特定值或者特定范圍相符的跟蹤數(shù)據(jù)。
[0102](第五實施例)
[0103]在本實施例中,將描述用于產(chǎn)生由根據(jù)上述第一至第四實施例的計算機所執(zhí)行的可執(zhí)行程序的設備。圖20是示出了根據(jù)本實施例的計算機系統(tǒng)70的配置示例的框圖。計算機系統(tǒng)70包括處理器71、顯示設備72、輸入設備73、以及存儲器75。處理器71執(zhí)行用于通過讀取并執(zhí)行諸如操作系統(tǒng)751、編譯器752、匯編器753、以及鏈接器754的存儲在存儲器75中的計算機程序來從源代碼756產(chǎn)生可執(zhí)行程序759的處理。處理器71例如包括一個或者多個CPU。
[0104]顯示設備72是向用戶提供視覺信息的設備。顯示設備72例如是液晶顯示器、有機EL(場致發(fā)光)顯示器、或者CRT(陰極射線管)顯示器。輸入設備73是接收用戶的操作信息的設備。例如,輸入設備73是鍵盤、指示設備(鼠標,軌跡球,觸摸墊等等)、觸摸板、或者這些設備的組合。
[0105]存儲器75可以是由易失性存儲器、非易失性存儲器、或者這些的組合構成。易失性存儲器例如是SRAM、DRAM(動態(tài)隨機存取存儲器)、或者這些的組合。非易失性存儲器例如是掩蔽ROM、可編程ROM、閃存、硬盤驅動器、或者這些的組合。另外,存儲器75可以包括遠離處理器71的存儲器。在這種情況下,處理器71可以經(jīng)由未說明的通信接口來存取存儲器75。
[0106]圖21是示出了將源代碼轉換成可執(zhí)行程序的處理的概念示意圖。編譯器752將源代碼756轉換成匯編碼757。源代碼756包括一個或多個源代碼文件。匯編碼757包括一個或多個匯編碼文件。匯編器753將匯編碼757轉換成目標碼758。目標碼758包括一個或多個目標碼文件。同時,可以將圖21中的編譯器752和匯編器753的功能整體稱為編譯器。換句話說,可以將源代碼756轉換成目標碼758的處理稱為編譯。
[0107]鏈接器754通過使目標碼758與運行時間庫755相鏈接來產(chǎn)生一個可執(zhí)行程序759。
[0108]隨后,在下文中,對編譯器752的編譯處理進行更詳細地描述。編譯器752操作以便將具有表示包含在源代碼756中的函數(shù)、線程、進程、或者任務的標識符的立即字段的DBTAG指令插入到匯編碼757中。因此,匯編碼757包括:(a)用于執(zhí)行包含在源代碼756中函數(shù)、線程、進程、或者任務的處理的匯編碼部分;以及(b)與函數(shù)、線程、進程、或者任務相關的DBTAG指令??梢詫BTAG指令安排在緊接在與函數(shù)、線程、進程、或者任務相對應的匯編碼部分之前、安排在緊接在與函數(shù)、線程、進程、或者任務相對應的匯編碼部分之后,或者安排在與函數(shù)、線程、進程、或者任務相對應的匯編碼部分中。在第一實施例中已對DBTAG指令的詳情進行了描述,并且因而省略冗余描述。
[0109]編譯器752可以進一步將在第二和第三實施例中所述的DHPUSH指令插入到匯編碼757中,以便跟蹤存儲包含在源代碼756中的函數(shù)、線程、進程、或者任務的多個自變量或者多個返回值的多個寄存器的值。
[0110]圖22是示出了根據(jù)本實施例的編譯處理的示例的流程圖。在步驟S31,編譯器752接收源代碼756。在步驟S32,編譯器752對源代碼756中的函數(shù)進行檢測。在步驟S33,編譯器752向所檢測到的函數(shù)分配標識符。在步驟S34,編譯器產(chǎn)生與所檢測到的函數(shù)相對應的匯編碼部分。
[0111]在步驟S35,編譯器752插入具有下述立即字段的DBTAG指令,所述立即字段表示了緊接在步驟S34所產(chǎn)生的匯編碼部分之前及之后的函數(shù)的標識符。同時,在步驟S35,可以將DBTAG指令插入在緊接在匯編碼部分之前或者緊接在其之后。另外,可以將DBTAG指令安排在匯編碼部分中,例如安排在匯編碼部分的先頭位置或者最后位置。
[0112]在步驟S36,編譯器752插入包括指定下述多個通用寄存器的字段的DBPUSH指令,所述多個通用寄存器用于存儲緊接在步驟S34所產(chǎn)生的匯編碼部分之前的所檢測到的函數(shù)的自變量。可以將DBPUSH指令安排在匯編碼部分的先頭位置處。
[0113]在步驟S37,編譯器752插入包括指定下述多個通用寄存器的字段的DBPUSH指令,所述多個通用寄存器存儲緊接在步驟S34所產(chǎn)生的匯編碼部分之后的所檢測到的函數(shù)的返回值。可以將DBPUSH指令安排在匯編碼部分的最后位置。
[0114]編譯器752重復地執(zhí)行步驟S32至S37的處理以直至處理了源代碼756中的最后面的函數(shù)(步驟S38)。
[0115]同時,圖22中的流程圖示出了產(chǎn)生用于跟蹤函數(shù)的標識符的DBTAG指令以及用于跟蹤函數(shù)的自變量和返回值的DBPUSH指令的編譯處理的示例。如圖22所示,可通過利用DBTAG指令和DBPUSH指令的組合來詳細地跟蹤計算機I中的函數(shù)的執(zhí)行。然而,可以彼此獨立地執(zhí)行DBTAG指令的產(chǎn)生和DBPUSH指令的產(chǎn)生并且可以彼此獨立地使用DBTAG指令和DBPUSH指令。例如,根據(jù)本實施例的編譯處理可以產(chǎn)生用于跟蹤函數(shù)、線程等等的標識符的DBTAG指令,并且不需要產(chǎn)生用于跟蹤函數(shù)、線程等等的自變量和返回值的DBPUSH指令。相反地,根據(jù)本實施例的編譯處理可以產(chǎn)生用于跟蹤函數(shù)、線程等等的自變量和返回值的DBPUSH指令,并且不需要產(chǎn)生用于跟蹤函數(shù)、線程等等的標識符的DBTAG指令。根據(jù)本實施例的編譯處理可以為特定函數(shù)產(chǎn)生用于跟蹤函數(shù)的標識符的DBTAG指令并且為其它特定函數(shù)產(chǎn)生用于跟蹤函數(shù)的自變量和返回值的DBPUSH指令。
[0116]根據(jù)計算機系統(tǒng)70或者根據(jù)本實施例的編譯器752,可使在第一實施例中所述的DBTAG指令用于輸出函數(shù)、線程、進程、或者任務的標識符作為跟蹤數(shù)據(jù)的應用。此外,根據(jù)計算機系統(tǒng)70或者編譯器752,可使在第二和第三實施例中所述的DBPUSH指令用于輸出函數(shù)、線程、進程、或者任務的多個自變量或多個返回值作為跟蹤數(shù)據(jù)的應用。
[0117](其它實施例)
[0118]可以對上述多個實施例進行適當?shù)慕M合并執(zhí)行。
[0119]在第一至第四實施例中所述的計算機I至4可以具有多內核配置,其具有多個CPU (CPU內核、MPU內核、或者處理器內核)的。在多內核配置的計算機中,函數(shù)、線程、進程、或者任務的轉換更復雜,并且因而利用在第一至第四實施例中所述的DBTAG指令和DBPUSH指令可以比單內核配置進一步更有效。
[0120]此外,上述實施例僅是本發(fā)明的發(fā)明人所獲得的技術思想的應用示例。也就是說,該技術思想并不局限于如上所述的實施例,并且毋庸質疑的是各種修改是可能的。
[0121]例如,本發(fā)明人所獲得的技術思想包括如下所述的實施例Al至A19。
[0122](實施例Al)
[0123]一種編譯方法,包括:
[0124]從存儲器讀取源代碼,并且
[0125]對源代碼進行分析并將源代碼轉換成匯編碼,
[0126]其中,該轉換包括將(a)用于執(zhí)行包含在源代碼中的函數(shù)、線程、進程、或者任務的處理的匯編碼部分插入到匯編碼中并且將(b)具有表示函數(shù)、線程、進程、或者任務的標識符的立即字段的第一匯編指令插入到匯編碼中。
[0127](實施例A2)
[0128]在實施例Al中所述的編譯方法,其中當CPU(中央處理單元)執(zhí)行基于匯編碼的可執(zhí)行程序代碼時,第一匯編指令可使CPU操作以便將在立即字段中所表示的標識符提供給與CPU相連接的跟蹤單元。
[0129](實施例A3)
[0130]在實施例Al或A2中所述的編譯方法,其中源代碼不包括與第一匯編指令相對應的顯式指令。
[0131](實施例A4)
[0132]在實施例Al至A3中的任何一個中所述的編譯方法,其中轉換進一步包括響應于對函數(shù)、線程、進程、或者任務的檢測而從不包括與第一匯編指令相對應的顯式指令的源代碼產(chǎn)生第一匯編指令。
[0133](實施例A5)
[0134]在實施例Al至A4中的任何一個中所述的編譯方法,其中插入包括將第一匯編指令安排在緊接在匯編碼部分之前,安排在匯編碼部分中,或者安排在緊接在匯編碼部分之后。
[0135](實施例A6)
[0136]在實施例Al至A5中的任何一個中所述的編譯方法,其中第一匯編指令不包括用于指定寄存器操作數(shù)的寄存器字段。
[0137](實施例A7)
[0138]在實施例Al至A6中的任何一個中所述的編譯方法,其中第一匯編指令僅包括一個指令。
[0139](實施例A8)
[0140]在實施例Al至A7中的任何一個中所述的編譯方法,
[0141]其中轉換進一步包括將第二匯編指令插入到匯編碼中,并且
[0142]第二匯編指令具有表示存儲函數(shù)、線程、進程、或者任務的自變量或返回值的多個寄存器的字段。
[0143](實施例A9)
[0144]在實施例A8中所述的編譯方法,其中當CPU (中央處理單元)執(zhí)行基于匯編碼的可執(zhí)行程序代碼時,第二匯編指令使CPU操作以便將寄存器的值提供給與CPU相連接的跟蹤單元。
[0145](實施例A10)
[0146]一種用于使計算機執(zhí)行在實施例Al至A9中的任何一個中所述的編譯方法的程序。
[0147](實施例All)
[0148]一種編譯設備,包括:
[0149]處理器,該處理器被配置為執(zhí)行編譯過程,
[0150]其中編譯過程包括:
[0151 ] 從存儲器讀取源代碼,并且
[0152]對源代碼進行分析并將源代碼轉換成匯編碼,并且
[0153]該轉換包括將(a)用于執(zhí)行包含在源代碼中的函數(shù)、線程、進程、或者任務的處理的匯編碼部分以及(b)具有表示函數(shù)、線程、進程、或者任務的標識符的立即字段的第一匯編指令插入到匯編碼中。
[0154](實施例A12)
[0155]在實施例All中所述的編譯設備,其中當CPU(中央處理單元)執(zhí)行基于匯編碼的可執(zhí)行程序代碼時,第一匯編指令可使CPU操作以便將在立即字段中所表示的標識符提供給與CPU相連接的跟蹤單元。
[0156](實施例A13)
[0157]在實施例All或A12中所述的編譯設備,其中源代碼不包括與第一匯編指令相對應的顯式指令。
[0158](實施例A14)
[0159]在實施例All至A13中的任何一個中所述的編譯設備,其中轉換進一步包括響應于對函數(shù)、線程、進程、或者任務的檢測而從不包括與第一匯編指令相對應的顯式指令的源代碼產(chǎn)生第一匯編指令。
[0160](實施例A15)
[0161]在實施例All至A14中的任何一個中所述的編譯設備,其中插入包括將第一匯編指令安排在緊接在匯編碼部分之前,安排在匯編碼部分中,或者安排在緊接在匯編碼部分之后。
[0162](實施例A16)
[0163]在實施例All至A15中的任何一個中所述的編譯設備,其中第一匯編指令不包括用于指定寄存器操作數(shù)的寄存器字段。
[0164](實施例A17)
[0165]在實施例All至A16中的任何一個中所述的編譯設備,其中第一匯編指令僅包括一個指令。
[0166](實施例A18)
[0167]在實施例All至A17中的任何一個中所述的編譯設備,
[0168]其中轉換進一步包括將第二匯編指令插入到匯編碼中,并且
[0169]第二匯編指令具有表示存儲函數(shù)、線程、進程、或者任務的自變量或返回值的多個寄存器的字段。
[0170](實施例A19)
[0171]在實施例A18中所述的編譯設備,其中當CPU(中央處理單元)執(zhí)行基于匯編碼的可執(zhí)行程序代碼時,第二匯編指令使CPU操作以便將寄存器的值提供給與CPU相連接的跟



U6
O1-1z^.——I~ vfy-1t
【權利要求】
1.一種計算機系統(tǒng),包括: CPU(中央處理單元)以及與所述CPU相連接的跟蹤單元, 其中, 所述CPU被配置為,響應于對具有表示常量的立即字段的第一指令的解碼而將所述常量提供給所述跟蹤單元,并且 所述跟蹤單元被配置為,響應于在所述CPU中的所述第一指令的執(zhí)行而輸出包含所述常量的跟蹤數(shù)據(jù)。
2.根據(jù)權利要求1所述的計算機系統(tǒng),其中, 所述常量表示包含在程序中的函數(shù)、線程、進程或者任務的標識符。
3.根據(jù)權利要求2所述的計算機系統(tǒng),其中, 在所述程序中,所述第一指令被安排在緊接著所述函數(shù)、所述線程、所述進程或者所述任務的指令組之前,或者被安排在所述指令組之中,或者被安排在緊接著所述指令組之后。
4.根據(jù)權利要求1所述的計算機系統(tǒng),其中, 所述第一指令是為對程序的執(zhí)行進行跟蹤所定義的指令。
5.根據(jù)權利要求1所述的計算機系統(tǒng),其中, 所述第一指令不包含用于指定寄存器操作數(shù)的寄存器字段。
6.根據(jù)權利要求1所述的計算機系統(tǒng),其中, 所述第一指令僅包含一個指令。
7.根據(jù)權利要求1所述的計算機系統(tǒng),其中, 所述CPU包括被指定為由所述CPU執(zhí)行的指令中的寄存器操作數(shù)的多個通用寄存器,并且 在所述第一指令的執(zhí)行中,所述CPU將所述常量提供給所述跟蹤單元而不將所述常量存儲在所述通用寄存器中。
8.根據(jù)權利要求1所述的計算機系統(tǒng),其中, 所述CPU包括: 指令解碼和分派單元, 執(zhí)行單元, 多個通用寄存器,所述多個通用寄存器被多用途地用于臨時存儲輸入到所述執(zhí)行單元中的數(shù)據(jù)以及從所述執(zhí)行單元輸出的數(shù)據(jù),以及完成單兀, 其中, 所述指令解碼和分派單元被配置為,響應于對所述第一指令的解碼而將在所述立即字段中表示的所述常量提供給所述執(zhí)行單元, 所述執(zhí)行單元被配置為,在所述第一指令的執(zhí)行中,將所述常量提供給所述完成單元而不將所述常量存儲在所述通用寄存器中,并且 所述完成單元被配置為,將包含所述常量的所述第一指令的執(zhí)行結果提供給所述跟蹤單元。
9.根據(jù)權利要求1所述的計算機系統(tǒng),其中, 所述跟蹤數(shù)據(jù)進一步包含所述第一指令的地址。
10.根據(jù)權利要求1所述的計算機系統(tǒng),其中, 所述跟蹤單元包括過濾器電路,所述過濾器電路基于第一條件對所述常量進行過濾,并且在所述常量與所述第一條件相符的條件下選擇性地輸出所述常量作為所述跟蹤數(shù)據(jù)。
11.一種計算機系統(tǒng),包括: CPU (中央處理單元)以及與所述CPU相連接的跟蹤單元, 其中, 所述CPU被配置為,響應于對具有表示多個寄存器的字段的一個指令的解碼而將所述多個寄存器的值提供給所述跟蹤單元,并且 所述跟蹤單元被配置為,響應于在所述CPU中的所述一個指令的執(zhí)行而輸出包含所述寄存器的值的跟蹤數(shù)據(jù)。
12.根據(jù)權利要求11所述的計算機系統(tǒng),其中, 所述一個指令是為對程序的執(zhí)行進行跟蹤所定義的指令。
13.根據(jù)權利要求11所述的計算機系統(tǒng),其中, 所述字段通過包含在所述寄存器中的頂部寄存器和尾部寄存器來指定所述寄存器的范圍。
14.根據(jù)權利要求11所述的計算機系統(tǒng),其中, 所述字段包含多個位, 所述位分別與所述寄存器相關聯(lián),并且 所述位中的每一個表示是否應將與該位相關聯(lián)的寄存器的值提供給所述跟蹤單元。
15.根據(jù)權利要求11所述的計算機系統(tǒng),其中, 所述CPU在將所述寄存器的值按順序地提供給所述跟蹤單元時,進一步地將所述一個指令的地址以及多周期信號提供給所述跟蹤單元, 所述多周期信號表示所述CPU執(zhí)行多周期指令,并且 所述跟蹤單元識別所述多周期信號,并且減少表示包含在所述跟蹤數(shù)據(jù)中的地址的數(shù)據(jù)塊的數(shù)目,以使得所述數(shù)據(jù)塊的數(shù)目小于所述寄存器的數(shù)目。
16.根據(jù)權利要求11所述的計算機系統(tǒng),其中, 所述跟蹤單元包括過濾器電路,所述過濾器電路基于第一條件來對所述寄存器進行過濾,并且選擇性地將在所述寄存器的值中的與所述第一條件相符的至少一個值輸出作為所述跟蹤數(shù)據(jù)。
17.一種用于使計算機執(zhí)行編譯方法的程序,所述編譯方法包括: 從存儲器讀取源代碼,并且 對所述源代碼進行分析,并且將所述源代碼轉換成匯編碼, 其中, 所述轉換包括將下述(a)以及(b)插入到所述匯編碼中,其中, 所述(a)是用于執(zhí)行包含在所述源代碼中的函數(shù)、線程、進程或者任務的處理的匯編碼部分; 所述(b)是具有立即字段的第一匯編指令,所述立即字段表示所述函數(shù)、所述線程、所述進程或者所述任務的標識符。
18.根據(jù)權利要求17所述的程序,其中, 當由CPU (中央處理單元)執(zhí)行基于所述匯編碼的可執(zhí)行程序代碼時,所述第一匯編指令使所述CPU操作為以使得將在所述立即字段中表示的所述標識符提供給與所述CPU相連接的跟蹤單元。
19.根據(jù)權利要求17所述的程序,其中, 所述源代碼不包含與所述第一匯編指令相對應的顯式指令。
20.根據(jù)權利要求17所述的程序,其中, 所述轉換進一步包括:響應于對所述函數(shù)、所述線程、所述進程或者所述任務的檢測,而從不包含與所述第一匯編指令相對應的顯式指令的所述源代碼產(chǎn)生所述第一匯編指令。
【文檔編號】G06F9/45GK104516765SQ201410521199
【公開日】2015年4月15日 申請日期:2014年9月30日 優(yōu)先權日:2013年9月30日
【發(fā)明者】長尾剛司, 佐藤修司, 鈴木均 申請人:瑞薩電子株式會社
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1