2009-02-10 Mark Probst <mark.probst@gmail.com>
authorMark Probst <mark.probst@gmail.com>
Tue, 10 Feb 2009 15:13:38 +0000 (15:13 -0000)
committerMark Probst <mark.probst@gmail.com>
Tue, 10 Feb 2009 15:13:38 +0000 (15:13 -0000)
Backport of r126467.

* mini-x86.c (mono_arch_context_get_int_reg): Handle all registers
individually.  Fixes #473482.

2009-02-10  Mark Probst  <mark.probst@gmail.com>

Backport of r126467.

* bug-473482.2.cs: New test.

* Makefile.am: Test added.

svn path=/branches/mono-2-2/mono/; revision=126468

mono/mini/ChangeLog
mono/mini/mini-x86.c
mono/tests/ChangeLog
mono/tests/Makefile.am
mono/tests/bug-473482.2.cs [new file with mode: 0644]

index 0342625916d9f8af49c91018b6afe420b319a0b1..c81e8033151a284c9aeda0b3d0a823ab1b0bd8b4 100644 (file)
@@ -1,3 +1,10 @@
+2009-02-10  Mark Probst  <mark.probst@gmail.com>
+
+       Backport of r126467.
+
+       * mini-x86.c (mono_arch_context_get_int_reg): Handle all registers
+       individually.  Fixes #473482.
+
 2009-02-05  Mark Probst  <mark.probst@gmail.com>
 
        Backport of r125887.
index 14cd6e4caffa6f18b55044d657899fc6bb150049..63713db612d8a5e1c4ee5a7176ceab893aee0169 100644 (file)
@@ -5563,11 +5563,15 @@ gpointer
 mono_arch_context_get_int_reg (MonoContext *ctx, int reg)
 {
        switch (reg) {
+       case X86_EAX: return (gpointer)ctx->eax;
+       case X86_EBX: return (gpointer)ctx->ebx;
        case X86_ECX: return (gpointer)ctx->ecx;
        case X86_EDX: return (gpointer)ctx->edx;
-       case X86_EBP: return (gpointer)ctx->ebp;
        case X86_ESP: return (gpointer)ctx->esp;
-       default: return ((gpointer)(&ctx->eax)[reg]);
+       case X86_EBP: return (gpointer)ctx->ebp;
+       case X86_ESI: return (gpointer)ctx->esi;
+       case X86_EDI: return (gpointer)ctx->edi;
+       default: g_assert_not_reached ();
        }
 }
 
index 00cd6e863f7782fdffabc19597ecd6f2564826ac..d820490cd3efa02c5f91f2e997ebe5bf153d64ba 100644 (file)
@@ -1,3 +1,11 @@
+2009-02-10  Mark Probst  <mark.probst@gmail.com>
+
+       Backport of r126467.
+
+       * bug-473482.2.cs: New test.
+
+       * Makefile.am: Test added.
+
 2009-02-05  Mark Probst  <mark.probst@gmail.com>
 
        Backport of r125887.
index bdda1b61a32c35676ceec62f3952bff686da7faa..06b95893775e1d9764d45a104b024ac5212f345d 100644 (file)
@@ -298,6 +298,7 @@ BASE_TEST_CS_SRC=           \
        generic-stack-traces2.2.cs      \
        bug-472600.2.cs \
        recursive-generics.2.cs \
+       bug-473482.2.cs \
        bug-80392.2.cs          \
        dynamic-method-access.2.cs      \
        bug-82194.2.cs  \
@@ -737,7 +738,7 @@ test-generic-sharing : generics-sharing.2.exe shared-generic-methods.2.exe  \
                generic-virtual-invoke.2.exe generic-typedef.2.exe              \
                generic-marshalbyref.2.exe bug-459285.2.exe bug-461198.2.exe    \
                generic-sealed-virtual.2.exe generic-stack-traces.2.exe         \
-               generic-stack-traces2.2.exe bug-472600.2.exe
+               generic-stack-traces2.2.exe bug-472600.2.exe bug-473482.2.exe
        @for fn in $+ ; do      \
                echo "Testing $$fn ...";        \
                MONO_GENERIC_SHARING=all $(RUNTIME) -O=gshared                $$fn > $$fn.stdout || exit 1;     \
diff --git a/mono/tests/bug-473482.2.cs b/mono/tests/bug-473482.2.cs
new file mode 100644 (file)
index 0000000..308782a
--- /dev/null
@@ -0,0 +1,35 @@
+using System;
+
+public class Program
+{
+    static void Main()
+    {
+        try
+        {
+            new Foo<object>(0, 0);
+        }
+        catch (Exception ex)
+        {
+          var t = ex.StackTrace;
+        }
+    }
+}
+
+public class Foo<T> : FooBase
+{
+    int i;
+    int ii;
+
+    public Foo(int i, int ii)
+    {
+        this.i = i;
+        this.ii = ii;
+        this.iii = 0;
+        throw new Exception();
+    }
+}
+
+public abstract class FooBase
+{
+    protected int iii;
+}