From: Phil Muldoon <pmuldoon@redhat.com>
To: frysk@sourceware.org
Subject: Re: [SCM] master: Implement readStatusRegister, use readControlRegister and reduce scope of both functions.
Date: Thu, 03 Apr 2008 22:29:00 -0000 [thread overview]
Message-ID: <47F547FB.1040206@redhat.com> (raw)
In-Reply-To: <20080403210821.3351.qmail@sourceware.org>
pmuldoon@sourceware.org wrote:
This commit mainly deals with reducing function scope, and dealing with
internal class niceties.
In these classes I am now moving the reading (and soon writing) of
status/control registers to be gated from a function. Also, there is
never a need for high-level to manipulate these registers directly, so
function scope reduction to protected was appropriate.
Regards
Phil
> The branch, master has been updated
> via ae7d5f2086a6fcd8f18e74223c6075476db0e0bb (commit)
> from c7c9068679a57d65feaa31102116f95bd5d56fbe (commit)
>
> Those revisions listed above that are new to this repository have
> not appeared on any other notification email.
>
> - Log -----------------------------------------------------------------
> commit ae7d5f2086a6fcd8f18e74223c6075476db0e0bb
> Author: Phil Muldoon <pmuldoon@redhat.com>
> Date: Thu Apr 3 22:07:27 2008 +0100
>
> Implement readStatusRegister, use readControlRegister and reduce scope of both functions.
>
> 2008-04-03 Phil Muldoon <pmuldoon@redhat.com>
>
> * WatchpointFunctions.java (readStatusRegister): Declare.
> (readControlRegister): Reduce scope to protected.
> * IA32WatchpointFunctions.java (readStatusRegister): Implement.
> (hasWatchpointTriggered): Use readStatusRegister.
> (deleteWatchpoint): Use readControlRegister.
> (readWatchpoint): Ditto.
> (setWatchpoint): Ditto.
> * X8664WatchpointFunctions.java (readStatusRegister): Ditto.
> (hasWatchpointTriggered): use readStatusRegister.
> (deleteWatchpoint): Use readControlRegister.
> (readWatchpoint): Ditto.
> (setWatchpoint): Ditto.
>
> -----------------------------------------------------------------------
>
> Summary of changes:
> frysk-core/frysk/isa/watchpoints/ChangeLog | 16 +++++++++++++
> .../isa/watchpoints/IA32WatchpointFunctions.java | 24 ++++++++++++++-----
> .../frysk/isa/watchpoints/WatchpointFunctions.java | 14 ++++++++---
> .../isa/watchpoints/X8664WatchpointFunctions.java | 24 +++++++++++++------
> 4 files changed, 59 insertions(+), 19 deletions(-)
>
> First 500 lines of diff:
> diff --git a/frysk-core/frysk/isa/watchpoints/ChangeLog b/frysk-core/frysk/isa/watchpoints/ChangeLog
> index 93952e1..33613b2 100644
> --- a/frysk-core/frysk/isa/watchpoints/ChangeLog
> +++ b/frysk-core/frysk/isa/watchpoints/ChangeLog
> @@ -1,5 +1,21 @@
> 2008-04-03 Phil Muldoon <pmuldoon@redhat.com>
>
> + * WatchpointFunctions.java (readStatusRegister): Declare.
> + (readControlRegister): Reduce scope to protected.
> + * IA32WatchpointFunctions.java (readStatusRegister): Implement.
> + (hasWatchpointTriggered): Use readStatusRegister.
> + (deleteWatchpoint): Use readControlRegister.
> + (readWatchpoint): Ditto.
> + (setWatchpoint): Ditto.
> + * X8664WatchpointFunctions.java (readStatusRegister): Ditto.
> + (hasWatchpointTriggered): use readStatusRegister.
> + (deleteWatchpoint): Use readControlRegister.
> + (readWatchpoint): Ditto.
> + (setWatchpoint): Ditto.
> +
> +
> +2008-04-02 Phil Muldoon <pmuldoon@redhat.com>
> +
> * TestWatchpoint.java (Symbol.Symbol): New temporary class to resolve
> Elf symbols.
> (getGlobalSymbolAddress): New function.
> diff --git a/frysk-core/frysk/isa/watchpoints/IA32WatchpointFunctions.java b/frysk-core/frysk/isa/watchpoints/IA32WatchpointFunctions.java
> index e2883c7..e7cc0a8 100644
> --- a/frysk-core/frysk/isa/watchpoints/IA32WatchpointFunctions.java
> +++ b/frysk-core/frysk/isa/watchpoints/IA32WatchpointFunctions.java
> @@ -61,7 +61,6 @@ class IA32WatchpointFunctions extends WatchpointFunctions {
> * 1,2 or 4 bytes.
> * @param writeOnly - When true, only trigger when address is
> * written. False, trigger when address is read or written to.
> - * @param localOnly - set local extant only.
> */
> public void setWatchpoint(Task task, int index,
> long addr, int range,
> @@ -76,7 +75,7 @@ class IA32WatchpointFunctions extends WatchpointFunctions {
> task.setRegister(IA32Registers.DEBUG_REGS_GROUP.getRegisters()[index],
> addr);
> // Get the Debug Control Register
> - long debugControl = task.getRegister(IA32Registers.DEBUG_CONTROL);
> + long debugControl = readControlRegister(task);
>
> // First eight bits of register define the global/local
> // status of each of the four DR registers. Two bits per
> @@ -155,8 +154,8 @@ class IA32WatchpointFunctions extends WatchpointFunctions {
> long address = task.getRegister(
> IA32Registers.DEBUG_REGS_GROUP.getRegisters()[index]);
>
> - // Get debug status register for all other values
> - long debugStatus = task.getRegister(IA32Registers.DEBUG_CONTROL);
> + // Get the Debug Control Register
> + long debugStatus = readControlRegister(task);
>
> boolean writeOnly = false;
>
> @@ -200,7 +199,7 @@ class IA32WatchpointFunctions extends WatchpointFunctions {
> task.setRegister(IA32Registers.DEBUG_REGS_GROUP.getRegisters()[index],
> 0x0L);
> // Get the Debug Control Register
> - long debugControl = task.getRegister(IA32Registers.DEBUG_CONTROL);
> + long debugControl = readControlRegister(task);
>
> // First eight bits of register define the global/local
> // status of each of the four DR registers. Two bits per
> @@ -232,7 +231,7 @@ class IA32WatchpointFunctions extends WatchpointFunctions {
> * register from.
> */
> public boolean hasWatchpointTriggered(Task task, int index) {
> - long debugStatus = task.getRegister(IA32Registers.DEBUG_STATUS);
> + long debugStatus = readStatusRegister(task);
> return (debugStatus & (1L << index)) != 0;
> }
>
> @@ -243,10 +242,21 @@ class IA32WatchpointFunctions extends WatchpointFunctions {
> * @param task - task to read the debug control
> * register from.
> */
> - public long readControlRegister(Task task) {
> + protected long readControlRegister(Task task) {
> return task.getRegister(IA32Registers.DEBUG_CONTROL);
> }
>
> + /**
> + * Reads the Debug status register.
> + *
> + * @param task - task to read the debug status
> + * register from.
> + */
> + protected long readStatusRegister(Task task) {
> + return task.getRegister(IA32Registers.DEBUG_STATUS);
> + }
> +
> +
> private boolean testBit(long register, int bitToTest) {
> return (register & (1L << bitToTest)) != 0;
> }
> diff --git a/frysk-core/frysk/isa/watchpoints/WatchpointFunctions.java b/frysk-core/frysk/isa/watchpoints/WatchpointFunctions.java
> index a5a30a9..0eb247a 100644
> --- a/frysk-core/frysk/isa/watchpoints/WatchpointFunctions.java
> +++ b/frysk-core/frysk/isa/watchpoints/WatchpointFunctions.java
> @@ -42,7 +42,6 @@ package frysk.isa.watchpoints;
>
> import java.util.ArrayList;
> import java.util.List;
> -
> import frysk.proc.Task;
>
> public abstract class WatchpointFunctions {
> @@ -62,7 +61,6 @@ public abstract class WatchpointFunctions {
> * 1,2 or 4 bytes. 8 on 64 bit systems. Architecture dependent.
> * @param writeOnly - When true, only trigger when address is
> * written. False, trigger when address is read or written to.
> - * @param localOnly - set local extant only.
> */
> public abstract void setWatchpoint(Task task, int index,
> long addr, int range,
> @@ -105,15 +103,23 @@ public abstract class WatchpointFunctions {
> }
> return listOfWP;
> }
> +
> /**
> * Reads the Debug control register.
> *
> * @param task - task to read the debug control
> * register from.
> */
> - public abstract long readControlRegister(Task task);
> + protected abstract long readControlRegister(Task task);
> +
> + /**
> + * Reads the Debug status register.
> + *
> + * @param task - task to read the debug status
> + * register from.
> + */
> + protected abstract long readStatusRegister(Task task);
>
> -
> /**
> * Reads the Debug Status Register and checks if
> * the breakpoint specified has fired.
> diff --git a/frysk-core/frysk/isa/watchpoints/X8664WatchpointFunctions.java b/frysk-core/frysk/isa/watchpoints/X8664WatchpointFunctions.java
> index 198fa42..5b9aa03 100644
> --- a/frysk-core/frysk/isa/watchpoints/X8664WatchpointFunctions.java
> +++ b/frysk-core/frysk/isa/watchpoints/X8664WatchpointFunctions.java
> @@ -61,7 +61,6 @@ class X8664WatchpointFunctions extends WatchpointFunctions {
> * 1,24, or 8 bytes.
> * @param writeOnly - When true, only trigger when address is
> * written. False, trigger when address is read or written to.
> - * @param localOnly - set local extant only.
> */
> public void setWatchpoint(Task task, int index,
> long addr, int range,
> @@ -75,7 +74,7 @@ class X8664WatchpointFunctions extends WatchpointFunctions {
> task.setRegister(X8664Registers.DEBUG_REGS_GROUP.getRegisters()[index],
> addr);
> // Get the Debug Control Register
> - long debugControl = task.getRegister(X8664Registers.DEBUG_CONTROL);
> + long debugControl = readControlRegister(task);
>
> // First eight bits of register define the global/local
> // status of each of the four DR registers. Two bits per
> @@ -152,8 +151,8 @@ class X8664WatchpointFunctions extends WatchpointFunctions {
> X8664Registers.DEBUG_REGS_GROUP.getRegisters()[index]);
>
> // Get debug status register for all other values
> - long debugStatus = task.getRegister(X8664Registers.DEBUG_CONTROL);
> -
> + long debugStatus = readControlRegister(task);
> +
> boolean writeOnly = false;
>
> // To find write/read, or read only the bit setting is 0 + no of
> @@ -197,7 +196,7 @@ class X8664WatchpointFunctions extends WatchpointFunctions {
> task.setRegister(X8664Registers.DEBUG_REGS_GROUP.getRegisters()[index],
> 0x0L);
> // Get the Debug Control Register
> - long debugControl = task.getRegister(X8664Registers.DEBUG_CONTROL);
> + long debugControl = readControlRegister(task);
>
> // First eight bits of register define the global/local
> // status of each of the four DR registers. Two bits per
> @@ -222,18 +221,27 @@ class X8664WatchpointFunctions extends WatchpointFunctions {
> }
>
>
> -
> /**
> * Reads the Debug control register.
> *
> * @param task - task to read the debug control
> * register from.
> */
> - public long readControlRegister(Task task) {
> + protected long readControlRegister(Task task) {
> return task.getRegister(X8664Registers.DEBUG_CONTROL);
> }
>
> /**
> + * Reads the Debug cstatus register.
> + *
> + * @param task - task to read the debug status
> + * register from.
> + */
> + protected long readStatusRegister(Task task) {
> + return task.getRegister(X8664Registers.DEBUG_STATUS);
> + }
> +
> + /**
> * Reads the Debug Status Register and checks if
> * the breakpoint specified has fired.
> *
> @@ -241,7 +249,7 @@ class X8664WatchpointFunctions extends WatchpointFunctions {
> * register from.
> */
> public boolean hasWatchpointTriggered(Task task, int index) {
> - long debugStatus = task.getRegister(X8664Registers.DEBUG_STATUS);
> + long debugStatus = readStatusRegister(task);
> return (debugStatus & (1L << index)) != 0;
> }
>
>
>
> hooks/post-receive
> --
> frysk system monitor/debugger
>
parent reply other threads:[~2008-04-03 21:11 UTC|newest]
Thread overview: expand[flat|nested] mbox.gz Atom feed
[parent not found: <20080403210821.3351.qmail@sourceware.org>]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=47F547FB.1040206@redhat.com \
--to=pmuldoon@redhat.com \
--cc=frysk@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).