2017-03-29 1 views
2

breakpoint read/write은 어떻게 구현됩니까? 이는 breakpoint execute과 다릅니다.PowerPC에서 중단 점 읽기/쓰기 구현

아이디어는 데이터 메모리 주소로 시작한 다음 해당 주소에서 읽고 쓰는 어셈블리 명령어를 찾는 것입니다. 이론적으로, 우리는 이것이 사실인지 알아 내기 위해 레지스터와 실행중인 다음 명령 (변위 오프셋을 고려)을 검사해야합니다. 현재 명령어가 "저장 단어"라고 가정하면 : stw r0, 4 (r31) 주소는 r31 + 4에 기록됩니다. r31의 값을 읽고 4을 추가하고 이것이 초기 데이터 주소와 같은지 확인하여이 오류가 발생하는지 여부를 확인할 수 있습니다.

그러나 C 프로그래밍을 사용하면 어셈블리에서 모든 명령 실행을 모니터링 할 수 없기 때문에 이것은 믿을 수없는 것처럼 보입니다. 이 작업은 일반적으로 또는 PowerPC에 대해 어떻게 수행됩니까? 특별한 어셈블리 명령어 나 디버그 레지스터가 있습니까?

+0

참으로 '디버그 레지스터'. 현대의 모든 사소한 프로세서에는 브레이크 포인트 등 하드웨어가 내장되어 있습니다. 다중 코어, 파이프 라이닝 및 기타 기능/최적화를 사용하면 디버깅을 어렵게하는 것이 필수적입니다. – ThingyWotsit

답변

7

PowerPC에서 이와 같은 기능을 가진 다른 모든 CPU와 마찬가지로 하드웨어 지원이 수행됩니다. 검사해야 할 메모리 주소와 읽기 및/또는 쓰기 액세스 등을 설정하는 특수 레지스터 "데이터 주소 브레이크 포인트"(DABR)가 있습니다.

CPU가 인터럽트를 트리거합니다 데이터 저장 인터럽트)를 수행 할 수 있습니다. ISR에서 귀국 처분을 확인하기 위해 반송 주소를 확인한 다음 휴식을 초래 한 지시 사항의 프로그램 주소를 알아 내면됩니다.

자세한 내용은 PowerISA 설명서를 참조하십시오. (그들의 사이트는 http://www.power.org/은 atm 다운 것으로 보인다)

+0

사이트가 아직 다운되었으므로, 광범위한 문서를위한 다른 링크가 있습니까? – BullyWiiPlaza

+1

@BullyWiiPlaza 분명히 그들은 여기에 호스팅되어 있습니다 : https://openpowerfoundation.org. 그들은 매년 상표명이 너무 대중적이거나 성공할 위험이 없도록 매년 이름을 완전히 바꾸는 것을 좋아합니다. – Lundin

1

페이징이 켜져 있습니까? 그렇다면 변수를 페이지에 쓸 수없는 것으로 표시하고 결과 보호 오류를 트랩하고 변수에 대한 쓰기인지 확인하고 실행중인 경우 실행을 중단하십시오. 페이지에 다른 자주 사용되는 변수가 포함되어있을 때 약간 느릴 수 있습니다.

+0

페이지를 읽을 수 없도록 표시해야한다고 생각합니까? – sigjuice

+0

@sigjuice 읽기 액세스가 트랩되어야하는 경우 예입니다. – fuz