1 /* 2 * Copyright 2003 Sun Microsystems, Inc. All Rights Reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 20 * CA 95054 USA or visit www.sun.com if you need additional information or 21 * have any questions. 22 * 23 */ 24 25 package sun.jvm.hotspot.debugger.ia64; 26 27 import sun.jvm.hotspot.debugger.*; 28 29 /** Specifies the thread context on ia64 platform; only a sub-portion 30 of the context is guaranteed to be present on all operating 31 systems. */ 32 33 public abstract class IA64ThreadContext implements ThreadContext { 34 // Refer to winnt.h CONTEXT structure - Nov 2001 edition Platform SDK 35 // only a relevant subset of CONTEXT structure is used here. 36 // For eg. floating point registers are ignored. 37 38 // NOTE: the indices for the various registers must be maintained as 39 // listed across various operating systems. However, only a 40 // subset of the registers' values are guaranteed to be present 41 42 // global registers r0-r31 43 public static final int GR0 = 0; 44 public static final int GR1 = 1; 45 public static final int GR2 = 2; 46 public static final int GR3 = 3; 47 public static final int GR4 = 4; 48 public static final int GR5 = 5; 49 public static final int GR6 = 6; 50 public static final int GR7 = 7; 51 public static final int GR8 = 8; 52 public static final int GR9 = 9; 53 public static final int GR10 = 10; 54 public static final int GR11 = 11; 55 public static final int GR12 = 12; 56 public static final int SP = GR12; 57 public static final int GR13 = 13; 58 public static final int GR14 = 14; 59 public static final int GR15 = 15; 60 public static final int GR16 = 16; 61 public static final int GR17 = 17; 62 public static final int GR18 = 18; 63 public static final int GR19 = 19; 64 public static final int GR20 = 20; 65 public static final int GR21 = 21; 66 public static final int GR22 = 22; 67 public static final int GR23 = 23; 68 public static final int GR24 = 24; 69 public static final int GR25 = 25; 70 public static final int GR26 = 26; 71 public static final int GR27 = 27; 72 public static final int GR28 = 28; 73 public static final int GR29 = 29; 74 public static final int GR30 = 30; 75 public static final int GR31 = 31; 76 77 // Nat bits for r1-r31 78 public static final int INT_NATS = 32; 79 80 // predicates 81 public static final int PREDS = 33; 82 83 // branch registers 84 public static final int BR0 = 34; 85 public static final int BR_RP = BR0; 86 public static final int BR1 = 35; 87 public static final int BR2 = 36; 88 public static final int BR3 = 37; 89 public static final int BR4 = 38; 90 public static final int BR5 = 39; 91 public static final int BR6 = 40; 92 public static final int BR7 = 41; 93 94 // application registers 95 public static final int AP_UNAT = 42; // User Nat Collection register 96 public static final int AP_LC = 43; // Loop counter register 97 public static final int AP_EC = 43; // Epilog counter register 98 public static final int AP_CCV = 45; // CMPXCHG value register 99 public static final int AP_DCR = 46; // Default control register 100 101 // register stack info 102 public static final int RS_PFS = 47; // Previous function state 103 public static final int AP_PFS = RS_PFS; 104 public static final int RS_BSP = 48; // Backing store pointer 105 public static final int AR_BSP = RS_BSP; 106 public static final int RS_BSPSTORE = 49; 107 public static final int AP_BSPSTORE = RS_BSPSTORE; 108 public static final int RS_RSC = 50; // RSE configuration 109 public static final int AP_RSC = RS_RSC; 110 public static final int RS_RNAT = 51; // RSE Nat collection register 111 public static final int AP_RNAT = RS_RNAT; 112 113 // trap status register 114 public static final int ST_IPSR = 52; // Interuption Processor Status 115 public static final int ST_IIP = 53; // Interruption IP 116 public static final int ST_IFS = 54; // Interruption Function State 117 118 // debug registers 119 public static final int DB_I0 = 55; 120 public static final int DB_I1 = 56; 121 public static final int DB_I2 = 57; 122 public static final int DB_I3 = 58; 123 public static final int DB_I4 = 59; 124 public static final int DB_I5 = 60; 125 public static final int DB_I6 = 61; 126 public static final int DB_I7 = 62; 127 128 public static final int DB_D0 = 63; 129 public static final int DB_D1 = 64; 130 public static final int DB_D2 = 65; 131 public static final int DB_D3 = 66; 132 public static final int DB_D4 = 67; 133 public static final int DB_D5 = 68; 134 public static final int DB_D6 = 69; 135 public static final int DB_D7 = 70; 136 137 public static final int NPRGREG = 71; 138 139 private static final String[] regNames = { 140 "GR0", "GR1", "GR2", "GR3", "GR4", "GR5", "GR6", "GR7", "GR8", 141 "GR9", "GR10", "GR11", "GR12", "GR13", "GR14", "GR15", "GR16", 142 "GR17","GR18", "GR19", "GR20", "GR21", "GR22", "GR23", "GR24", 143 "GR25","GR26", "GR27", "GR28", "GR29", "GR30", "GR31", 144 "INT_NATS", "PREDS", 145 "BR0", "BR1", "BR2", "BR3", "BR4", "BR5", "BR6", "BR7", 146 "AP_UNAT", "AP_LC", "AP_EC", "AP_CCV", "AP_DCR", 147 "RS_FPS", "RS_BSP", "RS_BSPSTORE", "RS_RSC", "RS_RNAT", 148 "ST_IPSR", "ST_IIP", "ST_IFS", 149 "DB_I0", "DB_I1", "DB_I2", "DB_I3", "DB_I4", "DB_I5", "DB_I6", "DB_I7", 150 "DB_D0", "DB_D1", "DB_D2", "DB_D3", "DB_D4", "DB_D5", "DB_D6", "DB_D7" 151 }; 152 153 private long[] data; 154 155 public IA64ThreadContext() { 156 data = new long[NPRGREG]; 157 } 158 159 public int getNumRegisters() { 160 return NPRGREG; 161 } 162 163 public String getRegisterName(int index) { 164 return regNames[index]; 165 } 166 167 public void setRegister(int index, long value) { 168 data[index] = value; 169 } 170 171 public long getRegister(int index) { 172 return data[index]; 173 } 174 175 /** This can't be implemented in this class since we would have to 176 tie the implementation to, for example, the debugging system */ 177 public abstract void setRegisterAsAddress(int index, Address value); 178 179 /** This can't be implemented in this class since we would have to 180 tie the implementation to, for example, the debugging system */ 181 public abstract Address getRegisterAsAddress(int index); 182 }