KR102025078B1 - 단일 스텝 실행을 이용한 코드 진단 - Google Patents

단일 스텝 실행을 이용한 코드 진단 Download PDF

Info

Publication number
KR102025078B1
KR102025078B1 KR1020137025702A KR20137025702A KR102025078B1 KR 102025078 B1 KR102025078 B1 KR 102025078B1 KR 1020137025702 A KR1020137025702 A KR 1020137025702A KR 20137025702 A KR20137025702 A KR 20137025702A KR 102025078 B1 KR102025078 B1 KR 102025078B1
Authority
KR
South Korea
Prior art keywords
instruction
type
diagnostic
exception
processor
Prior art date
Application number
KR1020137025702A
Other languages
English (en)
Other versions
KR20140013005A (ko
Inventor
마이클 존 윌리암스
리차드 로이 그리센드와이트
Original Assignee
에이알엠 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 에이알엠 리미티드 filed Critical 에이알엠 리미티드
Publication of KR20140013005A publication Critical patent/KR20140013005A/ko
Application granted granted Critical
Publication of KR102025078B1 publication Critical patent/KR102025078B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/2205Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested
    • G06F11/2236Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested to test CPU or processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3632Software debugging of specific synchronisation aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3648Software debugging using additional hardware

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)
  • Debugging And Monitoring (AREA)

Abstract

명령어들로 이루어진 스트림을 처리하는 프로세서를 진단하는 방법 및 장치가 개시되어 있다. 상기 방법은, (i) 단일 스텝 모드에서 상기 명령어 스트림으로부터의 단일 명령어가 실행되도록 상기 프로세서를 제어하여 실행하는 스텝 - 상기 프로세서는, 상기 단일 명령어가 적어도 하나의 소정의 타입의 명령어 중 하나이고 데이터 기억 장소에 타입 지시자를 기억하고, 상기 프로세서가 상기 단일 명령어를 처리한 후에 진단 예외를 두었는지를 판정한다 -; (ii) 상기 데이터 기억장소에 기억된 상기 타입 지시자에 액세스하는 것; 및 (iiia) 상기 단일 명령어가 상기 소정의 타입 중 하나가 아니었던 것을 가리키는 상기 타입 지시자에 응답하여, 상기 단일 스텝 모드에서, 상기 진단 예외로부터의 귀환시에 다음의 단일 명령어를 실행하도록 상기 프로세서를 제어하여 명령어들을 계속 실행하는 것; (iiib) 상기 단일 명령어가 상기 적어도 하나의 소정의 타입 중 하나이었던 것을 가리키는 상기 타입 지시자에 응답하여, 상기 프로세서를 제어하여 상기 단일 스텝 모드를 빠져나가고 단일 명령어를 행한 후에 진단 예외로서 상기 명령어 스트림내에서 상기 다음의 명령어를 실행하지 않는 것을, 포함하는 상기 진단 예외에 뒤따르는 진단동작을 행하는 스텝을 포함한다.

Description

단일 스텝 실행을 이용한 코드 진단{DIAGNOSING CODE USING SINGLE STEP EXECUTION}
본 발명의 분야는, 데이터 처리에 관한 것으로, 특히 데이터 처리장치의 진단동작을 행하는 것에 관한 것이다.
하드웨어, 운영체계, 어플리케이션 프로그램, 시스템 설계 전반 등의 개발을 돕도록 데이터 처리 시스템에 대해 진단동작(예를 들면, 소프트웨어 및 하드웨어 결함 식별 및 분석(디버그))을 행하는데 사용될 수 있는 진단 메카니즘을 구비한 데이터 처리 시스템을 제공하는 것이 알려져 있다.
데이터 처리 시스템을 분석할 때, 데이터 처리 시스템에 대해 행해지는 진단동작을 특정하는 제어신호들이 호스트 시스템으로부터 대상 시스템으로 전달하도록, 분석되는 상기 대상 시스템에 접속된 상기 호스트 시스템에 대해 가동된 디버그 프로그램을 포함하는 외부 디버거를 사용해도 된다.
외부 디버거에는, 디버그 하드웨어를 프로그래밍하는데 사용되는 외부 포트를 거쳐 상기 대상에 접속되는 디버거가 있다. 프로세서는, 진단 예외라고 생각되는 디버그 이벤트에 의해 상기 외부 디버거가 데이터 처리장치에 질문하여 제어하는 특수 디버그 상태로 들어가도록 구성된다.
또는, 디버깅중의 대상에 대해 디버그 모니터 소프트웨어를 실행하는, 셀프 호스트 디버그 시스템이 있어도 된다. 이러한 경우에, 상기 프로세서는, 디버그 이벤트가 디버깅중의 소프트웨어를 중단시키고 상기 디버그 모니터 소프트웨어를 제어시키는 진단 예외의 원인이 되도록 구성된다. 유용한 진단 도구는, 하나의 프로그램에 의해 단일의 스텝에 대해 프로세서를 제어할 수 있다. 이에 따라, 필요한 경우, 상기 시스템의 상태가 과정의 각 스텝에서 분석될 수 있다. 단일 스텝 모드에서, 상기 프로세서는, 하나의 명령어를 실행하고 나서 진단 예외를 두며, 상기 프로세서의 상태를 분석할 수 있는 디버그 소프트웨어에 제어를 전달할 것이다. 상기 진단 예외로부터 귀환할 때, 상기 프로세서는 다음의 명령어를 실행하고나서 다음의 진단 예외를 둘 것이다. 이렇게 하여, 상기 디버그 소프트웨어는, 프로그램 전체 또는, 상기 시스템을 분석하는 사람에 대해 주목하는 일부를 통해서만 단일 스텝로 상기 프로세서를 제어하여도 된다.
코드에 의해 단일 스텝을 행할 때 일어날 수 있는 문제의 하나는, 명령어간에 예외를 두는 경우 실행 경로가 다른 코드에 부딪히는 경우이다. 이것은, 상기 다른 실행 경로가 무한루프를 수반하는 경우 특히 곤란할 수 있다. 예를 들면, 배타적 모니터를 요구하려고 하는 명령어. 상기 코드가 상기 배타적 모니터를 요구할 때 계속되면, 그 코드는 특별한 기억장소에 배타적으로 액세스하여 데이터를 기억될 수 있다. 따라서, 상기 배타적 모니터를 요구하기 위해서, 상기 기억장소의 현재값으로 되돌아가는 것과, 특별한 기억장소에 현재 실행중인 상기 명령어 스트림이 배타적으로 액세스하는 것을 나타내도록 상기 배타적 모니터를 설정하는 것을 행하는, 특수한 로드(load) 배타적 명령어를 사용한다. 그 후, 이러한 기억장소에 데이터를 기억하기 위해 스토어(store) 배타적 명령어를 실행할 수 있다. 그러나, 코드에 의한 단일 스텝을 행하는 경우에, 상기 배타적 모니터가 그것을 실행함으로써 요구되어 있다면, 진단 예외가 두어지고, 이 예외로부터 되돌아올 때 예외 핸들러는, 상기 배타적 모니터를 클리어한다. 이것은, 예외를 둘 때 상기 예외 핸들러가 이미 실행하고 있었던 코드에는 되돌아가지 않아도 되지만 다른 코드에는 되돌아가므로, 상기 배타적 모니터가 상기 실행되는 다음의 명령어 스트림이 상기 기억장소에 배타적으로 액세스하지 않음에 따라 끌리어 되어야 하기 때문이다.
그러나, 상기 스토어 배타적 명령어에 도달할 때 상기 배타적 모니터를 클리어 하는 단일 스텝에서, 배타적 모니터를 요구하는 스텝들에의 귀환을 일으키는 것이 실패하여, 그것을 요구한 후 예외 귀환에 의해 클리어 하였으므로, 단일 스텝에서는 상기 스토어 배타적 명령어를 반복적으로 실패하여 상기 프로그램이 결코 진척되지 않을 것이다.
아래에는 이러한 문제를 갖는 코드의 일례를 나타낸다.
Figure 112013088261890-pct00001

