[sdb] Enable the StackFrame.Domain property on stack frames which represent native...
authorZoltan Varga <vargaz@gmail.com>
Wed, 7 Jan 2015 15:59:17 +0000 (10:59 -0500)
committerZoltan Varga <vargaz@gmail.com>
Wed, 7 Jan 2015 15:59:17 +0000 (10:59 -0500)
mcs/class/Mono.Debugger.Soft/Test/dtest-app.cs
mcs/class/Mono.Debugger.Soft/Test/dtest.cs
mono/mini/debugger-agent.c

index 5e87fd4ca57e979c82a3e87a17315f75d6dc63ff..36caae3abe85cc0be0af04678402b82726ec7673 100644 (file)
@@ -1163,6 +1163,12 @@ public class Tests : TestsBase, ITest2
                AppDomain.Unload (domain);
 
                domains_3 ();
+
+               typeof (Tests).GetMethod ("called_from_invoke").Invoke (null, null);
+       }
+
+       [MethodImplAttribute (MethodImplOptions.NoInlining)]
+       public static void called_from_invoke () {
        }
 
        [MethodImplAttribute (MethodImplOptions.NoInlining)]
index 3a97099bdc66c4b547a0245cc87ea33da44746f4..ce1eb2cbfc66706b226a360402a5f7c1b2c16cf4 100644 (file)
@@ -2916,6 +2916,13 @@ public class DebuggerTests
                AssertThrows<Exception> (delegate {
                                d_method.DeclaringType.GetValue (d_method.DeclaringType.GetField ("static_i"));
                        });
+
+               // Check that .Domain is accessible for stack frames with native transitions
+               e = run_until ("called_from_invoke");
+               ThreadMirror.NativeTransitions = true;
+               foreach (var f in e.Thread.GetFrames ()) {
+                       var dom = f.Domain;
+               }
        }
 
        [Test]
index 21b27a029acd9c81a660bf9909103a51ca2c15c9..cffa81f3a878a89c37c08fc57fbae7908b816cec 100644 (file)
@@ -8864,6 +8864,13 @@ frame_commands (int command, guint8 *p, guint8 *end, Buffer *buf)
        frame_idx = i;
        frame = tls->frames [frame_idx];
 
+       /* This is supported for frames without has_ctx etc. set */
+       if (command == CMD_STACK_FRAME_GET_DOMAIN) {
+               if (CHECK_PROTOCOL_VERSION (2, 38))
+                       buffer_add_domainid (buf, frame->domain);
+               return ERR_NONE;
+       }
+
        if (!frame->has_ctx)
                return ERR_ABSENT_INFORMATION;