From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9996 invoked by alias); 29 Nov 2007 16:34:21 -0000 Received: (qmail 9967 invoked by uid 9561); 29 Nov 2007 16:34:21 -0000 Date: Thu, 29 Nov 2007 16:34:00 -0000 Message-ID: <20071129163421.9952.qmail@sourceware.org> From: swagiaal@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: swagiaal: Removed LocationExpression.decode(Frame frame) X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 048aeff01d868840ad9fb2f821592dc516a8b78a X-Git-Newrev: 48c29626db12707e63e75671c9a5c1cd77c86be4 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/msg00491.txt.bz2 The branch, master has been updated via 48c29626db12707e63e75671c9a5c1cd77c86be4 (commit) via 6007065cbdef79d041559b8925ffd3c60c844ec6 (commit) via 6ae6ac4106e0abb1b7edbfa2c8fdc007594881bd (commit) via 8f903354f31d10c840f90f1b10c8c2df98bad46c (commit) via 5d59f04617e97a2856150fcb9407cbf80be84a13 (commit) from 048aeff01d868840ad9fb2f821592dc516a8b78a (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 48c29626db12707e63e75671c9a5c1cd77c86be4 Author: Sami Wagiaalla Date: Thu Nov 29 11:26:08 2007 -0500 swagiaal: Removed LocationExpression.decode(Frame frame) +2007-11-29 Sami Wagiaalla + + * LocationExpression.java (decode): Delete decode(Frame frame). + commit 6007065cbdef79d041559b8925ffd3c60c844ec6 Author: Sami Wagiaalla Date: Thu Nov 29 10:52:48 2007 -0500 swagiaal: Removed List ops from LocationExpression constructor. frysk-core/frysk/debuginfo/ChangeLog +2007-11-29 Sami Wagiaalla + + * LocationExpression.java (LocationExpression): Removed ops from + constructor. + * TestLocationExpression.java: Updated. + * TestAddress.java: Updated. + frysk-core/frysk/value/ChangeLog +2007-11-29 Sami Wagiaalla + + Removed List ops from LocationExpression constructor. + * Variable.java: Updated. + Moved LocationExpression construction to constructor. + commit 6ae6ac4106e0abb1b7edbfa2c8fdc007594881bd Author: Sami Wagiaalla Date: Wed Nov 28 15:36:24 2007 -0500 swagiaal: CompositeType.java: Eliminated generic add function. frysk-core/frysk/value/ChangeLog +2007-11-28 Sami Wagiaalla + + * CompositeType.java: Eliminated generic add function and moved + member instantiation to repecteve add methods. commit 8f903354f31d10c840f90f1b10c8c2df98bad46c Author: Sami Wagiaalla Date: Wed Nov 28 15:00:35 2007 -0500 swagiaal: created CompositeType.addMemberTomap frysk-core/frysk/value/ChangeLog +2007-11-28 Sami Wagiaalla + + * CompositeType.java (addMemberToMap): New function. + commit 5d59f04617e97a2856150fcb9407cbf80be84a13 Author: Sami Wagiaalla Date: Wed Nov 28 14:51:23 2007 -0500 swagiaal: Renamed CompositeType addStaticBitFieldMember and addBitFieldMember. frysk-core/frysk/debuginfo/ChangeLog +2007-11-28 Sami Wagiaalla + + CompositeType.java: Renamed addStaticBitFieldMember and + addBitFieldMember. + * TypeEntry.java: Updated. + frysk-core/frysk/expr/ChangeLog +2007-11-28 Sami Wagiaalla + + CompositeType.java: Renamed addStaticBitFieldMember and + addBitFieldMember. + * TestbedSymTab.java: Updated. + frysk-core/frysk/value/ChangeLog +2007-11-28 Sami Wagiaalla + + * CompositeType.java (addStaticBitFieldMember): Renamed. + (addBitFieldMember): Renamed. + * TestComposite.java: Updated + ----------------------------------------------------------------------- Summary of changes: frysk-core/frysk/debuginfo/ChangeLog | 19 + frysk-core/frysk/debuginfo/LocationExpression.java | 350 ++------------------ frysk-core/frysk/debuginfo/TestAddress.java | 8 +- .../frysk/debuginfo/TestLocationExpression.java | 4 +- frysk-core/frysk/debuginfo/TypeEntry.java | 6 +- frysk-core/frysk/expr/ChangeLog | 6 + frysk-core/frysk/expr/TestbedSymTab.java | 4 +- frysk-core/frysk/value/ChangeLog | 21 ++ frysk-core/frysk/value/CompositeType.java | 82 ++--- frysk-core/frysk/value/TestComposite.java | 16 +- frysk-core/frysk/value/Variable.java | 7 +- 11 files changed, 122 insertions(+), 401 deletions(-) First 500 lines of diff: diff --git a/frysk-core/frysk/debuginfo/ChangeLog b/frysk-core/frysk/debuginfo/ChangeLog index 10c7918..f33e9f7 100644 --- a/frysk-core/frysk/debuginfo/ChangeLog +++ b/frysk-core/frysk/debuginfo/ChangeLog @@ -1,3 +1,20 @@ +2007-11-29 Sami Wagiaalla + + * LocationExpression.java (decode): Delete decode(Frame frame). + +2007-11-29 Sami Wagiaalla + + * LocationExpression.java (LocationExpression): Removed ops from + constructor. + * TestLocationExpression.java: Updated. + * TestAddress.java: Updated. + +2007-11-28 Sami Wagiaalla + + CompositeType.java: Renamed addStaticBitFieldMember and + addBitFieldMember. + * TypeEntry.java: Updated. + 2007-11-28 Teresa Thomas * TestPieceLocation.java (testMapping): Delete - redundant @@ -12,6 +29,8 @@ to be passed as an argument to decoding functions. * TestAddress.java: Updated. * TestLocationExpression.java: Updated. + * TypeEntry.java: Updated. + 2007-11-26 Sami Wagiaalla diff --git a/frysk-core/frysk/debuginfo/LocationExpression.java b/frysk-core/frysk/debuginfo/LocationExpression.java index b1e3d81..7db72aa 100644 --- a/frysk-core/frysk/debuginfo/LocationExpression.java +++ b/frysk-core/frysk/debuginfo/LocationExpression.java @@ -47,6 +47,7 @@ import lib.dwfl.DwAt; import lib.dwfl.DwOp; import lib.dwfl.DwarfDie; import lib.dwfl.DwarfOp; +import frysk.Config; import frysk.isa.Register; import frysk.isa.RegisterMap; import frysk.stack.Frame; @@ -56,14 +57,12 @@ public class LocationExpression { locationTypeAddress = 2, locationTypeReg = 3; DwarfDie die; - List ops; int locationType; LinkedList stack; - public LocationExpression(DwarfDie die, List ops) { + public LocationExpression(DwarfDie die) { locationType = 0; this.die = die; - this.ops = ops; this.stack = null; } @@ -71,337 +70,20 @@ public class LocationExpression { * Decode a location list and return the value. * */ - 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(); - else - throw new ValueUavailableException(); - - for(int i = 0; i < nops; i++) { - int operator = ((DwarfOp) ops.get(i)).operator; - long operand1 = ((DwarfOp) ops.get(i)).operand1; - long operand2 = ((DwarfOp) ops.get(i)).operand2; - switch (operator) { - case DwOp.LIT0_: - case DwOp.LIT1_: - case DwOp.LIT2_: - case DwOp.LIT3_: - case DwOp.LIT4_: - case DwOp.LIT5_: - case DwOp.LIT6_: - case DwOp.LIT7_: - case DwOp.LIT8_: - case DwOp.LIT9_: - case DwOp.LIT10_: - case DwOp.LIT11_: - case DwOp.LIT12_: - case DwOp.LIT13_: - case DwOp.LIT14_: - case DwOp.LIT15_: - case DwOp.LIT16_: - case DwOp.LIT17_: - case DwOp.LIT18_: - case DwOp.LIT19_: - case DwOp.LIT20_: - case DwOp.LIT21_: - case DwOp.LIT22_: - case DwOp.LIT23_: - case DwOp.LIT24_: - case DwOp.LIT25_: - case DwOp.LIT26_: - case DwOp.LIT27_: - case DwOp.LIT28_: - case DwOp.LIT29_: - case DwOp.LIT30_: - case DwOp.LIT31_: - stack.addFirst(new Long(operator - DwOp.LIT0_)); - break; - - // Register name Operators - case DwOp.REG0_: - case DwOp.REG1_: - case DwOp.REG2_: - case DwOp.REG3_: - case DwOp.REG4_: - case DwOp.REG5_: - case DwOp.REG6_: - case DwOp.REG7_: - case DwOp.REG8_: - case DwOp.REG9_: - case DwOp.REG10_: - case DwOp.REG11_: - case DwOp.REG12_: - case DwOp.REG13_: - case DwOp.REG14_: - case DwOp.REG15_: - case DwOp.REG16_: - case DwOp.REG17_: - case DwOp.REG18_: - case DwOp.REG19_: - case DwOp.REG20_: - case DwOp.REG21_: - case DwOp.REG22_: - case DwOp.REG23_: - case DwOp.REG24_: - case DwOp.REG25_: - case DwOp.REG26_: - case DwOp.REG27_: - case DwOp.REG28_: - case DwOp.REG29_: - case DwOp.REG30_: - case DwOp.REG31_: - if (locationType == 0) - locationType = locationTypeReg; - Register register = registerMap.getRegister(operator - DwOp.REG0_); - long regval = frame.getRegister(register); - stack.addFirst(new Long(regval)); - break; - - case DwOp.BREG0_: - case DwOp.BREG1_: - case DwOp.BREG2_: - case DwOp.BREG3_: - case DwOp.BREG4_: - case DwOp.BREG5_: - case DwOp.BREG6_: - case DwOp.BREG7_: - case DwOp.BREG8_: - case DwOp.BREG9_: - case DwOp.BREG10_: - case DwOp.BREG11_: - case DwOp.BREG12_: - case DwOp.BREG13_: - case DwOp.BREG14_: - case DwOp.BREG15_: - case DwOp.BREG16_: - case DwOp.BREG17_: - case DwOp.BREG18_: - case DwOp.BREG19_: - case DwOp.BREG20_: - case DwOp.BREG21_: - case DwOp.BREG22_: - case DwOp.BREG23_: - case DwOp.BREG24_: - case DwOp.BREG25_: - case DwOp.BREG26_: - case DwOp.BREG27_: - case DwOp.BREG28_: - case DwOp.BREG29_: - case DwOp.BREG30_: - case DwOp.BREG31_: - locationType = locationTypeRegDisp; - register = registerMap.getRegister(operator - DwOp.BREG0_); - regval = frame.getRegister(register); - stack.addFirst(new Long(operand1 + regval)); - break; - - - case DwOp.REGX_: - register = registerMap.getRegister((int)operand1); - regval = frame.getRegister(register); - stack.addFirst(new Long(regval)); - break; - - case DwOp.ADDR_: - locationType = locationTypeAddress; - stack.addFirst(new Long(operand1)); - break; - - // DW_OP_fbreg calls recursively and pushes that value on the stack - case DwOp.FBREG_: - locationType = locationTypeRegDisp; - long pc = frame.getAdjustedAddress(); - 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 - case DwOp.CONST1U_: - case DwOp.CONST1S_: - case DwOp.CONST2U_: - case DwOp.CONST2S_: - case DwOp.CONST4U_: - case DwOp.CONST4S_: - case DwOp.CONSTU_: - case DwOp.CONSTS_: - stack.addFirst(new Long(operand1)); - break; - - // Stack Operations - case DwOp.DUP_: - stack.addFirst(stack.getFirst()); - break; - - case DwOp.OVER_: - stack.addFirst(stack.get(1)); - break; - - case DwOp.DROP_: - stack.removeFirst(); - break; - - case DwOp.SWAP_: - Long first = (Long) stack.removeFirst(); - Long second = (Long) stack.removeFirst(); - stack.addFirst(first); - stack.addFirst(second); - break; - - case DwOp.ROT_: - first = (Long) stack.removeFirst(); - second = (Long) stack.removeFirst(); - Long third = (Long) stack.removeFirst(); - stack.addFirst(first); - stack.addFirst(third); - stack.addFirst(second); - break; - - // Arithmetic Operations - case DwOp.PLUS_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); - stack.addFirst(new Long(operand1 + operand2)); - break; - - case DwOp.PLUS_UCONST_: - operand2 = ((Long)stack.removeFirst()).longValue(); - stack.addFirst(new Long(operand1 + operand2)); - break; - - case DwOp.MINUS_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); - stack.addFirst(new Long(operand1 + operand2)); // - ? - break; - - case DwOp.MUL_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); - stack.addFirst(new Long(operand1 * operand2)); - break; - - case DwOp.DIV_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); - // Should there be a check here for operand1!=0 ? - stack.addFirst(new Long(operand2 / operand1)); - break; - - case DwOp.MOD_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); - // Should there be a check here for operand1!=0 ? - stack.addFirst(new Long(operand2 % operand1)); - break; - - case DwOp.ABS_: - operand1 = ((Long)stack.removeFirst()).longValue(); - stack.addFirst(new Long(Math.abs(operand1))); - break; - - case DwOp.AND_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); - stack.addFirst(new Long(operand1 & operand2)); - break; - - case DwOp.OR_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); - stack.addFirst(new Long(operand1 | operand2)); - break; - - case DwOp.SHL_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); - stack.addFirst(new Long(operand2 << operand1)); - break; - - case DwOp.SHR_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); - stack.addFirst(new Long(operand2 >>> operand1)); - break; - - case DwOp.SHRA_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); - stack.addFirst(new Long(operand2 >> operand1)); - break; - - case DwOp.XOR_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); - stack.addFirst(new Long(operand1 ^ operand2)); - break; - - case DwOp.NEG_: - operand1 = ((Long)stack.removeFirst()).longValue(); - stack.addFirst(new Long(0-operand1)); - break; - - case DwOp.NOT_: - operand1 = ((Long)stack.removeFirst()).longValue(); - stack.addFirst(new Long(~operand1)); - break; - - // Control flow operations - case DwOp.LE_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); - stack.addFirst(new Long((operand2 <= operand1)? 1:0)); - break; - - case DwOp.GE_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); - stack.addFirst(new Long((operand2 >= operand1)? 1:0)); - break; - - case DwOp.EQ_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); - stack.addFirst(new Long((operand2 == operand1)? 1:0)); - break; - - case DwOp.LT_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); - stack.addFirst(new Long((operand2 < operand1)? 1:0)); - break; - - case DwOp.GT_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); - stack.addFirst(new Long((operand2 > operand1)? 1:0)); - break; - - case DwOp.NE_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); - stack.addFirst(new Long((operand2 != operand1)? 1:0)); - break; - - // ??? Support remaining operators - default: - throw new ValueUavailableException(); - } - } - return ((Long)stack.removeFirst()).longValue(); + + public List decode(DebugInfoFrame frame, int size) { + List ops = die.getFormData(frame.getAdjustedAddress()); + return decode(frame, ops, size); } - + /** * Decode a location list and return the value * @param size - Size of variable * @return List of memory or register pieces */ - public List decode (Frame frame, int size) + public List decode (Frame frame, List ops, int size) { + stack = new LinkedList(); int nops = ops.size(); RegisterMap registerMap = DwarfRegisterMapFactory.getRegisterMap(frame.getTask().getISA()); @@ -559,8 +241,14 @@ public class LocationExpression { case DwOp.FBREG_: locationType = locationTypeRegDisp; long pc = frame.getAdjustedAddress(); - LocationExpression frameBaseOps = new LocationExpression (die, die.getFrameBase(pc)); - stack.addFirst(new Long(operand1 + frameBaseOps.decode(frame))); + LocationExpression frameBaseOps = new LocationExpression (die); + + // FBREG is expected to return a memory address + // so we make that assumption when casting element 0 to MemoryPiece + stack.addFirst(new Long(operand1 + + ((MemoryPiece) frameBaseOps.decode(frame, + die.getFrameBase(pc), Config.getWordSize()) + .get(0)).getMemory())); break; // ??? unsigned not properly handled (use bignum?) See DwarfDie.java @@ -791,7 +479,8 @@ public class LocationExpression { * Return register number for a one entry DW_OP_regX location list * */ - public Register getRegisterNumber (Frame frame) { + public Register getRegisterNumber (Frame frame, List ops) { + if (ops.size() == 1) { int operator = ((DwarfOp) ops.get(0)).operator; if (operator >= DwOp.REG0_ @@ -811,4 +500,5 @@ public class LocationExpression { public int getStackSize() { return ((stack != null) ? stack.size() : 0); } + } diff --git a/frysk-core/frysk/debuginfo/TestAddress.java b/frysk-core/frysk/debuginfo/TestAddress.java index e2c55d8..cca5ef8 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(varDie, ops); - PieceLocation loc = new PieceLocation(locExpr.decode(frame,var.getType + LocationExpression locExpr = new LocationExpression(varDie); + PieceLocation loc = new PieceLocation(locExpr.decode(frame, ops,var.getType (frame.getTask().getISA()).getSize())); /* Get the value of the address. @@ -96,8 +96,8 @@ public class TestAddress DwarfDie addrDie = addr.getVariableDie(); List opsAddr = addrDie.getFormData(frame.getAdjustedAddress()); LocationExpression locExprAddr = new LocationExpression( - addrDie, opsAddr); - PieceLocation p = new PieceLocation(locExprAddr.decode(frame, addr.getType + addrDie); + PieceLocation p = new PieceLocation(locExprAddr.decode(frame, opsAddr, 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 271a3ff..4393145 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(die, ops); - List loc = locExp.decode(frame,12); + LocationExpression locExp = new LocationExpression(die); + List loc = locExp.decode(frame, ops,12); assertEquals ("Stack size", stackSize, locExp.getStackSize()); compareLocations (loc, expectedLoc); diff --git a/frysk-core/frysk/debuginfo/TypeEntry.java b/frysk-core/frysk/debuginfo/TypeEntry.java index 2e8d01f..d1b5861 100644 --- a/frysk-core/frysk/debuginfo/TypeEntry.java +++ b/frysk-core/frysk/debuginfo/TypeEntry.java @@ -175,10 +175,10 @@ public class TypeEntry int bitOffset = member .getAttrConstant(DwAt.BIT_OFFSET); if(staticMember){ - classType.addStaticMember(member.getName(), memberType, offset, access, + classType.addStaticBitFieldMember(member.getName(), memberType, offset, access, bitOffset, bitSize); }else{ - classType.addMember(member.getName(), memberType, offset, access, + classType.addBitFieldMember(member.getName(), memberType, offset, access, bitOffset, bitSize); } } @@ -272,7 +272,7 @@ public class TypeEntry if (bitSize != -1) { hooks/post-receive -- frysk system monitor/debugger