diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBDisassembly_7_3.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBDisassembly_7_3.java
new file mode 100644
index 00000000000..346eeb21160
--- /dev/null
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBDisassembly_7_3.java
@@ -0,0 +1,159 @@
+/*******************************************************************************
+ * 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$
+	}
+}
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GdbDebugServicesFactory.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GdbDebugServicesFactory.java
index 99bc1e73f66..303eb3fa4b2 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GdbDebugServicesFactory.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GdbDebugServicesFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2013 Ericsson and others.
+ * 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
@@ -14,6 +14,7 @@
  *     Vladimir Prus (Mentor Graphics) - Support for OS resources.
  *     Marc Khouzam (Ericsson) - Support for GDB 7.6 memory service
  *     Marc Khouzam (Ericsson) - Support for GDB 7.4 trace control service
+ *     William Riley (Renesas) - Support for GDB 7.3 disassembly service (Bug 357270)
  *******************************************************************************/
 package org.eclipse.cdt.dsf.gdb.service;
 
@@ -163,6 +164,9 @@ public class GdbDebugServicesFactory extends AbstractDsfDebugServicesFactory {
 
 	@Override
 	protected IDisassembly createDisassemblyService(DsfSession session) {
+		if (GDB_7_3_VERSION.compareTo(fVersion) <= 0) {
+			return new GDBDisassembly_7_3(session);
+		}
 		return new MIDisassembly(session);
 	}
 	
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIDisassembly.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIDisassembly.java
index bdbd630da8b..f537ae4a958 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIDisassembly.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIDisassembly.java
@@ -23,6 +23,7 @@ import org.eclipse.cdt.dsf.debug.service.IMixedInstruction;
 import org.eclipse.cdt.dsf.debug.service.command.ICommandControl;
 import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
 import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
+import org.eclipse.cdt.dsf.mi.service.command.commands.MIDataDisassemble;
 import org.eclipse.cdt.dsf.mi.service.command.output.MIDataDisassembleInfo;
 import org.eclipse.cdt.dsf.service.AbstractDsfService;
 import org.eclipse.cdt.dsf.service.DsfSession;
@@ -66,7 +67,6 @@ public class MIDisassembly extends AbstractDsfService implements IDisassembly {
         fConnection = getServicesTracker().getService(ICommandControl.class);
 		fCommandFactory = getServicesTracker().getService(IMICommandControl.class).getCommandFactory();
 
-//        getSession().addServiceEventListener(this, null);
         register(new String[] { IDisassembly.class.getName(), MIDisassembly.class.getName() },
                 new Hashtable<String, String>());
         rm.done();
@@ -78,7 +78,6 @@ public class MIDisassembly extends AbstractDsfService implements IDisassembly {
     @Override
     public void shutdown(RequestMonitor rm) {
         unregister();
-//        getSession().removeServiceEventListener(this);
 		super.shutdown(rm);
     }
 
@@ -97,22 +96,36 @@ public class MIDisassembly extends AbstractDsfService implements IDisassembly {
     /* (non-Javadoc)
      * @see org.eclipse.cdt.dsf.debug.service.IDisassembly#getInstructions(org.eclipse.cdt.dsf.debug.service.IDisassembly.IDisassemblyDMContext, java.math.BigInteger, java.math.BigInteger, org.eclipse.cdt.dsf.concurrent.DataRequestMonitor)
      */
-	@Override
+    @Override
     public void getInstructions(IDisassemblyDMContext context,
             BigInteger startAddress, BigInteger endAddress,
+            DataRequestMonitor<IInstruction[]> drm)
+    {
+    	getInstructions(context, startAddress, endAddress, MIDataDisassemble.DATA_DISASSEMBLE_MODE_DISASSEMBLY, drm);
+    }
+ 
+    /** 
+     * Helper method to allow getting disassembly instructions not in mixed mode.
+     * @since 4.4 
+     */
+    protected void getInstructions(IDisassemblyDMContext context,
+            BigInteger startAddress, BigInteger endAddress, int mode,
             final DataRequestMonitor<IInstruction[]> drm)
     {
-        // Validate the context
+    	// Checking what we don't support instead of what we do support allows
+    	// others to extend the 'mode' field with new values.
+    	assert mode != MIDataDisassemble.DATA_DISASSEMBLE_MODE_MIXED || 
+    			mode != MIDataDisassemble.DATA_DISASSEMBLE_MODE_MIXED_OPCODES;
+
         if (context == null) {
-            drm.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, INTERNAL_ERROR, "Unknown context type", null)); //$NON-NLS-1$);
+            drm.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, INTERNAL_ERROR, "Unknown context type", null)); //$NON-NLS-1$
             drm.done();            
             return;
         }
 
-        // Go for it
         String start = (startAddress != null) ? startAddress.toString() : "$pc";       //$NON-NLS-1$
         String end   = (endAddress   != null) ? endAddress.toString()   : "$pc + 100"; //$NON-NLS-1$
-        fConnection.queueCommand(fCommandFactory.createMIDataDisassemble(context, start, end, false),
+        fConnection.queueCommand(fCommandFactory.createMIDataDisassemble(context, start, end, mode),
             new DataRequestMonitor<MIDataDisassembleInfo>(getExecutor(), drm) {
                 @Override
                 protected void handleSuccess() {
@@ -128,17 +141,30 @@ public class MIDisassembly extends AbstractDsfService implements IDisassembly {
      */
 	@Override
     public void getInstructions(IDisassemblyDMContext context, String filename,
-            int linenum, int lines, final DataRequestMonitor<IInstruction[]> drm)
+            int linenum, int lines, DataRequestMonitor<IInstruction[]> drm)
     {
-        // Validate the context
+    	getInstructions(context, filename, linenum, lines, MIDataDisassemble.DATA_DISASSEMBLE_MODE_DISASSEMBLY, drm);
+    }
+    
+    /** 
+     * Helper method to allow getting disassembly instructions not in mixed mode.
+     * @since 4.4 
+     */
+    protected void getInstructions(IDisassemblyDMContext context, String filename,
+            int linenum, int lines, int mode, final DataRequestMonitor<IInstruction[]> drm)
+    {
+    	// Checking what we don't support instead of what we do support allows
+    	// others to extend the 'mode' field with new values.
+    	assert mode != MIDataDisassemble.DATA_DISASSEMBLE_MODE_MIXED || 
+    			mode != MIDataDisassemble.DATA_DISASSEMBLE_MODE_MIXED_OPCODES;
+
         if (context == null) {
-            drm.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, INTERNAL_ERROR, "Unknown context type", null)); //$NON-NLS-1$);
+            drm.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, INTERNAL_ERROR, "Unknown context type", null)); //$NON-NLS-1$
             drm.done();            
             return;
         }
 
-        // Go for it
-        fConnection.queueCommand(fCommandFactory.createMIDataDisassemble(context, filename, linenum, lines, false),
+        fConnection.queueCommand(fCommandFactory.createMIDataDisassemble(context, filename, linenum, lines, mode),
             new DataRequestMonitor<MIDataDisassembleInfo>(getExecutor(), drm) {
                 @Override
                 protected void handleSuccess() {
@@ -157,17 +183,31 @@ public class MIDisassembly extends AbstractDsfService implements IDisassembly {
             BigInteger startAddress, BigInteger endAddress,
             final DataRequestMonitor<IMixedInstruction[]> drm)
     {
-        // Validate the context
-        if (context == null) {
-            drm.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, INTERNAL_ERROR, "Unknown context type", null)); //$NON-NLS-1$);
+		getMixedInstructions(context, startAddress, endAddress, MIDataDisassemble.DATA_DISASSEMBLE_MODE_MIXED, drm);
+    }
+ 
+    /** 
+     * Helper method to allow getting disassembly instructions in mixed mode.
+     * @since 4.4 
+     */
+    protected void getMixedInstructions(IDisassemblyDMContext context,
+            BigInteger startAddress, BigInteger endAddress, int mode,
+            final DataRequestMonitor<IMixedInstruction[]> drm)
+    {
+    	// Checking what we don't support instead of what we do support allows
+    	// others to extend the 'mode' field with new values.
+       	assert mode != MIDataDisassemble.DATA_DISASSEMBLE_MODE_DISASSEMBLY || 
+    			mode != MIDataDisassemble.DATA_DISASSEMBLE_MODE_DISASSEMBLY_OPCODES;
+
+    	if (context == null) {
+            drm.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, INTERNAL_ERROR, "Unknown context type", null)); //$NON-NLS-1$
             drm.done();            
             return;
         }
 
-        // Go for it
         String start = (startAddress != null) ? startAddress.toString() : "$pc";       //$NON-NLS-1$
         String end   = (endAddress   != null) ? endAddress.toString()   : "$pc + 100"; //$NON-NLS-1$
-        fConnection.queueCommand(fCommandFactory.createMIDataDisassemble(context, start, end, true),
+        fConnection.queueCommand(fCommandFactory.createMIDataDisassemble(context, start, end, mode),
             new DataRequestMonitor<MIDataDisassembleInfo>(getExecutor(), drm) {
                 @Override
                 protected void handleSuccess() {
@@ -186,15 +226,29 @@ public class MIDisassembly extends AbstractDsfService implements IDisassembly {
             String filename, int linenum, int lines,
             final DataRequestMonitor<IMixedInstruction[]> drm)
     {
-        // Validate the context
+		getMixedInstructions(context, filename, linenum, lines, MIDataDisassemble.DATA_DISASSEMBLE_MODE_MIXED, drm);
+    }
+    
+    /** 
+     * Helper method to allow getting disassembly instructions in mixed mode.
+     * @since 4.4 
+     */
+	protected void getMixedInstructions(IDisassemblyDMContext context,
+			String filename, int linenum, int lines, int mode,
+			final DataRequestMonitor<IMixedInstruction[]> drm)
+	{
+    	// Checking what we don't support instead of what we do support allows
+    	// others to extend the 'mode' field with new values.
+       	assert mode != MIDataDisassemble.DATA_DISASSEMBLE_MODE_DISASSEMBLY || 
+    			mode != MIDataDisassemble.DATA_DISASSEMBLE_MODE_DISASSEMBLY_OPCODES;
+
         if (context == null) {
-            drm.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, INTERNAL_ERROR, "Unknown context type", null)); //$NON-NLS-1$);
+            drm.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, INTERNAL_ERROR, "Unknown context type", null)); //$NON-NLS-1$
             drm.done();            
             return;
         }
 
-        // Go for it
-        fConnection.queueCommand(fCommandFactory.createMIDataDisassemble(context, filename, linenum, lines, true),
+        fConnection.queueCommand(fCommandFactory.createMIDataDisassemble(context, filename, linenum, lines, mode),
             new DataRequestMonitor<MIDataDisassembleInfo>(getExecutor(), drm) {
                 @Override
                 protected void handleSuccess() {
@@ -204,5 +258,4 @@ public class MIDisassembly extends AbstractDsfService implements IDisassembly {
                 }
             });
     }
-
 }
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIDataDisassemble.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIDataDisassemble.java
index e8ad471a1b7..9fecab5a404 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIDataDisassemble.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIDataDisassemble.java
@@ -49,19 +49,31 @@ import org.eclipse.cdt.dsf.mi.service.command.output.MIOutput;
  * '-- MODE'
  *     - 0 disassembly
  *     - 1 mixed source and disassembly
- *      - 2 disassembly with raw opcodes
- *      - 3 mixed source and disassembly with raw opcodes
- *      Note: Modes 2 and 3 are only available starting with GDB 7.3
+ *     - 2 disassembly with raw opcodes
+ *     - 3 mixed source and disassembly with raw opcodes
+ *     Note: Modes 2 and 3 are only available starting with GDB 7.3
  */
 
 public class MIDataDisassemble extends MICommand<MIDataDisassembleInfo> {
 
 	private static final int MIN_MODE = 0;
+
+	/** @since 4.4 */
+	public static final int DATA_DISASSEMBLE_MODE_DISASSEMBLY = 0;
+	/** @since 4.4 */
+	public static final int DATA_DISASSEMBLE_MODE_MIXED = 1;
+	/** @since 4.4 */
+	public static final int DATA_DISASSEMBLE_MODE_DISASSEMBLY_OPCODES = 2;
+	/** @since 4.4 */
+	public static final int DATA_DISASSEMBLE_MODE_MIXED_OPCODES = 3;
+
 	private static final int MAX_MODE = 3;
+	
+	
 	private static final String MODE_OUT_OF_RANGE = "Mode out of range: "; //$NON-NLS-1$
 	
 	public MIDataDisassemble(IDisassemblyDMContext ctx, String start, String end, boolean mode) {
-		this(ctx, start, end, mode ? 1 : 0);
+		this(ctx, start, end, mode ? DATA_DISASSEMBLE_MODE_MIXED : DATA_DISASSEMBLE_MODE_DISASSEMBLY);
 	}
 	
 	/** @since 4.1 */
@@ -77,7 +89,7 @@ public class MIDataDisassemble extends MICommand<MIDataDisassembleInfo> {
 	}
 
     public MIDataDisassemble(IDisassemblyDMContext ctx, String file, int linenum, int lines, boolean mode) {
-    	this(ctx, file, linenum, lines, mode ? 1 : 0);
+    	this(ctx, file, linenum, lines, mode ? DATA_DISASSEMBLE_MODE_MIXED : DATA_DISASSEMBLE_MODE_DISASSEMBLY);
     }
 
 	/** @since 4.1 */
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/MIInstruction.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/MIInstruction.java
index d20d62e7061..fd07c36a2e2 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/MIInstruction.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/MIInstruction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 QNX Software Systems and others.
+ * Copyright (c) 2000, 2014 QNX Software Systems 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
@@ -9,6 +9,7 @@
  *     QNX Software Systems - Initial API and implementation
  *     Ericsson - Adapted for DSF
  *     Dmitry Kozlov (Mentor Graphics) - Add tab symbols parsing (Bug 391115)
+ *     William Riley (Renesas) - Add raw Opcode parsing (Bug 357270)
  *******************************************************************************/
 
 package org.eclipse.cdt.dsf.mi.service.command.output;
@@ -21,10 +22,11 @@ public class MIInstruction extends AbstractInstruction {
 
     // The parsed information
     BigInteger address;
-    String     function = ""; //$NON-NLS-1$
+    String     function   = ""; //$NON-NLS-1$
     long       offset;
-    String     opcode   = ""; //$NON-NLS-1$
-    String     args     = ""; //$NON-NLS-1$
+    String     opcode     = ""; //$NON-NLS-1$
+    String     args       = ""; //$NON-NLS-1$
+    BigInteger rawOpcodes = null;
 
     public MIInstruction(MITuple tuple) {
         parse(tuple);
@@ -59,6 +61,11 @@ public class MIInstruction extends AbstractInstruction {
     public String getArgs() {
         return args;
     }
+	
+	@Override
+	public BigInteger getRawOpcodes() {
+		return rawOpcodes;
+	}
 
     /**
      *  Parse the assembly instruction result. Each instruction has the following
@@ -73,6 +80,13 @@ public class MIInstruction extends AbstractInstruction {
      *   ...,
      *   {address="0x00010820",func-name="main",offset="100",inst="restore "}
      * 
+     * 	An instruction may also contain:
+     *    - Opcode bytes
+     *    
+     *  {address="0x004016b9",func-name="main",offset="9",opcodes="e8 a2 05 00 00",
+     *  	inst="call   0x401c60 <__main>"},
+     *  ...,
+     *    
      *  In addition, the opcode and arguments are extracted form the assembly instruction.
      */
     private void parse(MITuple tuple) {
@@ -82,7 +96,7 @@ public class MIInstruction extends AbstractInstruction {
             MIValue value = results[i].getMIValue();
             String str = ""; //$NON-NLS-1$
 
-            if (value != null && value instanceof MIConst) {
+            if (value instanceof MIConst) {
                 str = ((MIConst)value).getCString();
             }
 
@@ -111,7 +125,9 @@ public class MIInstruction extends AbstractInstruction {
                 /* for the instruction, we do not want the C string but the
                 translated string since the only thing we are doing is
                 displaying it. */
-                str = ((MIConst) value).getString();
+                if (value instanceof MIConst) {
+                	str = ((MIConst) value).getString();
+                }
                 /* to avoid improper displaying of instructions we need to translate tabs */
                 str = str.replace("\\t", "\t"); //$NON-NLS-1$ //$NON-NLS-2$
 
@@ -131,6 +147,16 @@ public class MIInstruction extends AbstractInstruction {
                 // guard no argument
                 if( index < chars.length )
                     args = str.substring( index );
+
+                continue;
+            }
+            
+            if (var.equals("opcodes")) { //$NON-NLS-1$	
+            	try {
+            		rawOpcodes = decodeOpcodes(str);
+            	} catch (NumberFormatException e) {
+                }
+                continue;
             }
         }
 
@@ -150,5 +176,17 @@ public class MIInstruction extends AbstractInstruction {
 		}
 		return new BigInteger(string);
 	}
-
+	
+	/**
+	 * Decode given string representation of a space separated hex encoded byte
+	 * array
+	 * 
+	 * @param string
+	 *            space separated hexadecimal byte array
+	 * @return opcode bytes as <code>BigInteger</code>
+	 */
+	private static BigInteger decodeOpcodes(String string) {
+		// Removing space separation and parse as single big integer
+		return new BigInteger(string.replace(" ", ""), 16); //$NON-NLS-1$ //$NON-NLS-2$
+	}
 }
diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java
index ddc3e803f5e..d513562489d 100644
--- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java
+++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2013 Wind River Systems, Inc. and others.
+ * Copyright (c) 2010, 2014 Wind River Systems, Inc. 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
@@ -13,6 +13,7 @@
  *     Patrick Chuong (Texas Instruments) - Bug 328168
  *     Patrick Chuong (Texas Instruments) - Bug 353351
  *     Patrick Chuong (Texas Instruments) - Bug 337851
+ *     William Riley (Renesas) - Bug 357270
  *******************************************************************************/
 package org.eclipse.cdt.dsf.debug.internal.ui.disassembly;
 
@@ -30,10 +31,12 @@ import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.AddressRangePosition;
 import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.DisassemblyUtils;
 import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.ErrorPosition;
 import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback;
+import org.eclipse.cdt.dsf.concurrent.ConfinedToDsfExecutor;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
 import org.eclipse.cdt.dsf.concurrent.DsfRunnable;
 import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
+import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Query;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
 import org.eclipse.cdt.dsf.datamodel.IDMContext;
@@ -48,6 +51,7 @@ import org.eclipse.cdt.dsf.debug.service.IFormattedValues;
 import org.eclipse.cdt.dsf.debug.service.IFormattedValues.FormattedValueDMContext;
 import org.eclipse.cdt.dsf.debug.service.IFormattedValues.FormattedValueDMData;
 import org.eclipse.cdt.dsf.debug.service.IInstruction;
+import org.eclipse.cdt.dsf.debug.service.IInstructionWithRawOpcodes;
 import org.eclipse.cdt.dsf.debug.service.IInstructionWithSize;
 import org.eclipse.cdt.dsf.debug.service.IMixedInstruction;
 import org.eclipse.cdt.dsf.debug.service.IRunControl;
@@ -729,15 +733,21 @@ public class DisassemblyBackendDsf extends AbstractDisassemblyBackend implements
 						break;
 					}
 				}
-				final String opCode;
+				final String functionOffset; // Renamed from opCode to avoid confusion
 				// insert function name+offset instead of opcode bytes
 				if (functionName != null && functionName.length() > 0) {
-					opCode= functionName + '+' + instruction.getOffset();
+					functionOffset= functionName + '+' + instruction.getOffset();
 				} else {
-					opCode= ""; //$NON-NLS-1$
+					functionOffset= ""; //$NON-NLS-1$
+				}
+				
+				BigInteger opCodes = null;
+				// Get raw Opcodes if available
+				if(instruction instanceof IInstructionWithRawOpcodes){
+					opCodes = ((IInstructionWithRawOpcodes)instruction).getRawOpcodes();
 				}
 
-				p = fCallback.getDocument().insertDisassemblyLine(p, address, instrLength.intValue(), opCode, instruction.getInstruction(), compilationPath, -1);
+				p = fCallback.getDocument().insertDisassemblyLine(p, address, instrLength.intValue(), functionOffset, opCodes, instruction.getInstruction(), compilationPath, -1);
 				if (p == null) {
 					break;
 				}
@@ -863,14 +873,20 @@ public class DisassemblyBackendDsf extends AbstractDisassemblyBackend implements
 							break;
 						}
 					}
-					final String opCode;
+					final String funcOffset;
 					// insert function name+offset instead of opcode bytes
 					if (functionName != null && functionName.length() > 0) {
-						opCode= functionName + '+' + instruction.getOffset();
+						funcOffset= functionName + '+' + instruction.getOffset();
 					} else {
-						opCode= ""; //$NON-NLS-1$
+						funcOffset= ""; //$NON-NLS-1$
 					}
-					p = fCallback.getDocument().insertDisassemblyLine(p, address, instrLength.intValue(), opCode, instruction.getInstruction(), file, lineNumber);
+					
+					BigInteger opCodes = null;
+					if(instruction instanceof IInstructionWithRawOpcodes){
+						opCodes = ((IInstructionWithRawOpcodes)instruction).getRawOpcodes();
+					}
+					
+					p = fCallback.getDocument().insertDisassemblyLine(p, address, instrLength.intValue(), funcOffset, opCodes, instruction.getInstruction(), file, lineNumber);
 					if (p == null) {
 						break;
 					}
@@ -1162,6 +1178,7 @@ public class DisassemblyBackendDsf extends AbstractDisassemblyBackend implements
 	 * @param addr the address
 	 * @param rm the data request monitor
 	 */
+	@ConfinedToDsfExecutor("getSession().getExecutor()")
 	void alignOpCodeAddress(final BigInteger addr, final DataRequestMonitor<BigInteger> rm) { 
 		IDisassembly2 disassembly = getService(IDisassembly2.class); 
 		if (disassembly == null) { 
@@ -1170,9 +1187,8 @@ public class DisassemblyBackendDsf extends AbstractDisassemblyBackend implements
 			return; 
 		} 
 
-		final DsfExecutor executor= DsfSession.getSession(fDsfSessionId).getExecutor(); 
 		final IDisassemblyDMContext context = DMContexts.getAncestorOfType(fTargetContext, IDisassemblyDMContext.class); 
-		disassembly.alignOpCodeAddress(context, addr, new DataRequestMonitor<BigInteger>(executor, rm) { 
+		disassembly.alignOpCodeAddress(context, addr, new ImmediateDataRequestMonitor<BigInteger>(rm) { 
 			@Override 
 			protected void handleFailure() { 
 				rm.setData(addr); 
diff --git a/dsf/org.eclipse.cdt.dsf/META-INF/MANIFEST.MF b/dsf/org.eclipse.cdt.dsf/META-INF/MANIFEST.MF
index 3652db2ca1a..d3f45011852 100644
--- a/dsf/org.eclipse.cdt.dsf/META-INF/MANIFEST.MF
+++ b/dsf/org.eclipse.cdt.dsf/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.cdt.dsf;singleton:=true
-Bundle-Version: 2.4.0.qualifier
+Bundle-Version: 2.5.0.qualifier
 Bundle-Activator: org.eclipse.cdt.dsf.internal.DsfPlugin
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.core.runtime,
diff --git a/dsf/org.eclipse.cdt.dsf/pom.xml b/dsf/org.eclipse.cdt.dsf/pom.xml
index 683f3a83b4f..099db4ba3e8 100644
--- a/dsf/org.eclipse.cdt.dsf/pom.xml
+++ b/dsf/org.eclipse.cdt.dsf/pom.xml
@@ -11,7 +11,7 @@
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 
-	<version>2.4.0-SNAPSHOT</version>
+	<version>2.5.0-SNAPSHOT</version>
 	<artifactId>org.eclipse.cdt.dsf</artifactId>
 	<packaging>eclipse-plugin</packaging>
 </project>
diff --git a/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/AbstractInstruction.java b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/AbstractInstruction.java
index 1f5297687f2..f1a1877255c 100644
--- a/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/AbstractInstruction.java
+++ b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/AbstractInstruction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 Wind River Systems, Inc. and others.
+ * Copyright (c) 2010, 2014 Wind River Systems, Inc. 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
@@ -7,22 +7,34 @@
  *
  * Contributors:
  *     Wind River Systems - initial API and implementation
+ *     William Riley (Renesas) - Add raw Opcodes parsing (Bug 357270)
  *******************************************************************************/
 package org.eclipse.cdt.dsf.debug.service;
 
+import java.math.BigInteger;
+
 /**
  * Implementers of {@link IInstruction} should extend this abstract class
  * instead of implementing the interface directly.
  *
  * @since 2.2
  */
-public abstract class AbstractInstruction implements IInstructionWithSize {
+public abstract class AbstractInstruction implements IInstructionWithSize, IInstructionWithRawOpcodes {
     /*
      * @see org.eclipse.cdt.dsf.debug.service.IInstructionWithSize#getSize()
      */
     @Override
     public Integer getSize() {
-        // unkown size
+        // unknown size
         return null;
     }
+    
+	/**
+	 * @since 2.5
+	 */
+	@Override
+	public BigInteger getRawOpcodes() {
+		return null;
+	}
+
 }
diff --git a/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/IDisassembly3.java b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/IDisassembly3.java
new file mode 100644
index 00000000000..25c6213b4c6
--- /dev/null
+++ b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/IDisassembly3.java
@@ -0,0 +1,114 @@
+/*****************************************************************
+ * Copyright (c) 2014 Renesas Electronics 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:
+ *     William Riley (Renesas) - Bug 357270
+ *****************************************************************/
+package org.eclipse.cdt.dsf.debug.service;
+
+import java.math.BigInteger;
+
+import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
+
+/**
+ * This interface extends the disassembly service with support for raw opcodes
+ * 
+ * @since 2.5
+ * 
+ */
+public interface IDisassembly3 extends IDisassembly2 {
+
+	/**
+	 * Gets a block of disassembled code given an address range.
+	 * 
+	 * @param context
+	 *            Context of the disassembly code
+	 * @param startAddress
+	 *            Beginning address, inclusive. If null, disassemble from the
+	 *            instruction pointer.
+	 * @param endAddress
+	 *            End address, exclusive. If null, implementation should attempt
+	 *            to disassemble some reasonable, default number of
+	 *            instructions. That default is implementation specific.
+	 * @param opCodes
+	 *            If raw opcodes should be retrieved
+	 * @param drm
+	 *            Disassembled code
+	 */
+	public void getInstructions(IDisassemblyDMContext context,
+			BigInteger startAddress, BigInteger endAddress, boolean opCodes,
+			DataRequestMonitor<IInstruction[]> drm);
+
+	/**
+	 * Gets a block of disassembled code given a filename, line number, and line
+	 * count.
+	 * 
+	 * @param context
+	 *            Context of the disassembly code
+	 * @param filename
+	 *            File to disassemble
+	 * @param linenum
+	 *            Starting point. 1-based line number within the file. If the
+	 *            line does not represent compiled code, disassembly will start
+	 *            at the first subsequent line that does.
+	 * @param instructionCount
+	 *            Number of instructions to disassemble. -1 means all available
+	 *            instructions (starting at [linenum])
+	 * @param opCodes
+	 *            If raw opcodes should be retrieved
+	 * 
+	 * @param drm
+	 *            Disassembled code
+	 */
+	public void getInstructions(IDisassemblyDMContext context, String filename,
+			int linenum, int instructionCount, boolean opCodes,
+			DataRequestMonitor<IInstruction[]> drm);
+
+	/**
+	 * Gets a block of mixed disassembled code given an address range.
+	 * 
+	 * @param context
+	 *            Context of the disassembly code
+	 * @param startAddress
+	 *            Beginning address, inclusive. If null, disassemble from the
+	 *            instruction pointer.
+	 * @param endAddress
+	 *            End address, exclusive.
+	 * @param opCodes
+	 *            If opcodes should be retrieved
+	 * @param drm
+	 *            Disassembled code
+	 */
+	public void getMixedInstructions(IDisassemblyDMContext context,
+			BigInteger startAddress, BigInteger endAddress, boolean opCodes,
+			DataRequestMonitor<IMixedInstruction[]> drm);
+
+	/**
+	 * Gets a block of mixed disassembled code given a filename, line number,
+	 * and line count.
+	 * 
+	 * @param context
+	 *            Context of the disassembly code
+	 * @param filename
+	 *            File to disassemble
+	 * @param linenum
+	 *            Starting point. 1-based line number within the file. If the
+	 *            line does not represent compiled code, disassembly will start
+	 *            at the first subsequent line that does.
+	 * @param instructionCount
+	 *            Number of instructions to disassemble. -1 means all available
+	 *            instructions (starting at [linenum])
+	 * @param opCodes
+	 *            If opcodes should be retrieved
+	 * @param drm
+	 *            Disassembled code
+	 */
+	public void getMixedInstructions(IDisassemblyDMContext context,
+			String filename, int linenum, int instructionCount,
+			boolean opCodes, DataRequestMonitor<IMixedInstruction[]> drm);
+
+}
diff --git a/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/IInstructionWithRawOpcodes.java b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/IInstructionWithRawOpcodes.java
new file mode 100644
index 00000000000..950e2822eca
--- /dev/null
+++ b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/IInstructionWithRawOpcodes.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Renesas Electronics 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:
+ *     William Riley (Renesas) - Bug 357270
+ *******************************************************************************/
+package org.eclipse.cdt.dsf.debug.service;
+
+import java.math.BigInteger;
+
+/**
+ * Extension interface for instructions with raw Opcodes
+ * <p>
+ * Implementers must extend {@link AbstractInstruction} instead of implementing
+ * this interface directly.
+ * </p>
+ * 
+ * @since 2.5
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @noextend This interface is not intended to be extended by clients.
+ */
+public interface IInstructionWithRawOpcodes extends IInstruction {
+
+	/**
+	 * @return The raw Opcodes of the Instruction or <code>null</code> if
+	 *         unknown
+	 */
+	BigInteger getRawOpcodes();
+}