diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/IAddress.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/IAddress.java index cbde33cd4f6..8dd0d099cfe 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/IAddress.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/IAddress.java @@ -12,7 +12,7 @@ package org.eclipse.cdt.core; import java.math.BigInteger; -/* +/** * Represents C/C++ address in CDT. All implementors of this inteface should be * immutable, i.e. all methods should not modify objects, they should return * new object. @@ -20,63 +20,93 @@ import java.math.BigInteger; * Please see Addr32 and Addr64 classes to see how this interface should * be extended */ -public interface IAddress +public interface IAddress extends Comparable { - /* - * Return adds offset to address and returns new address object + /** + * Adds offset to address and returns new address object * which is the result + * @param offset to add + * @return the new address */ IAddress add(BigInteger offset); - /* + + /** + * Adds offset to address and returns new address object + * which is the result + *

Note: This method has an offset limit of Long.MAX and Long.MIN, which under some addressing schems + * may impose an unnesseary limitation, see IAddressa.add(BigInteger offset) to handle larger offsets. + * @param offset to add + * @return the new address + */ + IAddress add(long offset); + + /** * Returns maximal offset possible for address. The offset * should be Identicall for all addresses of given class. + * @return the max offset for this address class */ BigInteger getMaxOffset(); - /* - * Returns distance between two addresses. Distance may be positive or negative + + /** + * Returns distance to address. Distance may be positive or negative + * @param other address which distance is calculated to. + * @return distance to address */ - BigInteger distance(IAddress other); - /* - * Compares two addresses. - * - * Returns: - * -1 if this < addr - * 0 if this == addr - * 1 if this > addr + BigInteger distanceTo(IAddress other); + + /** + * Returns the value of the address. + * @return */ - int compareTo(IAddress addr); - /* - * Returns true if addresses are equal + BigInteger getValue(); + + /** + * Returns whether this address equals the given object. + * + * @param obj the other object + * @return true if the addresses are equivalent, + * and false if they are not */ - boolean equals(IAddress addr); - /* + boolean equals(Object addr); + + /** * Return true if address is zero, i.e. minimal possible - */ + * @return true is address is zero + */ boolean isZero(); - /* + + /** * Return true if address is maximal, i.e. maximal possible - */ + * @return true if address is maximal + */ boolean isMax(); - /* + /** * Converts address to string as an unsigned number with given radix + * @param radix to use for strng conversion + * @return a string representation of address */ String toString(int radix); - /* + + /** * Identical to toString(10) + * @return a string representation of address using a radix of 10 */ String toString(); - /* + + /** * Converts address to the hex representation with '0x' prefix and * with all leading zeros. The length of returned string should be * the same for all addresses of given class. I.e. 10 for 32-bit * addresses and 18 for 64-bit addresses + * @return */ String toHexAddressString(); - /* + /** * Returns amount of symbols in hex representation. Is identical to * toHexAddressString().length(). It is present for perfomance purpose. + * @return the nmber os chararcter symbols to represent this address in hex. */ int getCharsNum(); diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr2line.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr2line.java index afbecdbe73b..a3a4d6b768c 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr2line.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr2line.java @@ -15,7 +15,6 @@ import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; -import java.math.BigInteger; import org.eclipse.cdt.core.IAddress; import org.eclipse.cdt.utils.spawner.ProcessFactory; @@ -112,7 +111,7 @@ public class Addr2line { // this for validation. //IPF_TODO: check - for (int i = 0; i <= 20; i += 4, address = address.add(BigInteger.valueOf(i))) { + for (int i = 0; i <= 20; i += 4, address = address.add(i)) { String line = getLine(address); if (line != null) { int colon = line.lastIndexOf(':'); diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr32.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr32.java index 713fc84bb60..7316a22244e 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr32.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr32.java @@ -1,119 +1,111 @@ /******************************************************************************* - * Copyright (c) 2004 Intel Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html + * Copyright (c) 2004 Intel Corporation and others. All rights reserved. This + * program and the accompanying materials are made available under the terms of + * the Common Public License v1.0 which accompanies this distribution, and is + * available at http://www.eclipse.org/legal/cpl-v10.html * - * Contributors: - * Intel Corporation - Initial API and implementation - *******************************************************************************/ + * Contributors: Intel Corporation - Initial API and implementation + ******************************************************************************/ package org.eclipse.cdt.utils; import java.math.BigInteger; import org.eclipse.cdt.core.IAddress; -/* - */ -final public class Addr32 implements IAddress -{ - public static final Addr32 ZERO=new Addr32(0); - public static final Addr32 MAX=new Addr32(0xffffffffL); +public class Addr32 implements IAddress { - public static final BigInteger MAX_OFFSET = BigInteger.valueOf(0xffffffffL); + private static final long MAX_ADDR = 0xffffffffL; + public static final Addr32 ZERO = new Addr32(0); + public static final Addr32 MAX = new Addr32(MAX_ADDR); + + public static final BigInteger MAX_OFFSET = BigInteger.valueOf(MAX_ADDR); + public static final int BYTES_NUM = 4; public static final int DIGITS_NUM = BYTES_NUM * 2; - public static final int CHARS_NUM = DIGITS_NUM + 2; - - private long address; + public static final int CHARS_NUM = DIGITS_NUM + 2; + + private final long address; /* * addrBytes should be 4 bytes length */ - public Addr32(byte [] addrBytes) - { - /*We should mask out sign bits to have correct value*/ - this.address = ( ( ((long)addrBytes[0]) << 24 ) & 0xFF000000L) + - ( ( ((long)addrBytes[1]) << 16 ) & 0x00FF0000L) + - ( ( ((long)addrBytes[2]) << 8 ) & 0x0000FF00L) + - ( ((long)addrBytes[3]) & 0x000000FFL); + public Addr32(byte[] addrBytes) { + if (addrBytes.length != 4) + throw (new NumberFormatException("Invalid address array")); //$NON-NLS-1$ + /* We should mask out sign bits to have correct value */ + this.address = ( ( ((long)addrBytes[0]) << 24) & 0xFF000000L) + ( ( ((long)addrBytes[1]) << 16) & 0x00FF0000L) + + ( ( ((long)addrBytes[2]) << 8) & 0x0000FF00L) + (addrBytes[3] & 0x000000FFL); } - public Addr32(long rawaddress) - { - this.address=rawaddress; - } - - public Addr32(String addr) - { - addr = addr.toLowerCase(); - if ( addr.startsWith( "0x" ) ) - { - this.address = Long.parseLong(addr.substring(2), 16); - } - else - { - this.address = Long.parseLong(addr, 10); + public Addr32(long rawaddress) { + if (rawaddress > MAX_ADDR || rawaddress < 0) { + rawaddress &= MAX_ADDR; // truncate } + this.address = rawaddress; } - public Addr32(String addr, int radix) - { - this.address=Long.parseLong(addr, radix); + public Addr32(String addr) { + this(Long.decode(addr).longValue()); } - final public IAddress add(BigInteger offset) - { - return new Addr32(this.address + offset.longValue()); + public Addr32(String addr, int radix) { + this(Long.parseLong(addr, radix)); } - final public BigInteger getMaxOffset() - { + public IAddress add(BigInteger offset) { + return new Addr32(this.address + offset.longValue()); + } + + public IAddress add(long offset) { + return new Addr32(this.address + offset); + } + + public BigInteger getMaxOffset() { return MAX_OFFSET; } - - final public BigInteger distance(IAddress other) - { - return BigInteger.valueOf(address - ((Addr32)other).address); - } - final public int compareTo(IAddress addr) - { - if (address > ((Addr32)addr).address) - { + public BigInteger getValue() { + return BigInteger.valueOf(address); + } + + public BigInteger distanceTo(IAddress other) { + if (!(other instanceof Addr32)) { + throw new IllegalArgumentException(); + } + return BigInteger.valueOf(((Addr32)other).address - address); + } + + public int compareTo(Object other) { + if (!(other instanceof Addr32)) { + throw new IllegalArgumentException(); + } + if (address > ((Addr32)other).address) { return 1; - } - if (address < ((Addr32)addr).address) - { + } + if (address < ((Addr32)other).address) { return -1; - } + } return 0; } - final public boolean isMax() - { + public boolean isMax() { return address == MAX.address; } - final public boolean isZero() - { + public boolean isZero() { return address == ZERO.address; } - final public String toString() - { - return toString(10); + public String toString() { + return toString(10); } - final public String toString(int radix) - { + public String toString(int radix) { return Long.toString(address, radix); } - final public boolean equals(IAddress x) - { + public boolean equals(Object x) { if (x == this) return true; if (!(x instanceof Addr32)) @@ -121,23 +113,23 @@ final public class Addr32 implements IAddress return this.address == ((Addr32)x).address; } - final public String toHexAddressString( ) - { - String addressString = Long.toString(address,16); - StringBuffer sb = new StringBuffer( CHARS_NUM ); - int count = DIGITS_NUM - addressString.length(); - sb.append( "0x" ); - for ( int i = 0; i < count ; ++i ) - { - sb.append( '0' ); + public int hashCode() { + return (int)(address ^ (address >> 32)); + } + + public String toHexAddressString() { + String addressString = Long.toString(address, 16); + StringBuffer sb = new StringBuffer(CHARS_NUM); + int count = DIGITS_NUM - addressString.length(); + sb.append("0x"); //$NON-NLS-1$ + for (int i = 0; i < count; ++i) { + sb.append('0'); } - sb.append( addressString ); + sb.append(addressString); return sb.toString(); } - final public int getCharsNum() - { + public int getCharsNum() { return CHARS_NUM; } - -} +} \ No newline at end of file diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr64.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr64.java index 2d78ab3898b..408a9892285 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr64.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr64.java @@ -1,129 +1,130 @@ /******************************************************************************* - * Copyright (c) 2004 Intel Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html + * Copyright (c) 2004 Intel Corporation and others. All rights reserved. This + * program and the accompanying materials are made available under the terms of + * the Common Public License v1.0 which accompanies this distribution, and is + * available at http://www.eclipse.org/legal/cpl-v10.html * - * Contributors: - * Intel Corporation - Initial API and implementation - *******************************************************************************/ + * Contributors: Intel Corporation - Initial API and implementation + ******************************************************************************/ package org.eclipse.cdt.utils; import java.math.BigInteger; import org.eclipse.cdt.core.IAddress; -/* - */ -final public class Addr64 implements IAddress -{ - public static final Addr64 ZERO=new Addr64("0"); - public static final Addr64 MAX=new Addr64("ffffffffffffffff",16); +public class Addr64 implements IAddress { - public static final BigInteger MAX_OFFSET = new BigInteger("ffffffffffffffff",16); - - public static final int BYTES_NUM = 8; - public static final int DIGITS_NUM = BYTES_NUM * 2; - public static final int CHARS_NUM = DIGITS_NUM + 2; - - private BigInteger address; + public static final Addr64 ZERO = new Addr64("0"); //$NON-NLS-1$ + public static final Addr64 MAX = new Addr64("ffffffffffffffff", 16); //$NON-NLS-1$ - public Addr64(byte [] addrBytes) - { - if( addrBytes.length != 8) - throw(new NumberFormatException("Invalid address array")); - this.address = new BigInteger(1, addrBytes); + public static final BigInteger MAX_OFFSET = new BigInteger("ffffffffffffffff", 16); //$NON-NLS-1$ + + public static final int BYTES_NUM = 8; + public static final int DIGITS_NUM = BYTES_NUM * 2; + public static final int CHARS_NUM = DIGITS_NUM + 2; + + private final BigInteger address; + + public Addr64(byte[] addrBytes) { + address = checkAddress(new BigInteger(1, addrBytes)); } - - public Addr64(BigInteger rawaddress) - { - this.address=rawaddress; - } - - public Addr64(String addr) - { + + public Addr64(BigInteger rawaddress) { + address = checkAddress(rawaddress); + } + + public Addr64(String addr) { addr = addr.toLowerCase(); - if ( addr.startsWith( "0x" ) ) - { - this.address = new BigInteger(addr.substring(2), 16); + if (addr.startsWith("0x")) { //$NON-NLS-1$ + address = checkAddress(new BigInteger(addr.substring(2), 16)); + } else { + address = checkAddress(new BigInteger(addr, 10)); } - else - { - this.address = new BigInteger(addr, 10); - } - } - - public Addr64(String addr, int radix) - { - this.address=new BigInteger(addr, radix); } - final public IAddress add(BigInteger offset) - { + public Addr64(String addr, int radix) { + this(new BigInteger(addr, radix)); + } + + private BigInteger checkAddress(BigInteger addr) { + if (addr.signum() == -1) { + throw new IllegalArgumentException("Invalid Address, must be positive value"); //$NON-NLS-1$ + } + if (addr.bitLength() > 64 ) { + return addr.and(MAX.getValue()); // truncate + } + return addr; + } + + + public IAddress add(BigInteger offset) { return new Addr64(this.address.add(offset)); } - final public BigInteger getMaxOffset() - { + public IAddress add(long offset) { + return new Addr64(this.address.add(BigInteger.valueOf(offset))); + } + + public BigInteger getMaxOffset() { return MAX_OFFSET; } - final public BigInteger distance(IAddress other) - { - return address.add(((Addr64)other).address.negate()); + public BigInteger distanceTo(IAddress other) { + if (! (other instanceof Addr64)) { + throw new IllegalArgumentException(); + } + return ((Addr64)other).address.add(address.negate()); } - final public boolean isMax() - { + public boolean isMax() { return address.equals(MAX); } - final public boolean isZero() - { + public boolean isZero() { return address.equals(ZERO); } - final public int compareTo(IAddress addr) - { - return this.address.compareTo(((Addr64)addr).address); + public BigInteger getValue() { + return address; } - final public boolean equals(IAddress x) - { + public int compareTo(Object other) { + return this.address.compareTo(((Addr64)other).address); + } + + public boolean equals(Object x) { if (x == this) return true; - if (!(x instanceof Addr64)) + if (! (x instanceof Addr64)) return false; return this.address.equals(((Addr64)x).address); } - final public String toString() - { - return toString(10); + public int hashCode() { + return address.hashCode(); } - - final public String toString(int radix) - { + + public String toString() { + return toString(10); + } + + public String toString(int radix) { return address.toString(radix); } - - final public String toHexAddressString( ) - { + + public String toHexAddressString() { String addressString = address.toString(16); - StringBuffer sb = new StringBuffer( CHARS_NUM ); - int count = DIGITS_NUM - addressString.length(); - sb.append( "0x" ); - for ( int i = 0; i < count; ++i ) - { - sb.append( '0' ); + StringBuffer sb = new StringBuffer(CHARS_NUM); + int count = DIGITS_NUM - addressString.length(); + sb.append("0x"); //$NON-NLS-1$ + for (int i = 0; i < count; ++i) { + sb.append('0'); } - sb.append( addressString ); + sb.append(addressString); return sb.toString(); } - - final public int getCharsNum() - { + + public int getCharsNum() { return CHARS_NUM; } } diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/BinaryObjectAdapter.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/BinaryObjectAdapter.java index 431eaf686c2..e725cbe5288 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/BinaryObjectAdapter.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/BinaryObjectAdapter.java @@ -10,7 +10,6 @@ *******************************************************************************/ package org.eclipse.cdt.utils; -import java.math.BigInteger; import java.util.Arrays; import org.eclipse.cdt.core.IAddress; @@ -61,7 +60,7 @@ public abstract class BinaryObjectAdapter extends BinaryFile implements IBinaryO } insertion = -insertion - 1; ISymbol symbol = syms[insertion - 1]; - if (addr.compareTo(symbol.getAddress().add(BigInteger.valueOf(symbol.getSize()))) < 0) { + if (addr.compareTo(symbol.getAddress().add(symbol.getSize())) < 0) { return syms[insertion - 1]; } return null; diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinPEBinaryObject.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinPEBinaryObject.java index 6330d678a11..81c666525ce 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinPEBinaryObject.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinPEBinaryObject.java @@ -11,7 +11,6 @@ package org.eclipse.cdt.utils.coff.parser; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; -import java.math.BigInteger; import java.util.List; import org.eclipse.cdt.core.IAddress; @@ -227,7 +226,7 @@ public class CygwinPEBinaryObject extends PEBinaryObject { } IPath file = filename != null ? new Path(filename) : Path.EMPTY; int startLine = symbolLoadingAddr2line.getLineNumber(addr); - int endLine = symbolLoadingAddr2line.getLineNumber(addr.add(BigInteger.valueOf(size - 1))); + int endLine = symbolLoadingAddr2line.getLineNumber(addr.add(size - 1)); list.add(new CygwinSymbol(this, name, type, addr, size, file, startLine, endLine)); } catch (IOException e) { symbolLoadingAddr2line.dispose(); diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinSymbol.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinSymbol.java index 36ded63761d..c722d169cd9 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinSymbol.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/CygwinSymbol.java @@ -7,7 +7,6 @@ package org.eclipse.cdt.utils.coff.parser; import java.io.IOException; -import java.math.BigInteger; import org.eclipse.cdt.core.IAddress; import org.eclipse.cdt.utils.Addr2line; @@ -57,7 +56,7 @@ class CygwinSymbol extends Symbol { Addr2line addr2line = ((CygwinPEBinaryObject)binary).getAddr2line(true); if (addr2line != null) { try { - return addr2line.getLineNumber(getAddress().add(BigInteger.valueOf(offset))); + return addr2line.getLineNumber(getAddress().add(offset)); } catch (IOException e) { // ignore } diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/Elf.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/Elf.java index 4b79fe277c5..4f66b706558 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/Elf.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/Elf.java @@ -978,8 +978,9 @@ public class Elf { numSyms = (int)section.sh_size / (int)section.sh_entsize; } ArrayList symList = new ArrayList(numSyms); - for (int c = 0; c < numSyms; c++) { - efile.seek(section.sh_offset + (section.sh_entsize * c)); + long offset = section.sh_offset; + for (int c = 0; c < numSyms; offset += section.sh_entsize, c++) { + efile.seek(offset); Symbol symbol = new Symbol(section); switch (ehdr.e_ident[ELFhdr.EI_CLASS]) { case ELFhdr.ELFCLASS32 : { diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/GNUElfBinaryObject.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/GNUElfBinaryObject.java index c1d5c63043f..8d549948712 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/GNUElfBinaryObject.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/GNUElfBinaryObject.java @@ -11,7 +11,6 @@ package org.eclipse.cdt.utils.elf.parser; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; -import java.math.BigInteger; import java.util.List; import org.eclipse.cdt.core.IAddress; @@ -183,7 +182,7 @@ public class GNUElfBinaryObject extends ElfBinaryObject { // the file. IPath file = (filename != null && !filename.equals("??")) ? new Path(filename) : Path.EMPTY; //$NON-NLS-1$ int startLine = symbolLoadingAddr2line.getLineNumber(addr); - int endLine = symbolLoadingAddr2line.getLineNumber(addr.add(BigInteger.valueOf(size - 1))); + int endLine = symbolLoadingAddr2line.getLineNumber(addr.add(size - 1)); list.add(new GNUSymbol(this, name, type, addr, size, file, startLine, endLine)); } catch (IOException e) { symbolLoadingAddr2line.dispose(); diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/GNUSymbol.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/GNUSymbol.java index 61138fe6bb5..013dd8243d9 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/GNUSymbol.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/GNUSymbol.java @@ -11,7 +11,6 @@ package org.eclipse.cdt.utils.elf.parser; import java.io.IOException; -import java.math.BigInteger; import org.eclipse.cdt.core.IAddress; import org.eclipse.cdt.utils.Addr2line; @@ -36,7 +35,7 @@ public class GNUSymbol extends Symbol { Addr2line addr2line = ((GNUElfBinaryObject)binary).getAddr2line(true); if (addr2line != null) { try { - return addr2line.getLineNumber(getAddress().add(BigInteger.valueOf(offset))); + return addr2line.getLineNumber(getAddress().add(offset)); } catch (IOException e) { // ignore } diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/som/parser/SOMBinaryObject.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/som/parser/SOMBinaryObject.java index 222fe83b745..96abe97b2b7 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/som/parser/SOMBinaryObject.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/som/parser/SOMBinaryObject.java @@ -13,7 +13,6 @@ package org.eclipse.cdt.utils.som.parser; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; -import java.math.BigInteger; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -217,7 +216,7 @@ public class SOMBinaryObject extends BinaryObjectAdapter { IPath file = filename != null ? new Path(filename) : Path.EMPTY; int startLine = addr2line.getLineNumber(addr); - int endLine = addr2line.getLineNumber(addr.add(BigInteger.valueOf(size - 1))); + int endLine = addr2line.getLineNumber(addr.add(size - 1)); list.add(new SomSymbol(this, name, type, addr, size, file, startLine, endLine)); } catch (IOException e) { addr2line = null; diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/som/parser/SomSymbol.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/som/parser/SomSymbol.java index 9f17525853a..53409267e05 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/som/parser/SomSymbol.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/som/parser/SomSymbol.java @@ -11,7 +11,6 @@ package org.eclipse.cdt.utils.som.parser; import java.io.IOException; -import java.math.BigInteger; import org.eclipse.cdt.core.IAddress; import org.eclipse.cdt.utils.Addr2line; @@ -59,7 +58,7 @@ public class SomSymbol extends Symbol { Addr2line addr2line = ((SOMBinaryObject)binary).getAddr2line(true); if (addr2line != null) { try { - return addr2line.getLineNumber(getAddress().add(BigInteger.valueOf(offset))); + return addr2line.getLineNumber(getAddress().add(offset)); } catch (IOException e) { // ignore } diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/xcoff/parser/XCOFFBinaryObject.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/xcoff/parser/XCOFFBinaryObject.java index ac94cd98426..68f2b133e88 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/xcoff/parser/XCOFFBinaryObject.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/xcoff/parser/XCOFFBinaryObject.java @@ -11,7 +11,6 @@ package org.eclipse.cdt.utils.xcoff.parser; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; -import java.math.BigInteger; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -206,7 +205,7 @@ public class XCOFFBinaryObject extends BinaryObjectAdapter { IPath file = filename != null ? new Path(filename) : Path.EMPTY; int startLine = addr2line.getLineNumber(addr); - int endLine = addr2line.getLineNumber(addr.add(BigInteger.valueOf(size - 1))); + int endLine = addr2line.getLineNumber(addr.add(size - 1)); list.add(new XCoffSymbol(this, name, type, addr, size, file, startLine, endLine)); } catch (IOException e) { addr2line = null; diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/xcoff/parser/XCoffSymbol.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/xcoff/parser/XCoffSymbol.java index bd701ba00f9..1df30eb7405 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/xcoff/parser/XCoffSymbol.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/xcoff/parser/XCoffSymbol.java @@ -7,7 +7,6 @@ package org.eclipse.cdt.utils.xcoff.parser; import java.io.IOException; -import java.math.BigInteger; import org.eclipse.cdt.core.IAddress; import org.eclipse.cdt.utils.Addr2line; @@ -58,7 +57,7 @@ public class XCoffSymbol extends Symbol { Addr2line addr2line = ((XCOFFBinaryObject)binary).getAddr2line(true); if (addr2line != null) { try { - return addr2line.getLineNumber(getAddress().add(BigInteger.valueOf(offset))); + return addr2line.getLineNumber(getAddress().add(offset)); } catch (IOException e) { // ignore }