Branch
Hash :
1a08f436
Author :
Date :
2010-08-25T09:23:17
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
\ ========== Copyright Header Begin ==========================================
\
\ Hypervisor Software File: arcbpsup.fth
\
\ Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
\
\ - Do no alter or remove copyright notices
\
\ - Redistribution and use of this software in source and binary forms, with
\ or without modification, are permitted provided that the following
\ conditions are met:
\
\ - Redistribution of source code must retain the above copyright notice,
\ this list of conditions and the following disclaimer.
\
\ - Redistribution in binary form must reproduce the above copyright notice,
\ this list of conditions and the following disclaimer in the
\ documentation and/or other materials provided with the distribution.
\
\ Neither the name of Sun Microsystems, Inc. or the names of contributors
\ may be used to endorse or promote products derived from this software
\ without specific prior written permission.
\
\ This software is provided "AS IS," without a warranty of any kind.
\ ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
\ INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
\ PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
\ MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
\ ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
\ DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
\ OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
\ FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
\ DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
\ ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
\ SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
\
\ You acknowledge that this software is not designed, licensed or
\ intended for use in the design, construction, operation or maintenance of
\ any nuclear facility.
\
\ ========== Copyright Header End ============================================
id: @(#)arcbpsup.fth 1.16 06/02/16
purpose:
copyright: Copyright 2006 Sun Microsystems, Inc. All Rights Reserved
copyright: Use is subject to license terms.
\ System-architecture-dependent definitions for breakpoints.
headerless
h# 17f constant breakpoint-trap#
0 value bp-vadr
pagesize 2* constant bp-va-size
bp-va-size 1- constant bp-va-mask
h# 8000.0000 \ Class 2
h# 1000.0000 + \ condition always
h# 1d0.0000 + \ Trap on Integer Condition Codes
h# 2000 + \ Immediate
breakpoint-trap# h# ff and + constant sun4u-bp-opcode
: arch-bp-trap? ( -- flag ) last-trap# breakpoint-trap# = ;
: page-valid? ( vadr -- flag )
\ This used to contain prom-virt? unfortunately that allows
\ addresses that are in the VPT to be considered as valid stack
\ pointers, so now we crop the range down to just OBP. BUGID: 4262883
dup ROMbase RAMtop between if pgmap@ valid-tte? exit then
0 find-client-tte if ( tte vadr )
2drop true ( flag )
else ( )
false ( flag )
then ( flag )
;
' page-valid? is accessible?
: sun4u-op@ ( adr -- op|0 )
dup accessible? if l@ else drop 0 then
;
: va>pa ( vadr -- pa.lo pa.hi true -or- false )
dup 0 find-client-tte if ( vadr tte vadr' )
drop tuck tte>size 1- and ( tte offset )
swap tte> >r or r> true ( pa.lo pa.hi true )
else ( vadr )
drop false ( false )
then
;
: sun4u-op! ( op adr -- )
dup accessible? 0= if 2drop exit then ( op adr )
\ prom addresses cannot be breakpointed
dup prom-virt? if 2drop exit then ( op adr )
dup va>pa if ( op vadr pa.lo pa.hi )
rot bp-va-mask and ( op pa.lo pa.hi offset )
dup bp-vadr or ( op pa.lo pa.hi bpoffset bpva )
2>r r@ map-page ( op ) ( r: bpoffset bpva )
\ Store the instruction and IFLUSH
r> instruction! r> ( bpoffset )
\ Force D$ displacement flush
origin+ l@ drop ( )
\ trigger a demap of bp-vadr
bp-vadr unmap-page ( )
else ( op adr )
2drop ( )
then ( )
;
stand-init: Install breakpoint ops
['] sun4u-op@ is op@
['] sun4u-op! is op!
['] arch-bp-trap? is breakpoint-trap?
sun4u-bp-opcode is breakpoint-opcode
bp-va-size dup mmu-claim is bp-vadr
;