스텝모드에서, 이들과 같은 블록의 장소를 판정하도록 명령어를 스캐닝한 후 그 코드에 의해 스테핑함으로써 파워 및 MIPS 아키텍처용 GDB에서 공지되어 어드레싱될 때, 예외 핸들러가, 진단 예외로부터의 귀환시에 상기 배타적 모니터나 록(lock) 장소를 클리어하고, 또한, 이 코드에서 무한루프를 일으키는 문제. 그것들이 식별되어 있었다면, 코맨드까지의 일 스텝이 사용됨으로써, 이 경우에 상기 스토어 배타적 명령어 후에 중지점을 설정하고, 이 블록에서 상기 명령어들간에 예외를 두지 않고, 상기 록 장소는 상기 예외 핸들러에 의해 클리어 되지 않는다.
이 해결책의 단점은, 모든 코드를 조사하여 문제가 있는 코드를 식별할 필요가 있다는 것이다. 이것은, 상기 진단 시스템이, 명령어 스트림의 실행을 제어하고 있는 운영체계로 진행하여 상기 코드를 페치(fetch)하도록 물어봐서 분석할 수 있을 필요가 있으므로, 상당한 오버헤드를 갖는다. 진단장치가 데이터 처리장치에서 멀리 떨어진 경우, 상기 오버헤드가 상당히 높을 것이다.
파워는, (파워 아키텍처에서의 트레이스 예외라고 불리는) 스텝 예외를 두어 상기 프로세서의 상태에의 귀환이 허용될 때 그 상태에 대한 정보를 기억하는 신드롬 레지스터를 이용하는 것을 나타낸다. 기억하는 하나의 정보는, 로드 배타적 명령어가 실행되어 있고 장소가 상기 예외를 두기 전에 잠긴 것을 가리키는 지시자다. 이 값이 어떻게 사용되는지에 관한 정보가 없다.
명령어간의 예외를 두어서 변경하는 실행 경로를 갖는 타입의 코드가 있는 경우도 단일 스텝 과정을 사용하여 코드를 진단할 수 있는 것이 바람직할 것이다.
본 발명의 제1 국면은, 명령어들로 이루어진 스트림을 처리하는 프로세서를 진단하는 방법을 제공한다: (i) 단일 스텝 모드에서 상기 명령어 스트림으로부터의 단일 명령어가 실행되도록 상기 프로세서를 제어하여 실행하는 스텝 - 상기 프로세서는, 상기 단일 명령어가 적어도 하나의 소정의 타입의 명령어 중 하나이고 데이터 기억 장소에 타입 지시자를 기억하고, 상기 프로세서가 상기 단일 명령어를 처리한 후에 진단 예외를 두었는지를 판정한다 -; (ii) 상기 데이터 기억장소에 기억된 상기 타입 지시자에 액세스하는 것을 포함하는 상기 진단 예외에 뒤따르는 진단 동작을 행하는 스텝; 및 (iiia) 상기 단일 명령어가 상기 소정의 타입 중 하나가 아니었던 것을 가리키는 상기 타입 지시자에 응답하여, 상기 단일 스텝 모드에서, 상기 진단 예외로부터의 귀환시에 다음의 단일 명령어를 실행하도록 상기 프로세서를 제어하여 명령어들을 계속 실행하는 스텝; (iiib) 상기 단일 명령어가 상기 적어도 하나의 소정의 타입 중 하나이었던 것을 가리키는 상기 타입 지시자에 응답하여, 상기 프로세서를 제어하여 상기 단일 스텝 모드를 빠져나가고 단일 명령어를 행한 후에 진단 예외로서 상기 명령어 스트림내에서 상기 다음의 명령어를 실행하지 않는 스텝을 포함한다.
본 발명으로 인식한 것은, 코드에 의해 단일 스테핑을 할 때 문제가 생길 수 있고, 단일 스테핑이 적절하지 않고 그 단일 스테핑을 억제하는지를 판정하는 것이 이로운 경우도 있다는 것이다. 예를 들면, 상기 명령어들의 스트림은, 그 스트림내의 나중의 명령어에 의해 취해진 실행 경로가 상기 명령어간에 예외를 두어서 변경되고, 단일 스테핑이 상기 코드의 실행을 분석하는 적정한 방식이 아니고 억제되어야 하는, 명령어를 포함한다. 또한, 본 발명으로 인식한 것은, 이것은, 예외를 둠으로써 상기 코드를 기동하여 무한 루프에 들어가는 경우 특별한 문제일 수 있다는 것이다. 본 발명은, 실행중 명령어가 소정의 타입을 갖는지를 판정하여, 소정의 타입을 갖는 경우, 단일 스테핑으로 계속되지 않고 오히려 다른 과정을 행함으로써 상기 문제를 해결한다. 여러 가지의 경우에 있어서, 상기 명령어의 타입이 소정의 타입인지의 여부는 실행중에 판정될 수 있고, 단일 스테핑은 적절한 경우에 억제될 수 있다.
일부의 실시예들에서, 상기 스텝(iiib)는, 상기 프로세서를 제어하여 상기 예외로부터의 귀환시에 상기 명령어 스트림내의 복수의 명령어를 실행하는 것을 포함한다.
상기 실행 경로를 변경하는 명령어들간의 예의 문제를 해결하기 위해서, 예외 발생없이 모두 순차로 실행되도록 복수의 명령어들의 단일 스텝 모드를 억제하는 것이 적절하기도 하다. 상기 순차로 실행되는 명령어의 수는 상기 코드에 따라 선택될 수 있고, 단일 스텝 모드는 그 코드에 적절한 명령어 스트림에서의 일 포인트에서 귀환될 수 있다.
일부의 실시예들에서, 상기 복수의 명령어는, 상기 명령어 스트림에서 상기 실행된 단일 명령어 다음에 복수의 명령어를 포함한다.
상기 예외로부터의 귀환시에 실행된 상기 복수의 명령어는, 상기 명령어 스트림에서 상기 실행된 단일 명령어 다음의 명령어이어도 된다. 또는, 실행되었던 상기 명령어는 일부의 후속하는 명령어와 함께 다시 실행되는 것일 수도 있다. 후자는, 이러한 명령어를 재실행하는 것이 가능하다고 판정될 경우만 가능하다. 일부의 경우에, 이것은 가능하지 않을 수도 있다. 그러나, 그것이 가능한 경우, 그것을 명령어 없이 다시 실행한 후 예외가 바람직하기도 하다.
일부의 실시예들에서, 상기 단일 명령어가 상기 적어도 하나의 소정의 타입 중 하나이었던 것을 가리키는 상기 타입 지시자에 응답하여, 상기 적어도 하나의 중지점에 도달될 때까지 상기 복수의 명령어가 실행되도록 상기 명령어 스트림내에 적어도 하나의 중지점을 설정하고, 상기 적어도 하나의 중지점에 도달하는 것에 응답하여 진단 중지점 예외를 두는 또 다른 스텝이 있다. 상기 소정의 타입의 명령어가 검출될 때, 일부의 실시예들에서, 중지점은 상기 소정의 타입의 명령어에 후속하는 코드에서의 일 포인트에 설정될 수 있다. 그리고, 단일 스텝 모드를 일시 중지하고(suspend), 상기 명령어를 상기 중지점에 도달될 때까지 실행하고 나서, 중지점 진단 예외를 둔다. 이것에 응답하여 상기 프로세서는, 해당될 경우, 단일 스텝 모드에 귀환하여도 되거나, 또는 또 다른 중지점이 설정되어도 되거나 시험중 상기 코드의 끝에 도달되었을 가능성도 있다.
일부의 실시예들에서, 상기 스텝(iiib)은, 상기 명령어 스트림에서 상기 실행된 단일 명령어와 적어도 하나의 이후의 명령어를 에뮬레이트하고나서, 상기 프로세서를 제어하여, 에뮬레이트된 상기 적어도 하나의 이후의 명령어에 후속하는 상기 명령어 스트림내에서의 명령어로부터 상기 단일 스텝 모드를 시작하는 것을 포함한다.
일부의 실시예들에서, 상기 명령어를 실행하는 대신에, 그들은 예를 들면 진단장치에 의해 에뮬레이트될 수도 있고, 이들의 에뮬레이트된 명령어가 실행되고 있었다면, 상기 프로세서는 명령어 스트림에서 적절한 명령어로부터 단일 스텝 모드를 재시작하도록 제어될 수 있다. 에뮬레이트된 명령어들은, 각 명령어간에 취해진 진단 예외가 상기 명령어 스트림이 진행되는 모양을 변경하지 않을 일 명령어로부터 단일 스텝 모드를 재시작하도록 선택된다.
일부의 실시예들에서, 상기 데이터 기억장소에 기억된 상기 타입 지시자는, 상기 명령어가 상기 소정의 타입의 하나이었거나 상기 명령어가 상기 소정의 타입의 하나가 아니었거나, 또는 상기 명령어가 미지의 타입인 것을 가리키고, 여기서, 상기 타입 지시자를 액세스하는 상기 스텝에서 상기 타입 지시자가 상기 타입이 미지인 것을 가리킨다고 판정되는 경우에, 상기 단일 명령어를 검사하고 상기 단일 명령어가 상기 소정의 타입인지를 판정하는 추가의 스텝이 행해진다.
상기 타입 지시자는 상기 명령어가 소정의 타입인지 아닌지를 가리키긴 했지만, 상기 명령어가 미지일 때 소정의 타입인지 아닌지를 가리키기도한다. 후자의 경우에, 상기 방법은 상기 명령어를 검사하여 무슨 타입인지를 판정한다. 이것은, 상기 명령어가 분석될 수 있도록 페치될 필요가 있기도 하다. 이러한 스텝은 그것과 관련된 지연 오버헤드를 갖긴 하지만, 상기 미지의 타입을 가리키기 때문에, 전체 진단방법을 부당하게 행하는 상기 오버헤드를 증가시키지 않는 경우들의 수는 적을 뿐이다.
일부의 실시예들에서, 상기 타입 지시자는 2개의 지시자 값을 포함하되, 첫 번째 값은 상기 명령어가 상기 소정의 타입인지 아닌지를 가리키고, 두 번째 유효값은 상기 첫 번째 값이 유효한지를 가리키되, 상기 두 번째 유효값은 상기 명령어가 상기 미지의 타입을 갖는 것을 가리키는 무효다.
상기 타입은 2개의 값, 또는 2개의 비트, 즉 하나는 타입을 가리키고, 유효 비트인 나머지는 상기 타입 비트가 무효일 때, 달리 말하면, 상기타입이 미지일 때를 가리키는 것을 이용하여 표시하여도 된다. 이것은, 상기 타입 값이 상기 유효 비트에 더 이상 좌우될 수 없다는 것을 의미하는 상황이 일어날 때와 같이 상기 값들이 간단히 무효로 설정될 수 있는 것을 나타내는 편리한 방식일 수 있다.
그 밖의 실시예에서, 타입의 표시는 단일 값이어도 된다. 일부의 실시예에서, 이 값은, 진단 예외를 둔 타입의 표시를 더 포함한다.
예를 들면, 그것은, 취해진 중지점이나 정지 리퀘스트 등의 진단 예외의 이유를 가리키기도 한다.
일부의 실시예들에서, 상기 다음의 진단 예외를 두기전에 상기 프로세서 플러싱(flushing) 상태에 응답하여, 상기 타입 지시자는 상기 실행된 명령어가 상기 미지의 타입을 갖는 것을 가리키도록 설정된다.
다음의 진단 예외를 두기전에 상기 프로세서의 상태를 출력하는 경우, 상기 명령어 타입은, 일부의 실시예에서는 상기 유효비트를 무효비트에 설정하여서 행해질 수 있는 미지로 설정되어야 한다. 그 상태의 플러싱은 파이프라인형 프로세서에서 파이프라인의 플러싱에 응답하여, 플러시 명령어에 응답하기도 하여 일어날 수도 있다.
일부의 실시예들에서, 상기 방법은, 상기 단일 명령어 스텝 진단방법을 행하는 것을 가리키는 단일 명령어 스텝 제어값을 설정하고, 상기 명령어 스트림에서의 단일 명령어를 실행한 후 다음의 진단 예외를 두는 것을 가리키는 스텝 지시자 값을 설정하는, 초기스텝을 포함한다.
상기 단일 스텝 모드는, 기억된 제어값이 설정될 때 상기 프로세서가 단일 스텝모드에서 작동하고 있는 것과, 각 명령어를 실행한 후 진단 예외를 두어야 하는 것을 알도록, 상기 기억된 제어값으로 나타내어질 수도 있다. 또한, 하나의 값, 예를 들면, 하나의 스텝이 실행될 것을 가리키는 1로 설정되고, 명령어를 처리하였을 때 또 하나의 값, 예를 들면, 또 다른 명령어를 다음의 진단 예외를 두기전에 실행하지 않은 것을 가리키는 0으로 설정되는, 스텝 지시자 값이 존재하기도 한다.
일부의 실시예들에서, 제로 명령어를 실행한 후 다음의 진단 예외를 두는 것을 가리키는 상기 스텝 지시자 값에 응답하여, 상기 타입 지시자는 상기 다음의 진단 예외를 둘 때 미지의 타입으로 설정된다.
상기 스텝 지시자 값은, 단일 스텝 모드동안에 진단 예외가 아닌 예외를 두었을 경우에 유용할 수 있다. 이러한 경우, 상기 스텝 지시자에서의 값은, 상기 예외로부터의 귀환시 명령어가 실행되어야 하는지의 여부나 즉 상기 진단 예외를 두어야 하는지의 여부를 가리킨다. 게다가, 실행될 제로 명령어를 가리키도록 설정되는 경우, 이것은, 상기 명령어를 실행한 후이지만 이후의 진단 예외를 둔 예외를 둔 것을 가리키고, 이 경우에, 상기 예외를 두는 것이 상기 타입 지시자를 변경하였을 수도 있으므로 상기 명령어를 미지의 타입으로 설정하는 경우에 바람직하다.
소정의 타입의 명령어가 다수의 사항이기도 하였지만, 일부의 실시예에서 상기 적어도 하나의 소정의 타입의 명령어의 하나는, 상기 명령어에 후속하는 예외를 실행함으로써 상기 명령어 스트림에서의 적어도 하나의 이후의 명령어가 다르게 실행되기도 한다. 특히, 여기서, 상기 소정의 타입은, 상기 진단 예외에 들어가거나 그 진단 예외로부터의 귀환시에 예외 핸들러에 의해 행해진 동작들이, 상기 명령어 스트림에서의 이후의 명령어가 다르게 실행되도록 상기 프로세서를 구비한 상기 장치의 상태를 변경하는, 명령어의 타입을 포함한다. 이러한 명령어들은, 단일 스텝 모드에서 분석하는데 적절하지 않다.
예외가 원래의 명령어 스트림의 실행 경로를 변경하는 명령어는, 단일 스텝 모드에서 분석에 적절하지 않기 때문에, 이들 명령어가 있는지를 판정하고나서 단일 스텝 모드를 억제할 수 있는 진단방법이 이롭다.
일부의 실시예들에서, 상기 적어도 하나의 소정의 타입의 명령어 중 하나는, 록 값과 클리어 값 중 하나를 기록하는 록 장소에 액세스하는 명령어를 포함하되, 상기 클리어 값은 프로세서가 소정의 기억장소에 기록할 수 있는 것을 가리키고, 상기 록 값은 상기 록 값을 기억한 프로세서의 상기 소정의 기억장소에의 배타적 기록 액세스를 가리킨다.
상기 예외로부터의 귀환시에, 명령어 스트림의 처리동안에 예외를 둘 때, 상기 프로세서는, 인터럽트된 포인트에서 실행을 재개하지 않고 다른 포인트에서 실행하기 시작하는, 예를 들면, 다른 어플리케이션으로부터 명령어를 실행하기를 시작하여도 된다. 따라서, 기억된 록 값이, 소정의 기억장소가 잠기고 상기 어플리케이션으로부터 상기 소정의 어드레스에의 배타적 스토어 액세스에 의해 기록될 수만 있는 것을 가리키는 록 장소가 존재하는 경우에, 상기 록 값은, 어떤 어플리케이션에서 같은 포인트에 상기 예외로부터 귀환되지 않고 상기 록 값이 실행되는 상기 다음의 명령어에 적절하지 않으므로, 상기 예외로부터의 귀환시에 클리어된다. 이에 따라 각 명령어간에 예외가 일어나는 스텝 모드에 문제가 생기기 때문에, 이러한 타입의 명령어가 스텝 모드를 빠져나가게 되는 상기 소정의 타입 중 하나인 경우에 바람직하다.
본 발명의 제2 국면은, 데이터 처리장치에 의해 실행될 때 본 발명의 제 1 국면에 따른 상기 방법의 스텝들을 상기 데이터 처리장치를 제어하여 실행시키는 컴퓨터 프로그램을 기억하는 컴퓨터 프로그램 제품을 제공한다.
본 발명의 제3 국면은, 명령어들로 이루어진 스트림을 처리하는 프로세서를 분석하는 진단장치를 제공하되, 이 진단장치는, 제어신호들을 상기 프로세서에 출력하는 출력부와 상기 프로세서로부터 데이터를 수신하는 입력부; 및 진단동작을 행하는 진단회로를 구비하고; 상기 진단회로는, 제어신호를 상기 프로세서에 출력하여, 명령어 스트림내의 단일 명령어를 실행하고나서 진단 예외를 두도록 상기 프로세서가 단일 스텝 모드에서 작동하는 것을 가리키는 지시자 값을 설정하도록 구성되고; 또한 상기 진단회로는, 상기 실행된 단일 명령어가 적어도 하나의 소정의 타입의 명령어 중 하나이었는지의 여부를 가리키는 타입 지시자를 기억하기 위한 기억장소에 액세스하도록 구성되고; 상기 실행된 단일 명령어가 상기 소정의 타입의 하나가 아니었던 것을 가리키는 상기 타입 지시자에 응답하여, 상기 진단회로는 상기 프로세서를 제어하여, 상기 예외로부터의 귀환시에 다음의 단일 명령어를 실행하도록 상기 단일 스텝 모드에서 상기 명령어를 계속 실행하도록 구성되고; 상기 실행된 단일 명령어가 상기 적어도 하나의 소정의 타입의 하나이었던 것을 가리키는 상기 타입 지시자에 응답하여, 상기 진단회로는, 상기 프로세서를 제어하여, 상기 단일 스텝 모드를 빠져나가고, 단일 명령어 후의 예외로서 상기 명령어 스트림내의 상기 다음의 명령어를 실행하지 않도록 구성된다.
본 발명의 제4 국면은, 명령어들로 이루어진 스트림을 처리하는 프로세서와 상기 프로세서를 분석하기 위한 본 발명의 제3 국면에 따른 진단장치를 구비한, 데이터 처리장치를 제공한다.
본 발명의 제5 국면은, 데이터를 처리하는 프로세서와 제어 데이터를 기억하는 복수의 기억장소를 구비한 데이터 처리장치를 제공하고; 적어도 하나의 기억장소는 단일 스텝 모드 제어값을 기억하고, 상기 데이터 처리장치는 단일 스텝 모드에서 명령어 스트림으로부터 명령어들을 실행하도록 설정되는 상기 단일 스텝 모드 제어값에 응답하여, 상기 명령어들 각각에 대한 실행 후 진단 예외를 두도록 구성되고; 상기 단일 스텝 모드 제어값이 설정될 때, 상기 프로세서가 실행한 명령어마다 적어도 하나의 소정의 타입의 명령어를 갖는지를 판정하여 하나의 상기 기억장소내에 타입 지시자를 기억하도록 구성되고, 상기 타입 지시자는, 상기 명령어가 상기 소정의 타입 중 하나이었거나, 상기 명령어가 상기 소정의 타입 중 하나가 아니었거나, 상기 명령어가 미지의 타입인 것을 가리킨다.
데이터 처리장치가 단일 스텝 모드로 실행할 때, 하나씩 명령어를 실행하고, 이 모드에서 매 명령어마다의 실행 후, 상기 데이터 처리장치의 상태가 분석될 수 있도록 진단 예외를 둔다. 이때, 상기 명령어의 실행중에 또 하나의 예외를 수신하여 먼저 예외를 둔다는 점에서, 하나의 명령어 실행 직후에 상기 진단 예외를 두지 않아도 된다. 그러나, 이 예외로부터의 귀환시에, 상기 명령어 스트림내의 상기 다음의 명령어가 실행되기 전에 진단 예외를 둔다. 이러한 본 발명의 국면에서, 상기 프로세서는, 실행된 단일 명령어마다, 그 명령어가 소정의 타입인지 아닌지를 판정하여, 소정의 타입인 경우, 그렇지 않은 경우, 또는 미지의 타입인 경우를 가리키는 타입 지시자를 기억한다.
일부의 실시예들에서, 상기 타입 지시자 스토어는, 상기 타입이 상기 소정의 타입인지 아닌지를 가리키는 첫 번째 값과, 상기 첫 번째 값이 유효한지 아닌지를 가리키는 두 번째 값으로 이루어진, 2개의 값에 대한 스토어를 포함하고, 상기 미지의 타입은 상기 첫 번째 값이 무효인 것을 가리키는 상기 두 번째 값으로 나타내어진다.
상기 타입 정보를 기억하는 편리한 방식은, 2개의 값, 상기 타입을 가리키는 첫 번째 값과, 상기 첫 번째 값이 유효한가의 여부, 즉 상기 타입이 기지 또는 미지인가의 여부를 가리키는 두 번째 값을 이용하고 있다. 그 값들이 2개의 값 중 하나를 각각 가질 수 있으므로, 그 값들은 단일 비트로 각각 나타내어질 수 있었다.
그 밖의 실시예들에서, 상기 타입 정보는, 단일 값이고, 일부의 실시예들에서는 예외를 둔 진단 예외의 타입의 표시를 더 포함한다. 예를 들면, 그것은, 상기 진단 예외의 이유를 가리키기도 함에 따라서, 이것은 상기 진단 예외가, 상기 소정의 타입의 명령어의 소프트웨어 스텝, 상기 소정의 타입이 아닌 명령어의 소프트웨어 스텝, 또는 취해진 중지점이나 정지 리퀘스트 등의 일부의 다른 디버그 이벤트에 기인하는 것일지도 모른다.
일부의 실시예들에서, 상기 데이터 처리장치는, 상기 다음의 진단 예외를 두기 전에 상기 프로세서 플러싱 상태에 응답하여, 상기 실행된 명령어의 타입이 미지인 것을 가리키기 위해 상기 타입 지시자를 설정하도록 구성된다.
일반적으로, 명령어를 실행할 때, 상기 프로세서는, 그 명령어가 상기 소정의 타입인지의 여부를 판정하여 이 정보를 기억할 수 있다. 그러나, 어떤 상황에서는, 상기 프로세서의 상태를 출력하고, 이 정보를 손실할 것이다. 따라서, 이러한 상황에서 중요한 것은, 상기 타입 지시자가 재인식되도록 미지의 타입으로 설정된다는 것이다. 상태의 플러쉬(flush)는, 예를 들면, 실행 중 또는 예외로부터의 귀환시에 명백한 플러쉬 명령어에 응답하여, 일어난다.
일부의 실시예들에서, 상기 기억장소 중 하나는, 하나 또는 제로 중 어느 한쪽의 명령어를 실행한 후 다음의 진단 예외를 두는 것을 가리키는 스텝 지시자 값을 기억하도록 구성되고, 상기 데이터 처리장치는, 제로인 상기 스텝 지시자 값에 응답하여 진단 예외를 둘 때 상기 타입 지시자를 미지의 타입으로 설정하도록 구성된다.
일부의 실시예들에서, 데이터 처리장치는, 상기 진단 예외를 두기전에 상기 단일 명령어 중 하나의 실행 후에 취해지는 예외에 응답하여, 상기 스텝 지시자 값을 제로로 설정하도록 구성되어, 상기 예외로부터의 귀환시에, 제로인 상기 스텝 지시자 값에 응답하여 명령어들을 실행하지 않고 보류 진단 예외를 둔다. 이점에서, 상기 타입 지시자는, 그 밖의 예외에 응답하여 그 밖의 명령어를 실행하여도 되므로, 이 값은 상기 스텝 모드에서 실행되었던 이전의 단일 명령어를 더 이상 반영하지 않아도 되므로, 미지로 설정되어야 한다.
일부의 실시예들에서, 상기 소정의 타입은, 상기 진단 예외에 들어가거나 상기 진단 예외로부터의 귀환시에 예외 핸들러에서 행한 동작이, 상기 명령어 스트림에서의 이후의 명령어가 다르게 실행되도록 상기 데이터 처리장치의 상태를 변경하는 경우의 명령어의 타입으로 이루어진다.
본 발명의 제6 국면은, 데이터 처리장치에 관해 실행하는 컴퓨터 프로그램에 의해 제공된 가상 머신을 제공하고, 상기 가상 머신은 본 발명의 제4 국면 또는 제5 국면의 상기 데이터 처리장치에 따른 명령어 실행 환경을 제공한다.
아래의 첨부도면에 도시된 것과 같은 실시예들을 참조하여, 본 발명을 예시만으로 더욱 설명하겠다:
도 1은 본 발명의 일 실시예에 따른 원격 진단장치와 접속된 데이터 처리장치를 도시한 것이고,
도 2는 본 발명의 일 실시예에 따른 진단회로를 내장하는 데이터 처리장치를 도시한 것이고,
도 3은 본 발명의 일 실시예에 따른 단일 스텝 진단 모드에서 실행하는 명령어 스트림내의 배타적 로드 명령어의 처리를 도시한 것이고,
도 4는 상기 배타적 로드 명령어 후에 인터럽트가 일어나는 경우에 단일 스텝 진단 모드에서의 명령어 스트림의 처리를 도시한 것이고,
도 5는 배타적 로드 명령어의 실행에 앞서 인터럽트가 일어나는 경우에 단일 스텝 진단 모드에서의 명령어 스트림의 처리를 도시한 것이고,
도 6은 상기 단일 스텝 진단 모드에서 작동하는 프로세서의 가능한 상태를 도시한 것이고,
도 7의 1a, 11a는 본 발명의 일 실시예에 따른 방법에서의 스텝들을 예로 든 흐름도를 도시한 것이고,
도 7의 1b, 11b는 본 발명의 다른 실시예예 따른 방법에서의 스텝들을 예로 든 흐름도를 도시한 것이고,
도 7c는 스테핑된 명령어의 타입과 함께 디버그 이벤트의 이유를 가리키는 지시자에 대한 가능한 값의 테이블을 도시한 것이며,
도 8은 본 발명의 일 실시예의 가상 머신 구현을 도시한 것이다.
도 1은 명령어들로 이루어진 스트림을 처리하는 프로세서(20)를 갖는 데이터 처리장치(10)를 도시한 것이다. 상기 프로세서는, 명령어들을 명령어 캐쉬(22)로부터 불러오기 위한 페치부(20a)와, 그 명령어를 디코딩하기 위한 디코드부(20b)와, 그 디코딩된 명령어를 실행하는 실행부(20c)를 갖는 파이프라인을 구비한다. 또한, 데이터 처리장치(10)는, 처리중 사용된 데이터를 기억하는 레지스터들로 이루어진 레지스터 뱅크(30)를 갖는다. 이들은, 상기 프로세서의 현재의 상태를 기억하는 상태 레지스터와, 제어값을 기억하는 적어도 하나의 제어 레지스터로 이루어진다. 상기 상태 레지스터는 예를 들면 인터럽트가 행해진 경우에 필요하기도 하고, 그 프로세서의 현재의 상태는, 상기 인터럽트로부터의 귀환시에 그 현재의 상태가 복원될 수 있도록 기억될 필요가 있다.
또한, 데이터 처리장치(10)의 외부 포트(12)는, 진단회로(42)를 구비하는 진단장치(40)와 접속되어 있다. 진단회로(40)는, 상기 데이터 처리장치의 동작을 분석하는데 사용되므로, 신호들을 보내어 상기 프로세서(20)의 실행을 제어할 수 있고, 그 프로세서로부터 출력된 데이터를 수신하여 분석을 행할 수 있다.
본 실시예에서는, 진단회로(42)는, 프로세서(20)를 제어하여 명령어 스트림의 상기 프로세서의 실행을 분석하기를 원할 때 단일 스텝 모드에서 작동하도록 구성된다. 단일 스텝 모드에서는, 각 명령어의 실행 후에, 진단 예외를 둔 후에 상기 명령어 스트림에서의 상기 다음의 명령어를 실행한다. 이렇게 하여, 상기 프로세서는 프로그램에 의해 스테핑하고, 각 스텝 후 상기 프로세서의 상태는 상기 진단회로(42)에 의해 분석될 수 있다. 상기 진단회로(42)는, 상기 프로세서를 제어하여, 단일 스텝 모드에서 제어 레지스터 EDECR에 비트 EDECR.SS를 설정함으로써 작동하고, 이러한 비트는, 상기 프로세서(20)에 대해 단일 스텝 모드에서 작동해야 하는 것을 가리키도록 설정된다. 진단 예외를 두어서 명령어를 실행하여 증가하였을 때 감소되는 비트 EDESR.SS를 갖는 또 다른 제어 레지스터 EDESR이 있다. 이러한 비트에 의해, 상기 프로세서가, 단일 스텝 모드동안에 비진단 예외를 둔 경우, 명령어를 실행해야 하거나, 상기 비진단 예외로부터의 귀환시에 진단 예외를 두어야 하는지를 알 수 있다. 또 다른 상태 레지스터 EDSCR가 있는데, 이것은 진단 예외를 두는 이유를 기록하는 비트 필드 EDSCR.MOE를 갖는다.
진단 예외를 둘 때, 진단 코드는 진단회로(42)에 의해 실행되고, 이 진단회로는 데이터 처리장치(10)의 상태를 검출하고 이 정보의 일부를 기억하여 분석을 행한다.
상기 진단회로(42)는, 상기 프로세스를 끝내기를 원할 때, 상기 제어 레지스터에서 단일 스텝 비트 EDECR.SS와 EDESR.SS를 리셋트하고 나서, 상기 프로세서는 정상 실행모드로 복귀한다.
상기 프로세서를 제어하여 단일 스텝 모드에서 작동하는 것과 아울러, 진단회로(42)는 실행될 그 밖의 진단 동작을 제어할 수도 있다. 예를 들면, 그것은, 실행중 상기 코드내에 중지점이나 감시점을 설정할 수 있고, 이들에 의해 코드가 실행시에 어떤 셋트 포인트에서 인터럽트될 수 있고, 그 후 상기 프로세서의 상태는 이들 포인트에서 분석될 수 있다.
비록 진단회로(42)가 도 2와 같은 여러 가지 실시예들에서의 처리장치(10) 외부에 있는 것으로서 도 1에 도시되어 있지만, 상기 데이터 처리장치 내부에 있을 것이다.
따라서, 도 2는, 진단회로(42), 레지스터 뱅크(30) 및 일부의 실시예에서는 진단회로(42)내의 프로세서와 그 밖의 실시예에서는 프로세서(20) 자체상에서 실행될 수 있는 진단 소프트웨어를 기억하는 데이터 스토어를 구비한, 데이터 처리장치(10)를 도시한 것이다.
상술한 경우들에 있어서, 진단 예외의 실행은, 스토어(43)나 메모리(44)에 기억된 진단 소프트웨어를 기동하여 프로세서(20)에 의해 실행된다. 본 실시예에서, 상기 레지스터 뱅크(30)에 기억된 값들은, 도 1의 레지스터 뱅크에 기억된 값들과 약간 다르다. 본 실시예에서, 유저는, 단일 스텝 진단 모드에 들어가야 하고, 상기 진단회로(42)가 레지스터 뱅크(30)의 상기 제어 레지스터에 기록하고, 상기 단일 스텝 모드를 가리키는 MDSCR 레지스터에 단일 스텝 비트 MDSCR.SS를 설정하고 1 또는 0 중 어느 한쪽으로 취해질 스텝들의 번호를 가리키는 저장된 상태 레지스터 SPSR에 저장된 스텝 번호 비트 SPSR.SS를 설정하는 것을 가리키기도 한다. 그후, 진단회로(42)는, 상기 프로세서(20)에 디버깅 중인 소프트웨어의 실행을 지시한다. 상기 프로세서는, 그 SPSR.SS의 비트를, 그 요구에 응답하여 현재의 상태 레지스터 CPSR의 현재의 스텝 번호 비트 CPSR.SS에 복사한다.
따라서, 설정되는 이들 비트에 응답하여, 상기 프로세서는, 단일 명령어를 처리하고 상기 CPSR.SS의 비트를 그 하나의 명령어를 실행한 것을 가리키도록 0으로 설정하고나서, 진단 예외를 둔다. 프로세서(20)는, 상기 스텝 번호 비트를, 상기 현재의 상태 레지스터 CPSR.SS로부터 상기 진단 예외를 두는 일부로서 상기 저장된 상태 레지스터 SPSR.SS에 복사한다.
또한, 프로세서(20)는, 진단 예외를 포함하는, 예외에 대한 정보를 기록하는데 사용된 상기 진단 예외에 대한 또 다른 정보를 레지스터 뱅크(30)내의 또 다른 상태 레지스터 ESR에 기록한다.
프로세서(20)는, 예외 핸들러 코드 후의 진단 코드를 실행하고, 그 프로세서의 현재의 상태가 분석된다. 상기 SPSR 레지스터의 스텝 번호 비트 SPSR.SS는, 상기 명령어 스트림내의 다음의 명령어가 실행되어야 하는 것을 가리키도록 1로 설정된다. 상기 단일 스텝 진단 모드를 빠져나올 때, 레지스터 뱅크(30)내의 레지스터 SPSR 및 MDSCR의 제어비트 MDSCR.SS와 SPSR.SS를 리셋트한다.
다수의 계층적 처리 상태나 예외 레벨들이 구현되는 경우, 각 예외 레벨 자신이 SPSR 및 ESR 레지스터, 예외 레벨 1의 SPSR_EL1 및 ESR_EL1, 예외 레벨 2의 SPSR_EL2 및 ESR_EL2 등을 갖는다.
도 3은, 본 발명의 일 실시예에 따른 단일 스텝 진단 모드에서 배타적 로드 명령어 LDREX를 포함한 명령어 코드가 실행되는 모양을 도시한 것이다. 본 도면에서는, 시간은 왼쪽에서 오른쪽으로 흐른다. 따라서, SPSR.SS비트와 MDSCR.SS비트는, 동작의 단일 스텝 모드, 즉 예외 귀환 ERET 명령어를 실행하여 디버깅중인 소프트웨어에 점프하는 것을 가리키는 1로 설정된다. 이것은 SPSR.SS를 CPSR.SS에 복수하여서, 디버깅중인 소프트웨어로부터의 단일 명령어가 실행된다. 이러한 명령어는, 배타적 로드 명령어 LDREX 명령어이고, 실행중인 상기 배타적 로드 명령어 LDREX에 응답하여, 상기 CPSR.SS 비트는, 진단 예외를 두기전에 또 다른 명령어를 실행하지 않아야 하는 것을 가리키는 0으로 설정된다.
상기 진단 예외를 두고, SPSR.SS에 CPSR.SS를 복사하고, 상태 레지스터 내의 신드롬 비트 ESR.EX를, 상기 배타적 로드 명령어 LDREX가 실행되었던 것을 가리키도록 1로 설정한다. 또한, 이 레지스터 내의 유효 비트 ESR.ISV는, 이것이 그 비트에 대해 유효값인 것을 가리키도록 설정된다.
본 발명의 실시예들에 있어서, 이들의 신드롬 및 대응한 유효 비트들은, 특별한 타입의 명령어가 실행될 때마다 설정된다. 이들은, 특별한 기억장소에 배타적으로 액세스하는 것을 가리키는 모니터에 배타적으로 요구하는 명령어, 이를테면 배타적 로드 명령어의 타입이어도 된다. 또한, 그것들은, 명령어 스트림내의 이후의 명령어의 실행이 예외 핸들러 실행에 의해 변경되기도 하는 다른 타입의 명령어이어도 된다.
LDREX 명령어가 제1 장소를 액세스할 때, 상기 모니터 비트는, 이 제1 장소가 액세스되었던 것을 기록한다. 그 모니터는, 2개의 상태: "개방 액세스"와 "배타적 액세스"를 갖는다. LDREX는, 상기 모니터를 "배타적 액세스" 상태로 두어서 상기 제1 장소에의 액세스를 요구하고, 상기 모니터는 어드레스 태그의 형태로 상기 액세스된 어드레스를 계속 기록한다.
상기 모니터와 그 태그는, 스토어 배타적 STREX 명령어시에 검사된다. 그 STREX 명령어는, 제2 장소에 일 값을 기록하는 것을 요구하는 스토어 명령어다. 그 STREX 명령어에 의해, 상기 모니터가 상기 "배타적 액세스" 상태에 있고 상기 STREX가 상기 태그가 붙여진 어드레스에 기록되고 있는 경우에, 즉 제2 장소가 제1 장소와 일치하는 경우에 상기 기록이 진행될 수 있다. 상기 모니터는, STREX 자체에 의해서 뿐만 아니라, 클리어 배타적 CLREX 명령어나, 상기 태그가 붙여진 어드레스를 액세스하는 일부의 가능한 나머지의 명령어에 의해서도 "개방 액세스"로 되돌아가야 한다. 상기 LDREX와 STREX 명령어간의 소프트웨어 콘텍스트에 있어서 변화의 원인이 되는 예외 핸들러로 인한 소프트웨어 오동작의 가능성을 해결하기 위해서, 상기 배타적 모니터도 예외 귀환에 의해 "개방 액세스"로 되돌아가야 한다. 이것은, 소프트웨어 협약, 예를 들면, 항상 ERET 이전에 CLREX 명령어를 실행함으로써 행해져도 되거나, ERET 명령어의 실행시 상기 모니터를 상기 "개방 액세스" 상태로 되돌아가게 하는 하드웨어에 의해 실시되어도 된다.
다중 프로세서 시스템에서의 전체 모니터의 경우, 상기 STREX에 의해, 상기 LDREX를 발행한 동일 프로세서로부터 액세스가 오고 있는 경우에 상기 기록이 가능할 뿐이다. 또한, 상기 모니터는, 상기 태그가 붙여진 어드레스에 가까운 장소등의 다른 장소에 액세스하는 그 밖의 명령어에 의해 상기 "개방 액세스" 상태로 클리어되어도 된다.
따라서, 단일 LDREX 명령어의 실행에 후속하는 본 실시예에서는, 단일 스텝 모드를 가리키는 설정중인 상기 MDSCR.SS 제어 비트에 응답하여, 진단 예외를 두고, 상기 ESR.EX와 상기 ESR.ISV의 비트를 설정하고 나서, 상기 진단 코드를 실행한다. 상기 진단 코드는, 상기 ESR.ISV 유효비트와 대응한 ESR.EX 신드롬 비트가 설정되고, 이 비트들이, 단일 스텝 모드가 부적합할 경우의 상기 소정의 타입중 하나인 이전의 명령어이었던 것을 가리키므로, 상기 프로세서에 상기 MDSCR.SS 및 SPSR.SS비트의 클리어를 지시하여, 상기 예외 핸들러로부터의 귀환시에, 상기 단일 스텝 모드를 빠져나가고 그 명령어 스트림을 정상적으로 실행한다.
또한, 상기 진단 코드는 상기 명령어 스트림에서의 어떤 포인트를 가리키는 적절한 중지점을 설정하고, 이에 따라서 상기 진단회로가 이 포인트에서 정상적 실행을 중지시키고, 필요한 경우에는 단일 스텝 모드를 재시작한다.
그리고, 상기 프로세서는, 상기 중지점에 도달할 때까지 상기 명령어 스트림의 다음 부분을 실행한다. 이 중지점은, 명령어간에 일어나는 예외에 의해 변경되는 실행을 갖는 코드의 블록 후인 상기 코드에서의 위치에 설정되었을 것이다.
실행될 코드는, 예를 들면, 세마포어(semaphore) 변수에 배타적으로 액세스하려고 하는 코드이어도 된다:
Figure 112013088261890-pct00002
본 예시에서는, 상기 코드는, 상기 세마포어를 취득할 때까지 순환(loop)한다. 그 후, 그 순환을 성공적으로 빠져나가므로, 단일 스텝 모드로 되돌아가게 하는 이 코드의 일부 뒤에 중지점을 놓을 있다.
다른 코드에 있어서, 상기 소프트웨어는, 세마포어를 취득하지 못하는 경우 무엇인가 다른 것을 행하기를 원하기도 한다. 이렇게 코드를 기록하여, 또 다른 프로세스가 상기 세마포어를 취득할 수도 있었던 경우를 고려하기도 하므로 이용하는데 약간의 시간이 걸리기도 한다. 이것은, 다른 타입의 코드이다:
Figure 112013088261890-pct00003
이때, 상기 코드는, 상기 STREX가, STREX 실패가 반드시 또 다른 프로세스에서 상기 세마포어를 취득하고 있었다는 것을 의미하지 않기 때문에 실패하는 경우에는 순환하므로, 그것은 다시 시도할만한 가치가 있다.
이 경우에, 상기 LDREX를 스테핑하면, 상기 디버거는 상기 순환에 대해, 이 코드의 세그먼트의 끝에 있는 포인트와, 라벨 "SomethingElse"(미도시됨)에서의 포인트로 이루어진 2개의 출구 포인트를 찾는다. 그래서, 상기 디버거는, 그들 양쪽에 중지점을 설정해야 한다.
위의 실시예에서는, 상기 프로세서가, 정상적인 실행을 재개하여 상기 배타적 로드 명령어 후부터 코드를 계속 실행하였다. 그 밖의 실시예들에서는, 상기 진단 코드가, 상기 프로세서를 제어하여 로드 배타적 명령어가 적절한 경우에는 그 로드 배타적 명령어를 재실행시켜도 되거나, 상기 진단 코드는 단일 스텝 모드로 실행되지 않아야 하는 코드의 일부를 자신이 에뮬레이트 한 후 상기 프로세서를 제어하여, 이 코드의 일부 뒤, 이 경우에는 상기 스토어 배타적 명령어 뒤의 상기 코드의 실행을 시작되게 한다.
상기 진단 코드가 상기 프로세서를 제어하여, 설정중인 상기 유효비트 ESR.ISV 및 신드롬 비트 ESR.EX에 응답하여 상기 단일 스텝 진단 모드를 빠져나가도록 구성되지 않았을 경우, 상기 진단 예외로부터의 귀환시의 상기 예외 핸들러는 상기 배타적 모니터를 클리어할 것이고, 상기 코드는 전방향으로 진척시키지 못할 것이다.
도 4는 단일 스텝 모드에서 로드 배타적 명령어를 실행한 후에 우선권이 높은 인터럽트가 보류중인 일 실시예를 도시한 것이다(MDSCR.SS=1). 본 실시예에서는 다수의 예외 레벨이 있다. 상기 진단 코드는 EL1에서 실행중이고, 단일 스텝 모드에서 단일 명령어를 실행할 것을 가리키기 위해서는, 상기 저장된 스텝 번호 비트를 그것의 저장된 상태 레지스터에, SPSR_EL1.SS를 1로 설정한다. 상기 진단 코드는, 도 3에서와 같이, SPSR_EL1.SS를 CPSR.SS에 복사하는 ERET 명령어를 실행한다. 상기 로드 배타적 명령어를 실행한 후에, CPSR.SS를 0으로 클리어한다. 이에 따라, 보류중이기도 한 상기 진단 예외보다 우선적으로 예외 레벨 2에서 상기 인터럽을 행하는 경우에, 상기 프로세서는 EL2의 상기 저장된 스텝 번호 비트인 SPSR_EL2.SS 비트를 0으로 설정한다. 그 인터럽트를 처리하였을 경우에, 그 인터럽트로부터 귀환하기 위한 명령어가 실행된다. 이것은, (일반적으로 예외로부터의 귀환시에 행해진 것처럼) 배타적 모니터를 클리어시키고, SPSR_EL2.SS를 CPSR.SS에 복사한다. 이제, 상기 스텝 번호 비트 CPSR.SS가 0으로 설정되어 있으므로, 어떠한 명령어도 실행하지 않고 진단 예외를 생성한다. 아무런 명령어도 실행되지 않았으므로, 상기 프로세서(20)는, 이전에 실행되었었고 상기 배타적 모니터를 요구하였을지도 모르는 상기 명령어가 미지의 타입인 것을 가리키는, 상기 배타적 모니터 ESR.ISV와 연관된 유효 비트를 제로로 설정한다.
상기 ESR.ISV가 제로인 것을 검출함에 따라, 상기 디버그 코드는, 이전에 실행된 명령어가 무엇이었는지를 판정할 필요가 있으므로, 이 명령어에 대한 코드를 상기 프로세서로부터 요구한다. 이러한 요구와 연관되어 오버헤드가 약간이 있기는 하지만, 이러한 요구는, 명령어를 단일 스텝 모드에서 실행한 후에 예외가 일어났던 상황하에서만 요구되기 때문에, 그것은 각 명령어가 요구되는 것을 필요로 하는 것과는 매우 다르다.
도 5는 상기 명령어가 단일 스테핑되기 직전에 EL2 우선 인터럽트를 수신할 때 발생하는 것을 도시한 것이다. 이 경우에, 상기 스텝 번호 지시자 CPSR.SS는, 상기 인터럽트가 행해질 때 1로 설정되고, 그래서, SPSR_EL2.SS는 1로 설정되므로, 이 예외로부터의 귀환시에, 다음 명령어, 로드 배타적 명령어가 실행되고나서, 진단 예외를 둔다. 실행되었던 상기 명령어가 배타적 로드 명령어이었기 때문에, 상기 프로세서(20)는, 상기 ESR.EX비트와 ESR.ISV 비트를 설정함에 따라서, 이것에 응답하여 상기 진단 코드는, SPSR_EL1.SS와 MDSCR.SS값을 클리어하고, 상기 프로세서를 제어하여 첫 번째 설정된 하나 이상의 중지점을 갖는 정상 작동모드로 들어가게 한다.
요약하면, 상기 명령어 스텝의 후속 직후 소프트웨어 스텝 진단 예외를 생성하면, 상기 유효비트 ESR.ISV가 1로 설정되고, 상기 명령어를 실행시키지 않았고 소프트웨어 스텝 디버그 예외를 생성하면, 상기 유효비트ESR.ISV가 0으로 설정된다.
도 6은 소프트웨어 스텝 모드에서 프로세서의 가능한 상태들을 도시한 것이다.
상기 MDSCR.SS비트가 설정되어 있지 않으면, 상기 프로세서는 단일 스텝 모드에서 실행중이 아니다. 따라서, 초기에 상기 프로세서의 소프트웨어 스텝 상태는 인액티브(inactive) 및 디스에이블되고, 상기 디버거는 진단 소프트웨어를 실행한다. 그 후, 상기 MDSCR.SS비트와 SPSR.SS비트는, 상기 디버거로부터의 예외 귀환을 실행할 때 상기 스텝 모드에 들어가게 될 것을 가리키도록 설정된다. 상기 예외 귀환시에, 상기 프로세서는, 단일 명령어를 실행가능한 액티브 비보류 상태에 들어간다(즉, 소프트웨어 스텝이 액티브이지만, 이 포인트에서는 진단 예외가 보류중이 아니다). 상기 프로세서는, 디버기(debuggee) 코드를 실행하고 있고, 상기 MDSCR.SS비트가 단일 스텝 모드를 가리키게 설정되고 상기 CPSR.SS비트가 하나의 명령어가 실행될 것을 가리키게 설정되는 경우에 상기 액티브 비보류 상태에 있다.
상기 프로세서는, 이 상태를 단일 명령어를 실행함으로써 또는 예외를 둠으로써 빠져나가기도 한다. 상기 프로세서 그 명령어를 실행하면, 상기 CPSR.SS는, 단일 스텝을 완료한 것을 가리키는 0으로 리셋트된다. 이 스텝에서, 지금은 소프트웨어 스텝 진단 예외가 보류중이어서, 상기 소프트웨어 스텝 상태가 액티브 보류중이다.
또한, 상기 프로세서는, 상기 소프트웨어 스텝 진단 예외이외의 예외를 둠으로써 이 상태를 빠져나가도 됨에 따라서, 이 예외의 우선권이 진단 예외보다 높은 경우, 상기 소프트웨어 스텝 상태는 처리되는 동안 디스에이블된다. 상기 예외의 타입과, 그것이 상기 명령어를 실행하기 전 또는 후에 일어나는지의 여부에 따라, 상기 SPSR.SS비트는 상기 예외를 둘 때 1 또는 0이어서, 상기 예외 핸들러로부터의 귀환시에, 상기 프로세서는 상기 액비트 비보류 상태나 액티브 보류 상태 중 어느 한쪽으로 귀환된다.
그렇지만, 나머지의 예외의 우선권이 진단 예외보다 낮은 경우, 상기CPSR.SS비트는, 상기 단일 스텝이 완료되었다는 것을 가리키는 0으로 리셋트된다. 이 스텝에서, 상기 소프트웨어 스텝 진단 예외는 지금 보류중이어서, 상기 소프트웨어 스텝 상태는 액티브 보류중이다.
이 액티브 보류 상태로부터, 상기 소프트웨어 스텝 진단 예외를 두고, CPSR.SS를 SPSR.SS에 복사한다. 실행은 상기 디버거에 복귀하고 상기 소프트웨어 스텝 상태는 디스에이블된다. 상기 MDSCR.SS비트는 단일 스텝 모드를 가리키도록 계속 설정되고, SPSR.SS비트는 상기 스텝이 실행된 것을 가리키도록 클리어된다.
도 7의 1a, 11a는, 본 발명의 일 실시예에 따른 방법에서의 스텝들을 예를 든 흐름도를 도시한 것이다. 이 방법은, 진단장치에 의해, 제어 레지스터에 단일 스텝 비트를 설정하고 스텝 번호를 1로 설정함으로써 단일 스텝 진단모드에 들어가기 시작한다.
그 후, 이 방법은, 스테핑중인 상기 코드에 귀환됨으로써 ("A"라고 붙여진 연결을 거쳐) 진행된다.
초기에는 상기 스텝 번호가 1이므로, 예외 보류가 없는 경우, 단일 명령어가 실행된다. 이 명령어가 예외 없음을 발생한다고 가정하면, 상기 스텝 번호는 0으로 설정되고, 그 밖의 예외가 보류중이 아닌 경우, 상기 장치는 그 명령어가 소정의 타입이었는지를 판정하고, 이러한 타입은, 상기 명령어 실행 후에 예외를 두는 것은 그 다음의 명령어들의 실행방법에 영향을 주는 타입이다. 그 명령어가 소정의 타입일 경우, 상기 타입과 유효비트는 상태 레지스터에 설정되어 있고, 그렇지 않을 경우에는, 상기 유효비트가 설정되고 상기 타입비트가 클리어된다. 이제, 진단 예외를 두고, 그 방법은 ("B"라고 붙여진 연결을 거쳐) 계속된다.
상기 방법이 완료되지 않는다고 가정하면(이것을 판정하는 방법의 상세내용은 미도시되어 있음), 상기 진단장치는, 상기 진단예외가 소프트웨어 스텝에 기인하였는지를 판정하고, 그러한 경우에는 상기 유효비트와 타입 비트가 설정되는지를 추가로 판정한다. 상기 유효비트가 설정되고 상기 타입비트가 클리어되는 경우, 상기 방법은 스텝 번호를 1로 설정하도록 귀환하고(단일 스텝 제어비트도 설정되고), 다음의 명령어를 스테핑하여서 계속된다. 이때, 이것은, 상기 방법에 의한 가장 일반적인 경로이고, 또한 최적의 경로이다.
그러나, 상기 유효비트와 타입비트 양쪽이 설정되는 경우, 이것은 단일 스텝 모드가 억제되어야 하고 상기 단일 스텝 비트가 클리어되고, 중지점(들)이 상기 단일 스텝 모드를 재시작 가능한 상기 코드에서 적절한 포인트(들)에 설정된다는 표시다.
마찬가지로, 상기 유효비트가 진단 예외를 두지 않을 때 설정되지 않았을 경우, 상기 방법은, 상기 명령어가 소정의 타입(들) 중 하나이었는지를 보기 위해서 스테핑되었던 상기 명령어를 직접 시험한다. 이 시험에 근거해서, 상기 방법은 단일 스텝 모드로 진행되거나 중지점(들)을 설정하는지를 판정한다. 상기 방법은 스테핑중인 상기 코드에 귀환함으로써 (상기 연결 "A"를 거쳐) 다시 진행된다.
그렇지만, 상기 중지점(들)을 사용하였을 경우에, 상기 단일 스텝 제어 비트는, 하나의 중지점에 도달하고 진단 예외를 둘 때까지 명령어들로 이루어진 스트림으로서 상기 명령어들을 실행하도록 설정되어 있지 않다. 상기 진단 예외가 하나의 중지점에 기인하였다고 나중에 판정하기 때문에, 상기 중지점(들)은 제거되고 상기 단일 스텝 제어비트는 설정되어 있고 상기 스텝 번호는 1로 설정되어서, 상기 단일 스텝 모드가 다시 시작한다.
이때, 인터럽트들과 그 밖의 예외가, 일반적인 방식으로 상기 명령어들로 이루어진 스트림의 실행동안에 일어나서 행해지기도 한다.
디버깅중인 상기 코드로부터 명령어(들)를 실행하는 동안에 언제라도, 무진단 예외가 보류중이면, 무진단 예외를 둘 것이다. 상기 명령어를 실행하기 전에 취해진 예외에 대해서와, 실행중인 상기 명령어에 의해 생성된 시스템 호출(syscall) 예외이외의 예외에 대해서(이를테면 메모리 관리 결함), 상기 스텝 번호는 상기 예외를 두기전에 미변경된다(1). 이들의 경우에, 상기 예외는 효과적으로 상기 명령어를 캔슬하고, 이는, 그 명령어가 스테핑되고 있었을 경우, 다시 스테핑되어야 한다는 것을 의미한다.
따라서, 상기 예외를 두었을 때, 상기 스텝 번호는 예외 핸들러용 SPSR에 기록된다. 그 후, 상기 스텝 번호는 0으로 설정된다.
또한, 이때, 상기 무진단 예외의 우선권은, 진단 예외보다 낮아도 된다. 그렇다면, 상기 소프트웨어 스텝 제어 비트는 상기 무진단 예외 처리시에 효과적이고, 상기 스텝 번호가 지금 0이기 때문에, 즉시 진단 예외를 둘 것이다. 명령어가 실행되지 않으므로, 상기 유효비트와 타입비트 양쪽이 클리어된다.
상기 명령어 후에 행해진 우선권 높은 인터럽트와, 상기 명령어에 의해 생성된 시스템 호출 예외에 대해서, 상기 명령어는 효과적으로 완료되어서, 상기 스텝 번호는 상기 예외를 두기전에 0으로 설정된다. 상기 진단예외와 시스템 호출 예외보다 우선권이 높은 인터럽트들만이 이 시점에서 행해질 수 있다.
그렇지 않으면, 상기 단일 스텝 제어 비트가 설정되는 경우 상기 예외로부터의 귀환시에, 상기 스텝 번호는 상기 SPSR로부터 복원되어 그 스텝 번호의 값이 구해진다. 그 값이 1일 경우, 이것은, 상기 스텝 모드에서의 상기 명령어가 완료하기 전에 상기 예외를 두었었고 그래서 상기 예외로부터의 귀환시에 상기 스트림내에서의 상기 명령어가 재실행된다는 것을 가리킨다.
상기 값이 0일 경우, 이것은, 상기 스텝 모드에서의 상기 명령어의 실행이 완료된 후이지만 그 명령어와 연관된 상기 진단 예외를 두기전에 상기 예외를 두었었던 것을 가리킨다. 이 경우에, 우선권이 높은 예외가 보류중이 아니라면, 즉시, 진단 예외를 둔다. 그러나, 상기 유효비트와 상기 연관된 타입 비트는, 상기 명령어의 타입을 가리키는 상기 값이, 그 밖의 명령어가 그때까지 실행되고 있었던 것으로서 판정될 수 없는 것을 가리키도록 클리어되어야 한다.
따라서, ("B"를 거쳐) 상기 진단 예외를 두었을 때, 상기 유효비트가 클리어된다고 판정될 것이고, 상기 방법은 상기 소정의 타입(들) 중 하나이었는지를 보기 위해서 스테핑되었던 상기 명령어를 직접 시험한다. 이러한 시험에 의거하여, 상기 방법은, 상기 단일 스텝 모드에 진행되는지 또는 중지점(들)을 설정하는지를 판정한다.
상기 방법은, 상술한 것처럼, ("A"를 거쳐) 스테핑중인 상기 코드에 귀환함으로써 다시 진행된다.
도 7의 1b, 11b는, 본 발명의 다른 실시예에 따른 방법에서의 스텝들을 예로 든 흐름도를 도시한 것이다. 이 방법은, 도 1에 도시된 것과 같이 디버거가 외부장치 상에 있는 "외부 디버그"에 사용되는 것이 일반적이다. 이러한 경우에, 상기 지시자 값은, 상기 프로그램이 스테핑되고 있는 것이어도 되는 상기 진단 예외의 이유를 가리키고, 이 경우에 상기 지시자 값은 명령어의 타입을 가리키거나, 디버그 이벤트/진단 예외의 또 다른 이유이어도 된다. 따라서, 이 지시자 값은 가능한 복수의 값을 갖고; 이 복수의 값은 스테핑된 소정의 타입이 아닌 명령어, 스테핑된 소정의 타입의 명령어, 스테핑된 미지의 타입의 명령어로 이루어지되; 그 세가지 타입의 값은, 0110, 0111 및 1110일 수도 있다. 그 밖의 값은, 취해진 중지점, 정지 리퀘스트 등의 상기 디버그 이벤트/진단 예외의 다른 이유를 가리키는데 사용된다. 이들의 가능한 값들이 도 7c의 테이블에 도시되어 있다. 상기 스텝 및 중지점 값들만이, 본 발명에서 일어날 수 있는 유일한 이벤트 타입이기 때문에, 도 7의 1b,11b의 흐름도에서 고려된다.
따라서, 도 7의 1a,11a와 같이, 상기 방법은 진단장치에 의해 제어 레지스터에 상기 단일 스텝 비트를 설정하고 스텝 번호를 1로 설정하여서 단일 스텝 진단 모드에 들어가기를 시작한다.
그리고, 상기 방법은, 스테핑중인 상기 코드에 귀환함으로써 ("A"라고 붙여진 연결을 거쳐) 진행된다.
초기에 상기 스텝 번호가 1이므로, 예외 보류가 없는 경우, 단일 명령어가 실행된다. 이러한 명령어가 예외를 생성하지 않는다면, 그 스텝 번호는 0으로 설정되고, 그 밖의 예외가 보류중이 아니면, 상기 장치는 그 명령어가 소정의 타입이었는지를 또 판정하고, 이것의 타입은, 상기 명령어의 실행 후 예외를 두는 것이 다음의 명령어의 실행방법에 영향을 주는 타입이다. 상기 명령어가 소정의 타입일 경우, 타입의 표시는 상태 레지스터에서 STEPexcl로 설정되고, 소정의 타입이 아닐 경우에, 그 타입의 표시는 STEPok로 설정된다. 이제, 진단 예외를 두고, 상기 방법이 ("B"라고 붙여진 연결을 거쳐) 진행된다.
상기 방법이 완료되지 않는다고 가정하면(이것을 판정하는 방법의 상세내용은 미도시되어 있음), 상기 진단장치는, 상기 타입의 표시가 무엇으로 설정되었는지를 판정한다. 그 타입의 표시가, 상기 명령어가 상기 소정의 타입 중 하나가 아니었던 것을 가리키는 STEPok로 설정되었을 경우, 상기 방법은 스텝 번호를 1로 설정하도록 귀환하고(단일 스텝 제어비트도 설정되고), 다음의 명령어를 스테핑하여서 계속된다. 이때, 이것은, 상기 방법에 의한 가장 일반적인 경로이고, 또한 최적의 경로이다.
상기 타입의 표시가 그 명령어의 타입이 미지인 것을 가리키는 STEPunknown로 설정되는 경우, 상기 방법은, 상기 명령어가 소정의 타입(들) 중 하나이었는지를 보기 위해서 스테핑되었던 상기 명령어를 직접 시험한다. 이 시험에 근거해서, 상기 방법은 단일 스텝 모드로 진행되거나 중지점(들)을 설정하는지를 판정한다. 상기 방법은 스테핑중인 상기 코드에 귀환함으로써 (상기 연결 "A"를 거쳐) 다시 진행된다.
상기 타입의 표시가 스테핑된 명령어가 소정의 타입이었던 것을 가리키는 STEPexcl로 설정되는 경우, 이것은 단일 스텝 모드가 억제되어야 하고 상기 단일 스텝 비트가 클리어되고, 중지점(들)이, 상기 단일 스텝 모드를 재시작 가능한 상기 코드에서 적절한 포인트(들)에 설정된다는 표시다.
상기 중지점(들)을 사용하였을 경우에, 상기 단일 스텝 제어 비트는, 하나의 중지점에 도달할 때까지 명령어들로 이루어진 스트림으로서 상기 명령어들을 실행하도록 설정되어 있지 않다. 이때에, 상기 표시 타입은, 상기 진단 예외가 중지점에 기인하고 상기 진단 예외가 두어지므로 BRK에 설정된다. 나중에는, BRK인 타입의 표시에 응답하여, 상기 중지점(들)을 제거하고 그 단일 스텝 제어 비트를 설정하며, 상기 스텝 번호를 1로 설정하여서, 단일 스텝 모드가 재시작된다.
이때, 인터럽트들과 그 밖의 예외가, 일반적인 방식으로 상기 명령어들로 이루어진 스트림의 실행동안에 일어나서 행해지기도 한다.
디버깅중인 상기 코드로부터 명령어(들)를 실행하는 동안에 언제라도, 무진단 예외가 보류중이면, 무진단 예외를 둘 것이다. 상기 명령어를 실행하기 전에 취해진 예외에 대해서와, 실행중인 상기 명령어에 의해 생성된 시스템 호출(syscall) 예외이외의 예외에 대해서(이를테면 메모리 관리 결함), 상기 스텝 번호는 상기 예외를 두기전에 미변경된다(1). 이들의 경우에, 상기 예외는 효과적으로 상기 명령어를 캔슬하고, 이는, 그 명령어가 스테핑되고 있었을 경우, 다시 스테핑되어야 한다는 것을 의미한다.
상기 스텝 번호는 예외 핸들러용 SPSR에 기록된다. 그 후, 상기 스텝 번호는 0으로 설정된다.
또한, 이때, 상기 무진단 예외의 우선권은, 진단 예외보다 낮아도 된다. 그렇다면, 상기 소프트웨어 스텝 제어 비트는 상기 무진단 예외 처리시에 효과적이고, 상기 스텝 번호가 지금 0이기 때문에, 즉시, 진단 예외를 둘 것이다. 명령어가 실행되지 않으므로, 상기 타입의 표시는, STEPunknown로 설정된다(미도시됨).
상기 명령어 후에 행해진 우선권 높은 인터럽트와, 상기 명령어에 의해 생성된 시스템 호출 예외에 대해서, 상기 명령어는 효과적으로 완료되어서, 상기 스텝 번호는 상기 예외를 두기전에 0으로 설정된다. 상기 진단예외와 시스템 호출 예외보다 우선권이 높은 인터럽트들만이 이 시점에서 행해질 수 있다.
그렇지 않으면, 상기 단일 스텝 제어 비트가 설정되는 경우 상기 예외로부터의 귀환시에, 상기 스텝 번호는 상기 SPSR로부터 복원되어 그 스텝 번호의 값이 구해진다. 그 값이 1일 경우, 이것은, 상기 스텝 모드에서의 상기 명령어가 완료하기 전에 상기 예외를 두었었고 그래서 상기 예외로부터의 귀환시에 상기 스트림내에서의 상기 명령어가 재실행된다는 것을 가리킨다.
상기 값이 0일 경우, 이것은, 상기 스텝 모드에서의 상기 명령어의 실행이 완료된 후이지만 그 명령어와 연관된 상기 진단 예외를 두기전에 상기 예외를 두었었던 것을 가리킨다. 이 경우에, 우선권이 높은 예외가 보류중이 아니라면, 즉시, 진단 예외를 두고, 상기 타입의 표시는, 명령어의 타입이 상기 진단 예외를 두기전에 STEPunknown로 설정되어, 그 동안에 그 밖의 명령어를 실행한 것으로서 상기 명령어의 타입이 판정될 수 없는 것을 가리킨다.
따라서, ("B"를 거쳐) 상기 진단 예외를 두었을 때, 상기 표시 타입이 STEPunknown이라고 판정될 것이고, 상기 방법은 그 명령어가 상기 소정의 타입(들) 중 하나이었는지를 보기 위해서 스테핑되었던 상기 명령어를 직접 시험한다. 이러한 시험에 의거하여, 상기 방법은, 상기 단일 스텝 모드에 진행되는지 또는 중지점(들)을 설정하는지를 판정한다.
도 8은 사용될 수도 있는 가상 머신 구현을 도시한 것이다. 상술한 실시예들은 관련된 기술을 지원하는 하드웨어의 특정한 처리를 연산하기 위한 장치 및 방법의 관점에서 본 발명을 구현하였지만, 하드웨어 디바이스의 소위 가상 머신 구현을 제공하는 것도 가능하다. 이들 가상 머신 구현은 가상 머신 프로그램(510)을 지원하는 호스트 운영체계(520)를 일반적으로 실행하는 호스트 프로세서(530)상에서 실행한다. 일반적으로, 아주 강력한 프로세서를 사용하여 합리적인 속도로 실행하는 가상 머신 구현을 제공하지만, 이러한 접근법은 특정한 상황에서, 이를테면 호환성 또는 재사용 목적을 위해 또 다른 프로세서 고유의 코드를 실행하기를 바라는 경우에 정당화되어도 된다. 가상 머신 프로그램(510)은, 이러한 실제의 하드웨어 디바이스에 의해 상기 프로그램의 실행으로 주어진 것처럼 동일한 결과를 나타내는 어플리케이션 프로그램(또는 운영체계)(500)을 실행 가능하다. 따라서, 이러한 동작 모드에 대한 입출입의 제어를 포함하는 프로그램 명령어의 진단 스테핑은, 상기 가상 머신 프로그램(510)을 사용하여 상기 어플리케이션 프로그램(500)내로부터 실행되어도 된다.
본 발명의 여러 가지의 또 다른 국면 및 특징이 첨부된 청구항에 기재되어 있다. 본 명세서에서는 본 발명의 범위를 벗어나지 않고 상술한 실시예들을 여러 가지로 변형할 수 있다.

