diff --git a/debug/org.eclipse.cdt.debug.core/ChangeLog b/debug/org.eclipse.cdt.debug.core/ChangeLog index ad60ecfef66..0d2329f29f2 100644 --- a/debug/org.eclipse.cdt.debug.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.core/ChangeLog @@ -1,3 +1,7 @@ +2004-11-09 Mikhail Khodjaiants + Fix for bug 77275: Disassembly causes Java exception for fn's with 0 bytes fn prologues. + * DisassemblyBlock.java + 2004-11-09 Mikhail Khodjaiants Partial fix for bug 41725: I can't set a breakpoint in a function where I used attach source. * CBreakpointManager.java diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/DisassemblyBlock.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/DisassemblyBlock.java index 811c9d0f36b..34b30e14b06 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/DisassemblyBlock.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/DisassemblyBlock.java @@ -41,9 +41,9 @@ public class DisassemblyBlock implements IDisassemblyBlock, IAdaptable { private IAsmSourceLine[] fSourceLines; - private IAddress fStartAddress; + private IAddress fStartAddress = null; - private IAddress fEndAddress; + private IAddress fEndAddress = null; private boolean fMixedMode = false; @@ -104,6 +104,8 @@ public class DisassemblyBlock implements IDisassemblyBlock, IAdaptable { public boolean contains( ICStackFrame frame ) { if ( !getDisassembly().getDebugTarget().equals( frame.getDebugTarget() ) ) return false; + if ( fStartAddress == null || fEndAddress == null ) + return false; IAddress address = frame.getAddress(); return (address.compareTo( fStartAddress ) >= 0 && address.compareTo( fEndAddress ) <= 0); } @@ -185,11 +187,13 @@ public class DisassemblyBlock implements IDisassemblyBlock, IAdaptable { } private void initializeAddresses() { - if ( fSourceLines.length > 0 ) { - IAsmInstruction[] instr = fSourceLines[0].getInstructions(); - fStartAddress = instr[0].getAdress(); - instr = fSourceLines[fSourceLines.length - 1].getInstructions(); - fEndAddress = instr[instr.length - 1].getAdress(); + for ( int i = 0; i < fSourceLines.length; ++i ) { + IAsmInstruction[] instr = fSourceLines[i].getInstructions(); + if ( instr.length > 0 ) { + if ( fStartAddress == null ) + fStartAddress = instr[0].getAdress(); + fEndAddress = instr[instr.length - 1].getAdress(); + } } }