1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Catch the Info in the IBinary

This commit is contained in:
Alain Magloire 2003-11-19 17:37:13 +00:00
parent 008ec4a579
commit f9e69cf8c7

View file

@ -20,12 +20,19 @@ import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
public class Binary extends Openable implements IBinary {
private int fBinType;
private String hasDebug;
private String cpu;
private String[] needed;
private long longData;
private long longText;
private long longBSS;
private String endian;
private String soname;
private long fLastModification;
IBinaryFile binaryFile;
@ -40,10 +47,6 @@ public class Binary extends Openable implements IBinary {
binaryFile = bin;
}
protected IBinaryFile getBinaryFile() {
return binaryFile;
}
public boolean isSharedLib() {
return getType() == IBinaryObject.SHARED;
}
@ -62,75 +65,105 @@ public class Binary extends Openable implements IBinary {
public boolean hasDebug() {
if (isObject() || isExecutable() || isSharedLib()) {
return ((IBinaryObject)getBinaryFile()).hasDebug();
if (hasDebug == null || hasChanged()) {
hasDebug = Boolean.toString(((IBinaryObject)getBinaryFile()).hasDebug());
}
}
return false;
return Boolean.valueOf(hasDebug).booleanValue();
}
public String getCPU() {
if (isObject() || isExecutable() || isSharedLib() || isCore()) {
return ((IBinaryObject)getBinaryFile()).getCPU();
if (cpu == null || hasChanged()) {
cpu = ((IBinaryObject)getBinaryFile()).getCPU();
}
}
return "";
return (cpu == null ? "" : cpu);
}
public String[] getNeededSharedLibs() {
if (isExecutable() || isSharedLib()) {
return ((IBinaryExecutable)getBinaryFile()).getNeededSharedLibs();
if (needed == null || hasChanged()) {
needed = ((IBinaryExecutable)getBinaryFile()).getNeededSharedLibs();
}
}
return new String[0];
return (needed == null ? new String[0] : needed);
}
public long getText() {
if (isObject() || isExecutable() || isSharedLib()) {
if (longText == -1 || hasChanged()) {
longText = ((IBinaryObject)getBinaryFile()).getText();
}
}
return longText;
}
public long getData() {
if (isObject() || isExecutable() || isSharedLib()) {
if (longData == -1 || hasChanged()) {
longData = ((IBinaryObject)getBinaryFile()).getData();
}
}
return longData;
}
public long getBSS() {
if (isObject() || isExecutable() || isSharedLib()) {
if (longBSS == -1 || hasChanged()) {
longBSS = ((IBinaryObject)getBinaryFile()).getBSS();
}
}
return longBSS;
}
public String getSoname() {
if (isSharedLib()) {
if (soname == null || hasChanged()) {
soname = ((IBinaryShared)getBinaryFile()).getSoName();
}
}
return (soname == null ? "" : soname);
}
public boolean isLittleEndian() {
if (isObject() || isExecutable() || isSharedLib() || isCore()) {
if (endian == null || hasChanged()) {
endian = Boolean.toString(((IBinaryObject)getBinaryFile()).isLittleEndian());
}
}
return Boolean.valueOf(endian).booleanValue();
}
protected IBinaryFile getBinaryFile() {
return binaryFile;
}
protected int getType() {
if (getBinaryFile() != null && (fBinType == 0 || getModificationStamp() != fLastModification )) {
fLastModification = getModificationStamp();
if (getBinaryFile() != null && (fBinType == 0 || hasChanged())) {
fBinType = getBinaryFile().getType();
}
return fBinType;
}
protected boolean hasChanged() {
long modification = getModificationStamp();
boolean changed = modification != fLastModification;
fLastModification = modification;
hasDebug = null;
needed = null;
cpu = null;
return changed;
}
protected long getModificationStamp() {
IResource res = getResource();
if (res != null)
if (res != null) {
return res.getModificationStamp();
return 0;
}
public long getText() {
if (isObject() || isExecutable() || isSharedLib()) {
return ((IBinaryObject)getBinaryFile()).getText();
}
return 0;
}
public long getData() {
if (isObject() || isExecutable() || isSharedLib()) {
return ((IBinaryObject)getBinaryFile()).getData();
}
return 0;
}
public long getBSS() {
if (isObject() || isExecutable() || isSharedLib()) {
return ((IBinaryObject)getBinaryFile()).getBSS();
}
return 0;
}
public String getSoname() {
if (isSharedLib()) {
return ((IBinaryShared)getBinaryFile()).getSoName();
}
return "";
}
public boolean isLittleEndian() {
if (isObject() || isExecutable() || isSharedLib() || isCore()) {
return ((IBinaryObject)getBinaryFile()).isLittleEndian();
}
return false;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.model.ICElement#isReadOnly()
*/
@ -177,8 +210,7 @@ public class Binary extends Openable implements IBinary {
IPath filename = filename = symbol.getFilename();
BinaryFunction function = null;
// Addr2line returns the funny "??" when it can find the file.
if (filename != null && !filename.equals("??")) {
if (filename != null) {
BinaryModule module = null;
if (hash.containsKey(filename)) {
module = (BinaryModule)hash.get(filename);
@ -207,8 +239,7 @@ public class Binary extends Openable implements IBinary {
private void addVariable(OpenableInfo info, ISymbol symbol, Map hash) {
IPath filename = filename = symbol.getFilename();
BinaryVariable variable = null;
// Addr2line returns the funny "??" when it can not find the file.
if (filename != null && !filename.equals("??")) {
if (filename != null) {
BinaryModule module = null;
if (hash.containsKey(filename)) {
module = (BinaryModule)hash.get(filename);