[SCM] master: swagiaal: Removed frame requirement from LocationExpression constructor

swagiaal@sourceware.org swagiaal@sourceware.org
Wed Nov 28 18:07:00 GMT 2007


The branch, master has been updated
       via  83b71d8dbfed32527d4bace5f13fb7827fcff409 (commit)
      from  06c524cb3ec657e014e7aa1d796a9f5945fc3093 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit 83b71d8dbfed32527d4bace5f13fb7827fcff409
Author: Sami Wagiaalla <swagiaal@redhat.com>
Date:   Wed Nov 28 10:42:40 2007 -0500

    swagiaal: Removed frame requirement from LocationExpression constructor
    
    frysk-core/frysk/debuginfo/ChangeLog
    +2007-11-28  Sami Wagiaalla  <swagiaal@redhat.com>
    +
    +       * LocationExpression.java: Removed frame requirement from constructor
    +       to be passed as an argument to decoding functions.
    +       * TestAddress.java: Updated.
    +       * TestLocationExpression.java: Updated.
    +
    
    frysk-core/frysk/value/ChangeLog
    +2007-11-28  Sami Wagiaalla  <swagiaal@redhat.com>
    +
    +       LocationExpression.java: Removed frame requirement from constructor
    +       to be passed as an argument to decoding functions.
    +       * Variable.java: Updated.
    +

-----------------------------------------------------------------------

Summary of changes:
 frysk-core/frysk/debuginfo/ChangeLog               |    7 ++
 frysk-core/frysk/debuginfo/LocationExpression.java |   68 ++++++++------------
 frysk-core/frysk/debuginfo/TestAddress.java        |    9 ++-
 .../frysk/debuginfo/TestLocationExpression.java    |    4 +-
 frysk-core/frysk/value/ChangeLog                   |    6 ++
 frysk-core/frysk/value/Variable.java               |    4 +-
 6 files changed, 50 insertions(+), 48 deletions(-)

First 500 lines of diff:
diff --git a/frysk-core/frysk/debuginfo/ChangeLog b/frysk-core/frysk/debuginfo/ChangeLog
index 63a81b7..1308ae6 100644
--- a/frysk-core/frysk/debuginfo/ChangeLog
+++ b/frysk-core/frysk/debuginfo/ChangeLog
@@ -1,3 +1,10 @@
+2007-11-28  Sami Wagiaalla  <swagiaal@redhat.com>
+
+	* LocationExpression.java: Removed frame requirement from constructor
+	to be passed as an argument to decoding functions.
+	* TestAddress.java: Updated.
+	* TestLocationExpression.java: Updated.
+
 2007-11-26  Sami Wagiaalla  <swagiaal@redhat.com>
 
 	Added a boolean for printing source	libraries to Frame.toPrint().
diff --git a/frysk-core/frysk/debuginfo/LocationExpression.java b/frysk-core/frysk/debuginfo/LocationExpression.java
index 48c9258..b1e3d81 100644
--- a/frysk-core/frysk/debuginfo/LocationExpression.java
+++ b/frysk-core/frysk/debuginfo/LocationExpression.java
@@ -39,48 +39,43 @@
 
 package frysk.debuginfo;
 
-import java.lang.Math;
-
-import java.util.LinkedList;
 import java.util.ArrayList;
+import java.util.LinkedList;
 import java.util.List;
 
-import frysk.isa.ISA;
-import frysk.isa.Register;
-import frysk.stack.Frame;
+import lib.dwfl.DwAt;
+import lib.dwfl.DwOp;
 import lib.dwfl.DwarfDie;
 import lib.dwfl.DwarfOp;
