[runtime] Remove eager exception stack construction when it contains dynamic method...
commit7e42365186f01efa3f49c02e9b2987a71fabd5ea
authorMarek Safar <marek.safar@gmail.com>
Fri, 21 Aug 2015 19:36:52 +0000 (21 21:36 +0200)
committerZoltan Varga <vargaz@gmail.com>
Sat, 22 Aug 2015 03:38:16 +0000 (21 23:38 -0400)
treee126700b14dd70dff38dfcadd8a8ed65171d1b88
parent1d2c58215fa00192d6306b4474ea4487df4b38e3
[runtime] Remove eager exception stack construction when it contains dynamic method. Fixes #33064

We used to construct exception stack traces as string at throw site (for dynamic methods) but
that does not work correctly because exception stack trace can be decomposed via
new StackTrace (exception) or merged via ExceptionDispatchInfo both of them need the exception
stack in raw form and not as a string.

Further the format used by local stack builder was not same as format used by
System.Diagnostics.StackTrace.

The orignal reason for the specialization was that dynamic method can be collected
before stack is rendered which leads to stack frame to be reported as

at <unknown method> instead of
at (wrapper dynamic-method)

That should be addressed by gc-link between dynamic method and exception or
stack-frame.
external/referencesource
mcs/class/corlib/System.Diagnostics/StackTrace.cs
mcs/class/corlib/System/Exception.cs
mcs/class/corlib/Test/System.Reflection.Emit/DynamicMethodTest.cs
mono/mini/mini-exceptions.c
mono/mini/mini-runtime.c
mono/mini/mini.h