KR102003663B1 - 디버그 예외 생성 제어 - Google Patents
디버그 예외 생성 제어 Download PDFInfo
- Publication number
- KR102003663B1 KR102003663B1 KR1020137021708A KR20137021708A KR102003663B1 KR 102003663 B1 KR102003663 B1 KR 102003663B1 KR 1020137021708 A KR1020137021708 A KR 1020137021708A KR 20137021708 A KR20137021708 A KR 20137021708A KR 102003663 B1 KR102003663 B1 KR 102003663B1
- Authority
- KR
- South Korea
- Prior art keywords
- debug
- exception
- value
- data processing
- level
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3648—Software debugging using additional hardware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3648—Software debugging using additional hardware
- G06F11/3656—Software debugging using additional hardware using a specific debug interface
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
데이터 처리장치는, 프로그램 명령들의 실행에 응답하여 데이터 처리 연산을 행하는 데이터 처리회로와, 연산을 행하는 디버그 회로를 구비한다. 데이터 처리장치는, 현재 디버그 예외 마스크 값을 기억하는 데이터 기억장치를 구비한다. 데이터 처리회로는, 임계 코드의 실행에 응답하여 데이터 기억장치의 현재 디버그 예외 마스크 값을 제 1 값으로 설정하고, 임계 코드의 실행 종료시 제 1 값을 기억하지 않도록 현재 디버그 예외 마스크 값을 리셋하도록 구성되고, 데이터 처리회로는, 디버그 예외가 취해질 것이라는 것을 표시하는 디버그 회로로부터 수신된 제어신호의 수신에 응답하여, 현재 디버그 예외 마스크 값이 제 1 값으로 설정되지 않으면 예외가 취해질 수 있도록 허용하고, 현재 디버그 예외 마스크 값이 제 1 값으로 설정되면 예외가 취해지는 것을 허용하지 않도록 구성된다.
Description
본 발명의 기술분야는, 데이터 처리장치에 관한 것으로, 특히 데이터 처리장치에 대해 진단 연산을 행하는 것에 관한 것이다.
데이터 처리 시스템에 대해 진단 연산(예를 들면, 소프트웨어 및 하드웨어 고장 식별 및 분석(디버그))을 행하여, 하드웨어, 운영체계, 애플리케이션 프로그램, 전체 시스템 설계 등의 개발에 도움이 되는데 사용될 수 있는 진단 메카니즘을 데이터 처리 시스템에 설치하는 것이 공지되어 있다.
데이터 처리 시스템을 분석할 때, 시스템에 대해 행해질 진단 연산을 명시하는 제어신호가 호스트로부터 시스템으로 전달되도록, 분석할 시스템에 접속되는 호스트 시스템 상에서 실행되는 디버그 프로그램을 포함하는 외부 디버거가 사용되어도 된다.
외부 디버거는, 외부 포트를 통해 타겟에 접속되어 디버그 프로그램을 프로그래밍하는데 사용되는 디버거를 포함한다. 데이터 처리장치가 외부 디버거에 의해 질의를 받고 제어되는 특수한 디버그 상태로 디버그 이벤트들이 진입하게 하도록 프로세서가 구성된다. 디버그 이벤트들로부터 디버그 상태 진입으로의 변환은 하드웨어 인증 인터페이스에 의해 제어되지만, 이 하드웨어 인증 인터페이스가 디버그 하드웨어를 프로그래밍할 수 있는 디버거의 능력을 제어하지는 않는다.
이와 달리, 디버그되고 있는 타겟 상에서 디버그 모니터 소프트웨어가 실행되는 자체 호스트된(self-hosted) 디버그 시스템이 존재할 수도 있다. 프로세서 상의 디버그 하드웨어는 디버그 이벤트들을 발생하도록 프로그래밍되고, 디버그 이벤트들이 소프트웨어에서 의해 처리된 디버그 예외들로 변환되도록 프로세서가 구성된다. (보통 다른 특권이 없는(unprivileged) 애플리케이션들을 디버깅할 때) 디버그 소프트웨어는, 특권을 갖는, 즉 더 높은 계층의 소프트웨어 관리자(executive) 또는 커널의 서비스를 이용하여 특권이 없는, 즉 낮은 계층의 태스크로서 실행되어, 디버그 하드웨어를 프로그래밍하고 디버그 이벤트의 통보를 받는 경우가 많다. 다른 시나리오에서는, 커널 자체가 디버그된다.
일반적으로, 이 2가지 방식은 중지점(breakpoint) 및 관찰점(watchpoint) 레지스터 등의 대부분의 디버그 하드웨어를 공유한다.
디버그 하드웨어가 프로그래밍되기 위한 다음과 같은 적어도 3가지 경로가 존재한다:
1) 커널 모드 디버깅을 위해 커널 내부의 디버그 모니터에 의해,
2) 애플리케이션 디버깅을 위해, 특권이 없는 디버거 작업을 위해 커널에 의해,
3) 전용 디버그 포트를 통한 외부 디버거에 의해.
디버깅과 관련된 한가지 문제점은, 아마도 외부 에이전트인 디버그 에이전트에 의한 중지점 레지스터들의 프로그래밍이 운영체계 코드를 포함할 수도 있는 코드에 예외를 발생할 수 있다는 것이다. 이것은 이 예외와 관련된 위험을 갖고 소프트웨어 고장을 일으킬 수 있다.
따라서, 시스템이 오작동하도록 할지도 모르는 코드 내부의 예외 발생 위험성을 줄이면서도, 운영체계를 포함하는 시스템의 디버그를 허용할 수 있는 것이 바람직할 것이다.
본 발명의 제 1 면은,
프로그램 명령들의 실행에 응답하여 데이터 처리 연산을 행하는 데이터 처리회로와,
상기 데이터 처리회로 상에서 실행되는 디버그 소프트웨어에 의해 제어된 디버그 연산을 행하는 디버그 회로를 구비한 데이터 처리장치로서,
상기 데이터 처리장치는 현재 디버그 예외 마스크 값을 기억하는 데이터 기억장치를 구비하고,
상기 데이터 처리회로는, 임계 코드(critical code)의 실행에 응답하여 상기 데이터 기억장치의 상기 현재 디버그 예외 마스크 값을 제 1 값으로 설정하고, 상기 임계 코드의 실행 종료시 상기 제 1 값을 기억하지 않도록 상기 현재 디버그 예외 마스크 값을 리셋하도록 구성되고,
상기 데이터 처리회로는 복수의 서로 다른 소프트웨어 계층 레벨들에 대응하여 프로그램 명령들을 실행하도록 구성되고, 상위의 소프트웨어 계층 레벨이 하위의 소프트웨어 계층 레벨보다 더 큰 특권을 갖는 레벨로서, 상기 상위 계층 레벨로부터 액세스될 수 있지만 상위 하위 레벨로부터 액세스될 수 없는 적어도 일부의 데이터 기억 장소들이 존재하고,
상기 데이터 처리회로는, 상기 현재 디버그 예외 마스크 값이 상기 제 1 값으로 설정되지 않으면, 소프트웨어가 현재 동작하고 있는 레벨과 동일한 계층 레벨에서 상기 디버그 소프트웨어가 실행될 때 디버그 예외가 취해질 수 있도록(to be taken) 허용하고, 상기 현재 디버그 예외 마스크 값이 상기 제 1 값으로 설정되면 상기 디버그 예외가 취해지는 것을 허용하지 않도록 하고, 상기 디버그 소프트웨어가 소정의 상위 소프트웨어 계층 레벨에서 실행될 때 디버그 예외가 취해질 수 있도록(to be taken) 허용하도록 구성된, 데이터 처리장치를 제공한다.
프로그램 명령들의 실행에 응답하여 데이터 처리 연산을 행하는 데이터 처리회로와,
상기 데이터 처리회로 상에서 실행되는 디버그 소프트웨어에 의해 제어된 디버그 연산을 행하는 디버그 회로를 구비한 데이터 처리장치로서,
상기 데이터 처리장치는 현재 디버그 예외 마스크 값을 기억하는 데이터 기억장치를 구비하고,
상기 데이터 처리회로는, 임계 코드(critical code)의 실행에 응답하여 상기 데이터 기억장치의 상기 현재 디버그 예외 마스크 값을 제 1 값으로 설정하고, 상기 임계 코드의 실행 종료시 상기 제 1 값을 기억하지 않도록 상기 현재 디버그 예외 마스크 값을 리셋하도록 구성되고,
상기 데이터 처리회로는 복수의 서로 다른 소프트웨어 계층 레벨들에 대응하여 프로그램 명령들을 실행하도록 구성되고, 상위의 소프트웨어 계층 레벨이 하위의 소프트웨어 계층 레벨보다 더 큰 특권을 갖는 레벨로서, 상기 상위 계층 레벨로부터 액세스될 수 있지만 상위 하위 레벨로부터 액세스될 수 없는 적어도 일부의 데이터 기억 장소들이 존재하고,
상기 데이터 처리회로는, 상기 현재 디버그 예외 마스크 값이 상기 제 1 값으로 설정되지 않으면, 소프트웨어가 현재 동작하고 있는 레벨과 동일한 계층 레벨에서 상기 디버그 소프트웨어가 실행될 때 디버그 예외가 취해질 수 있도록(to be taken) 허용하고, 상기 현재 디버그 예외 마스크 값이 상기 제 1 값으로 설정되면 상기 디버그 예외가 취해지는 것을 허용하지 않도록 하고, 상기 디버그 소프트웨어가 소정의 상위 소프트웨어 계층 레벨에서 실행될 때 디버그 예외가 취해질 수 있도록(to be taken) 허용하도록 구성된, 데이터 처리장치를 제공한다.
본 발명은, 일부 코드의 실행이 시스템의 성능 및 올바른 거동에 매우 중요하므로, 코드를 인터럽트하는 것은 거의 확실하게 시스템이 오작동하도록 만든다는 것을 인식하였다. 또한, 본 발명은, 처리중의 임의의 시점에서 비동기 인터럽트들이 발생할지도 모르지만, 이들 비동기 인터럽트들은 일반적으로 현재 실행되고 있는 명령 스트림에 있는 명령들에 무관하게 일어나며, 잠시 동안 보류상태(pending)로 남는 것이 허용될 수 있으며, 처리시의 적절한 시점에 도달할 때 시스템이 이들 예외를 취하도록 구성된다. 비동기 예외는, 명령 시스템 내부의 명령들에 응답하여 일어나므로, 간편하게 즉시 비동기 예외가 취해진다.
임계 코드의 실행 중에 비동기 예외가 발생하면, 이와 같은 구성은 문제를 일으킬 수 있다. 일반적으로, 데이터 처리장치는, 데이터 중단 등의 비동기 예외를 발생할지도 모르는 임계 코드 중에 메모리 영역이 액세스되지 않도록 보장함으로써, 이와 같은 만일의 사태가 일어나지 않도록 보호하게 된다. 그러나, 본 발명은, 디버그 회로에 의해 발생할 수 있는 다른 비동기 예외가 존재하며, 이것들은 정규 처리 연산의 제어를 벗어나 예상치 않은 예외로서 도달한다는 것을 인식하였다. 이와 같은 예외들은 취하지 않는 것이 중요하므로, 본 발명은, 임계 코드의 실행에 응답하여 프로세서가 마스크 값을 설정하고, 그후 이 마스크 값을 사용하여, 이 임계 코드가 실행되고 있는 동안 수신된 디버그 예외를 취하는 것을 방지하는 시스템을 제공한다. 임계 코드의 실행이 종료하였을 때, 마스크 값을 리셋하여, 예외를 취하는 것을 금지한 값을 더 이상 유지하지 않도록 한다. 따라서, 이와 같이 간단하면서도 품격이 있게, 디버그 중에 동기하여 발생된 예외로부터 임계 코드를 보호한다.
더구나, 다수의 처리장치는 서로 다른 소프트웨어 계층 레벨에서 데이터를 처리하고, 특정한 메모리 영역 및 시스템 레지스터들에 대한 액세스가 하위의 계층 레벨로부터는 금지되고 상위의 계층 레벨로부터는 허용된다. 디버그 예외 마스크 값을 사용하여 소프트웨어가 현재 동작하고 있는 레벨과 동일한 계층 레벨에서 디버그 예외들이 취해지는 것을 금지하여도 되는데, 이때 이들 예외는 재진입(re-entrant) 예외로 불리는 경우가 많다. 따라서, 특정한 계층 레벨에서 명령들을 처리할 때, 디버그 소프트웨어가 이와 동일한 계층 레벨에서 실행될 것이라는 것을 제어신호가 표시하는 경우에, 디버그 예외 마스크 값을 사용하여 예외가 취해지는 것을 피할 수 있으며, 이것을 이용하여 임계 코드가 이 레벨에서 현재 실행되고 있을 때 예외가 취해지는 것을 금지할 수 있다. 임계 코드가 실행되고 있으면, 프로세서의 올바른 거동에 필수적인 값을 기억하는 레지스터들이 오버라이트될 수고 있기 때문에, 이 레벨에서 예외가 취해지지 않는 것이 중요하다. 그러나, 현재 실행중인 코드와 다른 계층 레벨에서 예외가 취해질 것이라는 것을 제어신호가 표시하는 경우에는(다수의 실시예에서는 상위 계층 레벨에서만 예외가 취해지는 것이 허용된다), 이 다른 계층 레벨이 그 자신의 인터럽트 레지스터들을 갖고 있을 때, 중요한 정보를 기억하는 레지스터들이 오버라이트되지 않으므로, 이 하위 계층 레벨에서 임계 코드의 인터럽션이 허용될 수 있다. 이에 따르면, 본 발명의 실시예들은 시스템에게 정밀도(granularity)를 제공하며, 예외를 취하는 것이 소프트웨어 고장을 일으킬지도 모르는 계층 레벨에서만 예외를 취하는 것을 금지한다.
일부 실시예에서, 디버그 회로는, 디버그 예외가 취해질 것이라는 것을 표시하는 신호를 데이터 처리회로에 전송하고, 처리회로는 현재 디버그 마스크 값에 의존하여 예외를 취하는 것을 금지하거나 허용한다. 다른 실시예에서는, 디버그 마스크 값이 설정되는 경우에, 처리회로에 제어신호를 전송하는 것을 어서트(assert)하지 않음으로써 현재 마스크 값에 응답하는 것이 디버그 회로 자체이다.
행해지고 있는 디버그 연산은 외부 호스트 상에서 실행되는 디버그 소프트웨어에 의해 제어되어도 되지만, 일부 실시예에서, 상기 디버그 회로는, 상기 데이터 처리회로 상에서 실행되는 소프트웨어에 의해 제어되어 상기 디버그 연산을 행한다.
임계 코드는 다양한 것이 될 수 있지만, 일부 실시예에서, 임계 코드는, 인터럽트하였을 때 소프트웨어 고장을 일으킬지도 모르는 복수의 명령들을 포함한다.
데이터 처리장치는 다양한 종류의 코드들 실행시에 디버그 회로에서 수신된 예외를 취하는 것을 금지하도록 구성되어도 되지만, 예외를 취하는 것이 소프트웨어 고장을 일으킬지도 모르는 경우에 코드의 실행중에 데이터 처리장치가 예외를 취하는 것을 금지하는 것이 유리하다. 분명히, 이와 같은 코드를 실행할 때, 예외를 취하는 것이 금지되는 것이 중요하다.
이 코드는 다양한 것을 포함할 수도 있는데, 예를 들어 이 코드는 시스템을 설정하는 레지스터 값들을 기억하거나 복원하는데 사용되는 코드이어도 되고, 인터럽트 시스템 레지스터들을 확인하거나 디스에이블하거나 다시 인에이블(re-enable)하는 코드를 포함해도 되고, 또는 이 코드가 프로세서의 상태를 데이터 기억장치에 기억하기 위한 코드 또는 데이터 기억장치로부터 상태를 복원하기 위한 코드를 포함해도 된다. 명백히, 프로세서의 상태가 올바르게 기억되고 올바르게 복원되어, 이와 같은 코드의 인터럽션이 가장 적절하게 방지되는 것이 중요하다.
일부 실시예에서, 상기 데이터 처리장치는, 상기 복수의 서로 다른 소프트웨어 계층 레벨들에 대응하는 복수의 디버스 예외 마스크 값들을 기억하도록 구성된 데이터 기억장치를 구비하고, 상기 데이터 처리회로는, 상기 복수의 계층 소프트웨어 레벨들 중에서 한 개로 전환할 때, 상기 현재 디버그 예외 마스크 값을 상기 한 개의 상기 계층 소프트웨어 레벨에 대해 기억된 상기 디버그 예외 마스크 값으로 설정하도록 구성된다.
일부 실시예에서, 처리장치는 서로 다른 소프트웨어 계층 레벨들에 대한 디버그 예외 마스크 값들을 기억하는 기억장치를 갖고, 이들 값들을 사용하여, 이 레벨에서 프로그램 명령들의 실행으로 전환시에 상기 디버그 예외 마스크 값의 현재값을 설정한다. 서로 다른 계층 레벨들에 대해 서로 다른 마스크 값들을 기억하는 것은 높은 수준의 정밀도와 제어를 제공한다.
일부 실시예에서, 상기 데이터 처리장치는 상기 현재 디버그 예외 마스크 값을 기억하는 상태 기억 영역을 구비하고, 상기 데이터 처리회로는, 한 개의 계층 소프트 레벨로부터 다른 소프트웨어 계층 레벨에의 전환에 응답하여, 상기 한 개의 계층 레벨에 대한 상기 상태 기억 영역에 상기 디버그 예외 마스크 값을 기억하고, 상기 한 개의 계층 레벨로 다시 전환될 때, 상기 디버스 예외 마스크 값을 복원하도록 구성된다.
이와 달리, 서로 다른 계층 레벨들에 대해 서로 다른 마스크 값들을 기억하는 것 대신에, 계층 레벨을 벗어날 때 디버그 예외 마스크 값이 상태 기억 영역에 기억된 후, 이 레벨로 복귀할 때 이 값을 디버그 예외 마스크 기억 위치로 복원하여, 디버그 예외가 한 레벨에서 마스크되면, 이 레벨로 복귀할 때 디버그 예외가 다시 마스크된다.
일부 실시예에서, 상기 데이터 처리장치는 상태 표시자들을 기억하는 상태 기억 영역을 구비하고, 상기 상태 표시자들 중에서 적어도 한 개는 상기 소프트웨어 계층 레벨들 중에서 적어도 한 개에 대응하는 디버그 허용 상태 표시자를 포함하고, 상기 데이터 처리회로는, 소정의 소프트웨어 계층 레벨에서 명령들을 실행시에, 상기 디버그 소프트웨어를 상기 소정의 계층 레벨에서 상기 처리회로 상에서 실행하고자 할 때, 상기 소정의 소프트웨어 계층 레벨에 대한 상기 디버그 허용 상태 표시자가 소정의 허용값으로 설정되고 상기 현재 디버그 예외 마스크 값이 상기 제 1 값으로 설정되지 않은 경우에는, 상기 예외가 취해질 수 있도록 허용하고, 상기 상태 표시자가 상기 소정의 허용값으로 설정되지 않거나 상기 현재 디버그 예외 마스크 값이 상기 제 1 값으로 설정되는 경우에, 상기 예외가 취해질 수 있도록 허용하지 않도록 구성된다.
또한, 본 발명은, 서로 다른 계층 레벨들에서의 시스템의 디버깅이, 아마도 운영체계 코드 등의 중요한 코드가 실행되고 있고 이 코드의 인터럽션이 바람직하지 않을지도 모르는 더 높은 계층 레벨들 내에서 예외들이 기동될 수 있게 할 수 있다는 것을 인식하였다. 예를 들어, 프로세서 상에서 실행되는 운영체계가 디버그될 수 잇도록 시스템이 설정되면, 어떤 시점에서 이것이 일어나지 않도록 하여, 정상 동작 중에 운영체계 내부에의 예외의 발생이 허용되지 않도록 할 수 있는 것이 바람직할지도 모른다. 이와 같은 예외의 발생은 운영체계의 오동작을 일으킬 수 있고 보안 문제를 제공할 수 있다. 따라서, 본 발명의 실시예들은, 특정한 계층 레벨들에서 디버깅을 허용하거나 허용하지 않도록 설정될 수 있는 상태 표시자를 제공한다. 이에 따르면, 시스템이 테스트중일 때에는 예를 들어 모든 계층 레벨들의 디버깅이 허용되고 되지만, 시스템이 출하될 때에는, 이 상태 표시자를 설정함으로써 더 높은 계층 레벨들의 디버깅이 금지될 수도 있다. 이것은, 시스템 상에서 실행된 모든 애플리케이션이 디버그될 수 있지만, 출하전에 완벽하게 테스트된 운영체계는 그 내부에서 디버그 예외가 발생되는 것이 허용되지 않는다는 것을 의미한다.
이것은, 특히 예를 들어 중지점 레지스터들을 설정하는 외부 수단이 존재하는 경우에 유리하다. 이와 같은 경우에, 외부 에이전트가 운영체계 내부에서 예외를 발생할 수도 있으며, 이와 같은 예외는 프로세싱 시스템의 제어하에 있지 않아 심각한 에러를 일으킬 수도 있으므로, 방지하여야 한다.
일부 실시예에서, 상기 데이터 처리회로는, 소정의 소프트웨어 계층 레벨에서 명령들을 실행시에 상기 디버그 예외가 취해질 것이라는 것과 상기 디버그 소프트웨어가 더 높은 소정의 소프트웨어 계층 레벨에서 실행될 것이라는 것을 표시하는 상기 디버그 회로로부터의 상기 제어신호의 수신에 응답하여, 상기 예외가 취해질 수 있도록 허용하도록 구성된다.
현재 명령들을 실행하고 있는 레벨보다 더 높은 소정의 소프트웨어 계층 레벨에서 디버그 소프트웨어를 실행할 것이라는 것을 표시하는 디버그 예외가 취해지면, 이 더 높은 레벨이 인터럽트 값들을 기억하기 위한 그 자신의 레지스터들을 가질 때 이 예외가 취해지는 것이 항상 허용되므로, 더 낮은 레벨에서 임계 코드를 인터럽트하고자 하는 경우에도, 이것이 프로세서의 상태가 손상되지 않게 된다.
일부 실시예에서, 상기 데이터 처리회로는, 예외에 응답하여 하위 소프트웨어 계층 레벨로부터 상위 소프트웨어 계층 레벨로 전환될 때, 상기 현재 디버그 예외 마스크 값을 상기 제 1값으로 설정하도록 구성된다.
예외를 취할 때, 임계 코드가 실행되므로, 이 레벨에서 추가적인 디버그 예외를 취하는 것에 의해 임계 코드가 인터럽트될 수 없도록 처리장치가 마스크 값을 설정하는 것이 바람직하다.
디버그 예외는 다양한 형태를 취할 수 있는데, 레지스터 내부에 기억된 어드레스에 해당하는 관찰점이 존재할 수도 있으며, 이때 이 어드레스에 대한 액세스 또는 액세스 시도는 디버그 제어신호의 어서션(assertion)을 기동하며, 또는 디버그 예외는 마찬가지로 디버그 레지스터 내부에 기억된 어드레스인 중지점이 될 수도 있으며, 이때 이 어드레스를 갖는 명령의 실행 또는 실행의 시도는 디버그 제어신호가 어서트되도록 만든다.
일부 실시예에서, 상기 데이터 처리회로는, 디버그 예외가 취해질 것이라는 것을 표시하는 상기 디버그 회로로부터의 제어신호의 수신과, 상기 디버그 예외 마스크 값이 상기 제 1 값으로 설정되는 것에 응답하여, 보류상태의 디버그 예외 신호를 어서트하고, 상기 마스크가 소거(clear)되는 것에 응답하여, 상기 보류상태의 디버그 예외를 취하기 위해 상기 제 1 값을 기억하지 않도록 구성된다.
전술한 것과 같이, 디버그 예외들은, 이것들이 명령들의 실행에 응답하여 일어난다는 점에서 동기 예외이다. 마스크 값이 예외가 기동될 수 없다는 것을 표시하는 제 1 값으로 설정되는 경우에, 일부 실시예에서는, 보류상태의 디버그 예외 신호가 발생되고, 마스크가 소거되어 제 1 값을 더 이상 기억하지 않을 때에는, 디버그 허용 상태 표시자가 허용된다는 것을 표시한다면, 보류상태의 디버그 예외가 취해질 수 있다. 이와 같은 구성은, 프로그램을 디버깅하는 사람이 프로세서의 상태를 알기를 원하는 것을 디버그 예외가 표시하므로 바람직하다. 따라서, 소프트웨어 고장을 일으킬지도 모르기 때문에 즉각적인 응답이 금지되더라도, 추후의 응답이 허용되며 유용한 정보를 발생할 수도 있다.
일부 실시예에서, 상기 데이터 처리회로는, 스텝 모드(step mode) 제어신호에 응답하여, 프로그램 내부의 명령들이 순차 스텝들로 실행되는 스텝 모드에서 실행하도록 구성되고, 상기 스텝 모드에서, 상기 데이터 처리회로는 상기 순차 명령들의 각각의 실행 후에 디버그 예외를 어서트하도록 구성된다.
본 발명의 실시예들이 지원하는 한가지 가능한 디버그 모드는, 각각의 명령이 실행된 후 디버그 예외가 취해지는 스텝 모드이다. 이에 따르면, 프로그램이 스텝 스루되고(step through), 각각의 명령의 실행 후에 디버그 소프트웨어에 제어가 주어져, 레지스터들 내부의 값들 또는 프로세서의 상태가 질의될 수 있다.
일부 실시예에서, 상기 데이터 처리회로가 상기 순차 명령들 중에서 한 개를 실행하는 동안 예외를 받은 것에 응답하여, 상기 데이터 처리장치가 상기 현재 디버그 예외 마스크 값을 상기 제 1 값으로 설정하고 보류상태의 디버그 예외를 어서트하도록 구성되고, 상기 현재 디버그 예외 마스크 값이 상기 제 1 값으로 설정되지 않은 것에 응답하여, 상기 데이터 처리회로가 상기 보류상태의 디버그 예외를 취하도록 구성된다.
스텝식 모드에서 순차 명령들의 실행 중에 예외가 발생하면, 보류상태의 디버그 예외와 디버그 예외 마스크의 사용은, 예외 상태의 임계 코드의 실행 중에 디버그 예외가 취해지지 않지만 마스크가 소거되었을 때에는(이것은 임계 코드가 완전할 때 일어난다) 디버그 예외가 취해지는 것을 보장하도록 도울 수 있다.
일부 실시예에서, 상기 데이터 처리회로는, 예외에 응답하여 하위 소프트웨어 계층 레벨로부터 상위 소프트웨어 계층 레벨로 전환될 때, 다양한 유형의 예외들을 마스크하는 복수의 마스크들을 설정하고, 단일 명령의 실행에 응답하여 상기 모든 마스크들을 리셋하도록 구성된다.
마스크가 디버그 예외를 마스크하는 것 이외에, 임계 코드의 실행 중에 다른 비동기 예외를 취하는 것을 마스크하도록 설정된 다른 마스크들이 존재할 수도 있다. 이와 같은 경우에는, 임계 코드의 종료가 단일 명령에 의해 표시되면, 이 명령의 실행이 모든 마스크들의 소거를 기동할 수도 있다. 이에 따르면, 디버그 마스크가 다른 마스크들과 함께 소거될 수 있으므로, 이 디버그 마스크의 소거가 추가적인 코드를 필요로 하지 않는다.
일부 실시예에서, 상기 단일의 명령은 임계 코드의 실행이 완료된 것을 표시하는 명령을 포함한다.
이때, 마스크들의 모든 서브셋이 소거되거나 한 개의 명령으로 설정될 수도 있다는 것을 주목하기 바란다. 처리장치의 다양한 계층 레벨들이 다수의 것이 될 수 있지만, 일부 실시예에서는, 애플리케이션 소프트웨어가 실행되는 레벨인 제 1 하위 레벨과, 운영체계 소프트웨어가 실행되는 제2의 상위 레벨과, 하이퍼바이저 소프트웨어가 실행되는 제 3의 최상위 레벨이 존재한다.
일부 실시예에서, 상기 데이터 처리장치는, 상태 표시자 및 추가적인 트랩 표시자를 포함하는 표시자들을 기억하는 상태 기억 영역을 구비하고, 상기 트랩 표시자는 상기 디버그 소프트웨어가 상기 하이퍼바이저 레벨에서 실행될 것이라는 것을 표시하는 트랩값을 갖고, 상기 데이터 처리회로는, 상기 트랩값을 갖는 상기 트랩 표시자에 응답하여, 상기 처리회로가 현재 상기 하이퍼바이저 레벨에서 동작하고 있고 상기 상태 표시자가 상기 소정의 허용 값으로 설정되지 않거나 상기 현재 디버그 예외 마스크 값이 상기 제 1 값으로 설정된 경우에는, 디버그 예외가 취해지는 것을 허용하지 않도록 구성되고, 상기 상태 표시자가 상기 소정의 허용 값으로 설정되는 동시에 상기 현재의 디버그 예외 마스크 값이 상기 제 1 값으로 설정되지 않거나, 또는 상기 데이터 처리회로가 상기 하이퍼바이저 레벨보다 계층적으로 낮은 레벨에서 현재 동작하고 있는 경우에, 디버그 예외가 취해지는 것을 허용하도록 구성된다.
정밀도를 제공하는 한가지 방법은, 재진입 디버그 예외들이 현재의 계층레벨에서 일어나는 것을 허용하거나 허용하지 않는 단일 상태 표시자와, 현재 레벨이 계층적으로 하이퍼바이저 레벨보다 낮으면 하이퍼바이저 레벨로 예외들을 트랩하는 추가적인 트랩 표시자를 갖는 것이다. 도 1에 도시된 실시예에서와 같은 다수의 경우에는, 하이퍼바이저 레벨 위에 레벨이 존재하지 않지만, 이와 같은 레벨이 존재하고 처리회로가 이 레벨에서 동작하고 있으면, 예외가 이 더 낮은 계층 레벨에서 취해질 수 없으므로, 트랩값이 예외를 하이퍼바이저 레벨로 트랩하지 않게 된다. 전술한 것과 같이, 예외는 항상 더 높은 레벨에서 취해질 수 있으므로, 하이퍼바이저 레벨보다 아래의 레벨에서 예외가 발생하면, 이 예외가 취해질 수 있다. 처리회로가 하이퍼바이저 레벨에서 동작하고 있는 경우에, 상태 표시자가 예외가 취해지는 것을 허용하고 상태 표시자가 마스크되지 않으면, 이 예외가 취해지게 된다.
본 발명의 제 2 면은, 복수의 서로 다른 소프트웨어 계층 레벨들에 대응하여 프로그램 명령들을 실행하도록 구성된 데이터 처리장치 내부에서의 디버그 연산의 개시를 제어하는 방법으로서, 상위의 소프트웨어 계층 레벨이 하위의 소프트웨어 계층 레벨보다 더 큰 특권을 갖는 레벨로서, 상기 상위 계층 레벨로부터 액세스될 수 있지만 상위 하위 레벨로부터 액세스될 수 없는 적어도 일부의 데이터 기억 장소들이 존재하고, 상기 제어방법은,
상기 데이터 처리장치가 임계 코드를 실행하는 것에 응답하여, 상기 데이터 처리장치 내부의 데이터 기억장치에서 현재 디버그 예외 마스크 값을 제 1 값으로 설정하고, 상기 임계 코드의 실행 종료시, 상기 현재 디버그 예외 마스크 값을 리셋하여 상기 제 1 값을 기억하지 않도록 하는 단계와,
상기 현재 디버그 예외 마스크 값이 상기 제 1 값으로 설정되지 않으면, 소프트웨어가 현재 동작하고 있는 레벨과 동일한 계층 레벨에서 상기 디버그 소프트웨어가 실행될 때 디버그 예외가 취해질 수 있도록 허용하고, 상기 현재 디버그 예외 마스크 값이 상기 제 1 값으로 설정되면 상기 디버그 예외가 취해지는 것을 허용하지 않도록 하는 단계와,
상기 디버그 소프트웨어가 소정의 상위 소프트웨어 계층 레벨에서 실행될 때 디버그 예외가 취해질 수 있도록 허용하는 단계를 포함하는, 디버그 연산 개시 제어방법을 제공한다.
상기 데이터 처리장치가 임계 코드를 실행하는 것에 응답하여, 상기 데이터 처리장치 내부의 데이터 기억장치에서 현재 디버그 예외 마스크 값을 제 1 값으로 설정하고, 상기 임계 코드의 실행 종료시, 상기 현재 디버그 예외 마스크 값을 리셋하여 상기 제 1 값을 기억하지 않도록 하는 단계와,
상기 현재 디버그 예외 마스크 값이 상기 제 1 값으로 설정되지 않으면, 소프트웨어가 현재 동작하고 있는 레벨과 동일한 계층 레벨에서 상기 디버그 소프트웨어가 실행될 때 디버그 예외가 취해질 수 있도록 허용하고, 상기 현재 디버그 예외 마스크 값이 상기 제 1 값으로 설정되면 상기 디버그 예외가 취해지는 것을 허용하지 않도록 하는 단계와,
상기 디버그 소프트웨어가 소정의 상위 소프트웨어 계층 레벨에서 실행될 때 디버그 예외가 취해질 수 있도록 허용하는 단계를 포함하는, 디버그 연산 개시 제어방법을 제공한다.
본 발명의 제 3 면은, 데이터 프로세서 상에서 실행될 때 작동되어 본 발명의 제 2 면에 따른 방법의 단계들을 수행하도록 데이터 프로세서를 제어하는 컴퓨터 프로그램을 기억한 컴퓨터 프로그램 제품을 제공한다.
본 발명의 제 4 면은, 데이터 처리장치 상에서 실행되는 컴퓨터 프로그램에 의해 제공되는 가상 머신으로서, 본 발명의 제 1 면의 데이터 처리장치에 따른 명령 실행 환경을 제공하는 가상 머신을 제공한다.
삭제
본 발명의 전술한 목적, 특징 및 이점은 다음의 첨부도면을 참조하여 주어지는 이하의 실시예의 상세한 설명으로부터 명확해질 것이다.
도 1은 본 발명의 일 실시예에 따른 데이터 처리장치의 계층 소프트웨어 레벨을 나타낸 것이고,
도 2는 호스트 디버거에 접속된 데이터 처리장치를 나타낸 것이고,
도 3a는 KDE가 0으로 설정된 상태에서 EL0 레벨로부터 EL1 레벨에서 예외를 취하는 것을 나타낸 것이고,
도 3b는 KDE가 1로 설정된 상태에서 EL0 레벨로부터 EL1 레벨에서 예외를 취하는 것과 디버그 이벤트에 응답하여 재진입 예외를 취하는 것을 나타낸 것이고,
도 4는 KDE가 1로 설정된 상태에서 EL0 레벨로부터 EL1 레벨에서 예외를 취하는 것과 디버그 마스크가 설정되는 동안 발생하는 디버그 이벤트에 응답하여 재진입 예외를 취하는 것을 나타낸 것이고,
도 5는 소프트웨어 스텝 디버그 연산중에 마주치는 상태들을 나타낸 상태도이고,
도 6은 인터럽트를 받은 임계 코드의 실행시 발생하는 단계들을 나타낸 흐름도이고,
도 7은 복수의 예외가 발생할 때의 도 6과 유사한 흐름도를 나타낸 것이고,
도 8은 본 발명의 일 실시예의 가상 머신 구현예를 나타낸 것이다.
도 2는 호스트 디버거에 접속된 데이터 처리장치를 나타낸 것이고,
도 3a는 KDE가 0으로 설정된 상태에서 EL0 레벨로부터 EL1 레벨에서 예외를 취하는 것을 나타낸 것이고,
도 3b는 KDE가 1로 설정된 상태에서 EL0 레벨로부터 EL1 레벨에서 예외를 취하는 것과 디버그 이벤트에 응답하여 재진입 예외를 취하는 것을 나타낸 것이고,
도 4는 KDE가 1로 설정된 상태에서 EL0 레벨로부터 EL1 레벨에서 예외를 취하는 것과 디버그 마스크가 설정되는 동안 발생하는 디버그 이벤트에 응답하여 재진입 예외를 취하는 것을 나타낸 것이고,
도 5는 소프트웨어 스텝 디버그 연산중에 마주치는 상태들을 나타낸 상태도이고,
도 6은 인터럽트를 받은 임계 코드의 실행시 발생하는 단계들을 나타낸 흐름도이고,
도 7은 복수의 예외가 발생할 때의 도 6과 유사한 흐름도를 나타낸 것이고,
도 8은 본 발명의 일 실시예의 가상 머신 구현예를 나타낸 것이다.
도 1은 본 발명의 일 실시예에 따른 데이터 처리장치의 다양한 계층 소프트웨어 레벨들을 개략적으로 나타낸 것이다. 본 실시예에서는, 하이퍼바이저를 포함하는 최상위 계층 레벨 EL2가 존재한다. 이것은, 디버거가 하이퍼바이저 애플리케이션으로서 실행될 수 있는 디버그 서비스를 그 안에 가져도 되고, 하이퍼바이저는 디버그 하드웨어의 프로그래밍을 책임지고 있다.
다음 레벨은 게스트 운영체계가 실행되는 EL1 레벨이다. 이들 레벨도 그 안에 디버그 서비스를 자져도 된다. 마찬가지로, 이들 디버그 서비스는 디버그 하드웨어의 프로그래밍을 책임지고 있다.
세 번째 레벨은 애플리케이션들이 실행되는 레벨인 최하위 EL0 레벨이다. 이들 애플리케이션들 중에서 한 개가 디버그 애플리케이션이어도 된다.
도 2는 본 발명의 일 실시예에 따른 데이터 처리장치를 나타낸 것이다. 본 실시예의 데이터 처리장치(10)는 호스트 디버거(20)에 접속된다. 호스트 디버거는, 입력(12)을 거쳐 데이터 처리장치(10)와 통신하고, 디버그 명령들을 데이터 처리장치(10)에 송신하고, 이 데이터 처리장치로부터 진단 데이터를 수신한다. 데이터 처리장치(10)는 명령들의 스트림을 실행하는 프로세서(30)를 구비한다. 이 데이터 처리장치는, 상태 표시자들과 디버그 예외가 취해질 수 있는지 여부를 표시하는 마스크 값들을 기억하는 데이터 기억장치(40)와, 디버그 예외가 취해져야 하는 장소들을 표시하는 중지점 및 관찰점 값들을 기억하는 레지스터 뱅크(42) 내부의 레지스터들(47, 48)을 포함하는 디버그 하드웨어(40, 47, 48)를 더 구비한다.
마스크 값들에 관해, 특정한 계층 레벨에 속하고 이 레벨에서 취해질 디버그 예외들을 마스크하는 역할을 하는 각각의 마스크 값들을 기억한 다수의 마스크 값들이 존재해도 된다. 이들 중에서 한 개는, 설정될 때, 현재 소프트웨어 계층 레벨에서 취해질 재진입 예외들인 디버그 예외들을 금지하는 현재 디버그 마스크 값, 즉 마스크 플래그이다. 이 마스크 플래그는 프로세서의 상태의 일부이므로, 인터럽트에 응답하여 상태를 기억할 때, 이 값도 기억된다. 마스크 값들의 동작은 후술한다.
또한, 인터럽트나 다른 예외가 취해졌을 때, 프로세서의 이와 같은 상태를 기억하는 적어도 한 개의 기억장치(46)가 존재한다. 전술한 것과 같이, 프로세서가 소프트웨어 계층 레벨을 변경하고 있는 경우에, 데이터 기억장치(46)에 기억된 프로세서의 상태가 현재 디버그 마스크 값 또는 마스크 플래그를 포함해도 된다.
각각의 소프트웨어 계층 레벨마다 한 개씩 다수의 기억장치(46)가 존재해도 된다. 예를 들어 EL1에서 인터럽트가 취해졌을 때, 프로세서의 현재 상태는 EL1 레벨에 대한 기억장치(46)에 저장되고, EL1에서 인터럽트된 처리로 다시 전환할 때, EL1에 대한 기억장치(46)로부터 상태가 복원된다. 디버그 마스크가 EL1에 대해 설정되었다면, 이 값은 기억장치에 기억되어, 상태가 복원될 때 다시 설정되게 된다.
기억장치들(46)은 예외가 취해질 때 프로세서의 상태를 기억할 목적으로만 전용으로 사용되어도 되고, 또는 데이터 메모리 등의 범용 기억장치의 일부이어도 된다.
호스트 디버거(20)는, 디버그 하드웨어(40, 47, 48)를 프로그래밍하고 호스트 디버거(20) 내부의 별개의 프로세서 상에서 디버깅 소프트웨어를 실행해도 된다. 이와 달리, 프로세서(30)가 그것의 소프트웨어 계층 레벨들 중에서 한 개 내부에 디버그 서비스를 갖고, 호스트 디버거로부터의 신호에 응답하여, 이들 디버그 서비스를 사용하여 디버그 하드웨어를 프로그래밍해도 된다. 더구나, 호스트 디버거(20) 그 자체가 프로세서(30) 상에서 실행되는 프로그램이어도 된다.
중지점 및 관찰점 값들은 레지스터들 47 및 48 내부에 설정된다. 실행되고 있는 명령의 어드레스로서 나타나는 중지점 레지스터들 내부의 어드레스에 응답하거나, 액세스되고 있는 데이터 위치의 어드레스로서 나타나는 관찰점 레지스터들 내부의 어드레스에 응답하여, 디버그 예외가 발생된다. 이와 같은 예외는 디버그 소프트웨어가 프로세서를 장악하고 이 시점에서의 상태에 대한 디버거 정보에 중계하기 위해 사용자와 통신하게 한다.
전술한 것과 같이, 코드가 실행되고 있을 때 예외를 취하는 것이 바람직하지 않은 상황이 존재하므로, 본 발명의 실시예들은 그렇게 하는 것이 부적절할 때 이들 디버그 예외들을 취하는 것을 금지하는 메카니즘을 제공한다. 이와 같은 종류의 제어의 정밀도는 다양하게 행해질 수 있다. 예를 들어, 운영체계가 실행되고 있을 때 예외를 취하는 것은 바람직하지 않을 수도 있지만, 운영체계를 출하하기 전에 이 운영체계를 디버그할 수 있는 것이 바람직할지도 모른다. 따라서, EL1 레벨에서 운용체계 내부에 커널 디버거를 제공하면서도, 금지 플래그인 KDE 비트를 사용하여 이 디버거에 의해 발생된 예외를 취하는 것을 금지할 수 있도록 하는 것이 유리할지도 모른다.
따라서, 데이터 기억장치(40) 내부에 기억된 KDE 비트가 소거되면, 모든 중지점들 또는 관찰점들이 디스에이블되어, TDE 비트가 설정되지 않을 때 이들 어드레스들이 EL1 레벨로부터 액세스되는 경우에 예외가 발생되지 않는다. 이에 따르면, 이 디버깅을 디스에이블할 수 있는 능력과 함께, 운영체계를 디버그할 수 있는 능력이 재공되어, 적절한 경우에, 예외가 커널 내부로 발생될 수 없다. 따라서, 출하 이전에 시스템이 완전히 디버그될 수 있지만, 출하후에, KDE 비트가 예를 들어 영구적으로 소거되어, 커널의 디버깅이 허용되지 않을 수도 있다.
또한, 데이터 기억장치(40) 내부에 기억된 TDE 비트가 더 존재하고, 이 비트는 EL2 레벨에 있는 하이퍼바이저 내부로의 중지점 또는 관찰점 매치에 의해 생성된 예외들을 트랩하여, 발생된 예외들이 하이퍼바이저 내부에서 취해져 서비스된다. 본 실시예에서는, 데이터 기억장치(40)가 레지스터들(42)과 다른 기억장치로서 도시되어 있지만, 이들 플래그는 레지스터 뱅크(42) 내부의 레지스터들 내부에 기억되어도 된다.
이때, 위에서는 EL1 레벨에 대해 KDE 비트를 설명하였지만, EL2 레벨에서 디버그 예외를 취하는 것을 금지하는 이 레벨에 대한 별개의 KDE 비트가 존재해도 된다.
이와 달리, 일부 실시예에서는, TDE 비트가 설정되지 않은 경우에 EL1 레벨과 관련된 한 개의 KDE 비트가 존재한다. TDE 비트가 설정되면, 디버그 예외들이 하이퍼바이저 레벨 내부로 트랩되고, 일부 실시예에서는, TDE 비트가 설정될 때 이 TDE 비트를 사용하여 KDE 비트가 EL2 레벨과 관련된다는 것을 표시한다. 설정된 TDE 비트가 하이퍼바이저 레벨 내부로 디버그 예외를 트랩할 때, EL1 레벨에서 예외가 발생하면, 예외가 더 높은 계층 레벨에서 취해지고 있으므로 예외가 항상 취해질 수 있으며, (TDE가 설정되지 않을 때) EL1 레벨과 TDE가 설정될 때 EL2 레벨 모두에 대해 한 개의 KDE 비트를 사용하는 것이 간편하다.
이에 따르면, TDE와 KDE 비트들은 함께 EL1 레벨과 EL2 레벨에서 재진입 예외를 취하는 것을 금지하거나 허용할 수 있다.
커널 디버그가 허용되는지 여부에 있어서 정밀도를 제공할 수 있는 능력 이외에, 특정한 코드가 실행될 때, 디버깅 예외를 취하는 것을 중지할 수 있는 능력도 존재한다. 이것은 현재 디버그 마스크 값, 즉 마스크 플래그(43)에 의해 제공된다. 특정한 코드를 실행시에 이 마스크 플래그가 프로세서(30)에 의해 설정된다. 따라서, 프로세서가 EL1 레벨에서 코드를 실행하고 이 코드가 인터럽트시에 소프트웨어 고장을 일으킬지도 모르는 임계 코드인 경우에, 프로세서(30)가 디버그 마스크 플래그를 설정한다. 그후, 디버그 예외가 발생되면, 이 마스크 플래그가 예외가 취해지는 것을 금지하기 때문에, 이 레벨에서 예외가 취해질 수 없다.
일부 실시예에서, 이것은 예외가 결코 취해지지 않는다는 것을 의미하는 한편, 다른 실시예에서는 보류 플래그(pending flag)(44)가 설정될지도 모른다. 설정되는 경우에는, 프로세서가 임계 코드의 실행을 완료한 후 아마도 소프트웨어 명령에 의해 마스크 플래그가 리셋되면, 보류상태의 예외를 취할 수 있다.
이것을 도 3A, 도 3B 및 도 4를 참조하여 더욱 상세히 설명한다. 이들 도면에서는, 애플리케이션이 애플리케이션 EL0 레벨에서 실행되고 있으며, 예외가 수신된다(이 예외는 디버그 예외 뿐만 아니라 모든 종류의 예외이어도 된다). 그후, 프로세서가 EL1 레벨로 이동하여 예외를 처리한다. 처음에는, 이 레벨에서 실행을 개시할 때, 프로세서의 상태를 기억하는 임계 코드가 실행되어, 애플리케이션으로 복귀시에 이 상태가 복원될 수 있다. 이 임계 코드의 실행중에는 이 레벨에서 추가적인 예외가 취해지지 않는 것이 중요한데, 이것은 기억되어 있는 이 상태를 오버라이트할 것이기 때문이다. 따라서, 이 시점에서, 디버그 마스크 플래그 CPSR.D가 1로 설정된다. 그후, 시스템 예외 핸들러가 실행되고 이것이 예외를 처리한다. 이와 같은 처리중의 어떤 시점에서, 시스템 예외 핸들러가 프로세서의 상태의 기억을 완료했을지도 모르는데, 이것은 소프트웨어가 이 임계 코드 영역을 벗어날 수 있으며 CPSR.D 플래그가 0으로 설정된다는 것을 의미한다. 시스템 예외 핸들러가 예외의 처리를 완료하면, 시스템 예외 핸들러는 인터럽트된 애플리케이션의 처리로 복귀해야 하는지를 판정하여, 추가적인 임계 코드 영역에 들어가, 원래의 예외의 시점에서의 프로세서의 상태가 복원되는 동안 디버그 마스크 플래그 CPSR.D가 다시 1로 설정된다.
도 3a에서는, KDE 비트가 0으로 설정되므로, EL1 레벨에서 디버그 예외가 취해지는 것이 허용되지 않으며, 모든 중지점들 및 관찰점들이 디스에이블된다. 따라서, 임계 영역에서도 시스템 예외 핸들러의 나머지에서도, EL1에서 처리하는 동안 디버그 예외가 수신되지 않는다.
도 3b에서는, KDE 비트가 1로 설정되므로, EL1 레벨에서 디버그 예외가 취해지는 것이 허용되지만, 임계 코드 영역 내부에서 허용되는 것은 아니다. 이와 같은 재진입 디버그 예외가 중지점에 응답하여 수신되고, 이 시점에서 디버그 마스크 플래그 CPSR.D가 0이고 KDE=1이므로, 이 디버그 예외가 취해지고 커널이 중지점 핸들러를 사용하여 예외를 처리한다. 이것이 완료되면, 예외 복귀가 존재하고, 커널은 시스템 예외 핸들러를 계속 처리한다. 시스템 예외 처리가 완료하면, 코드의 임계 영역에 들어가, 디버그 마스크 플래그가 1로 설정되고, 이 시점에서 디버그 예외가 수신되면, 이것은 무시된다.
도 4는 본 발명의 일 실시예에 따른 예외 처리의 또 다른 예를 나타낸 것이다. 도 3b에서와 마찬가지로 다시 한번 KDE 비트가 설정되고 애플리케이션 레벨에서 예외가 수신되고 취해지며, EL1 레벨로 처리가 전환된다. 프로세서의 상태를 기억하기 위해 임계 코드가 초기에 실행되어, 디버그 마스크 플래그 CPSR.D가 1로 설정된다. 이 동안에, 관찰점 디버그 이벤트가 발생하고, 디버그 마스크 플래그가 설정되므로 이것을 취할 수 없지만, 본 실시예에서는 이 관찰점을 무시하기 것 대신에 KDE가 설정되기 때문에, 보류 디버그 예외 플래그가 1로 설정된다. 따라서, 임계 코드가 실행을 완료하고 소프트웨어가 디버그 마스크 플래그를 0으로 설정하면, 보류 디버그 예외 플래그가 프로세서에게 보류상태의 디버그 예외가 존재하는 것을 표시하므로, 이 예외가 이 시점에서 취해지고, 커널이 관찰점 핸들러를 실행하여 예외를 처리한다.
보류상태의 디버그 예외가 취해지자마자, 프로세서는 0의 값인 보류 디버그 마스크 플래그의 현재 값을 기억한 후 그것(CPSR.D)을 1로 설정한다. 그후, 디버그 예외 핸들러, 이 경우에는 관찰점 핸들러가 실행되고, 이것이 완료되면, 디버그 마스크 플래그에 대한 기억된 값이 복원되는데, 이 경우에는 CPSR.D가 1로 리셋된다. 이때, 시스템 호출 핸들로가 실행되고, 이것이 완료되면, 소프트웨어가 임계 코드인 예외 복귀 코드에 진입하여, 이 코드의 실행 지속기간 동안 디버그 예외 플래그 CPSR.D가 다시 한번 1로 설정된다.
이전의 실시예에서는, EL1 레벨에 대해 KDE 비트를 설명하였지만, EL2 레벨에 관련된 KDE 비트가 존재해도 된다. 특정한 레벨에 대해 KDE 비트가 소거되면, 이 레벨에서 소프트웨어 디버그 이벤트가 디스에이블된다. 일부 실시예에서는, 이 레벨에 대해 KDE 비트가 소거되더라도, 인에이블되는 디버그 이벤트들이 존재하게 된다. 예를 들어, 소프트웨어 중지점 명령들은 디버그 예외를 발생하는 명령의 한가지 유형이며, 디버거는, 하드웨어 중지점 레지스터(42)가 존재하지 않는 장소에 중지점을 설정하기 위한 수단으로서 실제 프로그램 명령을 소프트웨어 중지점 명령으로 대체한다. 원래의 프로그램 명령이 더 이상 존재하지 않기 때문에, KDE 비트가 소거될 때에도, 이와 같은 디버그 예외를 무시하는 것은 안전하지 않을 것이다.
TDE 비트가 설정되면, EL0 또는 EL1 레벨로부터의 소프트웨어 디버그 이벤트들이 el2 레벨로 트랩된다. 따라서, TDE 비트가 설정되면, EL0 또는 EL1에서 발생하는 디버그 이벤트가 EL1 레벨에 대한 KDE 비트에 의해 영향을 받지 않고 EL2 레벨에서 취해지게 된다.
일부 실시예에서는, TDE 비트가 소거일 때 EL1 레벨에서 디버그 예외에 영향을 미치고 TDE비트가 설정될 때 EL2 레벨에서 디버그 예외에 영향을 미치는 한 개의 KDE 비트가 존재한다.
일부 실시예에서, 각각의 명령이 실행된 후 프로세서가 정지하고 상태가 분석되는 단순한 소프트웨어 스텝 상태 머신을 디버거가 실행하도록 구성된다. 소프트웨어 스텝이 소프트웨어 제어를 받을 때, 스텝핑(stepping)도 전역 디버그 인에이블 제어에 의해 제어를 받아, 소프트웨어 스텝 디버거가 현재 예외 레벨에서 인에이블되거나 디스에이블된다.
도 5는 예시적인 소프트웨어 스텝 디버그 연산 중에 마주치는 상태들을 나타낸 상태도이다. 이 상태도에서는, 2가지 유형의 코드가 존재한다. "디버거"는 디버거 코드 그 자체, 예를 들어, EL1에서 실행되는 코드를 포함한다. "디버기(debuggee)"는 디버그되고 있는 코드, 예를 들어, EL0에서 실행되는 코드와, KDE가 설정되는 경우에는, 임계 코드 이외의 EL1에서 실행되는 코드를 포함한다. 또한, "임계 코드"는 디버그 예외에 의해 인터럽트되어서는 안되는 코드, 즉 디버그 마스크 플래그 CPSR.D를 설정한 상태에서 디버거(EL1)와 동일한 레벨에서 실행된 코드를 포함한다.
스텝 프로세스를 개시하기 전에, 소프트웨어 스텝 상태 머신은 비활성 상태에 있으며 디버거 코드가 실행되고 있다. 디버거는, 모니터 디버그 상태에 있는 단일-스텝(single-step) 제어 플래그와 EL1 레벨로부터의 제어 레지스터(MDSCR_EL1)를 설정함으로써 스텝핑을 위해 프로세스를 설정한다. 그후, 디버거는 예외 복귀 명령을 실행하여 디버기 코드로 점프한다. 디버기 코드에 있을 때에는, 단일-스텝 디버그 이벤트가 활성이지만, 예외가 아직 보류상태에 있지 않다.
그후, 프로세서는, 보통 소프트웨어 스텝 상태 머신을 활성-보류 상태로 이동하는 명령을 실행한다. 이 시점에서, 보류상태의 소프트웨어 스텝 디버그 예외가 취해지고, 예외가 디버거로 복귀하여, 단일-스텝이 완료한다.
그러나, 명령의 실행중에, 다른 예외와 마주치면, 이 예외가 취해지고, 임계 코드가 처음에 실행될 때, 프로세서는 디버그 마스크 플래그, CPSR.D를 설정하는데, 이것은 보류상태의 단일-스텝 디버그 예외가 마스크된다는 것을 의미한다. 임계 코드가 완료되고 CPSR.D 플래그가 소거될 때에만 디버그 예외가 취해질 수 있다. 그러나, 예외 핸들러가 CPSR.D 플래그를 소거하지 않으면, 디버기 코드로 복귀한다. 예외 핸들러가 복귀하면 보류상태의 단일-스텝 디버그 예외가 소거되어, 스텝되고 있었던 명령을 재실행한다.
디버그 마스크 플래그를 통해 얻어질 수 있는 정밀도와 TDE 및 KDE 비트들을 일부의 예시적인 경우에 대해 다음 표에 나타내었다. 이 테이블에는, 이들 플래그의 구성으로부터 디버그 이벤트가 취해질지 여부가 표시되어 있다. 본 실시예에서는, EL1 및 EL2 레벨에서만 디버그 예외가 취해진다.
최초의 2개의 행 601, 602는 EL0에서 실행시에 일어나는 것을 나타낸 것이다. TED 비트가 소거이면(행 601), EL0의 디버그 예외가 EL1에서 처리된다. TDE 비트가 설정되면(행 502), EL0의 디버그 예외가 띠1에서 처리된다. 이때, CPSR.D 플래그와 KDE 비트는 EL0에 영향을 미치지 않는다. 이 표에서, "X"는 "상관없음"을 의미하는데, 이것은 이 행에 대한 동작이 이 열에 대한 값에 의존하지 않는다는 것을 의미한다.
다음의 4개의 행 603, 604, 605, 606은 EL1에서 실행시의 거동을 나타낸 것이다. TDE 및 KDE 비트가 소거이면(행 603), 디버그 예외가 무시된다. KDE 비트가 설정되고 TDE 비트가 소거이면, CPSR.D 플래그의 값에 의존하여, 디버그 예외가 EL1에서 잠재적으로 허용된다. 행 604에서는, CPSR.D 플래그도 설정된다. 이 경우에는, 임계 코드가 EL1 레벨에서 실행되고 있다. 디버그 이벤트가 현재 마스크되어 무시된다. 그러나, 행 605에서는, CPSR.D 플래그가 소거이므로 EL1으로의 재진입 예외로서 디버그 예외가 허용된다. 행 606에서는, TDE 비트가 설정되어 KDE 비트 및 CPSR.D 플래그가 무시되고 EL2에서 디버그 예외가 취해진다.
나머지 4개의 행 607, 608, 609, 610은 EL2에서 실행시의 거동을 나타낸 것이다. TDE 또는 KDE 비트가 소거되면(행 607, 608), 디버그 예외가 무시된다. 그러나, TDE 및 KDE 비트가 모두 설정되면, CPSR.D 플래그의 값에 의존하여, EL2에서 디버그 예외가 잠재적으로 허용된다. 행 609에서는, CPSR.D 플래그도 설정된다. 이 경우에, 임계 코드가 EL2 레벨에서 실행되고 있다. 디버그 이벤트들이 현재 마스크되어 무시된다. 그러나, 행 610에서는, CPSR.D 플래그가 소거이므로, EL2로의 재진입 예외로서 디버그 예외가 허용된다.
도 6은 인터럽트의 수신에 응답하여 행해지는 단계들을 나타낸 것이다. 인터럽트가 EL0 레벨에서 수신되면, EL1 레벨에서 인터럽트 예외가 취해지고 디버그 마스크 플래그가 설정되며, 프로세서의 현재 상태를 기억하는 갓과 관련된 인터럽트 예외를 처리하는데 필요한 임계 코드가 행해진다. 임계 코드의 실행중에, 디버그 마스크 플래그가 설정되므로, 디버그 이벤트가 발생하는 경우, TDE 비트가 설정되지 않거나 KDE 비트가 설정되지 않으면, 디버그 마스크 플래그가 무시된다. 본 실시예에서는, TDE 비트가 설정되지 않고 KDE 비트가 설정되면, 보류 디버그 예외 플래그가 설정된다. TDE 비트가 설정되면, EL2 레벨로 예외가 트랩되어, 여기에서 예외가 처리된 후 복귀시에 임계 코드의 실행이 완료되고, 보류 디버그 예외 플래그가 설정되지 않는다. 다른 실시예에서는, 특정한 유형의 디버그 예외에 대해 보류 디버그 예외 플래그가 설정되지만, 다른 것에 대해서는 설정되지 않거나(무시된다) 또는 전혀 설정되지 않는다.
임계 코드가 실행을 완료한 후, 디버그 마스크 플래그가 리셋되고, 디버그 예외 보류 플래그가 설정되는지 여부가 판정된다. 디버그 예외 보류 플래그가 설정되면, 보류상태의 디버그 예외가 취해지고, 그렇지 않으면 인터럽트 예외의 실행이 계속된다.
도 7은 도 6의 흐름도와 유사한 흐름도이지만, 임계 코드의 실행중에 복수의 디버그 이벤트들이 일어난 경우에 발생하는 것을 추가적으로 나타내므로 더 복잡한 흐름도이다. 따라서, 마찬가지로 EL1에 대한 인터럽트가 수신되어 취해지고, 임계 코드가 실행되어 디버그 마스크가 설정된다. 그후, 디버그 이벤트가 일어났는지 여부 또는 보류 플래그가 설정되어 디버그 이벤트가 보류상태인지를 표시하는지 여부를 판정한다. 어느 한 개가 참이고 TDE 비트가 설정되면, EL2에서 예외가 취해진다. 그렇지 않고, KDE 비트가 설정되지 않으면, EL1 레벨에서 디버그가 허용되지 않으며 이벤트가 무시된다.
KDE가 설정되어 디버그가 허용된다는 것을 표시하면, 디버그 마스크가 여전히 설정되는지(여전히 실행되고 있는 임계 코드인지) 여부를 판정하여, 설정된 경우에는 보류 플래그가 설정되고, 디버그 마스크가 설정되지 않으면 EL1에서의 재진입 예외가 취해진다. 보류 플래그는 누적되는데, 이것은 이 보류 플래그가 이미 설정되면 설정된 상태로 유지된다는 것을 의미한다.
예외가 취해지지 않거나 디버그 이벤트가 발생하지 않았으면, 디버그 마스크가 여전히 설정되는지 여부를 판정한다. 디버그 마스크가 설정되지 않으면, 프로세서가 임계 코드 처리의 시작점에 있는지 판정하여, 그런 경우에는 디버그 마스크 플래그가 설정되고 그렇지 않은 경우에는 디버그 마스크 플래그가 설정되지 않는다. 디버그 마스크가 여전히 설정되어 있으면, 프로세서가 임계 코드의 실행의 종료점에 있는지 여부를 판정하여, 그런 경우에는 디버그 마스크 플래그가 소거되고 그렇지 않은 경우에는 소거되지 않는다. 그후, 인터럽트 핸들러의 종료에 도달하였는지 여부를 판정한다. 도달하였으면, 예외로부터 EL0로의 복귀가 실행되고, 도달하지 않았으면, 디버그 이벤트가 발생하였는지 여부를 다시 판정하고 방법 단계들이 반복된다.
도 8은 사용될 수 있는 가상머신 구현예를 나타낸 것이다. 전술한 실시예가 해당 기술을 지원하는 특정한 처리 하드웨어를 작동하는 장치 및 방법 면에서 본 발명을 구현하지만, 소위 하드웨어 장치들의 가상 머신 구현을 제공하는 것도 가능하다. 이 가상 머신 구현은 가상 머신 프로그램(510)을 지원하는 호스트 운영체계(520)를 실행하는 호스트 프로세서(530) 상에서 실행된다. 일반적으로, 적자한 속도로 실행되는 가상머신 구현을 제공하기 위해서는 크고 강력한 프로세서들이 필요하지만, 호환성 또는 재사용 이유로 인해 다른 프로세서에 네이티브한 코드를 실행하는 것이 필요할 때 등과 같이, 특정한 상황에서는 이와 같은 접근방식이 정당화될 수도 있다. 가상 머신 프로그램(510)은 애플리케이션 프로그램(500)에 대한 애플리케이션 프로그램 인터페이스를 제공하는데, 이 인터페이스는 가상 머신 프로그램(510)에 의해 모델링되고 있는 장치인 실제 하드웨어에 의해 제공되는 애플리케이션 프로그램 인터페이스와 동일하다. 따라서, 전술한 메모리 액세스의 제어를 포함하는 프로그램 명령들은 가상 머신 프로그램(510)을 사용하여 애플리케이션 프로그램(500) 내부에서 실행되어 가상 머신 하드웨어와의 상호작용을 모델링하여도 된다.
첨부된 도면을 참조하여 본 발명의 예시적인 실시예를 상세히 설명하였지만, 본 발명은 이들 정확한 실시예들에 한정되지 않으며, 첨부된 청구범위에 규정된 본 발명의 보호범위 및 사상을 벗어나지 않으면서 당업자에 의해 다양한 변경 및 변형이 행해질 수 있다는 것은 자명하다. 예를 들어, 본 발명의 보호범위를 벗어나지 않으면서, 독립항들의 특징과 다음의 종속항들의 특징의 다양한 조합이 행해질 수도 있다.
Claims (27)
- 프로그램 명령들의 실행에 응답하여 데이터 처리 연산을 행하는 데이터 처리회로와,
상기 데이터 처리회로 상에서 실행되는 디버그 소프트웨어에 의해 제어된 디버그 연산을 행하는 디버그 회로를 구비한 데이터 처리장치로서,
상기 데이터 처리장치는 현재 디버그 예외 마스크 값을 기억하는 데이터 기억장치를 구비하고,
상기 데이터 처리회로는, 임계 코드의 실행에 응답하여 상기 데이터 기억장치의 상기 현재 디버그 예외 마스크 값을 제 1 값으로 설정하고, 상기 임계 코드의 실행 종료시 상기 제 1 값을 기억하지 않도록 상기 현재 디버그 예외 마스크 값을 리셋하도록 구성되고,
상기 데이터 처리회로는 복수의 서로 다른 소프트웨어 계층 레벨들에 대응하여 프로그램 명령들을 실행하도록 구성되고, 상위의 소프트웨어 계층 레벨이 하위의 소프트웨어 계층 레벨보다 더 큰 특권을 갖는 레벨로서, 상기 상위의 소프트웨어 계층 레벨로부터 액세스될 수 있지만 상기 하위의 소프트웨어 계층 레벨로부터 액세스될 수 없는 적어도 일부의 데이터 기억 장소들이 존재하고,
상기 데이터 처리회로는, 상기 현재 디버그 예외 마스크 값이 상기 제 1 값으로 설정되지 않으면, 소프트웨어가 현재 동작하고 있는 레벨과 동일한 계층 레벨에서 상기 디버그 소프트웨어가 실행될 때 디버그 예외가 취해질 수 있도록 허용하고, 상기 현재 디버그 예외 마스크 값이 상기 제 1 값으로 설정되면 상기 디버그 예외가 취해지는 것을 허용하지 않도록 하고, 상기 디버그 소프트웨어가 소정의 상위의 소프트웨어 계층 레벨에서 실행될 때 디버그 예외가 취해질 수 있도록(to be taken) 허용하도록 구성된, 데이터 처리장치.
- 제 1항에 있어서,
상기 임계 코드는, 인터럽트하였을 때 소프트웨어 고장을 일으킬 수 있는 복수의 명령들을 포함하는 데이터 처리장치.
- 제 1항에 있어서,
상기 임계 코드는, 프로세서의 상태를 데이터 기억장치에 기억하기 위한 코드와, 데이터 기억장치에 기억된 상태로부터 프로세서의 상태를 복원하기 위한 코드를 포함하는 데이터 처리장치.
- 제 1항에 있어서,
상기 데이터 처리장치는, 상기 복수의 서로 다른 소프트웨어 계층 레벨들에 대응하는 복수의 디버그 예외 마스크 값들을 기억하도록 구성된 데이터 기억장치를 구비하고,
상기 데이터 처리회로는, 상기 복수의 계층 소프트웨어 레벨들 중에서 한 개로 전환할 때, 상기 현재 디버그 예외 마스크 값을 상기 한 개의 상기 계층 소프트웨어 레벨에 대해 기억된 상기 디버그 예외 마스크 값으로 설정하도록 구성된 데이터 처리장치.
- 제 1항에 있어서,
상기 데이터 처리장치는 상기 현재 디버그 예외 마스크 값을 기억하는 상태 기억 영역을 구비하고, 상기 데이터 처리회로는, 한 개의 계층 소프트웨어 레벨로부터 다른 소프트웨어 계층 레벨에의 전환에 응답하여, 상기 한 개의 계층 레벨에 대한 상기 상태 기억 영역에 상기 디버그 예외 마스크 값을 기억하고, 상기 한 개의 계층 레벨로 다시 전환될 때, 상기 디버그 예외 마스크 값을 복원하도록 구성된 데이터 처리장치.
- 제 1항에 있어서,
상기 데이터 처리장치는 상태 표시자들을 기억하는 상태 기억 영역을 구비하고, 상기 상태 표시자들 중에서 적어도 한 개는 상기 소프트웨어 계층 레벨들 중에서 적어도 한 개에 대응하는 디버그 허용 상태 표시자를 포함하고,
상기 데이터 처리회로는, 소정의 소프트웨어 계층 레벨에서 명령들을 실행시에, 상기 디버그 소프트웨어를 상기 소정의 계층 레벨에서 상기 처리회로 상에서 실행하고자 할 때, 상기 소정의 소프트웨어 계층 레벨에 대한 상기 디버그 허용 상태 표시자가 소정의 허용값으로 설정되고 상기 현재 디버그 예외 마스크 값이 상기 제 1 값으로 설정되지 않은 경우에는, 상기 예외가 취해질 수 있도록 허용하고, 상기 상태 표시자가 상기 소정의 허용값으로 설정되지 않거나 상기 현재 디버그 예외 마스크 값이 상기 제 1 값으로 설정되는 경우에, 상기 예외가 취해질 수 있도록 허용하지 않도록 구성된 데이터 처리장치.
- 제 1항 내지 제 6항 중 어느 한 항에 있어서,
상기 데이터 처리회로는, 예외에 응답하여 하위의 소프트웨어 계층 레벨로부터 상위의 소프트웨어 계층 레벨로 전환될 때, 상기 현재 디버그 예외 마스크 값을 상기 제 1값으로 설정하도록 구성된 데이터 처리장치.
- 제 1항 내지 제 6항 중 어느 한 항에 있어서,
상기 데이터 처리회로는, 예외에 응답하여 하위의 소프트웨어 계층 레벨로부터 상위의 소프트웨어 계층 레벨로 전환될 때, 다양한 유형의 예외들을 마스크하는 복수의 마스크들을 설정하고, 단일 명령의 실행에 응답하여 상기 모든 마스크들을 리셋하도록 구성된 데이터 처리장치.
- 제 8항에 있어서,
상기 단일의 명령은 임계 코드의 실행이 완료된 것을 표시하는 명령을 포함하는 데이터 처리장치.
- 제 1항 내지 제 6항 중 어느 한 항에 있어서,
상기 소프트웨어 계층 레벨들은, 애플리케이션 소프트웨어를 포함하는 제 1 하위 레벨과, 운영체계 소프트웨어와, 디버그 소프트웨어를 포함하는 상기 운영체계 소프트웨어로의 확장을 포함하는 제 2 상위 레벨과, 하이퍼바이저 소프트웨어를 포함하는 제 3 최상위 레벨을 포함하는 데이터 처리장치.
- 제 10항에 있어서,
상기 데이터 처리장치는, 상태 표시자 및 추가적인 트랩 표시자를 포함하는 표시자들을 기억하는 상태 기억 영역을 구비하고, 상기 트랩 표시자는 상기 디버그 소프트웨어가 상기 제 3 최상위 레벨에서 실행될 것이라는 것을 표시하는 트랩값을 갖고,
상기 데이터 처리회로는, 상기 트랩값을 갖는 상기 트랩 표시자에 응답하여, 상기 처리회로가 현재 상기 제 3 최상위 레벨에서 동작하고 있고 상기 상태 표시자가 상기 소정의 허용 값으로 설정되지 않거나 상기 현재 디버그 예외 마스크 값이 상기 제 1 값으로 설정된 경우에는, 디버그 예외가 취해지는 것을 허용하지 않도록 구성되고, 상기 상태 표시자가 상기 소정의 허용 값으로 설정되는 동시에 상기 현재의 디버그 예외 마스크 값이 상기 제 1 값으로 설정되지 않거나, 또는 상기 데이터 처리회로가 상기 제 3 최상위 레벨보다 계층적으로 낮은 레벨에서 현재 동작하고 있는 경우에, 상기 제 3 최상위 레벨에서 디버그 예외가 취해지는 것을 허용하도록 구성된 데이터 처리장치.
- 제 1항 내지 제 6항 중 어느 한 항에 있어서,
상기 디버그 예외는 관찰점 또는 중지점 중에서 적어도 한 개를 포함하는 데이터 처리장치.
- 제 1항 내지 제 6항 중 어느 한 항에 있어서,
상기 데이터 처리회로는, 디버그 예외의 수신과, 상기 현재 디버그 예외 마스크 값이 상기 제 1 값으로 설정되는 것에 응답하여, 보류상태의 디버그 예외 신호를 어서트하고, 상기 현재 디버그 예외 마스크 값이 소거되는 것에 응답하여, 상기 제 1 값을 기억하지 않고 상기 보류상태의 디버그 예외를 취하도록 구성된 데이터 처리장치.
- 제 1항 내지 제 6항 중 어느 한 항에 있어서,
상기 데이터 처리회로는, 스텝 모드 제어신호에 응답하여, 프로그램 내부의 명령들이 순차 스텝들로 실행되는 스텝 모드에서 실행하도록 구성되고, 상기 스텝 모드에서, 상기 데이터 처리회로는 상기 순차 스텝들로 실행되는 명령들의 각각의 실행 후에 디버그 예외를 어서트하도록 구성된 데이터 처리장치.
- 제 14항에 있어서,
상기 데이터 처리회로가 상기 순차 스텝들로 실행되는 명령들 중에서 한 개를 실행하는 동안 예외를 받은 것에 응답하여, 상기 데이터 처리장치가 상기 현재 디버그 예외 마스크 값을 상기 제 1 값으로 설정하고 보류상태의 디버그 예외를 어서트하도록 구성되고, 상기 현재 디버그 예외 마스크 값이 상기 제 1 값으로 설정되지 않은 것에 응답하여, 상기 데이터 처리회로가 상기 보류상태의 디버그 예외를 취하도록 구성된 데이터 처리장치.
- 복수의 서로 다른 소프트웨어 계층 레벨들에 대응하여 프로그램 명령들을 실행하도록 구성된 데이터 처리장치 내부에서의 디버그 연산의 개시를 제어하는 방법으로서, 상위의 소프트웨어 계층 레벨이 하위의 소프트웨어 계층 레벨보다 더 큰 특권을 갖는 레벨로서, 상기 상위의 소프트웨어 계층 레벨로부터 액세스될 수 있지만 상기 하위의 소프트웨어 계층 레벨로부터 액세스될 수 없는 적어도 일부의 데이터 기억 장소들이 존재하고, 상기 제어방법은,
상기 데이터 처리장치가 임계 코드를 실행하는 것에 응답하여, 상기 데이터 처리장치 내부의 데이터 기억장치에서 현재 디버그 예외 마스크 값을 제 1 값으로 설정하고, 상기 임계 코드의 실행 종료시, 상기 현재 디버그 예외 마스크 값을 리셋하여 상기 제 1 값을 기억하지 않도록 하는 단계와,
상기 현재 디버그 예외 마스크 값이 상기 제 1 값으로 설정되지 않으면, 소프트웨어가 현재 동작하고 있는 레벨과 동일한 계층 레벨에서 디버그 소프트웨어가 실행될 때 디버그 예외가 취해질 수 있도록 허용하고, 상기 현재 디버그 예외 마스크 값이 상기 제 1 값으로 설정되면 상기 디버그 예외가 취해지는 것을 허용하지 않도록 하는 단계와,
상기 디버그 소프트웨어가 소정의 상위의 소프트웨어 계층 레벨에서 실행될 때 디버그 예외가 취해질 수 있도록 허용하는 단계를 포함하는, 디버그 연산 개시 제어방법.
- 제 16항에 있어서,
상기 데이터 처리장치는 상태 표시자들을 기억하는 상태 기억 영역을 구비하고, 상기 상태 표시자들 중에서 적어도 한 개는 상기 소프트웨어 계층 레벨들 중에서 적어도 한 개에 대응하는 디버그 허용 상태 표시자를 포함하고,
상기 소정의 소프트웨어 계층 레벨에서 명령을 실행할 때,
상기 소정의 소프트웨어 계층 레벨에 대한 상기 디버그 허용 상태 표시자가 소정의 허용값으로 설정되고 상기 현재 디버그 예외 마스크 값이 상기 제 1 값으로 설정되지 않은 경우에는, 상기 예외가 취해질 수 있도록 허용하고,
상기 상태 표시자가 상기 소정의 허용값으로 설정되지 않거나 상기 현재 디버그 예외 마스크 값이 상기 제 1 값으로 설정되는 경우에, 상기 예외가 취해지는 것을 허용하지 않는 디버그 연산 개시 제어방법.
- 데이터 프로세서 상에서 실행될 때 작동되어 청구항 16 또는 17에 기재된 방법의 단계들을 수행하도록 데이터 프로세서를 제어하는 컴퓨터 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체.
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1101490.9 | 2011-01-28 | ||
GB1101490.9A GB2487575B (en) | 2011-01-28 | 2011-01-28 | Controlling generation of debug exceptions |
PCT/GB2012/050115 WO2012101425A1 (en) | 2011-01-28 | 2012-01-19 | Controlling generation of debug exceptions |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20140005978A KR20140005978A (ko) | 2014-01-15 |
KR102003663B1 true KR102003663B1 (ko) | 2019-07-25 |
Family
ID=43824737
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020137021708A KR102003663B1 (ko) | 2011-01-28 | 2012-01-19 | 디버그 예외 생성 제어 |
Country Status (9)
Country | Link |
---|---|
US (1) | US8713371B2 (ko) |
EP (1) | EP2668578B1 (ko) |
JP (1) | JP5905904B2 (ko) |
KR (1) | KR102003663B1 (ko) |
GB (1) | GB2487575B (ko) |
IL (1) | IL227320A (ko) |
MY (1) | MY159188A (ko) |
TW (1) | TWI544330B (ko) |
WO (1) | WO2012101425A1 (ko) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9244814B1 (en) * | 2013-06-25 | 2016-01-26 | Cadence Design Systems, Inc | Enriched log viewer |
KR101479516B1 (ko) * | 2014-03-05 | 2015-01-07 | 소프트포럼 주식회사 | 소스코드 보안 약점 탐지 장치 및 방법 |
GB2530050B (en) * | 2014-09-10 | 2021-07-21 | Advanced Risc Mach Ltd | Debugging in a data processing apparatus |
GB2532777B (en) | 2014-11-28 | 2021-07-07 | Advanced Risc Mach Ltd | System error handling in a data processing apparatus |
GB2535213B (en) | 2015-02-13 | 2021-10-06 | Advanced Risc Mach Ltd | An apparatus and method for controlling debugging of program instructions including a transaction |
GB2535212B (en) | 2015-02-13 | 2021-08-04 | Advanced Risc Mach Ltd | An apparatus and method for controlling debugging of program instructions including a transaction |
US9996448B2 (en) | 2016-02-25 | 2018-06-12 | Red Hat Israel Ltd | Breakpoint insertion into kernel pages |
US10169106B2 (en) | 2016-06-30 | 2019-01-01 | International Business Machines Corporation | Method for managing control-loss processing during critical processing sections while maintaining transaction scope integrity |
US10394641B2 (en) * | 2017-04-10 | 2019-08-27 | Arm Limited | Apparatus and method for handling memory access operations |
US10452516B2 (en) * | 2017-07-10 | 2019-10-22 | Microsoft Technology Licensing, Llc | Replaying time-travel traces relying on processor undefined behavior |
JP7076014B2 (ja) * | 2018-05-29 | 2022-05-26 | ライン プラス コーポレーション | プログラム保護のためのJavaデバッガ遮断方法およびシステム |
KR102623022B1 (ko) * | 2018-06-08 | 2024-01-09 | 라인플러스 주식회사 | 프로그램 보호를 위한 디버거 차단 방법 및 시스템 |
GB2581821B (en) * | 2019-02-28 | 2021-06-30 | Advanced Risc Mach Ltd | Conditional yield to hypervisor instruction |
US11734457B2 (en) * | 2019-12-23 | 2023-08-22 | Intel Corporation | Technology for controlling access to processor debug features |
GB2622801A (en) * | 2022-09-28 | 2024-04-03 | Advanced Risc Mach Ltd | Exception control |
US12093164B1 (en) * | 2023-02-24 | 2024-09-17 | Microsoft Technology Licensing, Llc | Efficiently replacing software breakpoint instructions in processor-based devices |
US20240291495A1 (en) * | 2023-02-27 | 2024-08-29 | Microsoft Technology Licensing, Llc | Phase-locked loops (pll), including time-to-digital converter (tdc) gain calibration circuits and related methods |
CN117993337A (zh) * | 2024-03-12 | 2024-05-07 | 沐曦科技(成都)有限公司 | 一种rtl静态验证系统 |
CN118277265A (zh) * | 2024-04-09 | 2024-07-02 | 沐曦科技(成都)有限公司 | 一种图形验证系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080082802A1 (en) | 2006-09-29 | 2008-04-03 | Shinya Muramatsu | Microcomputer debugging system |
JP2008097602A (ja) | 2006-10-10 | 2008-04-24 | Internatl Business Mach Corp <Ibm> | 仮想マシンのための多数コンフィギュレーションによる通信管理のためのシステム、方法、およびプログラム |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5390310A (en) | 1991-09-30 | 1995-02-14 | Apple Computer, Inc. | Memory management unit having cross-domain control |
JP3678759B2 (ja) | 1992-07-21 | 2005-08-03 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド | 割込を発生するための装置および割込を発生するための方法 |
US5491793A (en) * | 1992-07-31 | 1996-02-13 | Fujitsu Limited | Debug support in a processor chip |
US5809293A (en) * | 1994-07-29 | 1998-09-15 | International Business Machines Corporation | System and method for program execution tracing within an integrated processor |
US5574786A (en) | 1995-02-06 | 1996-11-12 | International Business Machines Corporation | Securing trusted personal computer system against unauthorized movement |
US6249881B1 (en) * | 1997-07-01 | 2001-06-19 | National Semiconductor Corporation | Method for enabling and servicing critical interrupts while running an interrupt based debug monitor |
US6282657B1 (en) * | 1997-09-16 | 2001-08-28 | Safenet, Inc. | Kernel mode protection |
FI108478B (fi) | 1998-01-21 | 2002-01-31 | Nokia Corp | Sulautettu jõrjestelmõ |
JP2000076087A (ja) | 1998-08-28 | 2000-03-14 | Hitachi Ltd | マルチオペレーティングシステム制御方法 |
CA2309627A1 (en) | 1998-09-25 | 2000-04-06 | Hughes Electronics Corporation | An apparatus for providing a secure processing environment |
US6173386B1 (en) * | 1998-12-14 | 2001-01-09 | Cisco Technology, Inc. | Parallel processor with debug capability |
US6604123B1 (en) | 1999-02-23 | 2003-08-05 | Lucent Technologies Inc. | Operating system transfer of control and parameter manipulation using portals |
JP3659062B2 (ja) | 1999-05-21 | 2005-06-15 | 株式会社日立製作所 | 計算機システム |
JP4260984B2 (ja) | 1999-06-04 | 2009-04-30 | 株式会社東芝 | 情報処理装置および情報処理方法 |
JP3801833B2 (ja) | 2000-02-14 | 2006-07-26 | 株式会社東芝 | マイクロプロセッサ |
US6842811B2 (en) | 2000-02-24 | 2005-01-11 | Pts Corporation | Methods and apparatus for scalable array processor interrupt detection and response |
EP1162536A1 (en) | 2000-06-09 | 2001-12-12 | Hitachi, Ltd. | Multiple operating system control method |
US6981153B1 (en) | 2000-11-28 | 2005-12-27 | Xilinx, Inc. | Programmable logic device with method of preventing readback |
JP2002318700A (ja) | 2001-04-19 | 2002-10-31 | Hitachi Ltd | 仮想計算機システムの運用管理情報提供制御方法および仮想計算機システム |
US6883162B2 (en) | 2001-06-06 | 2005-04-19 | Sun Microsystems, Inc. | Annotations for transaction tracing |
DE10136335B4 (de) | 2001-07-26 | 2007-03-22 | Infineon Technologies Ag | Prozessor mit mehreren Rechenwerken |
GB0124563D0 (en) * | 2001-10-12 | 2001-12-05 | Siroyan Ltd | Debug exception registers |
US7272832B2 (en) * | 2001-10-25 | 2007-09-18 | Hewlett-Packard Development Company, L.P. | Method of protecting user process data in a secure platform inaccessible to the operating system and other tasks on top of the secure platform |
US7350110B2 (en) | 2002-01-14 | 2008-03-25 | International Business Machines Corporation | Method and system using hardware assistance for continuance of trap mode during or after interruption sequences |
GB2411254B (en) | 2002-11-18 | 2006-06-28 | Advanced Risc Mach Ltd | Monitoring control for multi-domain processors |
JP2005128773A (ja) * | 2003-10-23 | 2005-05-19 | Toshiba Corp | マイクロプロセッサ及びコンパイル方法 |
JP4222370B2 (ja) * | 2006-01-11 | 2009-02-12 | セイコーエプソン株式会社 | デバッグ支援装置及びデバッグ処理方法をコンピュータに実行させるためのプログラム |
US20080034193A1 (en) | 2006-08-04 | 2008-02-07 | Day Michael N | System and Method for Providing a Mediated External Exception Extension for a Microprocessor |
-
2011
- 2011-01-28 GB GB1101490.9A patent/GB2487575B/en active Active
- 2011-11-15 US US13/296,445 patent/US8713371B2/en active Active
- 2011-12-28 TW TW100149239A patent/TWI544330B/zh active
-
2012
- 2012-01-19 MY MYPI2013701217A patent/MY159188A/en unknown
- 2012-01-19 WO PCT/GB2012/050115 patent/WO2012101425A1/en active Application Filing
- 2012-01-19 JP JP2013550946A patent/JP5905904B2/ja active Active
- 2012-01-19 EP EP12703565.7A patent/EP2668578B1/en active Active
- 2012-01-19 KR KR1020137021708A patent/KR102003663B1/ko active IP Right Grant
-
2013
- 2013-07-04 IL IL227320A patent/IL227320A/en active IP Right Grant
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080082802A1 (en) | 2006-09-29 | 2008-04-03 | Shinya Muramatsu | Microcomputer debugging system |
JP2008097602A (ja) | 2006-10-10 | 2008-04-24 | Internatl Business Mach Corp <Ibm> | 仮想マシンのための多数コンフィギュレーションによる通信管理のためのシステム、方法、およびプログラム |
Also Published As
Publication number | Publication date |
---|---|
GB201101490D0 (en) | 2011-03-16 |
GB2487575B (en) | 2017-04-12 |
EP2668578A1 (en) | 2013-12-04 |
EP2668578B1 (en) | 2017-12-06 |
IL227320A0 (en) | 2013-09-30 |
JP5905904B2 (ja) | 2016-04-20 |
TWI544330B (zh) | 2016-08-01 |
IL227320A (en) | 2017-04-30 |
GB2487575A (en) | 2012-08-01 |
CN103339614A (zh) | 2013-10-02 |
US20120198278A1 (en) | 2012-08-02 |
TW201234175A (en) | 2012-08-16 |
MY159188A (en) | 2016-12-30 |
JP2014507720A (ja) | 2014-03-27 |
US8713371B2 (en) | 2014-04-29 |
WO2012101425A1 (en) | 2012-08-02 |
KR20140005978A (ko) | 2014-01-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102003663B1 (ko) | 디버그 예외 생성 제어 | |
US7536605B2 (en) | Injection of software faults into an operational system | |
US7711914B2 (en) | Debugging using virtual watchpoints | |
JP2002268914A (ja) | 特権命令の実行を監視する方法 | |
KR101019209B1 (ko) | 임베디드 소프트웨어의 인터페이스 자동 추출 장치 및 그방법 | |
KR102025078B1 (ko) | 단일 스텝 실행을 이용한 코드 진단 | |
US7765526B2 (en) | Management of watchpoints in debuggers | |
US20160055333A1 (en) | Protecting software application | |
EP2996043B1 (en) | Debugging in a data processing apparatus | |
US9176821B2 (en) | Watchpoint support system for functional simulator | |
KR101861952B1 (ko) | 소프트웨어 브레이크 포인트를 무력화시키기 위한 안티 디버깅 방법 및 장치 | |
US7657792B2 (en) | Identifying race conditions involving asynchronous memory updates | |
US20240289257A1 (en) | Method for testing a computer program | |
US8612720B2 (en) | System and method for implementing data breakpoints | |
Allende et al. | Towards linux for the development of mixed-criticality embedded systems based on multi-core devices | |
CN114282206A (zh) | 栈溢出检测方法、装置、嵌入式系统和存储介质 | |
Haworth | An AUTOSAR-compatible microkernel for systems with safety-relevant components | |
CN114282275A (zh) | 模式切换方法、装置、嵌入式系统和存储介质 | |
CN103339614B (zh) | 控制调试异常的产生 | |
CN118672894A (zh) | 用于测试计算机程序的方法 | |
Tröger | Software-Implemented Fault Injection in the HPI FutureSOC Lab | |
JP2002091826A (ja) | 情報処理装置 | |
GR20180200121U (el) | Διαχειριση εξαιρεσεων σε συναλλαγες |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right |