61 lines
1.2 KiB
ArmAsm
61 lines
1.2 KiB
ArmAsm
/*
|
|
* This file is subject to the terms and conditions of the GNU General Public
|
|
* License. See the file "COPYING" in the main directory of this archive
|
|
* for more details.
|
|
*
|
|
* Kernel debug stuff to use the Watch registers.
|
|
* Useful to find stack overflows, dangling pointers etc.
|
|
*
|
|
* Copyright (C) 1995, 1996, 1999 by Ralf Baechle
|
|
*/
|
|
#include <asm/asm.h>
|
|
#include <asm/mipsregs.h>
|
|
#include <asm/regdef.h>
|
|
|
|
.set noreorder
|
|
/*
|
|
* Parameter: a0 - logic address to watch
|
|
* Currently only KSEG0 addresses are allowed!
|
|
* a1 - set bit #1 to trap on load references
|
|
* bit #0 to trap on store references
|
|
* Results : none
|
|
*/
|
|
LEAF(__watch_set)
|
|
li t0, 0x80000000
|
|
subu a0, t0
|
|
ori a0, 7
|
|
xori a0, 7
|
|
or a0, a1
|
|
mtc0 a0, CP0_WATCHLO
|
|
sw a0, watch_savelo
|
|
|
|
jr ra
|
|
mtc0 zero, CP0_WATCHHI
|
|
END(__watch_set)
|
|
|
|
/*
|
|
* Parameter: none
|
|
* Results : none
|
|
*/
|
|
LEAF(__watch_clear)
|
|
jr ra
|
|
mtc0 zero, CP0_WATCHLO
|
|
END(__watch_clear)
|
|
|
|
/*
|
|
* Parameter: none
|
|
* Results : none
|
|
*/
|
|
LEAF(__watch_reenable)
|
|
lw t0, watch_savelo
|
|
jr ra
|
|
mtc0 t0, CP0_WATCHLO
|
|
END(__watch_reenable)
|
|
|
|
/*
|
|
* Saved value of the c0_watchlo register for watch_reenable()
|
|
*/
|
|
.data
|
|
watch_savelo: .word 0
|
|
.text
|