Claims (38)

  1. 명령어들로 이루어진 스트림을 처리하는 프로세서를 진단하는 방법으로서,
    (i) 단일 스텝 모드에서 상기 명령어 스트림으로부터의 단일 명령어가 실행되도록 상기 프로세서를 제어하여 실행하는 스텝 - 상기 프로세서는, 상기 단일 명령어가 적어도 하나의 소정의 타입의 명령어 중 하나이고 데이터 기억 장소에 타입 지시자를 기억하고, 상기 프로세서가 상기 단일 명령어를 처리한 후에 진단 예외를 두었는지를 판정한다 -;
    (ii) 상기 데이터 기억장소에 기억된 상기 타입 지시자에 액세스하는 것을 포함하는 상기 진단 예외에 뒤따르는 진단 동작을 행하는 스텝; 및
    (iiia) 상기 단일 명령어가 상기 소정의 타입 중 하나가 아니었던 것을 가리키는 상기 타입 지시자에 응답하여, 상기 단일 스텝 모드에서, 상기 진단 예외로부터의 귀환시에 다음의 단일 명령어를 실행하도록 상기 프로세서를 제어하여 명령어들을 계속 실행하는 스텝;
    (iiib) 상기 단일 명령어가 상기 적어도 하나의 소정의 타입 중 하나이었던 것을 가리키는 상기 타입 지시자에 응답하여, 상기 프로세서를 제어하여 상기 단일 스텝 모드를 빠져나가고 단일 명령어를 행한 후에 진단 예외로서 상기 명령어 스트림내에서 상기 다음의 명령어를 실행하지 않는 스텝을 포함하는, 진단방법.
  2. 제 1 항에 있어서,
    상기 스텝(iiib)는, 상기 프로세서를 제어하여, 상기 진단 예외로부터의 귀환시에 상기 명령어 스트림내의 복수의 명령어를 실행하는 것을 포함하는, 진단방법.
  3. 제 2 항에 있어서,
    상기 복수의 명령어는, 상기 명령어 스트림에서 상기 실행된 단일 명령어 다음에 복수의 명령어를 포함하는, 진단방법.
  4. 제 2 항에 있어서,
    상기 복수의 명령어는, 상기 명령어 스트림에서 상기 실행된 단일 명령어에 계속되는 복수의 명령어이며 상기 실행된 단일 명령어를 포함하는 복수의 명령어를 구비하는 진단방법.
  5. 제 2 항 내지 제 4 항 중 어느 한 항에 있어서,
    상기 단일 명령어가 상기 적어도 하나의 소정의 타입 중 하나이었던 것을 가리키는 상기 타입 지시자에 응답하여, 상기 복수의 명령어의 실행동안에 그 밖의 예외를 수신하지 않는다면, 적어도 하나의 중지점에 도달될 때까지 상기 복수의 명령어가 실행되도록 상기 명령어 스트림내에 상기 적어도 하나의 중지점을 설정하고, 상기 적어도 하나의 중지점에 도달하는 것에 응답하여 진단 중지점 예외를 두는 또 다른 스텝을 포함하는, 진단방법.
  6. 제 1 항에 있어서,
    상기 스텝(iiib)은, 상기 명령어 스트림에서 상기 실행된 단일 명령어와 적어도 하나의 이후의 명령어를 에뮬레이트하고나서, 상기 프로세서를 제어하여, 에뮬레이트된 상기 적어도 하나의 이후의 명령어에 후속하는 상기 명령어 스트림내에서의 명령어로부터 상기 단일 스텝 모드를 시작하는 것을 포함하는, 진단방법.
  7. 제 1 항, 제 2 항, 제 3 항, 제 4 항 또는 제 6 항 중 어느 한 항에 있어서,
    상기 데이터 기억장소에 기억된 상기 타입 지시자는, 상기 명령어가 상기 소정의 타입의 하나이었거나 상기 명령어가 상기 소정의 타입의 하나가 아니었거나, 또는 상기 명령어가 미지의 타입인 것을 가리키고, 여기서, 상기 타입 지시자를 액세스하는 스텝에서 상기 타입 지시자가 상기 명령어의 타입이 미지인 것을 가리킨다고 판정되는 경우에, 상기 단일 명령어를 검사하고 상기 단일 명령어가 상기 소정의 타입인지를 판정하는 추가의 스텝이 행해지는, 진단방법.
  8. 제 7 항에 있어서,
    상기 타입 지시자는 2개의 지시자 값을 포함하되, 첫 번째 값은 상기 명령어가 상기 소정의 타입인지 아닌지를 가리키고, 두 번째 유효값은 상기 첫 번째 값이 유효한지를 가리키되, 무효인 상기 두 번째 유효값은 상기 명령어가 상기 미지의 타입을 갖는 것을 가리키는, 진단방법.
  9. 제 7 항에 있어서,
    상기 타입 지시자는, 진단 예외를 둔 타입의 표시를 더 포함하는, 진단방법.
  10. 제 1 항, 제 2 항, 제 3 항, 제 4 항, 또는 제 6 항 중 어느 한 항에 있어서,
    상기 방법은, 단일 명령어를 이용하여 진단하는 스텝이 행해지는 것을 가리키는 단일 명령어 스텝 제어값을 설정하고, 상기 명령어 스트림에서의 단일 명령어를 실행한 후 다음의 진단 예외를 두는 것을 가리키는 스텝 지시자 값을 설정하는, 초기스텝을 포함하는, 진단방법.
  11. 제 10 항에 있어서,
    제로 명령어를 실행한 후 다음의 진단 예외를 두는 것을 가리키는 상기 스텝 지시자 값에 응답하여, 상기 타입 지시자는 상기 다음의 진단 예외를 둘 때 미지의 타입으로 설정되는, 진단방법.
  12. 제 10 항에 있어서,
    상기 다음의 진단 예외를 두기전에 프로세서 플러싱 상태에 응답하여, 상기 타입 지시자는 상기 실행된 명령어가 미지의 타입을 갖는 것을 가리키도록 설정되는, 진단방법.
  13. 제 1 항, 제 2 항, 제 3 항, 제 4 항 또는 제 6 항 중 어느 한 항에 있어서,
    상기 소정의 타입은, 예외에 들어가거나 그 예외로부터의 귀환시에 예외 핸들러에 의해 행해진 동작들이, 상기 명령어 스트림에서 적어도 하나의 이후의 명령어가 다르게 실행되도록 상기 프로세서를 구비한 장치의 상태를 변경하는 경우의 명령어의 타입을 포함하는, 진단방법.
  14. 제 13 항에 있어서,
    상기 적어도 하나의 소정의 타입의 명령어 중 하나는, 록(lock) 값과 클리어 값 중 하나를 기록하는 록 장소에 액세스하는 명령어를 포함하되, 상기 클리어 값은 프로세서가 소정의 기억장소에 기록할 수 있는 것을 가리키고, 상기 록 값은 상기 록 값을 기억한 프로세서의 상기 소정의 기억장소에의 배타적 기록 액세스를 가리키는, 진단방법.
  15. 데이터 처리장치에 의해 실행될 때 제 1 항, 제 2 항, 제 3 항, 제 4 항 또는 제 6 항 중 어느 한 항에 따른 상기 방법의 스텝들을 상기 데이터 처리장치를 제어하여 실행시키는 컴퓨터 프로그램을 기록한, 컴퓨터 판독 가능한 기록 매체.
  16. 명령어 스트림을 처리하는 프로세서를 분석하는 진단장치로서,
    제어신호들을 상기 프로세서에 출력하는 출력부와 상기 프로세서로부터 데이터를 수신하는 입력부; 및
    진단동작을 행하는 진단회로를 구비하고;
    상기 진단회로는, 제어신호를 상기 프로세서에 출력하여, 상기 명령어 스트림내의 단일 명령어를 실행하고나서 진단 예외를 두도록 상기 프로세서가 단일 스텝 모드에서 작동하는 것을 가리키는 지시자 값을 설정하도록 구성되고;
    상기 진단회로는, 상기 실행된 단일 명령어가 적어도 하나의 소정의 타입의 명령어 중 하나이었는지의 여부를 가리키는 타입 지시자를 기억하기 위한 기억장소에 액세스하도록 구성되고;
    상기 실행된 단일 명령어가 상기 소정의 타입의 하나가 아니었던 것을 가리키는 상기 타입 지시자에 응답하여, 상기 진단회로는 상기 프로세서를 제어하여, 상기 진단 예외로부터의 귀환시에 다음의 단일 명령어를 실행하도록 상기 단일 스텝 모드에서 명령어들을 계속 실행하도록 구성되고;
    상기 실행된 단일 명령어가 상기 적어도 하나의 소정의 타입의 하나이었던 것을 가리키는 상기 타입 지시자에 응답하여, 상기 진단회로는, 상기 프로세서를 제어하여, 상기 단일 스텝 모드를 빠져나가고, 단일 명령어 후의 진단 예외로서 상기 명령어 스트림내의 상기 다음의 명령어를 실행하지 않도록 구성된, 진단장치.
  17. 제 16 항에 있어서,
    상기 실행된 단일 명령어가 상기 적어도 하나의 소정의 타입 중 하나이었던 것을 가리키는 상기 타입 지시자에 응답하여, 상기 진단회로는, 상기 프로세서를 제어하여, 상기 진단 예외로부터의 귀환시에 상기 명령어 스트림내의 복수의 명령어를 실행하도록 구성되는, 진단장치.
  18. 제 17 항에 있어서,
    상기 복수의 명령어는, 상기 명령어 스트림에서 상기 실행된 단일 명령어 다음에 복수의 명령어를 포함하는, 진단장치.
  19. 제 17 항에 있어서,
    상기 복수의 명령어는, 상기 명령어 스트림에서 상기 실행된 단일 명령어에 계속되는 복수의 명령어이며, 상기 실행된 단일 명령어를 포함하는 복수의 명령어를 구비하는, 진단장치.
  20. 제 17 항 내지 제 19 항 중 어느 한 항에 있어서,
    상기 실행된 명령어가 상기 적어도 하나의 소정의 타입의 하나이었던 것을 가리키는 상기 타입 지시자에 응답하여, 상기 진단회로는, 상기 복수의 명령어 후에 상기 명령어 스트림내에 중지점을 설정하는, 진단장치.
  21. 제 16 항에 있어서,
    상기 진단회로는, 상기 명령어 스트림에서 상기 실행된 단일 명령어와 적어도 하나의 이후의 명령어를 에뮬레이트하고, 제어신호를 상기 프로세서에 발행하여, 에뮬레이트된 상기 적어도 하나의 이후의 명령어에 후속하는 명령어로부터 상기 단일 스텝 모드를 시작하는, 진단장치.
  22. 제 16 항, 제 17 항, 제 18 항, 제 19 항 또는 제 21 항 중 어느 한 항에 있어서,
    상기 기억장소에 기억된 상기 타입 지시자는, 상기 명령어가 상기 소정의 타입의 하나이었거나 상기 명령어가 상기 소정의 타입의 하나가 아니었거나, 또는 상기 명령어가 미지의 타입인 것을 가리키고, 상기 진단회로는, 상기 타입이 미지인 것을 가리키는 상기 타입 지시자에 응답하여, 상기 프로세서로부터 상기 단일의 실행된 명령어를 요구하고 상기 명령어로부터 상기 타입을 판정하는, 진단장치.
  23. 제 22 항에 있어서,
    상기 타입 지시자는 2개의 지시자 값을 포함하되, 첫 번째 값은 상기 명령어가 상기 소정의 타입인지 아닌지를 가리키고, 두 번째 유효값은 상기 첫 번째 값이 유효한지를 가리키되, 무효인 상기 두 번째 유효값은 상기 명령어가 상기 미지의 타입을 갖는 것을 가리키는, 진단장치.
  24. 제 16 항, 제 17 항, 제 18 항, 제 19 항 또는 제 21 항 중 어느 한 항에 있어서,
    상기 타입 지시자는, 진단 예외를 둔 타입의 표시를 더 포함하는, 진단장치.
  25. 명령어들로 이루어진 스트림을 처리하는 프로세서와 상기 프로세서를 분석하기 위한 청구항 16에 따른 진단장치를 구비한, 데이터 처리장치.
  26. 제 25 항에 있어서,
    상기 타입 지시자를 기억하는 기억장소를 포함하고, 상기 프로세서는, 상기 명령어 스트림으로부터 상기 단일 명령어를 실행하는 것에 응답하여, 상기 단일 명령어가 적어도 하나의 소정의 타입의 하나인지를 판정하고, 상기 단일 명령어가 상기 소정의 타입인지 아닌지의 여부를 가리키는 타입 지시자를 기억하는, 데이터 처리장치.
  27. 제 25 항 또는 제 26 항에 있어서,
    상기 프로세서는, 상기 단일 명령어 중 하나의 실행 후 상기 진단 예외이외의 예외를 두는 것에 응답하여, 상기 타입 지시자를, 상기 실행된 명령어가 미지의 타입을 갖는 가리키도록 설정하는, 데이터 처리장치.
  28. 제 25 항 또는 제 26 항에 있어서,
    상기 진단장치는, 단일 명령어를 이용하여 진단하는 스텝이 행해지는 것을 가리키는 단일 명령어 스텝 제어값을 설정하고, 상기 명령어 스트림에서의 단일 명령어를 실행한 후 다음의 진단 예외를 두는 것을 가리키는 스텝 지시자 값을 설정하는, 데이터 처리장치.
  29. 제 28 항에 있어서,
    상기 프로세서는, 상기 단일 명령어 중 하나의 실행 후 상기 진단 예외이외의 예외를 두는 것에 응답하여, 상기 예외로부터의 귀환시에 상기 스텝 지시자 값에 응답하여 명령어들이 실행되지 않고 상기 프로세서가 보류 진단 예외를 두도록, 제로 명령어를 가리키도록 상기 스텝 지시자 값을 설정하는, 데이터 처리장치.
  30. 제 25 항에 있어서,
    상기 적어도 하나의 소정의 타입의 명령어 중 하나는, 록 값과 클리어 값 중 하나를 기억하는 록 장소에 액세스하는 명령어를 포함하되, 상기 클리어 값은 프로세서가 소정의 기억장소에 기록할 수 있는 것을 가리키고, 상기 록 값은 상기 록 값을 기억한 프로세서의 상기 소정의 기억장소에의 배타적 기록 액세스를 가리키는, 데이터 처리장치.
  31. 데이터를 처리하는 프로세서와 제어 데이터를 기억하는 복수의 기억장소를 구비한 데이터 처리장치로서,
    상기 복수의 기억장소 중 적어도 하나는 단일 스텝 모드 제어값을 기억하고, 상기 데이터 처리장치는 단일 스텝 모드에서 명령어 스트림으로부터 명령어들을 실행하도록 설정되는 상기 단일 스텝 모드 제어값에 응답하여, 상기 명령어들 각각에 대한 실행 후 진단 예외를 두도록 구성되고;
    상기 프로세서는, 상기 단일 스텝 모드 제어값이 설정될 때, 상기 프로세서가 실행한 명령어마다 상기 명령어가 적어도 하나의 소정의 타입의 명령어를 갖는지를 판정하여 상기 복수의 기억장소 중 하나내에 타입 지시자를 기억하도록 구성되고, 상기 타입 지시자는, 상기 명령어가 상기 소정의 타입 중 하나이었거나, 상기 명령어가 상기 소정의 타입 중 하나가 아니었거나, 상기 명령어가 미지의 타입인 것을 가리키는, 데이터 처리장치.
  32. 제 31 항에 있어서,
    상기 타입 지시자의 스토어는, 상기 타입이 상기 소정의 타입인지 아닌지를 가리키는 첫 번째 값과, 상기 첫 번째 값이 유효한지 아닌지를 가리키는 두 번째 값으로 이루어진, 2개의 값에 대한 스토어를 포함하고, 상기 미지의 타입은 상기 첫 번째 값이 무효인 것을 가리키는 상기 두 번째 값으로 나타내어지는, 데이터 처리장치.
  33. 제 31 항에 있어서,
    상기 타입 지시자는, 진단 예외를 둔 타입의 표시를 더 포함하는, 데이터 처리장치.
  34. 제 31 항 내지 제 33 항 중 어느 한 항에 있어서,
    상기 데이터 처리장치는, 다음의 진단 예외를 두기전에 프로세서 플러싱 상태에 응답하여, 상기 타입 지시자를, 상기 실행된 명령어가 상기 미지의 타입을 갖는 것을 가리키도록 설정하는, 데이터 처리장치.
  35. 제 31 항 내지 제 33 항 중 어느 한 항에 있어서,
    상기 기억장소 중 하나는, 하나 또는 제로 중 어느 한쪽의 명령어를 실행한 후 다음의 진단 예외를 두는 것을 가리키는 스텝 지시자 값을 기억하도록 구성되고, 상기 데이터 처리장치는, 제로인 상기 스텝 지시자 값에 응답하여 상기 진단 예외를 둘 때 상기 타입 지시자를 상기 미지의 타입으로 설정하도록 구성되는, 데이터 처리장치.
  36. 제 30 항 또는 제 31 항에 있어서,
    상기 소정의 타입은, 예외에 들어가거나 그 예외로부터의 귀환시에 예외 핸들러에 의해 행해진 동작들이, 상기 명령어 스트림에서 이후의 명령어가 다르게 실행되도록 상기 데이터 처리장치의 상태를 변경하는 경우의 명령어의 타입을 포함하는, 데이터 처리장치.
  37. 삭제
  38. 삭제
