diff --git a/core/org.eclipse.cdt.core/ChangeLog b/core/org.eclipse.cdt.core/ChangeLog index f83dc3e9743..e0cd84232b7 100644 --- a/core/org.eclipse.cdt.core/ChangeLog +++ b/core/org.eclipse.cdt.core/ChangeLog @@ -1,3 +1,14 @@ +2004-12-10 David Inglis + Fixed bug #80713 + + * utils/org/eclipse/cdt/utils/BinaryObjectAdapter.java + * utils/org/eclipse/cdt/utils/coff/PE.java + * utils/org/eclipse/cdt/utils/coff/parser/PEBinaryObject.java + * utils/org/eclipse/cdt/utils/elf/parser/ElfBinaryObject.java + * utils/org/eclipse/cdt/utils/macho/parser/MachOBinaryObject.java + * utils/org/eclipse/cdt/utils/som/parser/SOMBinaryObject.java + * utils/org/eclipse/cdt/utils/xcoff/parser/XCOFFBinaryParser.java + 2004-12-09 Alain Magloire Fix for 80620 * utils/org/eclipse/cdt/utils/coff/parser/CygwinPEBinaryObject.java 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 e725cbe5288..bc3c04ed60b 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 @@ -34,7 +34,6 @@ public abstract class BinaryObjectAdapter extends BinaryFile implements IBinaryO public String soname; public String[] needed; public String cpu; - public IAddressFactory addressFactory; public BinaryObjectInfo() { cpu = soname = ""; //$NON-NLS-1$ @@ -153,14 +152,7 @@ public abstract class BinaryObjectAdapter extends BinaryFile implements IBinaryO } return ""; //$NON-NLS-1$ } - public IAddressFactory getAddressFactory() - { - BinaryObjectInfo info = getBinaryObjectInfo(); - if (info != null) { - return info.addressFactory; - } - return null; //$NON-NLS-1$ - } + /** * @see org.eclipse.cdt.core.model.IBinaryParser.IBinaryObject#getName() */ @@ -176,6 +168,7 @@ public abstract class BinaryObjectAdapter extends BinaryFile implements IBinaryO * @see org.eclipse.cdt.core.model.IBinaryParser.IBinaryObject#getSymbols() */ public abstract ISymbol[] getSymbols(); + public abstract IAddressFactory getAddressFactory(); protected abstract BinaryObjectInfo getBinaryObjectInfo(); diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/PE.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/PE.java index 0b0f434ba14..939e9cbac03 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/PE.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/PE.java @@ -107,11 +107,6 @@ public class PE { public int getWord() { return word; } - - public IAddressFactory getAddressFactory(){ - return addrFactory; - } - } /** diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/PEBinaryObject.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/PEBinaryObject.java index cf988d79e7f..59ccfc3a80f 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/PEBinaryObject.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/coff/parser/PEBinaryObject.java @@ -17,11 +17,13 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import org.eclipse.cdt.core.IAddressFactory; import org.eclipse.cdt.core.IBinaryParser; import org.eclipse.cdt.core.IBinaryParser.IBinaryFile; import org.eclipse.cdt.core.IBinaryParser.ISymbol; import org.eclipse.cdt.utils.AR; import org.eclipse.cdt.utils.Addr32; +import org.eclipse.cdt.utils.Addr32Factory; import org.eclipse.cdt.utils.BinaryObjectAdapter; import org.eclipse.cdt.utils.Symbol; import org.eclipse.cdt.utils.coff.Coff; @@ -33,6 +35,7 @@ import org.eclipse.core.runtime.IPath; public class PEBinaryObject extends BinaryObjectAdapter { BinaryObjectInfo info; + IAddressFactory addressFactory; ISymbol[] symbols; AR.ARHeader header; @@ -132,7 +135,6 @@ public class PEBinaryObject extends BinaryObjectAdapter { info.isLittleEndian = attribute.isLittleEndian(); info.hasDebug = attribute.hasDebug(); info.cpu = attribute.getCPU(); - info.addressFactory = attribute.getAddressFactory(); } protected void loadSymbols(PE pe) throws IOException { @@ -160,4 +162,15 @@ public class PEBinaryObject extends BinaryObjectAdapter { } } } + + + /* (non-Javadoc) + * @see org.eclipse.cdt.utils.BinaryObjectAdapter#getAddressFactory() + */ + public IAddressFactory getAddressFactory() { + if (addressFactory == null) { + addressFactory = new Addr32Factory(); + } + return addressFactory; + } } \ No newline at end of file diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/ElfBinaryObject.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/ElfBinaryObject.java index 7244fed58cb..b642ef884e0 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/ElfBinaryObject.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/ElfBinaryObject.java @@ -17,10 +17,12 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import org.eclipse.cdt.core.IAddressFactory; import org.eclipse.cdt.core.IBinaryParser; import org.eclipse.cdt.core.IBinaryParser.IBinaryFile; import org.eclipse.cdt.core.IBinaryParser.ISymbol; import org.eclipse.cdt.utils.AR; +import org.eclipse.cdt.utils.Addr32Factory; import org.eclipse.cdt.utils.BinaryObjectAdapter; import org.eclipse.cdt.utils.Symbol; import org.eclipse.cdt.utils.elf.Elf; @@ -35,6 +37,7 @@ public class ElfBinaryObject extends BinaryObjectAdapter { private BinaryObjectInfo info; private ISymbol[] symbols; private final AR.ARHeader header; + private IAddressFactory addressFactory; public ElfBinaryObject(IBinaryParser parser, IPath p, AR.ARHeader h){ super(parser, p, IBinaryFile.OBJECT); @@ -146,7 +149,7 @@ public class ElfBinaryObject extends BinaryObjectAdapter { info.isLittleEndian = attribute.isLittleEndian(); info.hasDebug = attribute.hasDebug(); info.cpu = attribute.getCPU(); - info.addressFactory = attribute.getAddressFactory(); + addressFactory = attribute.getAddressFactory(); } protected void loadSymbols(ElfHelper helper) throws IOException { @@ -183,4 +186,18 @@ public class ElfBinaryObject extends BinaryObjectAdapter { return super.getAdapter(adapter); } + + /* (non-Javadoc) + * @see org.eclipse.cdt.utils.BinaryObjectAdapter#getAddressFactory() + */ + public IAddressFactory getAddressFactory() { + if (addressFactory == null) { + try { + loadInfo(); + } catch (IOException e) { + return new Addr32Factory(); + } + } + return addressFactory; + } } diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/macho/parser/MachOBinaryObject.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/macho/parser/MachOBinaryObject.java index 3ec8448b713..55c357d4d65 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/macho/parser/MachOBinaryObject.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/macho/parser/MachOBinaryObject.java @@ -17,10 +17,12 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import org.eclipse.cdt.core.IAddressFactory; import org.eclipse.cdt.core.IBinaryParser; import org.eclipse.cdt.core.IBinaryParser.IBinaryFile; import org.eclipse.cdt.core.IBinaryParser.ISymbol; import org.eclipse.cdt.utils.Addr32; +import org.eclipse.cdt.utils.Addr32Factory; import org.eclipse.cdt.utils.BinaryObjectAdapter; import org.eclipse.cdt.utils.CPPFilt; import org.eclipse.cdt.utils.Symbol; @@ -38,6 +40,7 @@ public class MachOBinaryObject extends BinaryObjectAdapter { private BinaryObjectInfo info; private ISymbol[] symbols; private AR.ARHeader header; + private IAddressFactory addressFactory; /** * @param parser @@ -200,5 +203,14 @@ public class MachOBinaryObject extends BinaryObjectAdapter { list.add(new Symbol(this, name, type, new Addr32(array[i].n_value), size, filePath, array[i].getLineNumber(addr), array[i].getLineNumber(addr + size - 1))); } } - + + /* (non-Javadoc) + * @see org.eclipse.cdt.utils.BinaryObjectAdapter#getAddressFactory() + */ + public IAddressFactory getAddressFactory() { + if (addressFactory == null) { + addressFactory = new Addr32Factory(); + } + return addressFactory; + } } 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 96abe97b2b7..97b775d23ad 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 @@ -18,11 +18,13 @@ import java.util.Arrays; import java.util.List; import org.eclipse.cdt.core.IAddress; +import org.eclipse.cdt.core.IAddressFactory; import org.eclipse.cdt.core.IBinaryParser; import org.eclipse.cdt.core.IBinaryParser.IBinaryFile; import org.eclipse.cdt.core.IBinaryParser.ISymbol; import org.eclipse.cdt.utils.Addr2line; import org.eclipse.cdt.utils.Addr32; +import org.eclipse.cdt.utils.Addr32Factory; import org.eclipse.cdt.utils.BinaryObjectAdapter; import org.eclipse.cdt.utils.CPPFilt; import org.eclipse.cdt.utils.IGnuToolFactory; @@ -45,6 +47,7 @@ public class SOMBinaryObject extends BinaryObjectAdapter { ISymbol[] symbols; long starttime; private ARHeader header; + private IAddressFactory addressFactory; /** * @param parser @@ -314,4 +317,15 @@ public class SOMBinaryObject extends BinaryObjectAdapter { } return super.getAdapter(adapter); } + + /* (non-Javadoc) + * @see org.eclipse.cdt.utils.BinaryObjectAdapter#getAddressFactory() + */ + public IAddressFactory getAddressFactory() { + if (addressFactory == null) { + addressFactory = new Addr32Factory(); + } + return addressFactory; + } + } \ No newline at end of file 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 68f2b133e88..0458b9e833a 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 @@ -16,11 +16,13 @@ import java.util.Arrays; import java.util.List; import org.eclipse.cdt.core.IAddress; +import org.eclipse.cdt.core.IAddressFactory; import org.eclipse.cdt.core.IBinaryParser; import org.eclipse.cdt.core.IBinaryParser.IBinaryFile; import org.eclipse.cdt.core.IBinaryParser.ISymbol; import org.eclipse.cdt.utils.Addr2line; import org.eclipse.cdt.utils.Addr32; +import org.eclipse.cdt.utils.Addr32Factory; import org.eclipse.cdt.utils.BinaryObjectAdapter; import org.eclipse.cdt.utils.CPPFilt; import org.eclipse.cdt.utils.IGnuToolFactory; @@ -41,6 +43,7 @@ public class XCOFFBinaryObject extends BinaryObjectAdapter { ISymbol[] symbols; long starttime; private AR.MemberHeader header; + private IAddressFactory addressFactory; /** * @param parser @@ -306,4 +309,13 @@ public class XCOFFBinaryObject extends BinaryObjectAdapter { return super.getAdapter(adapter); } + /* (non-Javadoc) + * @see org.eclipse.cdt.utils.BinaryObjectAdapter#getAddressFactory() + */ + public IAddressFactory getAddressFactory() { + if (addressFactory == null) { + addressFactory = new Addr32Factory(); + } + return addressFactory; + } } \ No newline at end of file