Source:
<code>public IMemorySpaceAwareMemoryBlock getMemoryBlock(String expression, Object context, String memorySpaceID) throws DebugException { IMemoryDMContext memoryDmc = null; IDMContext dmc = null; if (context instanceof IAdaptable) { dmc = (IDMContext)((IAdaptable)context).getAdapter(IDMContext.class); if (dmc != null) { memoryDmc = DMContexts.getAncestorOfType(dmc, IMemoryDMContext.class); } } if (memoryDmc == null) { return null; } BigInteger blockAddress; try { int base = 10; int offset = 0; if (expression.startsWith("0x") || expression.startsWith("0X")) { base = 16; offset = 2; } else if (expression.startsWith("0b")) { base = 2; offset = 2; } else if (expression.startsWith("0")) { base = 8; offset = 1; } blockAddress = new BigInteger(expression.substring(offset), base); } catch (NumberFormatException nfexc) { blockAddress = resolveMemoryAddress(dmc, expression); if (blockAddress == null) { return null; } } int addressSize = getAddressSize(memoryDmc, memorySpaceID); int addressableSize = getAddressableSize(memoryDmc, memorySpaceID); <START> BigInteger endAddress = BigInteger.ONE.shiftLeft(addressSize*8).divide(BigInteger.valueOf(addressableSize)).subtract(BigInteger.ONE); <END> if (endAddress.compareTo(blockAddress) < 0) { throw new DebugException(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, -1, MessageFormat.format(Messages.Err_ExceedsMaxAddress, expression, endAddress.toString(16)), null)); } return new GdbMemoryBlock(this, memoryDmc, getModelId(), expression, blockAddress, addressableSize, 0, memorySpaceID); }</code><technical_language>I this confusion incorrect of word byte over, making java doc clear enough word byte is in legacy code octet. example of get a 32 bit address system a minimum addressable size of 16 bits (16 bit char) addressSize: 2 (addressable units) addressableSize: 2 (2 octets needed represent character) if apply java line patchset 3. BigInteger endAddress = BigInteger.ONE.shiftLeft(addressSize*8).subtract(BigInteger.ONE); shifting 16 bits left instead of 32</technical_language>

Target:
public IMemorySpaceAwareMemoryBlock getMemoryBlock(String expression, Object context, String memorySpaceID) throws DebugException { IMemoryDMContext memoryDmc = null; IDMContext dmc = null; if (context instanceof IAdaptable) { dmc = (IDMContext)((IAdaptable)context).getAdapter(IDMContext.class); if (dmc != null) { memoryDmc = DMContexts.getAncestorOfType(dmc, IMemoryDMContext.class); } } if (memoryDmc == null) { return null; } BigInteger blockAddress; try { int base = 10; int offset = 0; if (expression.startsWith("0x") || expression.startsWith("0X")) { base = 16; offset = 2; } else if (expression.startsWith("0b")) { base = 2; offset = 2; } else if (expression.startsWith("0")) { base = 8; offset = 1; } blockAddress = new BigInteger(expression.substring(offset), base); } catch (NumberFormatException nfexc) { blockAddress = resolveMemoryAddress(dmc, expression); if (blockAddress == null) { return null; } } int addressSize = getAddressSize(memoryDmc, memorySpaceID); BigInteger endAddress = BigInteger.ONE.shiftLeft(addressSize*8).subtract(BigInteger.ONE); if (endAddress.compareTo(blockAddress) < 0) { throw new DebugException(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, -1, MessageFormat.format(Messages.Err_ExceedsMaxAddress, expression, endAddress.toString(16)), null)); } return new GdbMemoryBlock(this, memoryDmc, getModelId(), expression, blockAddress, getAddressableSize(memoryDmc, memorySpaceID), 0, memorySpaceID); }