KR1020137025702A 2011-03-14 2012-02-03 단일 스텝 실행을 이용한 코드 진단 KR102025078B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1104254.6 2011-03-14
GB1104254.6A GB2489000B (en) 2011-03-14 2011-03-14 Diagnosing code using single step execution
PCT/GB2012/050232 WO2012123706A1 (en) 2011-03-14 2012-02-03 Diagnosing code using single step execution

Publications (2)

Publication Number Publication Date
KR20140013005A KR20140013005A (ko) 2014-02-04
KR102025078B1 true KR102025078B1 (ko) 2019-11-04

Family

ID=43980928

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137025702A KR102025078B1 (ko) 2011-03-14 2012-02-03 단일 스텝 실행을 이용한 코드 진단

Country Status (10)

Country Link
US (2) US8839038B2 (ko)
EP (1) EP2686772B1 (ko)
JP (1) JP5905911B2 (ko)
KR (1) KR102025078B1 (ko)
CN (2) CN103430158B (ko)
GB (1) GB2489000B (ko)
IL (1) IL227769A (ko)
MY (1) MY158480A (ko)
TW (1) TWI544410B (ko)
WO (1) WO2012123706A1 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2489000B (en) * 2011-03-14 2019-09-11 Advanced Risc Mach Ltd Diagnosing code using single step execution
WO2013095532A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Interrupt return instruction with embedded interrupt service functionality
GB2517494B (en) * 2013-08-23 2021-02-24 Advanced Risc Mach Ltd Handling time intensive instructions
US9411542B2 (en) * 2014-02-21 2016-08-09 Analog Devices Global Interruptible store exclusive
WO2016014081A1 (en) * 2014-07-25 2016-01-28 Hewlett-Packard Development Company, L.P. Exception handling predicate register
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
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
US10390798B2 (en) * 2015-04-10 2019-08-27 Oxford University Innovation Limited Computer-aided tracking and motion analysis with ultrasound for measuring joint kinematics
WO2017109442A1 (en) * 2015-12-22 2017-06-29 Arm Limited A method, apparatus and system for diagnosing a processor executing a stream of instructions
CN106371996B (zh) * 2016-09-07 2019-05-28 东信和平科技股份有限公司 一种断电测试方法及系统
CN114185324B (zh) * 2021-10-25 2024-04-02 华能澜沧江水电股份有限公司 自动发电控制程序的异常点检测方法、装置及计算机设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060294326A1 (en) 2005-06-23 2006-12-28 Jacobson Quinn A Primitives to enhance thread-level speculation

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6376028A (ja) * 1986-09-19 1988-04-06 Fujitsu Ltd 仮想計算機システムにおける命令ステツプ実行制御方式
US4819234A (en) * 1987-05-01 1989-04-04 Prime Computer, Inc. Operating system debugger
US5050168A (en) * 1989-12-29 1991-09-17 Paterson Timothy L Test coverage analyzer
JP3205841B2 (ja) * 1991-10-25 2001-09-04 株式会社日立製作所 データ処理装置
US5621886A (en) * 1995-06-19 1997-04-15 Intel Corporation Method and apparatus for providing efficient software debugging
US5790843A (en) * 1996-09-19 1998-08-04 International Business Machines Corporation System for modifying microprocessor operations independently of the execution unit upon detection of preselected opcodes
US5938778A (en) * 1997-11-10 1999-08-17 International Business Machines Corporation System and method for tracing instructions in an information handling system without changing the system source code
JP2000076095A (ja) * 1998-08-28 2000-03-14 Fujitsu Ltd プログラムトレース装置およびプログラムトレース方法およびそのプログラムを記憶した記憶媒体
CN1148656C (zh) * 1999-09-07 2004-05-05 皇家菲利浦电子有限公司 面向线程的调试
US6981226B2 (en) * 2000-08-07 2005-12-27 Siemens Aktiengesellschaft Flowchart programming for industrial controllers, in particular motion controllers
US6986026B2 (en) * 2000-12-15 2006-01-10 Intel Corporation Single-step processing and selecting debugging modes
GB0124563D0 (en) * 2001-10-12 2001-12-05 Siroyan Ltd Debug exception registers
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
JP3982353B2 (ja) 2002-07-12 2007-09-26 日本電気株式会社 フォルトトレラントコンピュータ装置、その再同期化方法及び再同期化プログラム
US7062684B2 (en) * 2002-12-19 2006-06-13 International Business Machines Corporation Enabling tracing of a repeat instruction
US20050028036A1 (en) * 2003-07-30 2005-02-03 Kohsaku Shibata Program debug apparatus, program debug method and program
US7356735B2 (en) * 2004-03-30 2008-04-08 Intel Corporation Providing support for single stepping a virtual machine in a virtual machine environment
US7277998B1 (en) 2004-08-12 2007-10-02 Vmware, Inc. Restricting memory access to protect data when sharing a common address space
JP4537908B2 (ja) 2005-03-29 2010-09-08 株式会社東芝 プロセッサ、メモリ、コンピュータシステムおよびシステムlsi
US20070168729A1 (en) 2005-12-06 2007-07-19 Mediatek Inc. System and method for testing and debugging electronic apparatus in single connection port
US7996835B2 (en) * 2006-10-10 2011-08-09 International Business Machines Corporation System, method and program for managing communication with multiple configurations for virtual machine
US7853834B2 (en) * 2007-01-30 2010-12-14 Freescale Semiconductor, Inc. Instruction-based timer control during debug
US7823022B2 (en) * 2007-02-20 2010-10-26 Red Hat, Inc. Methods and systems for first occurence debugging
US7827391B2 (en) * 2007-06-26 2010-11-02 International Business Machines Corporation Method and apparatus for single-stepping coherence events in a multiprocessor system under software control
US8261240B2 (en) * 2008-01-15 2012-09-04 Microsoft Corporation Debugging lazily evaluated program components
US7992043B2 (en) * 2008-10-22 2011-08-02 International Business Machines Corporation Software debugger for packets in a network on a chip
US8429622B2 (en) * 2010-04-15 2013-04-23 Oracle International Corporation Business process debugger with parallel-step debug operation
US20120102469A1 (en) * 2010-10-22 2012-04-26 International Business Machines Corporation Deterministic application breakpoint halting by logically relating breakpoints in a graph
TW201235833A (en) * 2011-02-16 2012-09-01 Ind Tech Res Inst System and method for multi-core synchronous debugging of a multi-core platform
GB2489000B (en) * 2011-03-14 2019-09-11 Advanced Risc Mach Ltd Diagnosing code using single step execution
US8522213B2 (en) * 2011-05-12 2013-08-27 International Business Machines Corporation Debugger and debugging methods using breakpoints conditioned on the static identity of data

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060294326A1 (en) 2005-06-23 2006-12-28 Jacobson Quinn A Primitives to enhance thread-level speculation

