use of org.eclipse.cdt.core.IBinaryParser.IBinaryObject in project linuxtools by eclipse.
the class GmonView method displayGprofView.
/**
* Display gmon results in the GProf View. NOTE: this method has to be called from within the UI thread.
*
* @param binaryPath
* @param gmonPath
* @param instanceName
*/
public static GmonView displayGprofView(String binaryPath, String gmonPath, IProject project) {
IBinaryObject binary = STSymbolManager.sharedInstance.getBinaryObject(new Path(binaryPath));
if (binary == null) {
// $NON-NLS-1$
MessageDialog.openError(// $NON-NLS-1$
PlatformUI.getWorkbench().getDisplay().getActiveShell(), // $NON-NLS-1$
"Invalid binary file", // $NON-NLS-1$
binaryPath + " is not a valid binary file.");
return null;
} else if (binary.getCPU().equals("ppc64") && !binary.isLittleEndian()) {
// $NON-NLS-1$
binary = new PPC64ElfBinaryObjectWrapper(binary.getBinaryParser(), binary.getPath(), binary.getType());
}
GmonDecoder decoder = new GmonDecoder(binary, project);
try {
decoder.read(gmonPath);
} catch (IOException e) {
Status status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, IStatus.ERROR, e.getMessage(), e);
Activator.getDefault().getLog().log(status);
}
return displayGprofView(decoder, gmonPath);
}
use of org.eclipse.cdt.core.IBinaryParser.IBinaryObject in project linuxtools by eclipse.
the class GmonViewer method handleOpenEvent.
@Override
protected void handleOpenEvent(OpenEvent event) {
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
TreeElement element = (TreeElement) selection.getFirstElement();
if (element != null) {
String s = element.getSourcePath();
if (s == null || "??".equals(s)) {
// nothing to do here.
return;
} else {
int lineNumber = element.getSourceLine();
IBinaryObject exec = ((HistRoot) element.getRoot()).decoder.getProgram();
STLink2SourceSupport.openSourceFileAtLocation(exec, s, lineNumber);
}
}
}
use of org.eclipse.cdt.core.IBinaryParser.IBinaryObject in project linuxtools by eclipse.
the class CovManager method getGCDALocations.
/**
* Retrieve a list containing gcda paths from a binary file
* @return
* @throws InterruptedException
*/
public List<String> getGCDALocations() throws InterruptedException {
IBinaryObject binaryObject = STSymbolManager.sharedInstance.getBinaryObject(new Path(binaryPath));
String binaryPath = binaryObject.getPath().toOSString();
STStrings strings = STSymbolManager.sharedInstance.getStrings(binaryObject, project);
List<String> l = new LinkedList<>();
Process p;
p = getStringsProcess(strings.getName(), strings.getArgs(), binaryPath);
if (p == null) {
Status status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, IStatus.ERROR, Messages.CovManager_Retrieval_Error, new IOException());
Activator.getDefault().getLog().log(status);
return l;
}
ThreadConsumer t = new ThreadConsumer(p, l);
t.start();
p.waitFor();
t.join();
return l;
}
use of org.eclipse.cdt.core.IBinaryParser.IBinaryObject in project linuxtools by eclipse.
the class GprofTest method data.
@Parameters
public static Collection<Object[]> data() {
List<Object[]> params = new ArrayList<>();
boolean addr2line2_16 = false;
try {
Process p = Runtime.getRuntime().exec("addr2line --version");
InputStream is = p.getInputStream();
LineNumberReader reader = new LineNumberReader(new InputStreamReader(is));
String line;
while ((line = reader.readLine()) != null) {
if (line.contains("addr2line 2.16.")) {
addr2line2_16 = true;
break;
}
}
} catch (IOException e) {
}
for (File testDir : STJunitUtils.getTestDirs()) {
final File gmonFile = new File(testDir, OUTPUT_FILE);
final File binaryFile = new File(testDir, BINARY_FILE);
File view_cg_RefFile_default = new File(testDir, "testCallgraphView.ref");
File view_cg_RefFile_alternate = new File(testDir, "testCallgraphView.ref.binutils-2.16");
File view_cg2_RefFile_default = new File(testDir, "testCallgraphTimeView.ref");
File view_cg2_RefFile_alternate = new File(testDir, "testCallgraphTimeView.ref.binutils-2.16");
final File view_cg_RefFile;
final File view_cg2_RefFile;
if (addr2line2_16 && view_cg_RefFile_alternate.exists()) {
view_cg_RefFile = view_cg_RefFile_alternate;
} else {
view_cg_RefFile = view_cg_RefFile_default;
}
if (addr2line2_16 && view_cg2_RefFile_alternate.exists()) {
view_cg2_RefFile = view_cg2_RefFile_alternate;
} else {
view_cg2_RefFile = view_cg2_RefFile_default;
}
final File view_cg2_DumpFile = new File(testDir, "testCallgraphTimeView.dump");
final File view_cg_DumpFile = new File(testDir, "testCallgraphView.dump");
final File view_samplesFile_RefFile = new File(testDir, "testSampleView.ref");
final File view_samplesFile_DumpFile = new File(testDir, "testSampleView.dump");
final File view_samplesFileT_RefFile = new File(testDir, "testTimeView.ref");
final File view_samplesFileT_DumpFile = new File(testDir, "testTimeView.dump");
final File view_samplesFunction_RefFile = new File(testDir, "testFunctionSampleView.ref");
final File view_samplesFunction_DumpFile = new File(testDir, "testFunctionSampleView.dump");
final File view_samplesFunctionT_RefFile = new File(testDir, "testFunctionTimeView.ref");
final File view_samplesFunctionT_DumpFile = new File(testDir, "testFunctionTimeView.dump");
final File view_samplesFlat_RefFile = new File(testDir, "testFlatSampleView.ref");
final File view_samplesFlat_DumpFile = new File(testDir, "testFlatSampleView.dump");
final File view_samplesFlatT_RefFile = new File(testDir, "testFlatTimeView.ref");
final File view_samplesFlatT_DumpFile = new File(testDir, "testFlatTimeView.dump");
IBinaryObject binary = STSymbolManager.sharedInstance.getBinaryObject(new Path(binaryFile.getAbsolutePath()));
final GmonDecoder gd = new GmonDecoder(binary, null);
try {
gd.read(gmonFile.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
params.add(new Object[] { gmonFile, gd, view_cg_RefFile, view_cg_DumpFile, CallGraphContentProvider.sharedInstance, false });
params.add(new Object[] { gmonFile, gd, view_cg2_RefFile, view_cg2_DumpFile, CallGraphContentProvider.sharedInstance, true });
params.add(new Object[] { gmonFile, gd, view_samplesFile_RefFile, view_samplesFile_DumpFile, FileHistogramContentProvider.sharedInstance, false });
params.add(new Object[] { gmonFile, gd, view_samplesFileT_RefFile, view_samplesFileT_DumpFile, FileHistogramContentProvider.sharedInstance, true });
params.add(new Object[] { gmonFile, gd, view_samplesFunction_RefFile, view_samplesFunction_DumpFile, FunctionHistogramContentProvider.sharedInstance, false });
params.add(new Object[] { gmonFile, gd, view_samplesFunctionT_RefFile, view_samplesFunctionT_DumpFile, FunctionHistogramContentProvider.sharedInstance, true });
params.add(new Object[] { gmonFile, gd, view_samplesFlat_RefFile, view_samplesFlat_DumpFile, FlatHistogramContentProvider.sharedInstance, false });
params.add(new Object[] { gmonFile, gd, view_samplesFlatT_RefFile, view_samplesFlatT_DumpFile, FlatHistogramContentProvider.sharedInstance, true });
}
return params;
}
use of org.eclipse.cdt.core.IBinaryParser.IBinaryObject in project linuxtools by eclipse.
the class CallGraphDecoder method decodeCallGraphRecord.
/**
* Decode call-graph record from gmon file.
* @param stream
* @throws IOException
*/
public void decodeCallGraphRecord(DataInput stream, boolean bsdFormat) throws IOException {
long from_pc = readAddress(stream);
long self_pc = readAddress(stream);
int count = bsdFormat ? (int) readAddress(stream) : stream.readInt();
IBinaryObject program = decoder.getProgram();
IAddressFactory addressFactory = program.getAddressFactory();
IAddress parentAddress = addressFactory.createAddress(Long.toString(from_pc));
ISymbol parentSymbol = program.getSymbol(parentAddress);
IAddress childAddress = addressFactory.createAddress(Long.toString(self_pc));
ISymbol childSymbol = program.getSymbol(childAddress);
if (childSymbol == null || parentSymbol == null) {
return;
}
addCallArc(parentSymbol, parentAddress, childSymbol, count);
}
Aggregations