2012-09-07 2 views
2

임베디드 PPC 플랫폼에서 디버깅을하고 있습니다. (아치는 ppc750입니다.) 바이너리가 충돌하면 gdb에 'info registers'를 입력하면 DAR (데이터 액세스 레지스터)의 내용을 볼 수 없습니다.), 어떤 프로그램이 읽는 것을 메모리 주소를 표시해야합니다 - 나는 나에게 예외의 유형을 알려줍니다 만 트랩 레지스터 얻을 :gdb를 사용하여 PPC에서 DAR (데이터 액세스 레지스터)의 내용을 어떻게 볼 수 있습니까?

(gdb) info registers 
r0    0x1034875e  271877982 
r1    0x7fffed30  2147478832 
r2    0xfd7f7a0  265811872 
[...] 
pc    0xf18d718  0xf18d718 
msr   0xd032 53298 
cr    0x80000848  2147485768 
lr    0xf18d6f8  0xf18d6f8 
ctr   0xf235d90  253975952 
xer   0x20000000  536870912 
orig_r3  0x26  38 
trap   0x300 768 

이도 가능를? gdb 7.0.1을 사용하고 있습니다. (오래된 것입니다.하지만 최신 버전은 우리의 고대 툴체인과 잘 어울리지 않습니다.)

답변

0

나는

는 지금까지 내가 말할 수있는 건, 그 레지스터 만/사용 가능한 커널 모드에서 사용할 수있는 DAR (데이터 액세스 레지스터)의 내용을 볼 수 없습니다.

"베어 메탈"에서 디버깅 하시겠습니까? 그렇지 않다면, 먼저 DAR 레지스터를 찾지 않아야합니다.

+0

아니요, "베어 메탈"에서는 디버깅하지 않지만 사용자 공간에서는 Linux에서 디버깅하지 않습니다. 나는 PPC에서도 SIGSEGV가 수신되면 무효 액세스를 야기한 주소가 신호 처리기 (si_addr 필드, IIRC)에서 사용 가능하다는 것을 알아 차렸다. 정보가 gdb에서 사용 가능한지 여부는 궁금합니다. gdb리스트에있는 사람들에 따르면, PPC의 $ _siginfo를 gdb 7.5에서 검사했지만, 우리는 고대 toolchain으로 빌드 된 바이너리로 7.3 이상을 사용하는 데 문제가있었습니다. – fencekicker

관련 문제