⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 debugger.s

📁 俄罗斯高人Mamaich的Pocket gcc编译器(运行在PocketPC上)的全部源代码。
💻 S
字号:
/****************************************************************************		THIS SOFTWARE IS NOT COPYRIGHTED   HP offers the following for use in the public domain.  HP makes no   warranty with regard to the software or it's performance and the   user accepts the software "AS IS" with all faults.   HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD   TO THIS SOFTWARE INCLUDING BUT NOT LIMITED TO THE WARRANTIES   OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.****************************************************************************/	.space	$TEXT$	.subspa	$CODE$,access=0x2c#if 1#include	"diagnose.h"#endifi13BREAK	.equ    0xa5a			; im13 field for specified functionsi5REG		.equ	0x06			; Init registersi5BP		.equ	0x09			; GDB breakpoini5PSW		.equ	0x0b			; Get PSWi5INLINE	.equ	0x0e			; Get INLINER_gr0		.equ	 0R_gr1		.equ	 4R_gr2		.equ	 8R_gr3		.equ	12R_gr4		.equ	16R_gr5		.equ	20R_gr6		.equ	24R_gr7		.equ	28R_gr8		.equ	32R_gr9		.equ	36R_gr10		.equ	40R_gr11		.equ	44R_gr12		.equ	48R_gr13		.equ	52R_gr14		.equ	56R_gr15		.equ	60R_gr16		.equ	64R_gr17		.equ	68R_gr18		.equ	72R_gr19		.equ	76R_gr20		.equ	80R_gr21		.equ	84R_gr22		.equ	88R_gr23		.equ	92R_gr24		.equ	96R_gr25		.equ	100R_gr26		.equ	104R_gr27		.equ	108R_gr28		.equ	112R_gr29		.equ	116R_gr30		.equ	120R_gr31		.equ	124R_sr0		.equ	128R_sr1		.equ	132R_sr2		.equ	136R_sr3		.equ	140R_sr4		.equ	144R_sr5		.equ	148R_sr6		.equ	152R_sr7		.equ	156R_cr0		.equ	160R_cr1		.equ	164R_cr2		.equ	168R_cr3		.equ	172R_cr4		.equ	176R_cr5		.equ	180R_cr6		.equ	184R_cr7		.equ	188R_cr8		.equ	192R_cr9		.equ	196R_cr10		.equ	200R_cr11		.equ	204R_cr12		.equ	208R_cr13		.equ	212R_cr14		.equ	216R_cr15		.equ	220R_cr16		.equ	224R_cr17H		.equ	228R_cr18H		.equ	232R_cr19		.equ	236R_cr20		.equ	240R_cr21		.equ	244R_cr22		.equ	248R_cr23		.equ	252R_cr24		.equ	256R_cr25		.equ	260R_cr26		.equ	264R_cr27		.equ	268R_cr28		.equ	272R_cr29		.equ	276R_cr30		.equ	280R_cr31		.equ	284R_cr17T		.equ	288R_cr18T		.equ	292R_cpu0		.equ	296R_SIZE          .equ	300min_stack	.equ     64	.import	handle_exception	.import $global$, data	.IMPORT putnum, code	.IMPORT led_putnum, code	.IMPORT delay, code        .export FICE	.export	DEBUG_GO	.export	DEBUG_SS	.export	STUB_RESTORE	.export	save_regs	.export	RegBlk	.export Exception_index;-------------------------------------------------------------------------------        .EXPORT breakpoint,ENTRY,ARGW0=GR,RTNVAL=GRbreakpoint	.PROC	.CALLINFO CALLER,FRAME=128,SAVE_RP	.ENTRY	stw     %r2,-20(0,%r30)			; stash the return pointer	ldo	128(%r30),%r30			; push up the stack pointer;;; debug	ldi	6, %r26	bl,n	led_putnum,%r2	nop        ldil 	L'900000,%r26        ldo 	R'900000(%r26),%r26	bl,n	delay,%r2	nop;;; 	break   i5INLINE,i13BREAK;;; more debug	ldi	7, %r26	bl,n	led_putnum,%r2	nop        ldil 	L'900000,%r26        ldo 	R'900000(%r26),%r26	bl,n	delay,%r2	nop;;; 	FICE	fice	0(0,%r26)			; Flush the i cache entry	sync	ldw 	-148(0,%r30),%r2		; retrieve the return pointer	ldo 	-128(%r30),%r30			; reset the stack pointer	bv,n    0(%r2)				; return to caller	nop	.EXIT	.PROCEND;-------------------------------------------------------------------------------DEBUG_GO	or,tr	%r0,%r0,%r10	; if go, do not set R-bit to 1DEBUG_SS	ldi	1,%r10		; else set R-bit to 1DEBUG_EXEC	bl	DGO_0,%r8			; r8 points to register block	addil	L%RegBlk-DGO_0,%r8DGO_0	ldo	R%RegBlk-DGO_0(%r1),%r8; load space registers	ldw	R_sr0(%r8),%r1	mtsp	%r1,%sr0	ldw	R_sr1(%r8),%r1	mtsp	%r1,%sr1	ldw	R_sr2(%r8),%r1	mtsp	%r1,%sr2	ldw	R_sr3(%r8),%r1	mtsp	%r1,%sr3	ldw	R_sr4(%r8),%r1	mtsp	%r1,%sr4	ldw	R_sr5(%r8),%r1	mtsp	%r1,%sr5	ldw	R_sr6(%r8),%r1	mtsp	%r1,%sr6	ldw	R_sr7(%r8),%r1	mtsp	%r1,%sr7; clear Q-bit for rfi	rsm	0x08,%r0; load control registers	ldw	R_cr0(%r8),%r1	or,=	%r10,%r0,%r0		; if single step	copy	%r0,%r1			;   set %cr0 to 0	mtctl	%r1,%cr0	ldw	R_cr8(%r8),%r1	mtctl	%r1,%cr8	ldw	R_cr9(%r8),%r1	mtctl	%r1,%cr9	ldw	R_cr10(%r8),%r1	mtctl	%r1,%cr10	ldw	R_cr11(%r8),%r1	mtctl	%r1,%cr11	ldw	R_cr12(%r8),%r1	mtctl	%r1,%cr12	ldw	R_cr13(%r8),%r1	mtctl	%r1,%cr13	ldw	R_cr14(%r8),%r1	mtctl	%r1,%cr14	ldw	R_cr15(%r8),%r1	mtctl	%r1,%cr15	ldw	R_cr16(%r8),%r1	mtctl	%r1,%cr16	ldw	R_cr17H(%r8),%r1	; load iiasq.head	mtctl	%r1,%cr17	ldw	R_cr18H(%r8),%r1	; load iiaoq.head	mtctl	%r1,%cr18	ldw	R_cr17T(%r8),%r1	; load iiasq.tail	mtctl	%r1,%cr17	ldw	R_cr18T(%r8),%r1	; load iiaoq.tail	mtctl	%r1,%cr18	ldw	R_cr19(%r8),%r1	mtctl	%r1,%cr19	ldw	R_cr20(%r8),%r1	mtctl	%r1,%cr20	ldw	R_cr21(%r8),%r1	mtctl	%r1,%cr21	ldw	R_cr22(%r8),%r1	dep	%r10,27,1,%r1		; set R-bit if applicable	mtctl	%r1,%cr22	ldw	R_cr23(%r8),%r1	mtctl	%r1,%cr23	ldw	R_cr24(%r8),%r1	mtctl	%r1,%cr24	ldw	R_cr25(%r8),%r1	mtctl	%r1,%cr25	ldw	R_cr26(%r8),%r1	mtctl	%r1,%cr26	ldw	R_cr27(%r8),%r1	mtctl	%r1,%cr27	ldw	R_cr28(%r8),%r1	mtctl	%r1,%cr28	ldw	R_cr29(%r8),%r1	mtctl	%r1,%cr29	ldw	R_cr30(%r8),%r1	mtctl	%r1,%cr30	ldw	R_cr31(%r8),%r1	mtctl	%r1,%cr31; load diagnose registers	ldw	R_cpu0(%r8),%r1	ldil	L%CPU0_MASK,%r2	ldo	R%CPU0_MASK(%r2),%r2	xor	%r1,%r2,%r1		; xor the read/clear bits	nop	mtcpu	%r1,0	mtcpu	%r1,0; load general registers	ldw	R_gr1(%r8),%r1	ldw	R_gr2(%r8),%r2	ldw	R_gr3(%r8),%r3	ldw	R_gr4(%r8),%r4	ldw	R_gr5(%r8),%r5	ldw	R_gr6(%r8),%r6	ldw	R_gr7(%r8),%r7	ldw	R_gr9(%r8),%r9	ldw	R_gr10(%r8),%r10	ldw	R_gr11(%r8),%r11	ldw	R_gr12(%r8),%r12	ldw	R_gr13(%r8),%r13	ldw	R_gr14(%r8),%r14	ldw	R_gr15(%r8),%r15	ldw	R_gr16(%r8),%r16	ldw	R_gr17(%r8),%r17	ldw	R_gr18(%r8),%r18	ldw	R_gr19(%r8),%r19	ldw	R_gr20(%r8),%r20	ldw	R_gr21(%r8),%r21	ldw	R_gr22(%r8),%r22	ldw	R_gr23(%r8),%r23	ldw	R_gr24(%r8),%r24	ldw	R_gr25(%r8),%r25	ldw	R_gr26(%r8),%r26	ldw	R_gr27(%r8),%r27	ldw	R_gr28(%r8),%r28	ldw	R_gr29(%r8),%r29	ldw	R_gr30(%r8),%r30	ldw	R_gr31(%r8),%r31	ldw	R_gr8(%r8),%r8; execute user program	nop	rfi		; switch to user code	nop;-------------------------------------------------------------------------------STUB_RESTORE	copy	%r1,%r9	; save exception index	bl	SR_00,%r8	addil	L%Exception_index-SR_00,%r8SR_00	ldo	R%Exception_index-SR_00(%r1),%r8	stw	%r9,(%r8)	bl	save_regs,%r25	nop	#ifdef	DEBUG_DEBUGGER1	stwm	%r1,8(%sp)	bl	putc,%rp	ldi	CR,%arg0	bl	putc,%rp	ldi	LF,%arg0	bl	printit,%mrp	mfctl	%pcoq,%arg0	mfctl	%pcoq,%r1	mtctl	%r1,%pcoq	mfctl	%pcoq,%arg0	bl	printit,%mrp	mtctl	%arg0,%pcoq	bl	printit,%mrp	ldw	-8(%sp),%arg0	ldwm	-8(%sp),%r1#endif#ifdef	DEBUG_DEBUGGER2	stwm	%r1,8(%sp)	bl	putc,%rp	ldi	LF,%arg0	ldwm	-8(%sp),%r1#endif#ifdef	DEBUG_DEBUGGER3	bl	printit,%mrp	copy	iptr,%arg0	bl	printit,%mrp	copy	rstack,%arg0	bl	printit,%mrp	copy	gspace,%arg0	bl	printit,%mrp	copy	dstack,%arg0	bl	printit,%mrp	copy	nextptr,%arg0	bl	printit,%mrp	copy	%dp,%arg0	bl	printit,%mrp	copy	%sp,%arg0	bl	printit,%mrp	mfctl	%rctr,%arg0	bl	printit,%mrp	mfctl	%iva,%arg0	bl	printit,%mrp	mfctl	%eiem,%arg0	bl	printit,%mrp	mfctl	%ipsw,%arg0	bl	printit,%mrp	copy	%r0,%arg0#endif	bl	SR_1,%sp	addil	L%Stub_stack-SR_1,%spSR_1	ldo	R%Stub_stack-SR_1(%r1),%sp	; set the stack pointer	bl	SR_2,%arg0	addil	L%RegBlk-SR_2,%arg0SR_2	ldo	R%RegBlk-SR_2(%r1),%arg0	; set arg0 (save register area)	bl	SR_3,%arg1	addil	L%Exception_index-SR_3,%arg1	; set arg1 addressSR_3	ldo	R%Exception_index-SR_3(%r1),%arg1	; set arg1 address	addi	min_stack,%sp,%sp		; allocate min stack frame	bl	handle_exception,%r2	ldw	0(%arg1),%arg1			; load arg1        addi	-min_stack,%sp,%sp		; de allocate min stack frame	b	DEBUG_EXEC			; 	copy	%r28,%r10	;-------------------------------------------------------------------------------save_regs	; return address is in %r25	bl	SR_0,%r1			; r1 points to Register block	addil   L%RegBlk-SR_0,%r1SR_0	ldo     R%RegBlk-SR_0(%r1),%r1; save general registers	stw	%r0,R_gr0(%r1)	; don't store %r1 yet	stw	%r2,R_gr2(%r1)	stw	%r3,R_gr3(%r1)	stw	%r4,R_gr4(%r1)	stw	%r5,R_gr5(%r1)	stw	%r6,R_gr6(%r1)	stw	%r7,R_gr7(%r1)	; don't store %r8 yet	; don't store %r9 yet	stw	%r10,R_gr10(%r1)	stw	%r11,R_gr11(%r1)	stw	%r12,R_gr12(%r1)	stw	%r13,R_gr13(%r1)	stw	%r14,R_gr14(%r1)	stw	%r15,R_gr15(%r1)	; don't store %r16 yet	; don't store %r17 yet	stw	%r18,R_gr18(%r1)	stw	%r19,R_gr19(%r1)	stw	%r20,R_gr20(%r1)	stw	%r21,R_gr21(%r1)	stw	%r22,R_gr22(%r1)	stw	%r23,R_gr23(%r1)	; don't store %r24 yet	; don't store %r25 yet	stw	%r26,R_gr26(%r1)	stw	%r27,R_gr27(%r1)	stw	%r28,R_gr28(%r1)	stw	%r29,R_gr29(%r1)	stw	%r30,R_gr30(%r1)	stw	%r31,R_gr31(%r1); restore general registers from shadow registers and save them	copy	%r1,%r10	; hold Register block pointer	copy	%r25,%rp	; hold return pointer	shdw_gr	shdw_gr	stw	%r1,R_gr1(%r10)	stw	%r8,R_gr8(%r10)	stw	%r9,R_gr9(%r10)	stw	%r16,R_gr16(%r10)	stw	%r17,R_gr17(%r10)	stw	%r24,R_gr24(%r10)	stw	%r25,R_gr25(%r10); save control registers	mfctl	%cr0,%r1	stw	%r1,R_cr0(%r10)	stw	%r0,R_cr1(%r10)	stw	%r0,R_cr2(%r10)	stw	%r0,R_cr3(%r10)	stw	%r0,R_cr4(%r10)	stw	%r0,R_cr5(%r10)	stw	%r0,R_cr6(%r10)	stw	%r0,R_cr7(%r10)	mfctl	%cr8,%r1	stw	%r1,R_cr8(%r10)	mfctl	%cr9,%r1	stw	%r1,R_cr9(%r10)	mfctl	%cr10,%r1	stw	%r1,R_cr10(%r10)	mfctl	%cr11,%r1	stw	%r1,R_cr11(%r10)	mfctl	%cr12,%r1	stw	%r1,R_cr12(%r10)	mfctl	%cr13,%r1	stw	%r1,R_cr13(%r10)	mfctl	%cr14,%r1	stw	%r1,R_cr14(%r10)	mfctl	%cr15,%r1	stw	%r1,R_cr15(%r10)	mfctl	%cr16,%r1	stw	%r1,R_cr16(%r10)	mfctl	%cr17,%r1	stw	%r1,R_cr17H(%r10)	mtctl	%r1,%cr17	mfctl	%cr17,%r1	stw	%r1,R_cr17T(%r10)	mtctl	%r1,%cr17	mfctl	%cr18,%r1	stw	%r1,R_cr18H(%r10)	mtctl	%r1,%cr18	mfctl	%cr18,%r1	stw	%r1,R_cr18T(%r10)	mtctl	%r1,%cr18	mfctl	%cr19,%r1	stw	%r1,R_cr19(%r10)	mfctl	%cr20,%r1	stw	%r1,R_cr20(%r10)	mfctl	%cr21,%r1	stw	%r1,R_cr21(%r10)	mfctl	%cr22,%r1	stw	%r1,R_cr22(%r10)	mfctl	%cr23,%r1	stw	%r1,R_cr23(%r10)	mfctl	%cr24,%r1	stw	%r1,R_cr24(%r10)	mfctl	%cr25,%r1	stw	%r1,R_cr25(%r10)	mfctl	%cr26,%r1	stw	%r1,R_cr26(%r10)	mfctl	%cr27,%r1	stw	%r1,R_cr27(%r10)	mfctl	%cr28,%r1	stw	%r1,R_cr28(%r10)	mfctl	%cr29,%r1	stw	%r1,R_cr29(%r10)	mfctl	%cr30,%r1	stw	%r1,R_cr30(%r10)	mfctl	%cr31,%r1	stw	%r1,R_cr31(%r10); save diagnose registers	mfcpu_c	0,%r1	mfcpu_c	0,%r1	stw	%r1,R_cpu0(%r10); save space registers	mfsp	%sr0,%r1	stw	%r1,R_sr0(%r10)	mfsp	%sr1,%r1	stw	%r1,R_sr1(%r10)	mfsp	%sr2,%r1	stw	%r1,R_sr2(%r10)	mfsp	%sr3,%r1	stw	%r1,R_sr3(%r10)	mfsp	%sr4,%r1	stw	%r1,R_sr4(%r10)	mfsp	%sr5,%r1	stw	%r1,R_sr5(%r10)	mfsp	%sr6,%r1	stw	%r1,R_sr6(%r10)	mfsp	%sr7,%r1	bv	(%rp)	stw	%r1,R_sr7(%r10)#ifdef	DEBUG_DEBUGGER;-------------------------------------------------------------------------------printit	mtctl	%rp,%tr0	mtctl	%r1,%tr1	bl	putnum,%rp	copy	%rp,%arg0	mtctl	%mrp,%tr2	bl	putc,%rp	ldi	CR,%arg0	bl	putc,%rp	ldi	LF,%arg0	mfctl	%tr2,%mrp	mfctl	%tr1,%r1	bv	(%mrp)	mfctl	%tr0,%rp#endif	.space	$PRIVATE$	.subspa	$DATA$,align=4,access=0x1fException_index	.word	0	RegBlk	.block	R_SIZE		; register blockStub_stack	.block	1024	.end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -