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

控制調試異常的產生的制作方法與工藝

文檔序號:11802965閱讀:295來源:國知局
控制調試異常的產生的制作方法與工藝
本發(fā)明的領域涉及數據處理裝置,且具體地涉及在數據處理裝置上執(zhí)行診斷操作。

背景技術:
已知可向數據處理系統提供診斷機制,診斷機制可以用來在數據處理系統上執(zhí)行診斷操作(如軟件和硬件故障識別和分析(調試)),以協助硬件、操作系統、應用程序、整體系統設計等的開發(fā)。當分析數據處理系統時,可使用外部調試器,外部調試器包括在主機系統上運行的調試程序,主機系統連接到將被分析的系統,以使得控制信號從主機傳到該系統,所述控制信號指定將在該系統上執(zhí)行的診斷操作。外部調試器包括經由外部端口連接到目標的調試器,然后調試器會用來對調試硬件編程。處理器被配置為使得調試事件導致進入特別的調試狀態(tài),在該狀態(tài)中數據處理裝置被外部調試器詢問(interrogate)和控制。將調試事件轉換為調試狀態(tài)進入是由硬件授權接口所控制的,但是這并不選通(gate)調試器對調試硬件編程的能力。替代地,可有一種自我托管的調試系統,其中調試監(jiān)視器軟件在正被調試的目標上執(zhí)行。處理器上的調試硬件被編程為產生調試事件,并且處理器被配置為使調試事件轉換成由軟件處理的調試異常。通常,調試軟件以無權限的或低階層的任務來運行(通常是當調試其它無權限應用時),無權限或低階層任務使用有權限或較高階層軟件執(zhí)行者或內核的服務來編程調試硬件并保持被通知調試事件。在其它情況下,內核是自己被調試的。一般而言,這兩個方案共享大部分的調試硬件,如斷點和監(jiān)視點寄存器。至少有三個路線用于調試硬件的編程:1)通過用于內核模式調試的內核中的調試監(jiān)視器;2)通過用于應用程序的調試的、代表無權限調試器任務的內核;3)通過經由專用調試端口的外部調試器。調試的一個問題是,調試代理(可能是外部代理)對斷點寄存器的編程可在可能包括操作系統代碼的代碼中產生異常。如此有與該狀況相關的風險,并可能導致軟件故障。在降低可能會導致系統故障的代碼中異常產生的風險的同時,希望能夠允許包括操作系統的系統的調試。