-import lib.dwfl.DwOp;
-import lib.dwfl.DwAt;
+import frysk.isa.Register;
+import frysk.isa.RegisterMap;
+import frysk.stack.Frame;
 
 public class LocationExpression {
     public final static int locationTypeRegDisp = 1,
     locationTypeAddress = 2,
     locationTypeReg = 3;
-    private final Frame frame;
     DwarfDie die;
     List ops;
     int locationType;
     LinkedList stack;
-    private final ISA isa;
 
-    public LocationExpression(Frame frame, DwarfDie die, List ops) {
+    public LocationExpression(DwarfDie die, List ops) {
 	locationType = 0;
-	this.frame = frame;
 	this.die = die;
 	this.ops = ops;
 	this.stack = null;
-	this.isa = frame.getTask().getISA();
     }
 
     /**
      *  Decode a location list and return the value.
      *
      */
-    public long decode () {
+    public long decode (Frame frame) {
 	stack = new LinkedList();
 	int nops = ops.size();
-
+	RegisterMap registerMap = DwarfRegisterMapFactory.getRegisterMap(frame.getTask().getISA());
+	
 	if (nops == 0)
 	    if (die.getAttrBoolean(DwAt.LOCATION)) 
 		throw new VariableOptimizedOutException();  
@@ -162,8 +157,7 @@ public class LocationExpression {
 	    case DwOp.REG31_:
 		if (locationType == 0) 
 		    locationType = locationTypeReg;
-		Register register = DwarfRegisterMapFactory.getRegisterMap(isa)
-		.getRegister(operator - DwOp.REG0_);
+		Register register = registerMap.getRegister(operator - DwOp.REG0_);
 		long regval = frame.getRegister(register);
 		stack.addFirst(new Long(regval));
 		break;
@@ -201,16 +195,14 @@ public class LocationExpression {
 	    case DwOp.BREG30_:
 	    case DwOp.BREG31_:
 		locationType = locationTypeRegDisp;
-		register = DwarfRegisterMapFactory.getRegisterMap(isa)
-		.getRegister(operator - DwOp.BREG0_);
+		register = registerMap.getRegister(operator - DwOp.BREG0_);
 		regval = frame.getRegister(register);
 		stack.addFirst(new Long(operand1 + regval));
 		break;
 
 
 	    case DwOp.REGX_:
-		register = DwarfRegisterMapFactory.getRegisterMap(isa)
-		.getRegister((int)operand1);
+		register = registerMap.getRegister((int)operand1);
 		regval = frame.getRegister(register);
 		stack.addFirst(new Long(regval));
 		break;
@@ -224,8 +216,8 @@ public class LocationExpression {
 	    case DwOp.FBREG_:
 		locationType = locationTypeRegDisp;
 		long pc = frame.getAdjustedAddress();
-		LocationExpression frameBaseOps = new LocationExpression (frame, die, die.getFrameBase(pc));
-		stack.addFirst(new Long(operand1 + frameBaseOps.decode()));
+		LocationExpression frameBaseOps = new LocationExpression (die, die.getFrameBase(pc));
+		stack.addFirst(new Long(operand1 + frameBaseOps.decode(frame)));
 		break;
 
 		// ??? unsigned not properly handled (use bignum?) See DwarfDie.java
@@ -408,11 +400,11 @@ public class LocationExpression {
      * @param size - Size of variable 
      * @return List of memory or register pieces
      */
-    public List decode (int size)
+    public List decode (Frame frame, int size)
     {
 	stack = new LinkedList();
 	int nops = ops.size();
-
+	RegisterMap registerMap = DwarfRegisterMapFactory.getRegisterMap(frame.getTask().getISA());
 	//pieces will contain a list of MemoryPiece, RegisterPiece or UnavaiablePiece
 	ArrayList pieces = new ArrayList(); 
 
@@ -501,8 +493,7 @@ public class LocationExpression {
 	    case DwOp.REG31_:
 		if (locationType == 0) 
 		    locationType = locationTypeReg;
-		Register register = DwarfRegisterMapFactory.getRegisterMap(isa)
-		.getRegister(operator - DwOp.REG0_);
+		Register register = registerMap.getRegister(operator - DwOp.REG0_);
 		// Push the register onto the dwfl stack
 		stack.addFirst(register);
 		break;
@@ -540,8 +531,7 @@ public class LocationExpression {
 	    case DwOp.BREG30_:
 	    case DwOp.BREG31_:
 		locationType = locationTypeRegDisp;
-		register = DwarfRegisterMapFactory.getRegisterMap(isa)
-		.getRegister(operator - DwOp.BREG0_);
+		register = registerMap.getRegister(operator - DwOp.BREG0_);
 		long regval = frame.getRegister(register);
 		stack.addFirst(new Long(operand1 + regval));
 		break;
@@ -549,15 +539,13 @@ public class LocationExpression {
 	    case DwOp.REGX_:
 		if (locationType == 0) 
 		    locationType = locationTypeReg;
-		register = DwarfRegisterMapFactory.getRegisterMap(isa)
-		.getRegister((int)operand1);
+		register = registerMap.getRegister((int)operand1);
 		stack.addFirst(register);
 		break;
 
 	    case DwOp.BREGX_:
 		locationType = locationTypeRegDisp;
-		register = DwarfRegisterMapFactory.getRegisterMap(isa)
-		.getRegister((int)operand1);
+		register = registerMap.getRegister((int)operand1);
 		regval = frame.getRegister(register);
 		stack.addFirst(new Long(operand2 + regval));
 		break;
@@ -571,8 +559,8 @@ public class LocationExpression {
 	    case DwOp.FBREG_:
 		locationType = locationTypeRegDisp;
 		long pc = frame.getAdjustedAddress();
-		LocationExpression frameBaseOps = new LocationExpression (frame, die, die.getFrameBase(pc));
-		stack.addFirst(new Long(operand1 + frameBaseOps.decode()));
+		LocationExpression frameBaseOps = new LocationExpression (die, die.getFrameBase(pc));
+		stack.addFirst(new Long(operand1 + frameBaseOps.decode(frame)));
 		break;
 
 		// ??? unsigned not properly handled (use bignum?) See DwarfDie.java
@@ -760,7 +748,7 @@ public class LocationExpression {
 		    break;
 		}	
 		// Otherwise, check the type of element on stack top and add to list
-		addToList (pieces, operand1);	
+		addToList (frame, pieces, operand1);	
 		break;
 
 	    default:
@@ -774,7 +762,7 @@ public class LocationExpression {
 	 */
 	if (pieces.isEmpty())
 	{    
-	    addToList (pieces, size);
+	    addToList (frame, pieces, size);
 	}    
 
 	return pieces;
@@ -784,7 +772,7 @@ public class LocationExpression {
      * Function that checks the type of element on the stack top and adds it to the
      * list of location
      */
-    private void addToList (List pieces, long size)
+    private void addToList (Frame frame, List pieces, long size)
     {
 	/*
 	 * If stackTop is a Register, add it as a RegisterPiece to list pieces 
@@ -803,13 +791,13 @@ public class LocationExpression {
      *  Return register number for a one entry DW_OP_regX location list 
      *
      */
-    public Register getRegisterNumber () {
+    public Register getRegisterNumber (Frame frame) {
 	if (ops.size() == 1) {
 	    int operator = ((DwarfOp) ops.get(0)).operator;
 	    if (operator >= DwOp.REG0_
 		    || operator <=  DwOp.REG31_) {
 		locationType = locationTypeReg;
-		return DwarfRegisterMapFactory.getRegisterMap(isa)
+		return DwarfRegisterMapFactory.getRegisterMap(frame.getTask().getISA())
 		.getRegister(operator - DwOp.REG0_);
 	    }
 	}
diff --git a/frysk-core/frysk/debuginfo/TestAddress.java b/frysk-core/frysk/debuginfo/TestAddress.java
index 4e8ce65..e2c55d8 100644
--- a/frysk-core/frysk/debuginfo/TestAddress.java
+++ b/frysk-core/frysk/debuginfo/TestAddress.java
@@ -86,8 +86,8 @@ public class TestAddress
 	Variable var = (Variable) declarationSearchEngine.getVariable(variable);
 	DwarfDie varDie = var.getVariableDie();
 	List ops = varDie.getFormData(frame.getAdjustedAddress());
-	LocationExpression locExpr = new LocationExpression(frame, varDie, ops);
-	PieceLocation loc = new PieceLocation(locExpr.decode(var.getType
+	LocationExpression locExpr = new LocationExpression(varDie, ops);
+	PieceLocation loc = new PieceLocation(locExpr.decode(frame,var.getType
 		                              (frame.getTask().getISA()).getSize()));
 
 	 /* Get the value of the address.
@@ -95,8 +95,9 @@ public class TestAddress
 	Variable addr = (Variable) declarationSearchEngine.getVariable(address);
 	DwarfDie addrDie = addr.getVariableDie();
 	List opsAddr = addrDie.getFormData(frame.getAdjustedAddress());
-	LocationExpression locExprAddr = new LocationExpression(frame, addrDie, opsAddr);
-	PieceLocation p = new PieceLocation(locExprAddr.decode(addr.getType
+	LocationExpression locExprAddr = new LocationExpression(
+		addrDie, opsAddr);
+	PieceLocation p = new PieceLocation(locExprAddr.decode(frame, addr.getType
 		                            (frame.getTask().getISA()).getSize()));
 	Value addrVal = new Value(addr.getType(frame.getTask().getISA()), p);
 	
diff --git a/frysk-core/frysk/debuginfo/TestLocationExpression.java b/frysk-core/frysk/debuginfo/TestLocationExpression.java
index cbb52e3..271a3ff 100644
--- a/frysk-core/frysk/debuginfo/TestLocationExpression.java
+++ b/frysk-core/frysk/debuginfo/TestLocationExpression.java
@@ -396,8 +396,8 @@ public class TestLocationExpression
 	Task task = getStoppedTask();
 	Frame frame = StackFactory.createFrame(task);
 	
-	LocationExpression locExp = new LocationExpression(frame, die, ops);
-	List loc = locExp.decode(12);  
+	LocationExpression locExp = new LocationExpression(die, ops);
+	List loc = locExp.decode(frame,12);  
 	
 	assertEquals ("Stack size", stackSize, locExp.getStackSize());
 	compareLocations (loc, expectedLoc);
diff --git a/frysk-core/frysk/value/ChangeLog b/frysk-core/frysk/value/ChangeLog
index aac4a06..39b20b5 100644
--- a/frysk-core/frysk/value/ChangeLog
+++ b/frysk-core/frysk/value/ChangeLog
@@ -1,3 +1,9 @@
+007-11-28  Sami Wagiaalla  <swagiaal@redhat.com>
+
+	LocationExpression.java: Removed frame requirement from constructor
+	to be passed as an argument to decoding functions.
+	* Variable.java: Updated.
+
 2007-11-27  Teresa Thomas  <tthomas@redhat.com>
 
 	* PointerType.java (toPrint): Add type printing.
diff --git a/frysk-core/frysk/value/Variable.java b/frysk-core/frysk/value/Variable.java
index c8050f6..dc51ff3 100644
--- a/frysk-core/frysk/value/Variable.java
+++ b/frysk-core/frysk/value/Variable.java
@@ -141,9 +141,9 @@ public class Variable extends ObjectDeclaration{
     public Value getValue(DebugInfoFrame frame) {
 	List ops = variableDie.getFormData(frame.getAdjustedAddress());
 	ISA isa = frame.getTask().getISA();
-	LocationExpression locationExpression = new LocationExpression(frame, variableDie, ops);
+	LocationExpression locationExpression = new LocationExpression(variableDie, ops);
 	PieceLocation pieceLocation
-	    = new PieceLocation(locationExpression.decode(this.getType(isa)
+	    = new PieceLocation(locationExpression.decode(frame, this.getType(isa)
 							  .getSize()));
 	Value value = new Value(this.getType(isa), pieceLocation);
 	return value;


hooks/post-receive
--
frysk system monitor/debugger



More information about the Frysk-cvs mailing list