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

Reply via email to