技術實現要素:
本發(fā)明的第一方面提供一種數據處理裝置,包括:數據處理電路,用于響應于程序指令的執(zhí)行而執(zhí)行數據處理操作;調試電路,用于執(zhí)行由在該數據處理電路上運行的調試軟件控制的調試操作;該數據處理裝置包括數據儲存裝置,該數據儲存裝置用于儲存當前調試異常掩碼值;該數據處理電路被配置為響應于執(zhí)行關鍵代碼而在該數據儲存裝置中將該當前調試異常掩碼值設為第一值,并且在該關鍵代碼的執(zhí)行終止時重置該當前調試異常掩碼值以不儲存該第一值;其中該數據處理電路被配置為執(zhí)行與多個不同軟件階層式層級相對應的程序指令,較高軟件階層式層級是具有比較低階層式軟件層級高的權限的層級,以使得有至少一些數據儲存位置能從該較高階層式層級被存取而不能從該較低階層式層級被存??;以及該數據處理電路被配置為,當該調試軟件將在與軟件正操作于的層級相同的階層式層級處被執(zhí)行時,如果該當前調試異常掩碼值不被設為該第一值時,則允許調試異常被執(zhí)行,并且如果該當前調試異常掩碼值被設為該第一值,則不允許該調試異常被執(zhí)行,并且當該調試軟件將在較高的預 定軟件階層式層級處被執(zhí)行時允許調試異常被執(zhí)行。本發(fā)明認識到一些代碼的執(zhí)行對于系統的性能和正確行為是關鍵的,因此中斷代碼幾乎肯定會導致系統故障。也認識到雖然異步中斷可能發(fā)生在處理期間的任何點處,但是這些一般是獨立于當前執(zhí)行指令流中的指令而發(fā)生的且可被允許保持待決一段時間,該系統被配置為在到達處理中的合適點時執(zhí)行這些異常。同步異常響應于指令流中的指令而發(fā)生,因此,同步異常在傳統上立即被執(zhí)行。若同步異常在關鍵代碼的執(zhí)行過程中發(fā)生,可能會導致問題。一般而言,數據處理系統將通過確保在關鍵代碼期間可能會產生諸如數據中止之類的同步異常的內存區(qū)域不被存取,來防止該可能性。然而,本發(fā)明認識到,還有其它可通過調試電路產生的同步異常,這些其它同步異常超出正常處理操作的控制且是非預期的異常。重要的是,這些異常不被執(zhí)行,因此,本發(fā)明提供一系統,其中響應于執(zhí)行關鍵代碼,處理器設定掩碼值,然后掩碼值被用來禁止在執(zhí)行關鍵代碼期間收到的任何調試異常的執(zhí)行。在執(zhí)行關鍵代碼結束時,掩碼值被重置以使得該掩碼值不再持有禁止了異常的執(zhí)行的值。因此,在該簡單而不失優(yōu)雅的作法中,可保護關鍵代碼免受在調試過程中同步地產生的異常的影響。此外,許多處理裝置處理不同的軟件階層式層級處的數據,存取較低階層式層級被禁止而較高階層式層級被允許存取的某些內存區(qū)域和系統寄存器。調試異常掩碼值可以用來禁止在與軟件正運行于的層級相同的階層式層級執(zhí)行調試異常,這些異常通常稱為再進入(re-entrant)異常。因此,當在某階層式層級處理指令時,若控制信號表示調試軟件將在同一階層式層級被執(zhí)行,則調試異常掩碼值可以用來避免異常的執(zhí)行,且當關鍵代碼正在該層級執(zhí)行時,其可以用來禁止異常的執(zhí)行。若正在執(zhí)行關鍵代碼,則重要的是,異常沒有在該層級執(zhí)行,因為儲存對于處理器的正確行為而言很重要的值的寄存器可能會被覆寫。然而,若控制信號表示將在與當前正執(zhí)行的代碼不同的階層式層級執(zhí)行異常(在許多實施例中只允許在更高的階層式層級執(zhí)行異常),則由于該其它階層式層級將有自己的中斷寄存器,因此可允許在較低階層式層級中斷關鍵代碼,因為儲存重要信息 的寄存器不會被覆寫。以這種方式,本發(fā)明實施例提供粒度給該系統并且僅禁止在異常的執(zhí)行可能導致軟件故障的階層式層級執(zhí)行異常。在一些實施例中,調試電路發(fā)出信號至數據處理電路,指示調試異常將要執(zhí)行,且處理電路依賴于當前調試掩碼值而禁止或允許異常的執(zhí)行。在其它的實施例,若調試掩碼值被設定,則調試電路本身通過不使控制信號作用以發(fā)送到處理電路,來響應于該當前掩碼值。雖然被執(zhí)行的調試操作可由在外部主機上運行的調試軟件來控制,但是在一些實施例中,該調試電路執(zhí)行由在該數據處理電路上運行的軟件控制的調試操作。關鍵代碼可為數個事物,但在一些實施例中,關鍵代碼包括其中斷可能會產生軟件故障的多個指令。數據處理裝置可配置為在執(zhí)行各種不同的代碼時禁止從調試電路收到的異常的執(zhí)行,但若在代碼執(zhí)行期間禁止該異常的執(zhí)行是有利的,在該代碼中異常的執(zhí)行可能會產生軟件故障。顯然地,當執(zhí)行該代碼時禁止異常的執(zhí)行是非常重要的。該代碼可包括數個事物,例如該代碼可能是用來儲存或恢復用于配置該系統的寄存器值的代碼,該代碼可包括用于確認、禁用或重新使能中斷系統寄存器的代碼,或該代碼可包括用于儲存處理器狀態(tài)于數據儲存裝置中的代碼或用于從數據儲存裝置恢復狀態(tài)的代碼。顯然地,正確儲存和正確恢復處理器的狀態(tài)是很重要的,因此,最好避免中斷該代碼。在一些實施例中,該數據處理裝置包括數據儲存裝置,該數據處理裝置包括數據儲存裝置,該數據儲存裝置被配置為儲存與所述多個不同軟件階層式層級相對應的多個調試異常掩碼值;該數據處理電路被配置為當切換至所述多個階層式軟件層級中的一者時將該當前調試異常掩碼值設定為針對所述階層式軟件層級中的所述一者而存儲的該調試異常掩碼值的值。在一些實施例中,處理裝置可具有儲存裝置,該儲存裝置用于儲存用于不同軟件階層式層級的調試異常掩碼值,當切換為執(zhí)行該層級處的程序指令時,這些值被用來設定該調試異常掩碼值的當前值。儲存不同的掩碼值用于不同的階層式層級提供了高程度的粒度和控制。在一些實施例中,該數據處理裝置包括狀態(tài)儲存區(qū)域,該狀態(tài)儲存區(qū)域系用于儲存該當前調試異常掩碼值,該數據處理電路響應于從一個階層式軟件層級切換至不同的軟件階層式層級而儲存該調試異常掩碼值的值在該狀態(tài)儲存區(qū)域中以用于該一個階層式層級,并且當切換回該一個階層式層級時恢復該調試異常掩碼值。替代地,取代儲存不同階層式層級的不同掩碼值,在離開階層式層級時,調試異常掩碼的值可以被儲存在狀態(tài)儲存區(qū)域中,然后在返回該層級時,該值可被恢復到該調試異常掩碼儲存位置,以使得若調試異常在一層級被掩蔽,則當返回到該層級時,該調試異常會再次被掩蔽。在一些實施例中,該數據處理裝置包括狀態(tài)儲存區(qū)域,該狀態(tài)儲存區(qū)域用于儲存狀態(tài)指示符,所述狀態(tài)指示符的至少一個包括與所述軟件階層式層級的至少一者相對應的調試可允許狀態(tài)指示符;該數據處理電路被配置為,在執(zhí)行預定軟件階層式層級處的指令并且該調試軟件將在該處理電路上在該預定階層式層級被執(zhí)行時,如果針對該預定軟件階層式層級的該調試可允許狀態(tài)指示符被設為預定可允許值且該當前調試異常掩碼值未被設為該第一值,則允許該異常被執(zhí)行,并且如果該狀態(tài)指示符未被設為該預定可允許值或者該當前調試異常掩碼值被設為該第一值,則不允許該異常被執(zhí)行。本技術還認知到,在不同階層式層級對系統的調試可導致在更高階層式層級中觸發(fā)異常,在該更高階層式層級中,也許諸如操作系統代碼之類的重要代碼可能正被執(zhí)行且中斷該代碼可能是不希望的。例如,若系統已經被設立為使得在處理器上運行的操作系統可被調試,則可能希望在某時點處能夠禁止該情況發(fā)生,從而使得在正常操作期間,異常產生到操作系統中是不允許的。這些異常的產生可導致操作系統的故障并可引起安全問題。因此,本發(fā)明實施例提供狀態(tài)指示符,狀態(tài)指示符可以設定為允許或不允許在某些階層式層級進行調試。如此一來,當測試該系統時,例如,所有階層式層級的調試可被允許,但是當裝運該系統時,更高階層式層級的調試可以通過設定此狀態(tài)指示符而被禁止。這意味著系統上運行的任何應用可被調試,但裝運前已徹底執(zhí)行測試的操作系統不被允許在內部產生 調試異常。如此是有利的,特別是例如當有用于設定斷點寄存器的外部構件時。在該情況下,外部代理可在操作系統內產生異常,且這些異常不會在處理系統的控制下并且可能會導致嚴重的錯誤,因此最好避免這些異常。在一些實施例中,該數據處理電路被配置為,在執(zhí)行預定軟件階層式層級的指令并且該調試軟件將在較高預定軟件階層式層級被執(zhí)行時,響應于從該調試電路接收到指示該調試異常將被執(zhí)行的該控制信號,允許該異常被執(zhí)行。在調試異常被執(zhí)行時,指示調試軟件將要在比現在正執(zhí)行的指令高的預定軟件階層式層級被執(zhí)行,則該異常總是會被允許執(zhí)行,因為該較高層級有其自己的寄存器用于儲存中斷值,因此,即使其要在較低的層級中斷關鍵代碼,其也不會造成處理器狀態(tài)的損壞。在一些實施例中,該數據處理電路被配置為,在響應于一異常從較低軟件階層式層級切換至較高軟件階層式層級時,將該調試異常掩碼值設定為該第一值。在執(zhí)行異常時關鍵代碼被執(zhí)行,因此,希望處理裝置設定掩碼值以使得關鍵代碼不能被在此層級執(zhí)行的另一調試異常中斷。調試異??梢圆扇≡S多形式,但有可能是監(jiān)視點,監(jiān)視點是儲存在寄存器中的地址,其中存取或試圖存取該地址會觸發(fā)調試控制信號起作用(assertion),或者其可能是斷點,斷點也是儲存在調試寄存器中的地址,其中執(zhí)行或試圖執(zhí)行具有此地址的指令會導致調試控制信號起作用。在一些實施例中,該數據處理電路被配置為,響應于從該調試電路接收到指示調試異常將要執(zhí)行的控制信號及該調試異常掩碼值被設定為該第一值,使待決調試異常信號作用,且響應于該掩碼被清除而不儲存該第一值以執(zhí)行該待決調試異常。如前面提到的,調試異常是同步異常,因為這些調試異常響應于指令的執(zhí)行而發(fā)生。在掩碼值設定為指示該異常不能被觸發(fā)的第一值的情況中,則在一些實施例中,會產生待決的調試異常信號,并且假如調試可允許狀態(tài)指示符表示其是可允許的,則當已清除該掩碼且不再儲存第一值 時,可執(zhí)行該待決調試異常。此舉是所希望的,因為該調試異常指示調試程序的人想要知道處理器的狀態(tài)。因此,雖然立即的響應受到禁止,因為立即的反應可能會導致軟件故障,但是之后的響應是允許的并可能產生有用的信息。在一些實施例中,該數據處理電路被配置為響應于步驟模式控制信號而在步驟模式中執(zhí)行,在該步驟模式中,程序中的指令以順序步驟被執(zhí)行,其中,在該步驟模式中該數據處理電路被配置為在所述順序指令的每個執(zhí)行之后使調試異常起作用。一種本發(fā)明實施例支持的可能調試模式是步驟模式,其中每個指令被執(zhí)行,然后調試異常被執(zhí)行。以此方式,程序被步進通過(stepthrough),并且在執(zhí)行每個指令后,控制被給予調試軟件以使得可以查詢寄存器中的值或處理器的其它狀態(tài)。在一些實施例中,響應于該數據處理電路在所述順序指令中的一者的執(zhí)行期間接收到異常,該數據處理裝置被配置為將該當前調試異常掩碼值設為該第一值并且使待決調試異常作用,并且響應于該當前調試異常掩碼值未被設為該第一值,該數據處理電路被配置為執(zhí)行該待決調試異常。若在逐步(step-wise)模式中在順序指令的執(zhí)行期間發(fā)生異常,則待決調試異常和調試異常掩碼的使用可以幫助確保調試異常在異常中的關鍵代碼執(zhí)行期間不被執(zhí)行,但是當掩碼已被清除時調試異常會被執(zhí)行,此舉是在關鍵代碼完成時發(fā)生的。在一些實施例中,數據處理電路被配置為,當響應于一異常而從較低的軟件階層式層級切換到較高的軟件階層式層級時,設定用于掩蔽不同類型的異常的多個掩碼,并且響應于單個指令的執(zhí)行,重置所有這些掩蔽。除了掩蔽調試異常的掩碼以外,還可設定其它掩碼以在關鍵代碼的執(zhí)行期間掩蔽其它異步異常的執(zhí)行。若是這樣的情況,那么若關鍵代碼的結束由單個指令來指示,則執(zhí)行此指令可觸發(fā)所有掩碼的清除。如此一來,調試掩碼的清除并不需要任何額外的代碼,因為該調試掩碼可與其它掩碼一起被清除。在一些實施例中,該單個指令包括指示關鍵代碼的執(zhí)行已經完成的指 令。應當注意到,掩碼的任何子集可在一個指令中被清除或實質上被設定。雖然處理裝置的不同階層式層級可為數種事物,但在一些實施例中,存在第一低層級、第二較高層級和第三最高層級,該第一低層級是應用軟件被執(zhí)行的層級,在第二較高層級中操作系統軟件被執(zhí)行,在第三最高層級中超管理器軟件被執(zhí)行。在一些實施例中,該數據處理裝置包括狀態(tài)儲存區(qū)域,該狀態(tài)儲存區(qū)域用于儲存指示符,所述指示符包括狀態(tài)指示符及進一步捕獲指示符,該捕獲指示符具有捕獲值,該捕獲值指示該調試軟件將在該超管理器層級被執(zhí)行;該數據處理電路被配置為,響應于具有該捕獲值的該捕獲指示符,若該處理電路當前正操作于該超管理器層級并且該狀態(tài)指示符未被設為該預定可允許值或者該當前調試異常掩碼值被設為該第一值,則不允許調試異常的執(zhí)行,并且若該狀態(tài)指示符被設為該預定可允許值且該當前調試異常掩碼值未被設為該第一值,或者該數據處理電路當前正操作于在階層上比該超管理器層級低的層級,則允許調試異常在該超管理器層級執(zhí)行。一種提供粒度的方法是具有單個狀態(tài)指示符和進一步捕獲指示符,單個狀態(tài)指示符允許或不允許再進入調試異常發(fā)生在當前的階層式層級,以及若當前層級在階層上低于超管理器層級,則進一步捕獲指示符將異常捕獲到超管理器層級。在許多情況下,例如圖1所示的實施例中,沒有高于超管理器層級的層級,然而,若有這樣的層級且處理電路在該層級操作,則捕獲值不會將異常捕獲到超管理器層級,因為異常不能在較低階層式層級執(zhí)行。如前提到的,異??偸强稍谳^高的層級執(zhí)行,因此若異常發(fā)生在低于超管理器層級的層級,則其可被執(zhí)行。若處理電路在超管理器層級操作,則假如狀態(tài)指示符允許異常的執(zhí)行且該異常并沒有被掩蔽,則其將被執(zhí)行。本發(fā)明的第二方面提供一種用于控制數據處理裝置內的調試操作的發(fā)起的方法,該數據處理裝置被配置為執(zhí)行與多個不同軟件階層式層級相對應的程序指令,較高軟件階層式層級是具有比較低階層式軟件層級高的權限的層級,以使得有至少一些數據儲存位置能從該較高階層式層級被存取 而不能從該較低階層式層級被存取,該方法包括下列步驟:響應于該數據處理裝置執(zhí)行關鍵代碼在該數據處理裝置內的數據儲存裝置中將當前調試異常掩碼值設為第一值,并且在該關鍵代碼的執(zhí)行終止時重置該當前調試異常掩碼值以不儲存該第一值;當該調試軟件將在與軟件正操作于的層級相同的階層式層級處被執(zhí)行時,如果該當前調試異常掩碼值不被設為該第一值時,則允許調試異常被執(zhí)行,并且如果該當前調試異常掩碼值被設為該第一值時,則不允許該調試異常被執(zhí)行;以及當該調試軟件將在較高的預定軟件階層式層級處被執(zhí)行時允許調試異常被執(zhí)行。本發(fā)明的第三方面提供一種計算機程序產品,該計算機程序產品儲存計算機程序,當該計算機程序在數據處理器上執(zhí)行時,該計算機程序可操作以控制該數據處理器執(zhí)行根據本發(fā)明第二方面的方法的步驟。本發(fā)明的第四方面提供一種虛擬機,該虛擬機由在數據處理裝置上執(zhí)行的計算機程序所提供,該虛擬機根據本發(fā)明第一方面的數據處理裝置而提供指令執(zhí)行環(huán)境。本發(fā)明的上述和其它對象、特點和優(yōu)勢在下述說明性實施例的詳細描述下將是明顯的,閱讀說明實施例時請參照附圖。附圖說明圖1圖示出根據本發(fā)明實施例的數據處理裝置的階層式軟件層級;圖2圖示出連接到主機調試器的數據處理裝置;圖3a圖示出KDE設定為0時在EL1層級執(zhí)行來自EL0層級的異常;圖3b圖示出KDE設定為1時在EL1層級執(zhí)行來自EL0層級的異常及響應于調試事件而執(zhí)行再進入異常;圖4圖示出KDE設定為1時在EL1層級執(zhí)行來自EL0層級的異常及響應于發(fā)生在調試掩碼被設定期間的調試事件而執(zhí)行再進入異常;圖5圖示出表示軟件步驟調試操作期間所遇到的狀態(tài)的狀態(tài)圖;圖6圖示出當執(zhí)行中的關鍵代碼中斷時所發(fā)生的步驟的流程圖;圖7圖示出類似圖6的流程圖,但其中可能會出現多個異常;及圖8圖示出本發(fā)明實施例的虛擬機實施方式。具體實施方式圖1示意地圖示出根據本發(fā)明實施例的數據處理裝置的不同階層式軟件層級。在此實施例中,有最高的階層式層級EL2,該層級包括超管理器。該層級可能有一些調試服務在內部,其中調試器可作為超管理器應用運行,并且超管理器負責對調試硬件編程。下一層級是訪客操作系統被執(zhí)行的EL1層級。這些層級可能也有調試服務在它們內部。再次地,這些調試服務負責對調試硬件編程。第三層級是最低的EL0層級,該層級是應用(App)被執(zhí)行的層級。這些應用之一可能是調試應用。圖2圖示出根據本發(fā)明實施例的數據處理裝置。在此實施例的數據處理裝置10連接到主機調試器20。主機調試器經由輸入12與數據處理裝置10通訊,且傳送調試指令至數據處理裝置10并接收來自該數據處理裝置10的診斷數據。數據處理裝置10包括用于執(zhí)行指令流的處理器30。數據處理裝置10還包括調試硬件40、47、48,包括用于儲存指示調試異常是否可以被執(zhí)行的掩碼值和狀態(tài)指示符的數據儲存裝置40,以及寄存器組42內的用于儲存指示調試異常應當被執(zhí)行的地點的斷點和監(jiān)視點值的寄存器47、48。關于掩碼值,可能儲存有若干掩碼值,每個與特定階層式層級相關并且用來掩蔽將在該層級執(zhí)行的調試異常。這些掩碼值之一將是當前調試掩碼值或掩蔽旗標,當被設定時其禁止調試異常,所述調試異常是將在當前軟件階層式層級被執(zhí)行的再進入異常。此掩蔽旗標是處理器的狀態(tài)的一部分,因此,在響應于中斷而儲存狀態(tài)時,該值也被儲存。掩碼值的操作將在后面介紹。在執(zhí)行中斷或其它異常時,也有用于儲存處理器的該狀態(tài)的至少一個儲存裝置46。如前所述,若處理器正在改變軟件階層式層級,則儲存在數據儲存裝置46中的處理器的狀態(tài)可包括當前調試掩碼值或掩蔽旗標??赡苡腥舾蓚€儲存裝置46,每個軟件階層式層級都有一個該儲存裝置46。在例如EL1處執(zhí)行中斷時,處理器的當前狀態(tài)被儲存到用于EL1層級的儲存裝置46,當切換回EL1處被中斷的處理時,從用于EL1的儲存裝置46恢復該狀態(tài)。若設定用于EL1的調試掩碼,則該值將被儲存在儲存裝置中并且將在狀態(tài)被恢復時被再次設定。儲存裝置46在異常被執(zhí)行時可僅專用于儲存處理器的狀態(tài)的目的,或者儲存裝置46可為諸如數據存儲器之類的較為通用的儲存裝置的一部分。主機調試器20可自行對調試硬件40、47、48編程并且在主機調試器20內的單獨處理器上執(zhí)行調試軟件。替代地,處理器30可能在其軟件階層式層級之一內具有調試服務,且響應于來自主機調試器的信號,這些調試服務可被用來對調試硬件編程。此外,主機調試器20本身可能是在處理器30上執(zhí)行的程序。斷點和監(jiān)視點值被設置在寄存器47和48中。響應于斷點寄存器中的地址出現為正被執(zhí)行的指令的地址,或響應于監(jiān)視點寄存器中的地址出現為正被存取的數據位置的地址,產生調試異常。該異常會導致調試軟件取得對處理器的控制并與用戶溝通,以便將關于此點處的處理器的狀態(tài)的信息轉給調試器。如前所述,在一些情形下,不希望在代碼正被執(zhí)行時執(zhí)行異常,因此,本發(fā)明實施例提供用于在不適合執(zhí)行這些調試異常時禁止這些調試異常的執(zhí)行的機制。此種粒度的控制可以不同的方式執(zhí)行。例如,當操作系統正在執(zhí)行時執(zhí)行異??赡苁遣幌M模强赡芟M軌蛟谘b運前調試該操作系統。因此,在EL1層級在操作系統內提供內核調試器但是能夠使用禁止旗標(KDE位)來禁止該調試器產生的任何異常的執(zhí)行可能是有利的。因此,若儲存在數據儲存裝置40中的KDE位清除,則任何斷點或監(jiān)視點會被禁用,使得除非TDE位被設定,否則若這些地址從EL1層級被存取,則不會有異常產生,此舉將在后面介紹。如此一來,調試操作系統的能力與禁用此調試的能力一起被提供,使得適當地異常不能被產生于內 核內。因此,該系統在裝運前可被完整調試,但在裝運后KDE位可被永久清除以使得內核的調試不被允許。還有TDE位儲存在數據儲存裝置40中,此位將由斷點或監(jiān)視點匹配產生的任何異常捕獲到EL2層級處的超管理器中,以使得所產生的任何異常在超管理器內被執(zhí)行和服務。雖然在該實例中數據儲存裝置40被圖示為與寄存器42不同的儲存裝置,但是這些旗標可被儲存在寄存器組42的寄存器內。應注意到,雖然針對EL1層級來描述KDE位,可能也有用于EL2層級的單獨KDE位,該單獨KDE位禁止在此層級執(zhí)行調試異常。替代地,在一些實施例中,有單個KDE位,若該TDE位未被設定,則該KDE位涉及EL1層級。若該TDE位被設定,則調試異常被捕獲到超管理器層級,并且在一些實施例中TDE位在被設定時用來指示KED位涉及EL2層級。由于被設定的TDE位將任何調試異常捕獲到超管理器層級中,因此,若異常發(fā)生在EL1層級,則該異??偸强梢匀缭诟叩碾A層式層級處被執(zhí)行那樣被執(zhí)行,因此,將單個KDE位用于EL1層級(在TDE未被設定時)和在TDE被設定時用于EL2層級是方便的。以此方式,TDE與KDE位一起能禁止或允許在EL1和EL2層級執(zhí)行的再進入異常。除了在是否允許內核調試方面提供粒度的能力,也可有在執(zhí)行特定代碼時禁止調試異常的執(zhí)行的能力。此能力是由當前調試掩碼值或掩蔽旗標43提供。在執(zhí)行特定代碼時,掩蔽旗標由處理器30設定。因此,若處理器正在執(zhí)行EL1層級的代碼且該代碼是其中斷可能會導致軟件故障的關鍵代碼,則處理器30設定調試掩蔽旗標。然后,若產生調試異常,則該調試異常不能在此層級執(zhí)行,因為該掩蔽旗標禁止該調試異常的執(zhí)行。在一些實施例中,此舉可意味著異常從不被執(zhí)行,而在其它實施例中待決旗標44可被設定。若是如此,當在處理器已經完成執(zhí)行關鍵代碼后掩蔽旗標被重置時,或許通過軟件指令,待決異常可被執(zhí)行。參照圖3a、圖3b和圖4有對此的更詳細描述。在這些圖中,一應用正在應用EL0層級上運行并且異常被接收到(此異??墒侨魏晤愋偷漠? 常,不只是調試異常)。然后處理器移至EL1層級以處理該異常。最初當在該層級開始執(zhí)行時,關鍵代碼被執(zhí)行,其儲存處理器的狀態(tài),以使得當返回到該應用時可以恢復此狀態(tài)。重要的是,在該關鍵代碼執(zhí)行期間,在該層級沒有其它的異常被執(zhí)行,因為這將覆寫該正被儲存的狀態(tài)。因此,在此點時,調試掩蔽旗標CPSR.D被設定為1。然后系統異常處理程序被執(zhí)行,且這會處理該異常。在此處理過程中的某點,系統異常處理程序可能已經完成處理器狀態(tài)的儲存,意味著軟件可以離開該關鍵代碼區(qū)域且CPSR.D旗標被設定為0。當系統異常處理程序已經完成了其對異常的處理時,其確定必須返回去處理被中斷的應用,并且因此會進入另一關鍵代碼區(qū)域,并且在原始異常點處的處理器的狀態(tài)被恢復時,調試掩蔽旗標CPSR.D再次被設定為1。圖3a中的KDE位被設定為0,因此在EL1層級不允許調試異常的執(zhí)行,且禁用所有斷點和監(jiān)視點。因此,不管在關鍵區(qū)域還是在系統異常處理程序的其它區(qū)域,在EL1的處理期間沒有調試異常被收到。圖3b中的KDE位被設定為1,因此在EL1層級允許調試異常的執(zhí)行,但不在關鍵代碼區(qū)域內。這樣的再進入調試異常響應于斷點而被接收,并且因為在此點上調試掩蔽旗標CPSR.D是0且KDE=1,因此該調試異常被執(zhí)行且內核使用斷點處理程序來處理該異常。當這完成時,有異常返回且內核繼續(xù)處理系統異常處理程序。當系統異常處理已經完成,則進入關鍵代碼區(qū)域,其中調試掩蔽旗標設定為1,并且若任何調試異常在該點處被接收到,其被忽略。圖4圖示出根據本發(fā)明實施例的處理異常的又一實例。再次說明,如圖3b中一樣,KDE位被設定,并且在應用層級接收并執(zhí)行異常,且處理切換至EL1層級。關鍵代碼最初被執(zhí)行用于儲存處理器的狀態(tài),因此調試掩蔽旗標CPSR.D被設定為1。在該時間期間,發(fā)生監(jiān)視點調試事件,且因為調試掩蔽旗標被設定,所以其不能被執(zhí)行,然而,因為在此實施例中KDE被設定而不是忽略該監(jiān)視點,所以待決調試異常旗標被設定為1。因此,當關鍵代碼完成執(zhí)行時并且該軟件已將調試掩蔽旗標重置為0時,待決調試異常旗標向處理器指示有待決的調試異常,因此其在此點處被執(zhí)行 且內核執(zhí)行監(jiān)視點處理程序以處理該異常。執(zhí)行待決調試異常后,處理器立即儲存待決調試掩蔽旗標的當前值(為0值),然后設定其(CPSR.D)為1。然后調試異常處理程序(在此例中是監(jiān)視點處理程序)被執(zhí)行,并且當其已完成時,針對該調試掩蔽旗標的所儲存值被恢復,在此例中CPSR.D被重置為0。在此點時系統調用處理程序運行,并且當其完成時,軟件進入異常返回代碼(關鍵代碼),并且因此在此代碼執(zhí)行期間調試異常旗標CPSR.D再次設定為1。雖然在前面的實例中,已經就EL1層級描述了KDE位,但是也可能有與EL2層級有關的KDE位。若KDE位針對特定層級被清除,則在該層級內軟件調試事件被禁用。在一些實施例中,即使KDE位在該層級是清除的,也將會有一些調試事件被使能。例如,軟件斷點指令是一種產生如下調試異常的指令類型:調試器以軟件斷點指令取代實際的程序指令,來作為在沒有硬件斷點寄存器42可用時在某位置處設定斷點的手段。由于原來的程序指令不再存在,因此忽略這樣的調試異常是不安全的,即使當KDE位是清除的也是如此。在TDE位被設定時,則來自EL0或EL1層級的軟件調試事件被捕獲到EL2層級。因此,若設定了TDE位,則發(fā)生在EL0或EL1層級的任何調試事件將不會受到針對EL1層級的KDE位的影響且將在EL2層級處被執(zhí)行。在一些實施例中,有這樣的單個KDE位:當TDE位清除時,該單個KDE位影響EL1層級處的調試異常,且當TDE位被設定時,該單個KDE位影響EL2層級的調試異常。在一些實施例中,調試器被配置為執(zhí)行簡單的軟件步驟狀態(tài)機,其中在每個指令被執(zhí)行后,處理器被停止并且狀態(tài)被分析。由于軟件步驟是在軟件控制下,因此步進也由全局調試使能控制來控制,以使得軟件步驟調試器在當前異常層級被使能或禁用。圖5圖示出指示在示例性軟件步驟調試操作期間遇到的狀態(tài)的狀態(tài)圖。在此圖中,有三種類型的代碼:“調試器”包括調試器代碼本身,例如在EL1執(zhí)行的代碼;“被調試程序”包括正被調試的代碼,例如在EL0 層級執(zhí)行的代碼,并且若設定KDE,則為關鍵代碼以外的在EL1執(zhí)行的代碼;以及“關鍵代碼”包括必須不被調試異常中斷的代碼,亦即,在調試掩蔽旗標CPSR.D被設定時在與調試器(EL1)相同的層級處被執(zhí)行的代碼。在開始步驟過程之前,軟件步驟狀態(tài)機處于不活動狀態(tài)且調試器代碼正在運行。通過設定監(jiān)視器調試狀態(tài)中的單一步驟控制旗標和來自EL1層級的控制寄存器(MDSCR_EL1),調試器設置該過程用于步進。然后調試器執(zhí)行異常返回指令以跳入被調試程序代碼。當在被調試程序代碼中時,單一步驟調試事件有效,但異常尚未待決。然后處理器執(zhí)行指令,該指令通常將軟件步驟狀態(tài)機移至有效待決狀態(tài)。在此時,待決軟件步驟調試異常被執(zhí)行并且返回到調試器,且單一步驟完成。然而,若在指令的執(zhí)行過程中遇到另一異常,則其會被執(zhí)行,并且由于關鍵代碼在最初被運行,因此處理器設定調試掩蔽旗標CPSR.D,意味著待決單一步驟調試異常被掩蔽。只有在關鍵代碼已經完成且CPSR.D旗標是清除的時才可執(zhí)行調試異常。然而,若異常處理程序不清除CPSR.D旗標,則返回到被調試程序代碼。若異常處理程序返回來重新執(zhí)行正步進的指令,則待決的單一步驟調試異常將被清除。可以通過調試掩蔽旗標以及TDE和KDE位獲得的粒度被顯示于下表中作為一些實例情況。此表展示根據這些旗標的一些配置是否執(zhí)行調試事件。在此實施例中,調試異常僅在EL1或EL2層級執(zhí)行。層級TDEKDECPSR.D調試事件的動作前兩行601、602顯示在EL0處執(zhí)行時所發(fā)生的事。若TDE位是清除的(行601),則在EL1處理EL0處的調試異常。若設定TDE位(行602),則在EL2處處理EL0處的調試異常。注意,CPSR.D旗標和KDE位在EL0沒有效果。在此表中,“X”表示“不關心”,意味著該行的動作不依賴于該列的值。接下來四行603、604、605、606顯示在EL1處執(zhí)行時的行為。若TDE和KDE位都是清除的(行603),則忽略調試異常。若設定KDE位并清除TDE位,則調試異常在EL1可能會允許,這取決于CPSR.D旗標值。在行604,亦設定CPSR.D旗標。在該情況下,關鍵代碼在EL1層級被執(zhí)行。調試事件目前被掩蔽且將被忽略。然而,在行605,CPSR.D旗標是清除的,所以調試異常允許作為至EL1的再進入異常。在行606,設定TDE位,因此忽略KDE位和CPSR.D旗標并在EL2處執(zhí)行調試異常。其余四行607、608、609、610顯示在EL2處執(zhí)行時的行為。若TDE或KDE位是清除的(行607、608),則調試異常被忽略。然而,若TDE和KDE位皆設定,則調試異常可能在EL2允許,這取決于CPSR.D旗標 值。在行609,亦設定CPSR.D旗標。在該情況下,關鍵代碼正在EL2層級執(zhí)行。調試事件目前被掩蔽且將被忽略。然而,在行610,CPSR.D旗標是清除的,因此允許調試異常作為至EL2的再進入異常。圖6圖示出響應于接收中斷而執(zhí)行的步驟。若在EL0層級收到中斷,則在EL1層級執(zhí)行中斷異常,且設定調試掩蔽旗標,并且執(zhí)行用于處理與儲存處理器的當前狀態(tài)相關的中斷異常所必需的關鍵代碼。在關鍵代碼執(zhí)行期間,設定調試掩蔽旗標,以使得若調試事件發(fā)生,則除非設定TDE位或KDE位,否則其會被忽略。在此實施例中,若沒有設定TDE位但設定KDE位,則設定待決調試異常旗標。若設定TDE位,則異常被捕獲到該異常被處理的EL2層級,并且然后在返回時關鍵代碼的執(zhí)行被完成,且沒有待決調試異常旗標被設定。在其它實施例中,可設定待決調試異常旗標用于特定類型的調試異常而不用于其它的(其被忽略),或可完全不設定待決調試異常旗標。關鍵代碼執(zhí)行完畢后,調試掩蔽旗標被重置,并判斷調試異常待決旗標是否被設定。若其被設定,則執(zhí)行待決調試異常;若沒有,則繼續(xù)該中斷異常的執(zhí)行。圖7是類似圖6的流程圖,但更為復雜,因為圖7額外圖示出在多個調試事件在關鍵代碼的執(zhí)行過程中發(fā)生可能會發(fā)生的事。因此,再次,接收和執(zhí)行針對EL1的中斷,執(zhí)行關鍵代碼,因此設定調試掩碼。然后判斷是否發(fā)生調試事件或指示調試事件正待決的待決旗標是否設定。若任一者為真,則設定TDE位,然后在EL2執(zhí)行異常。否則,若未設定KDE位,從而使得在EL1層級不允許調試,則事件將被忽略。若設定指示調試被允許的KDE位,則判斷是否調試掩碼是否仍被設定(關鍵代碼是否仍在執(zhí)行),若是則設定待決旗標,若不是則在EL1執(zhí)行再進入異常。待決旗標是累積的,這意味著若待決旗標已經設定,則該待決旗標維持設定。若沒有執(zhí)行異常,或若沒有調試事件發(fā)生,則判斷調試掩碼是否仍被設定。若否,則判斷處理器是否在處理關鍵代碼的起始處,若是,則設定調試掩蔽旗標,若否,則不設定調試掩蔽旗標。若調試掩碼仍被設定,則 判斷處理器是否在執(zhí)行關鍵代碼的結束處,若是,則清除調試掩蔽旗標,若否,則不清除調試掩蔽旗標。然后判斷是否已經達到了中斷處理程序的結尾。若是,則執(zhí)行自異常至EL0的返回,若不是,則再次判斷是否已發(fā)生調試事件并重復方法步驟。圖8圖示出可使用的虛擬機(VM)實施方式。雖然在前面描述的實施例以用于操作支持所考慮技術的具體處理硬件的裝置和方法的方式來實施本發(fā)明,但是也有可能提供所謂的硬件設備的虛擬機實施方式。這些虛擬機實施方式在主機處理器530上運行,主機處理器530運行主機操作系統520,主機操作系統520支持虛擬機程序510。通常情況下,需要以合理速度執(zhí)行的大型的強大處理器來提供虛擬機實施方式,但該做法可能在某些情況下是合理的,例如為了兼容或再使用原因,當希望執(zhí)行對另一個處理器而言為本地的代碼時。虛擬機程序510提供應用程序接口給應用程序500,應用程序接口與真實硬件所提供的應用程序接口相同,真實硬件是由虛擬機程序510建模的設備。因此,包括如上所述的對內存存取的控制在內的程序指令可使用虛擬機程序510從應用程序500內執(zhí)行,以建模所述程序指令與虛擬機硬件的互動。雖然已參考附圖詳細描述本發(fā)明的說明性實施例,可以理解本發(fā)明不僅限于那些精確的實施例,在不脫離后附權利要求定義的本發(fā)明范圍和精神的情況下,本領域技術人員可執(zhí)行各種變化和修改。例如,在不脫離本發(fā)明的范圍的情況下,可以將以下從屬權利要求的特征與獨立權利要求的特征執(zhí)行組合。
當前第1頁1 2 3 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1