Author: martin
Date: 2007-10-31 11:20:13 -0500 (Wed, 31 Oct 2007)
New Revision: 88575
Added:
trunk/debugger/backend/arch/Opcodes_I386.cs
trunk/debugger/backend/arch/Opcodes_X86_64.cs
Modified:
trunk/debugger/ChangeLog
trunk/debugger/backend/arch/Architecture.cs
trunk/debugger/backend/arch/Opcodes.cs
trunk/debugger/backend/arch/X86_Opcodes.cs
Log:
2007-10-31 Martin Baulig <[EMAIL PROTECTED]>
* backend/arch/Opcodes.cs
(Opcodes.GenerateJumpInstruction): New abstract method.
* backend/arch/X86_Opcodes.cs
(X86_Opcodes): Make this abstract.
* backend/arch/Opcodes_I386.cs: New file.
(Opcodes_I386): i386-specific implementation.
* backend/arch/Opcodes_X86_64.cs: New file.
(Opcodes_X86_64): x86_64-specific implementation.
Modified: trunk/debugger/ChangeLog
===================================================================
--- trunk/debugger/ChangeLog 2007-10-31 16:13:25 UTC (rev 88574)
+++ trunk/debugger/ChangeLog 2007-10-31 16:20:13 UTC (rev 88575)
@@ -1,4 +1,4 @@
-2007-10-15 Martin Baulig <[EMAIL PROTECTED]>
+2007-10-31 Martin Baulig <[EMAIL PROTECTED]>
HEADS UP: The debugger only works on x86_64 at the moment.
@@ -6,6 +6,20 @@
2007-10-31 Martin Baulig <[EMAIL PROTECTED]>
+ * backend/arch/Opcodes.cs
+ (Opcodes.GenerateJumpInstruction): New abstract method.
+
+ * backend/arch/X86_Opcodes.cs
+ (X86_Opcodes): Make this abstract.
+
+ * backend/arch/Opcodes_I386.cs: New file.
+ (Opcodes_I386): i386-specific implementation.
+
+ * backend/arch/Opcodes_X86_64.cs: New file.
+ (Opcodes_X86_64): x86_64-specific implementation.
+
+2007-10-31 Martin Baulig <[EMAIL PROTECTED]>
+
Merged the Plophos branch.
* backend/SingleSteppingEngine.cs
Modified: trunk/debugger/backend/arch/Architecture.cs
===================================================================
--- trunk/debugger/backend/arch/Architecture.cs 2007-10-31 16:13:25 UTC (rev
88574)
+++ trunk/debugger/backend/arch/Architecture.cs 2007-10-31 16:20:13 UTC (rev
88575)
@@ -21,7 +21,10 @@
this.TargetInfo = info;
disassembler = new BfdDisassembler (process,
info.TargetAddressSize == 8);
- opcodes = new X86_Opcodes (process,
info.TargetAddressSize == 8);
+ if (info.TargetAddressSize == 8)
+ opcodes = new Opcodes_X86_64 (process);
+ else
+ opcodes = new Opcodes_I386 (process);
}
internal Disassembler Disassembler {
Modified: trunk/debugger/backend/arch/Opcodes.cs
===================================================================
--- trunk/debugger/backend/arch/Opcodes.cs 2007-10-31 16:13:25 UTC (rev
88574)
+++ trunk/debugger/backend/arch/Opcodes.cs 2007-10-31 16:20:13 UTC (rev
88575)
@@ -8,6 +8,8 @@
internal abstract Instruction ReadInstruction
(TargetMemoryAccess memory,
TargetAddress
address);
+ internal abstract byte[] GenerateJumpInstruction (TargetAddress
address);
+
//
// IDisposable
//
Added: trunk/debugger/backend/arch/Opcodes_I386.cs
===================================================================
--- trunk/debugger/backend/arch/Opcodes_I386.cs 2007-10-31 16:13:25 UTC (rev
88574)
+++ trunk/debugger/backend/arch/Opcodes_I386.cs 2007-10-31 16:20:13 UTC (rev
88575)
@@ -0,0 +1,21 @@
+using System;
+using Mono.Debugger.Backends;
+
+namespace Mono.Debugger.Architectures
+{
+ internal class Opcodes_I386 : X86_Opcodes
+ {
+ internal Opcodes_I386 (ProcessServant process)
+ : base (process)
+ { }
+
+ public override bool Is64BitMode {
+ get { return false; }
+ }
+
+ internal override byte[] GenerateJumpInstruction (TargetAddress
address)
+ {
+ return new byte[0];
+ }
+ }
+}
Added: trunk/debugger/backend/arch/Opcodes_X86_64.cs
===================================================================
--- trunk/debugger/backend/arch/Opcodes_X86_64.cs 2007-10-31 16:13:25 UTC
(rev 88574)
+++ trunk/debugger/backend/arch/Opcodes_X86_64.cs 2007-10-31 16:20:13 UTC
(rev 88575)
@@ -0,0 +1,33 @@
+using System;
+using Mono.Debugger.Backends;
+
+namespace Mono.Debugger.Architectures
+{
+ internal class Opcodes_X86_64 : X86_Opcodes
+ {
+ internal Opcodes_X86_64 (ProcessServant process)
+ : base (process)
+ { }
+
+ public override bool Is64BitMode {
+ get { return true; }
+ }
+
+ internal override byte[] GenerateJumpInstruction (TargetAddress
address)
+ {
+#if FIXME
+ TargetBinaryWriter writer = new TargetBinaryWriter (
+ 14, inferior.TargetMemoryInfo);
+
+ writer.WriteByte (0xff);
+ writer.WriteByte (0x25);
+ writer.WriteInt32 (0);
+ writer.WriteAddress (target);
+
+ return writer.Contents;
+#else
+ return new byte [0];
+#endif
+ }
+ }
+}
Modified: trunk/debugger/backend/arch/X86_Opcodes.cs
===================================================================
--- trunk/debugger/backend/arch/X86_Opcodes.cs 2007-10-31 16:13:25 UTC (rev
88574)
+++ trunk/debugger/backend/arch/X86_Opcodes.cs 2007-10-31 16:20:13 UTC (rev
88575)
@@ -5,21 +5,22 @@
namespace Mono.Debugger.Architectures
{
- internal class X86_Opcodes : Opcodes
+ internal abstract class X86_Opcodes : Opcodes
{
- public readonly bool Is64BitMode;
-
ProcessServant process;
BfdDisassembler disassembler;
- internal X86_Opcodes (ProcessServant process, bool is_64bit)
+ protected X86_Opcodes (ProcessServant process)
{
this.process = process;
- this.Is64BitMode = is_64bit;
- disassembler = new BfdDisassembler (null, is_64bit);
+ disassembler = new BfdDisassembler (null, Is64BitMode);
}
+ public abstract bool Is64BitMode {
+ get;
+ }
+
internal Disassembler Disassembler {
get { return disassembler; }
}
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches