public inbox for frysk@sourceware.org
 help / color / mirror / Atom feed
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
>   

           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).