From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11582 invoked by alias); 20 Dec 2007 17:56:41 -0000 Received: (qmail 11544 invoked by uid 367); 20 Dec 2007 17:56:38 -0000 Date: Thu, 20 Dec 2007 17:56:00 -0000 Message-ID: <20071220175638.11529.qmail@sourceware.org> From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Add common class frysk.bank.RegisterMap; use. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: c2b6a3842249b6dead1331a6830a314ba844e091 X-Git-Newrev: 92674d4e204276b5cba183da814aa57fa71d4423 Mailing-List: contact frysk-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: frysk-cvs-owner@sourceware.org Reply-To: frysk@sourceware.org X-SW-Source: 2007-q4/txt/msg00615.txt.bz2 The branch, master has been updated via 92674d4e204276b5cba183da814aa57fa71d4423 (commit) via ca81efcc6c72d226ca5a1098cd2e9014b2b5d885 (commit) via dfbbcc3161402d2b125ad9d863442513da37c135 (commit) via 13de2cef03a5c48cb98ea8c08cdf1e0deb6793ad (commit) from c2b6a3842249b6dead1331a6830a314ba844e091 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 92674d4e204276b5cba183da814aa57fa71d4423 Author: Andrew Cagney Date: Thu Dec 20 12:53:59 2007 -0500 Add common class frysk.bank.RegisterMap; use. frysk-core/frysk/bank/ChangeLog 2007-12-20 Andrew Cagney * RegisterMap.java: New file. * BankRegisterMap.java: Extend RegisterMap.java. * BankArrayRegisterMap.java: Ditto. * BankArrayRegister.java: Extend BankRegister. * IndirectBankArrayRegisterMap.java: Update. frysk-core/frysk/proc/ChangeLog 2007-12-20 Andrew Cagney * LinuxPPC32On64.java (getRegisterByName()): Delete. commit ca81efcc6c72d226ca5a1098cd2e9014b2b5d885 Author: Andrew Cagney Date: Thu Dec 20 12:20:42 2007 -0500 Give register banks names that reflect the ptrace requests. frysk-core/frysk/bank/ChangeLog 2007-12-20 Andrew Cagney * LinuxPPCRegisterBanks.java (USR32): Rename PPC32BE. (USR64): Rename PPC64BE. * LinuxX8664RegisterBanks.java (REGS): Rename GENERAL_REGISTERS. (FPREGS): Rename FLOATING_POINT_REGISTERS. * LinuxIA32RegisterBanks.java (REGS): Rename GENERAL_REGISTERS. (FPREGS): New. (XFPREGS): Rename FLOATING_POINT_REGISTERS. (USR): Rename DEBUG_REGISTERS. commit dfbbcc3161402d2b125ad9d863442513da37c135 Author: Andrew Cagney Date: Thu Dec 20 11:49:10 2007 -0500 Make bank and bank array class names more consistent. frysk-core/frysk/bank/ChangeLog 2007-12-20 Andrew Cagney * BankRegister.java: Rename RegisterEntry.java. * BankRegisterMap.java: Rename RegisterBank.java. * BankArrayRegisterMap.java: Rename RegisterBankArrayMap.java. * IndirectBankArrayRegisterMap.java: Rename IndirectRegisterBankArrayMap.java. * LinuxX8664RegisterBanks.java: Update. * LinuxPPCRegisterBanks.java: Update. * LinuxIA32RegisterBanks.java: Update. * PPCBankRegisters.java: Update. * RegisterBanks.java: Update. * X86BankRegisters.java: Update. frysk-core/frysk/proc/dead/ChangeLog 2007-12-20 Andrew Cagney * CorefileRegisterBanksFactory.java: Update; RegisterBankArrayMap renamed to BankArrayRegisterMap. commit 13de2cef03a5c48cb98ea8c08cdf1e0deb6793ad Author: Andrew Cagney Date: Thu Dec 20 11:21:35 2007 -0500 frysk-core/frysk/bank/ChangeLog 2007-12-20 Andrew Cagney * BankArrayRegister.java: Rename BankRegister.java. * IndirectRegisterBankArrayMap.java: Rename IndirectBankregistermap.java. * RegisterBankArrayMap.java: Rename BankRegistermap.java. * RegisterBanks.java: Update. * PPCBankRegisters.java: Update. * X86BankRegisters.java: Update. frysk-core/frysk/proc/ChangeLog 2007-12-20 Andrew Cagney BankRegister renamed to BankArrayRegister. * LinuxPPC32On64.java: Update. * Task.java: Update. frysk-core/frysk/proc/dead/ChangeLog 2007-12-20 Andrew Cagney BankRegisterMap renamed to RegisterBankArrayMap. * CorefileRegisterBanksFactory.java: Update. ----------------------------------------------------------------------- Summary of changes: .../frysk/bank/BankArrayRegister.java | 39 ++- .../BankArrayRegisterMap.java} | 41 ++- frysk-core/frysk/bank/BankRegister.java | 103 ++++--- frysk-core/frysk/bank/BankRegisterMap.java | 45 +-- frysk-core/frysk/bank/ChangeLog | 37 +++ ...rMap.java => IndirectBankArrayRegisterMap.java} | 42 ++-- frysk-core/frysk/bank/LinuxIA32RegisterBanks.java | 130 +++++---- frysk-core/frysk/bank/LinuxPPCRegisterBanks.java | 319 ++++++++++---------- frysk-core/frysk/bank/LinuxX8664RegisterBanks.java | 143 +++++----- frysk-core/frysk/bank/PPCBankRegisters.java | 328 ++++++++++---------- frysk-core/frysk/bank/RegisterBank.java | 87 ----- frysk-core/frysk/bank/RegisterBanks.java | 25 +- frysk-core/frysk/bank/RegisterEntry.java | 148 --------- .../{stack/TestRegs.java => bank/RegisterMap.java} | 34 +- frysk-core/frysk/bank/X86BankRegisters.java | 244 ++++++++-------- frysk-core/frysk/proc/ChangeLog | 8 + frysk-core/frysk/proc/LinuxPPC32On64.java | 7 - frysk-core/frysk/proc/Task.java | 6 +- frysk-core/frysk/proc/dead/ChangeLog | 8 + .../proc/dead/CorefileRegisterBanksFactory.java | 6 +- 20 files changed, 837 insertions(+), 963 deletions(-) copy frysk-sys/lib/opcodes/Instruction.java => frysk-core/frysk/bank/BankArrayRegister.java (77%) copy frysk-core/frysk/{stack/TestRegs.java => bank/BankArrayRegisterMap.java} (71%) rename frysk-core/frysk/bank/{IndirectBankRegisterMap.java => IndirectBankArrayRegisterMap.java} (72%) delete mode 100644 frysk-core/frysk/bank/RegisterBank.java delete mode 100644 frysk-core/frysk/bank/RegisterEntry.java copy frysk-core/frysk/{stack/TestRegs.java => bank/RegisterMap.java} (78%) First 500 lines of diff: diff --git a/frysk-sys/lib/opcodes/Instruction.java b/frysk-core/frysk/bank/BankArrayRegister.java similarity index 77% copy from frysk-sys/lib/opcodes/Instruction.java copy to frysk-core/frysk/bank/BankArrayRegister.java index 6d5af94..a720c34 100644 --- a/frysk-sys/lib/opcodes/Instruction.java +++ b/frysk-core/frysk/bank/BankArrayRegister.java @@ -37,20 +37,35 @@ // version and license this file solely under the GPL without // exception. -package lib.opcodes; +package frysk.bank; -public class Instruction -{ - public final long address; - public final int length; - public final String instruction; - Instruction(long address, int length, String instruction) - { - this.address = address; - this.length = length; - this.instruction = instruction; +import frysk.isa.Register; + +/** + * Register that is part of a register bank. + */ +public class BankArrayRegister extends BankRegister { + private final int bank; + + BankArrayRegister(int bank, int offset, int length, String name) { + super(offset, length, name); + this.bank = bank; + } + + BankArrayRegister(int bank, int offset, int length, Register register) { + super(offset, length, register); + this.bank = bank; } + public String toString() { - return "0x"+Long.toHexString(address)+"\t"+instruction; + return (super.toString() + + ",bank=" + bank); + } + + /** + * Return the register bank, as an index. + */ + public int getBank() { + return bank; } } diff --git a/frysk-core/frysk/stack/TestRegs.java b/frysk-core/frysk/bank/BankArrayRegisterMap.java similarity index 71% copy from frysk-core/frysk/stack/TestRegs.java copy to frysk-core/frysk/bank/BankArrayRegisterMap.java index d9c1d0c..a3055f7 100644 --- a/frysk-core/frysk/stack/TestRegs.java +++ b/frysk-core/frysk/bank/BankArrayRegisterMap.java @@ -37,32 +37,37 @@ // version and license this file solely under the GPL without // exception. -package frysk.stack; +package frysk.bank; import frysk.isa.Register; -import frysk.testbed.RegsCase; /** - * Check all register values. + * Implement a map from frysk.isa.Register to frysk.proc.BankArrayRegister. + * For compatibility, also implement a name map. */ -public class TestRegs extends RegsCase { - private Frame frame; - public void setUp() { - super.setUp(); - frame = StackFactory.createFrame(task()); - } - public void tearDown() { - frame = null; - super.tearDown(); - } +public class BankArrayRegisterMap extends RegisterMap { - public void access(Register register, int offset, int length, - byte[] bytes, int start, boolean write) { - frame.getRegister(register, offset, length, bytes, start); + BankArrayRegisterMap add(BankArrayRegister register) { + put(register); + return this; } - public long getRegister(Object task, Register register) { - return frame.getRegister(register); + BankArrayRegisterMap add(int bank, int offset, int length, + Register register) { + put(new BankArrayRegister(bank, offset, length, register)); + return this; + } + BankArrayRegisterMap add(int bank, int offset, int length, String name) { + put(new BankArrayRegister(bank, offset, length, name)); + return this; + } + BankArrayRegisterMap add(int bank, int offset, int length, + Register[] registers) { + for (int i = 0; i < registers.length; i++) { + put(new BankArrayRegister(bank, offset, length, registers[i])); + offset += length; + } + return this; } } diff --git a/frysk-core/frysk/bank/BankRegister.java b/frysk-core/frysk/bank/BankRegister.java index 7507a5c..ddf1f96 100644 --- a/frysk-core/frysk/bank/BankRegister.java +++ b/frysk-core/frysk/bank/BankRegister.java @@ -1,6 +1,6 @@ // This file is part of the program FRYSK. // -// Copyright 2005, 2007, Red Hat Inc. +// Copyright 2007, Red Hat Inc. // // FRYSK is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by @@ -39,63 +39,56 @@ package frysk.bank; +import inua.eio.ByteBuffer; import frysk.isa.Register; /** - * Register that is part of a register bank. + * A Register within a ByteBuffer register bank. */ + public class BankRegister { - private final int bank; + private final int offset; private final int length; private final String name; private final Register register; - - private BankRegister(int bank, int offset, int length, - Register register, String name) { - this.bank = bank; + + private BankRegister(int offset, int length, String name, Register register) { this.offset = offset; this.length = length; - this.register = register; this.name = name; + this.register = register; } - /** - * Constructor. The register views defaults to an integer view. - * - * @param bank The number of a bank (ByteBuffer) in the Task - * object's registerBank array - * @param offset byte offset in the bank - * @param name name of the register - */ - BankRegister(int bank, int offset, int length, String name) { - this(bank, offset, length, null, name); + BankRegister(int offset, int length, String name) { + this(offset, length, name, null); + } + + BankRegister(int offset, int length, Register register) { + this(offset, length, register.getName(), register); } - BankRegister(int bank, int offset, int length, Register register) { - this(bank, offset, length, register, register.getName()); + Register getRegister() { + return register; } - + public String toString() { - return (super.toString() - + ",bank=" + bank - + ",offset=" + offset - + ",length=" + length + return (super.toString() + ",offset=" + offset + ",length=" + length + ",name=" + name); } /** * Get the name of the register. - * + * * @return the name */ public String getName() { return name; } - + /** * Get the length of the register in bytes. - * + * * @return the length */ public int getLength() { @@ -103,23 +96,53 @@ public class BankRegister { } /** - * Get the Register. - */ - public Register getRegister() { - return register; - } - - /** * Return the offset into the register bank. */ public int getOffset() { return offset; } - /** - * Return the register bank, as an index. - */ - public int getBank() { - return bank; + public void access(ByteBuffer byteBuffer, long offset, long size, + byte[] bytes, int start, boolean write) { + if (write) + // XXX: Should be directly supported by ByteBuffer. + throw new RuntimeException("write not implemented"); + else + byteBuffer.get(this.offset + offset, bytes, start, (int) size); + } + + long get(ByteBuffer byteBuffer) { + switch (length) { + case 1: + return byteBuffer.getUByte(offset); + case 2: + return byteBuffer.getUShort(offset); + case 4: + return byteBuffer.getUInt(offset); + case 8: + return byteBuffer.getULong(offset); + default: + throw new RuntimeException("unhandled size: " + length); + } } + + void set(ByteBuffer byteBuffer, long value) { + switch (length) { + case 1: + byteBuffer.putUByte(offset, (byte) value); + break; + case 2: + byteBuffer.putUShort(offset, (short) value); + break; + case 4: + byteBuffer.putUInt(offset, (int) value); + break; + case 8: + byteBuffer.putULong(offset, value); + break; + default: + throw new RuntimeException("unhandled size: " + length); + } + } + } diff --git a/frysk-core/frysk/bank/BankRegisterMap.java b/frysk-core/frysk/bank/BankRegisterMap.java index 115ebf7..7380c1d 100644 --- a/frysk-core/frysk/bank/BankRegisterMap.java +++ b/frysk-core/frysk/bank/BankRegisterMap.java @@ -39,45 +39,32 @@ package frysk.bank; +import inua.eio.ByteBuffer; import frysk.isa.Register; -import java.util.LinkedHashMap; /** - * Implement a map from frysk.isa.Register to frysk.proc.BankRegister. - * For compatibility, also implement a name map. + * A mapping from Register to BankRegister (a register within a + * register bank). */ +public class BankRegisterMap extends RegisterMap { -public class BankRegisterMap { - private final LinkedHashMap registerToBankRegister = new LinkedHashMap(); - private final LinkedHashMap nameToBankRegister = new LinkedHashMap(); - - protected BankRegisterMap add(BankRegister br) { - if (br.getRegister() != null) - registerToBankRegister.put(br.getRegister(), br); - nameToBankRegister.put(br.getName(), br); - return this; + public void access(Register register, ByteBuffer bank, long offset, + long size, byte[] bytes, int start, boolean write) { + ((BankRegister)get(register)) + .access(bank, offset, size, bytes, start, write); } - BankRegisterMap add(int bank, int offset, int length, Register register) { - return add(new BankRegister(bank, offset, length, register)); - } - BankRegisterMap add(int bank, int offset, int length, String name) { - return add(new BankRegister(bank, offset, length, name)); - } - BankRegisterMap add(int bank, int offset, int length, - Register[] registers) { - for (int i = 0; i < registers.length; i++) { - add(new BankRegister(bank, offset, length, registers[i])); - offset += length; - } - return this; + BankRegisterMap add(BankRegister register) { + put(register); + return this; } - BankRegister get(Register r) { - return (BankRegister)registerToBankRegister.get(r); + long get(Register register, ByteBuffer bank) { + return ((BankRegister)get(register)).get(bank); } - public BankRegister get(String s) { - return (BankRegister)nameToBankRegister.get(s); + void set(Register register, ByteBuffer bank, long value) { + ((BankRegister)get(register)).set(bank, value); } + } diff --git a/frysk-core/frysk/bank/ChangeLog b/frysk-core/frysk/bank/ChangeLog index f0f2407..563202e 100644 --- a/frysk-core/frysk/bank/ChangeLog +++ b/frysk-core/frysk/bank/ChangeLog @@ -1,3 +1,40 @@ +2007-12-20 Andrew Cagney + + * RegisterMap.java: New file. + * BankRegisterMap.java: Extend RegisterMap.java. + * BankArrayRegisterMap.java: Ditto. + * BankArrayRegister.java: Extend BankRegister. + * IndirectBankArrayRegisterMap.java: Update. + + * LinuxPPCRegisterBanks.java (USR32): Rename PPC32BE. + (USR64): Rename PPC64BE. + * LinuxX8664RegisterBanks.java (REGS): Rename GENERAL_REGISTERS. + (FPREGS): Rename FLOATING_POINT_REGISTERS. + * LinuxIA32RegisterBanks.java (REGS): Rename GENERAL_REGISTERS. + (FPREGS): New. + (XFPREGS): Rename FLOATING_POINT_REGISTERS. + (USR): Rename DEBUG_REGISTERS. + + * BankRegister.java: Rename RegisterEntry.java. + * BankRegisterMap.java: Rename RegisterBank.java. + * BankArrayRegisterMap.java: Rename RegisterBankArrayMap.java. + * IndirectBankArrayRegisterMap.java: Rename + IndirectRegisterBankArrayMap.java. + * LinuxX8664RegisterBanks.java: Update. + * LinuxPPCRegisterBanks.java: Update. + * LinuxIA32RegisterBanks.java: Update. + * PPCBankRegisters.java: Update. + * RegisterBanks.java: Update. + * X86BankRegisters.java: Update. + + * BankArrayRegister.java: Rename BankRegister.java. + * IndirectRegisterBankArrayMap.java: Rename + IndirectBankregistermap.java. + * RegisterBankArrayMap.java: Rename BankRegistermap.java. + * RegisterBanks.java: Update. + * PPCBankRegisters.java: Update. + * X86BankRegisters.java: Update. + 2007-12-19 Andrew Cagney * LinuxIA32RegisterBanks.java: New, from X86BankRegisters.java. diff --git a/frysk-core/frysk/bank/IndirectBankRegisterMap.java b/frysk-core/frysk/bank/IndirectBankArrayRegisterMap.java similarity index 72% rename from frysk-core/frysk/bank/IndirectBankRegisterMap.java rename to frysk-core/frysk/bank/IndirectBankArrayRegisterMap.java index af6bbaa..966cc78 100644 --- a/frysk-core/frysk/bank/IndirectBankRegisterMap.java +++ b/frysk-core/frysk/bank/IndirectBankArrayRegisterMap.java @@ -47,19 +47,19 @@ import frysk.isa.Register; * projection onto an underlying 64-bit register bank. */ -class IndirectBankRegisterMap extends BankRegisterMap { +class IndirectBankArrayRegisterMap extends BankArrayRegisterMap { private final ByteOrder order; - private final BankRegisterMap map32; - private final BankRegisterMap map64; + private final BankArrayRegisterMap map32; + private final BankArrayRegisterMap map64; - IndirectBankRegisterMap(ByteOrder order, BankRegisterMap map32, - BankRegisterMap map64) { + IndirectBankArrayRegisterMap(ByteOrder order, BankArrayRegisterMap map32, + BankArrayRegisterMap map64) { this.order = order; this.map32 = map32; this.map64 = map64; } - private int offset(BankRegister reg32, BankRegister reg64) { + private int offset(BankArrayRegister reg32, BankArrayRegister reg64) { if (order == ByteOrder.BIG_ENDIAN) { // least significant bytes on RHS return (reg64.getOffset() + reg64.getLength() @@ -70,49 +70,49 @@ class IndirectBankRegisterMap extends BankRegisterMap { } } - IndirectBankRegisterMap add(Register reg32, int bank, int offset, - int size) { - add(new BankRegister(bank, offset, size, reg32.getName())); + IndirectBankArrayRegisterMap add(Register reg32, int bank, int offset, + int size) { + put(new BankArrayRegister(bank, offset, size, reg32.getName())); return this; } - private IndirectBankRegisterMap add(BankRegister reg32, - BankRegister reg64) { + private IndirectBankArrayRegisterMap add(BankArrayRegister reg32, + BankArrayRegister reg64) { return add(reg32.getRegister(), reg64.getBank(), offset(reg32, reg64), reg32.getLength()); } - IndirectBankRegisterMap add(Register reg32, Register reg64) { - BankRegister map32reg = map32.get(reg32); + IndirectBankArrayRegisterMap add(Register reg32, Register reg64) { + BankArrayRegister map32reg = (BankArrayRegister)map32.get(reg32); if (reg32 == null) throw new RuntimeException("unknown 32-bit register: " + reg32); - BankRegister map64reg = map64.get(reg64); + BankArrayRegister map64reg = (BankArrayRegister)map64.get(reg64); if (map64reg == null) throw new RuntimeException("unknown 64-bit register: " + reg64); return add(map32reg, map64reg); } - IndirectBankRegisterMap add(Register reg32) { - BankRegister map32reg = map32.get(reg32); + IndirectBankArrayRegisterMap add(Register reg32) { + BankArrayRegister map32reg = (BankArrayRegister)map32.get(reg32); if (reg32 == null) throw new RuntimeException("unknown 32-bit register: " + reg32); - BankRegister map64reg = map64.get(reg32.getName()); + BankArrayRegister map64reg = (BankArrayRegister)map64.get(reg32.getName()); if (map64reg == null) throw new RuntimeException("unknown 64-bit register: " + reg32); return add(map32reg, map64reg); } - IndirectBankRegisterMap add(String map32Name, String map64Name) { - BankRegister reg32 = map32.get(map32Name); + IndirectBankArrayRegisterMap add(String map32Name, String map64Name) { + BankArrayRegister reg32 = (BankArrayRegister)map32.get(map32Name); if (reg32 == null) throw new RuntimeException("unknown register: " + map32Name); - BankRegister reg64 = map64.get(map64Name); + BankArrayRegister reg64 = (BankArrayRegister)map64.get(map64Name); if (reg64 == null) throw new RuntimeException("unknown register: " + map64Name); return add(reg32, reg64); } - IndirectBankRegisterMap add(String name) { + IndirectBankArrayRegisterMap add(String name) { return add(name, name); } } diff --git a/frysk-core/frysk/bank/LinuxIA32RegisterBanks.java b/frysk-core/frysk/bank/LinuxIA32RegisterBanks.java index 4a3e1f4..b6ff6bb 100644 --- a/frysk-core/frysk/bank/LinuxIA32RegisterBanks.java +++ b/frysk-core/frysk/bank/LinuxIA32RegisterBanks.java @@ -44,65 +44,87 @@ import frysk.isa.X87Registers; public class LinuxIA32RegisterBanks { - public static final RegisterBank GENERAL_REGISTERS = new RegisterBank() - .add(new RegisterEntry(24, 4,IA32Registers.EAX)) - .add(new RegisterEntry(0, 4, IA32Registers.EBX)) hooks/post-receive -- frysk system monitor/debugger