Also Published As

Publication number Publication date
EP2686772B1 (en) 2018-11-28
CN103430158A (zh) 2013-12-04
JP2014508367A (ja) 2014-04-03
IL227769A (en) 2015-03-31
CN103430158B (zh) 2017-08-04
EP2686772A1 (en) 2014-01-22
WO2012123706A1 (en) 2012-09-20
CN107577593B (zh) 2021-07-06
GB201104254D0 (en) 2011-04-27
US8839038B2 (en) 2014-09-16
US9201749B2 (en) 2015-12-01
US20120239913A1 (en) 2012-09-20
GB2489000B (en) 2019-09-11
JP5905911B2 (ja) 2016-04-20
TWI544410B (zh) 2016-08-01
MY158480A (en) 2016-10-14
KR20140013005A (ko) 2014-02-04
GB2489000A (en) 2012-09-19
TW201237749A (en) 2012-09-16
US20140344621A1 (en) 2014-11-20
CN107577593A (zh) 2018-01-12
IL227769A0 (en) 2013-09-30

Similar Documents

Publication Publication Date Title
KR102025078B1 (ko) 단일 스텝 실행을 이용한 코드 진단
US7849450B1 (en) Devices, methods and computer program products for reverse execution of a simulation
JP4094724B2 (ja) ソフトウェアをデバッグする際に例外を識別するための装置および方法
JP4222370B2 (ja) デバッグ支援装置及びデバッグ処理方法をコンピュータに実行させるためのプログラム
US8903703B2 (en) Dynamically adjusting speed versus accuracy of computer platform simulation
US7415699B2 (en) Method and apparatus for controlling execution of a child process generated by a modified parent process
KR20070109432A (ko) 커널 인지 디버깅 장치 및 방법
US20180173612A1 (en) Debugging method
US20110179399A1 (en) Establishing a useful debugging state for multithreaded computer program
CN111133418B (zh) 在例外屏蔽更新指令之后允许未中止的事务处理
US9697040B2 (en) Software replayer for transactional memory programs
JPH11110255A (ja) ソフトウェアをデバッグするための装置および方法
US7496899B2 (en) Preventing loss of traced information in a data processing apparatus
US11030075B2 (en) Efficient register breakpoints
JPH02294739A (ja) 障害検出方式
US10747647B2 (en) Method, apparatus and system for diagnosing a processor executing a stream of instructions
US9417987B2 (en) Advisory warning and workaround indications to user when stopped between load and store conditional instructions while using source level debuggers
KR20210087431A (ko) 트랜잭션 메모리를 위한 장치 및 데이터 처리 방법
JP2004054807A (ja) 情報処理方法および装置
Zhou et al. A. Summary of the Work
JPS62143177A (ja) ベクトル処理装置

Legal Events

Date Code Title Description
A201 Request for examination
AMND Amendment
AMND Amendment
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
AMND Amendment
X701 Decision to grant (after re-examination)
GRNT Written decision to grant