/*******************************************************************************
* Copyright (c) 2008, 2014 Ericsson and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Ericsson - initial API and implementation
* William Riley (Renesas) - Bug 357270
*****************************************************************/
package org.eclipse.cdt.dsf.gdb.service;
import java.math.BigInteger;
import java.util.Hashtable;
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
import org.eclipse.cdt.dsf.debug.service.IDisassembly;
import org.eclipse.cdt.dsf.debug.service.IDisassembly2;
import org.eclipse.cdt.dsf.debug.service.IDisassembly3;
import org.eclipse.cdt.dsf.debug.service.IInstruction;
import org.eclipse.cdt.dsf.debug.service.IMixedInstruction;
import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
import org.eclipse.cdt.dsf.mi.service.MIDisassembly;
import org.eclipse.cdt.dsf.mi.service.command.commands.MIDataDisassemble;
import org.eclipse.cdt.dsf.service.DsfSession;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
/**
* @since 4.4
*/
public class GDBDisassembly_7_3 extends MIDisassembly implements IDisassembly3 {
public GDBDisassembly_7_3(DsfSession session) {
super(session);
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.cdt.dsf.service.AbstractDsfService#initialize(org.eclipse
* .cdt.dsf.concurrent.RequestMonitor)
*/
@Override
public void initialize(final RequestMonitor rm) {
super.initialize(new ImmediateRequestMonitor(rm) {
@Override
protected void handleSuccess() {
doInitialize(rm);
}
});
}
private void doInitialize(final RequestMonitor rm) {
register(new String[] { IDisassembly.class.getName(),
IDisassembly2.class.getName(),
IDisassembly3.class.getName(),
MIDisassembly.class.getName(),
GDBDisassembly_7_3.class.getName() },
new Hashtable<String, String>());
rm.done();
}
// /////////////////////////////////////////////////////////////////////////
// IDisassembly3
// /////////////////////////////////////////////////////////////////////////
@Override
public void getInstructions(IDisassemblyDMContext context,
BigInteger startAddress, BigInteger endAddress,
DataRequestMonitor<IInstruction[]> drm)
{
// Ask for opCodes by default
getInstructions(context, startAddress, endAddress, true, drm);
}
@Override
public void getInstructions(IDisassemblyDMContext context, String filename,
int linenum, int lines,
DataRequestMonitor<IInstruction[]> drm)
{
// Ask for opCodes by default
getInstructions(context, filename, linenum, lines, true, drm);
}
@Override
public void getMixedInstructions(IDisassemblyDMContext context,
BigInteger startAddress, BigInteger endAddress,
DataRequestMonitor<IMixedInstruction[]> drm)
{
// Ask for opCodes by default
getMixedInstructions(context, startAddress, endAddress, true, drm);
}
@Override
public void getMixedInstructions(IDisassemblyDMContext context,
String filename, int linenum, int lines,
DataRequestMonitor<IMixedInstruction[]> drm)
{
// Ask for opCodes by default
getMixedInstructions(context, filename, linenum, lines, true, drm);
}
@Override
public void getInstructions(IDisassemblyDMContext context,
BigInteger startAddress, BigInteger endAddress, boolean opCodes,
DataRequestMonitor<IInstruction[]> drm)
{
getInstructions(context, startAddress, endAddress,
opCodes ? MIDataDisassemble.DATA_DISASSEMBLE_MODE_DISASSEMBLY_OPCODES :
MIDataDisassemble.DATA_DISASSEMBLE_MODE_DISASSEMBLY,
drm);
}
@Override
public void getInstructions(IDisassemblyDMContext context, String filename,
int linenum, int lines, boolean opCodes,
DataRequestMonitor<IInstruction[]> drm)
{
getInstructions(context, filename, linenum, lines,
opCodes ? MIDataDisassemble.DATA_DISASSEMBLE_MODE_DISASSEMBLY_OPCODES :
MIDataDisassemble.DATA_DISASSEMBLE_MODE_DISASSEMBLY,
drm);
}
@Override
public void getMixedInstructions(IDisassemblyDMContext context,
BigInteger startAddress, BigInteger endAddress, boolean opCodes,
DataRequestMonitor<IMixedInstruction[]> drm)
{
getMixedInstructions(context, startAddress, endAddress,
opCodes ? MIDataDisassemble.DATA_DISASSEMBLE_MODE_MIXED_OPCODES :
MIDataDisassemble.DATA_DISASSEMBLE_MODE_MIXED,
drm);
}
@Override
public void getMixedInstructions(IDisassemblyDMContext context,
String filename, int linenum, int lines, boolean opCodes,
DataRequestMonitor<IMixedInstruction[]> drm)
{
getMixedInstructions(context, filename, linenum, lines,
opCodes ? MIDataDisassemble.DATA_DISASSEMBLE_MODE_MIXED_OPCODES :
MIDataDisassemble.DATA_DISASSEMBLE_MODE_MIXED,
drm);
}
@Override
public void alignOpCodeAddress(IDisassemblyDMContext context,
BigInteger address, DataRequestMonitor<BigInteger> drm)
{
drm.done(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID,
NOT_SUPPORTED, "Not supported", null)); //$NON-NLS-1$
}
}