1 /* 2 * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. 3 * Copyright (c) 2015, Red Hat Inc. 4 * Copyright (c) 2021, Huawei Technologies Co., Ltd. All rights reserved. 5 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 6 * 7 * This code is free software; you can redistribute it and/or modify it 8 * under the terms of the GNU General Public License version 2 only, as 9 * published by the Free Software Foundation. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 * 25 */ 26 27 package sun.jvm.hotspot.debugger.proc.riscv64; 28 29 import sun.jvm.hotspot.debugger.*; 30 import sun.jvm.hotspot.debugger.riscv64.*; 31 import sun.jvm.hotspot.debugger.proc.*; 32 import sun.jvm.hotspot.utilities.*; 33 34 public class ProcRISCV64Thread implements ThreadProxy { 35 private ProcDebugger debugger; 36 private int id; 37 38 public ProcRISCV64Thread(ProcDebugger debugger, Address addr) { 39 this.debugger = debugger; 40 41 // FIXME: the size here should be configurable. However, making it 42 // so would produce a dependency on the "types" package from the 43 // debugger package, which is not desired. 44 this.id = (int) addr.getCIntegerAt(0, 4, true); 45 } 46 47 public ProcRISCV64Thread(ProcDebugger debugger, long id) { 48 this.debugger = debugger; 49 this.id = (int) id; 50 } 51 52 public ThreadContext getContext() throws IllegalThreadStateException { 53 ProcRISCV64ThreadContext context = new ProcRISCV64ThreadContext(debugger); 54 long[] regs = debugger.getThreadIntegerRegisterSet(id); 55 if (Assert.ASSERTS_ENABLED) { 56 Assert.that(regs.length == RISCV64ThreadContext.NPRGREG, "size mismatch"); 57 } 58 for (int i = 0; i < regs.length; i++) { 59 context.setRegister(i, regs[i]); 60 } 61 return context; 62 } 63 64 public boolean canSetContext() throws DebuggerException { 65 return false; 66 } 67 68 public void setContext(ThreadContext context) 69 throws IllegalThreadStateException, DebuggerException { 70 throw new DebuggerException("Unimplemented"); 71 } 72 73 public String toString() { 74 return "t@" + id; 75 } 76 77 public boolean equals(Object obj) { 78 if ((obj == null) || !(obj instanceof ProcRISCV64Thread)) { 79 return false; 80 } 81 82 return (((ProcRISCV64Thread) obj).id == id); 83 } 84 85 public int hashCode() { 86 return id; 87 } 88 }