Hey Tomas,
On 2/27/09, Tomas M. [email protected] wrote:
Jb, could you try again using the latest source code (after Jim pushes it) and if it fails send me please full stack trace and complete IL of the offending method?
Sure.
So, after building from source the updated git repo, we have a
different error, but similar error.
I’m simply executing mono ir.exe test.rb, where test.rb only contains
a call to require "mscorlib"
.
The stacktrace looks like this:
(gdb) bt
#0 mono_method_to_ir (cfg=0x8ec0ac0, method=0x8ecbce8,
start_bblock=0x8ec48b4, end_bblock=0x8ec494c, return_var=0x0,
dont_inline=0x8ec9a60, inline_args=0x0, inline_offset=0,
is_virtual_call=0)at method-to-ir.c:4606
#1 0x0806124d in mini_method_compile (method=0x8ecbce8,
opts=64055807, domain=0x25ee0, run_cctors=,
compile_aot=, parts=0) at mini.c:3208
#2 0x08062b19 in mono_jit_compile_method (method=0x8ecbce8) at
mini.c:3847
#3 0x0818ef88 in ves_icall_System_Delegate_CreateDelegate_internal
(type=0xc6960, target=0x1f27b0, info=0x2e0a0) at icall.c:5988
#4 0xb6c9ae43 in (wrapper managed-to-native)
System.Delegate:CreateDelegate_internal (param0=0xc6960,
param1=0x1f27b0, param2=0x2e0a0) at xdb.il:7790
#5 0xb6c9ab34 in System.Delegate:CreateDelegate (type=0xc6960,
firstArgument=0x1f27b0, method=0x2e0a0, throwOnBindFailure=true)at
/home/jbevain/sources/mcs/class/corlib/System/Delegate.cs:256
#6 0xb6c9a6e6 in System.Delegate:CreateDelegate (type=0xc6960,
firstArgument=0x1f27b0, method=0x2e0a0) at
/home/jbevain/sources/mcs/class/corlib/System/Delegate.cs:263
#7 0xb6bc152b in System.Reflection.Emit.DynamicMethod:CreateDelegate
(this=0x2e0a0, delegateType=0xc6960, target=0x1f27b0) at
/home/jbevain/sources/mcs/class/corlib/System.Reflection.Emit/DynamicMethod.cs:189
#8 0xb6bc14c8 in System.Dynamic.Utils.TypeExtensions:CreateDelegate
(methodInfo=0x2e0a0, delegateType=0xc6960, target=0x1f27b0) at
xdb.il:44617
#9 0xb6bc13d7 in
System.Linq.Expressions.Compiler.LambdaCompiler:CreateDelegate
(this=0x1f17e0) at xdb.il:44564
#10 0xb6bcb61f in
System.Linq.Expressions.Compiler.LambdaCompiler:Compile
(lambda=0x1f0ca0) at xdb.il:34475
#11 0xb6bcb57c in System.Linq.Expressions.Expression1<object>:Compile (this=0x1f0ca0) #12 0xb6b722ba in System.Dynamic.SmallRuleSet
1:MakeTarget
(this=0x1f3c60)
#13 0xb6b72235 in System.Dynamic.SmallRuleSet`1:GetTarget
(this=0x1f3c60)
#14 0xb6b721ea in
System.Runtime.CompilerServices.CallSiteOps:SetTarget(site=1120512,
rule=2047096)
#15 0xb6bc293b in
System.Dynamic.UpdateDelegates:UpdateAndExecute3<object, object,
object, object> (site=0xe9940, arg0=0x5ab80, arg1=0x50cf0,
arg2=0x111528)
#16 0xb6bbe81c in (wrapper static-rgctx-invoke)
System.Dynamic.UpdateDelegates:static_rgctx_invoke_object_CallSite_RubyScope_object_MutableString
(param0=0x111900, param1=0x5ab80, param2=0x50cf0, param3=0x111528)at
xdb.il:43447
#17 0xb6ba3120 in (wrapper dynamic-method) object:IR;#;test.rb;0;
(param0=0xe9ab0, param1=0x111d50, param2=0x25aa0) at xdb.il:44669
#18 0xb6bcb2b8 in Microsoft.Scripting.ScriptCode:InvokeTarget
(this=0x111d68, code=0x4e700, scope=0x111d50) at xdb.il:34374
#19 0xb6bcb279 in Microsoft.Scripting.ScriptCode:Run (this=0x111d68,
scope=0x111d50) at xdb.il:34361
#20 0xb6bcb1f3 in Microsoft.Scripting.ScriptCode:Run (this=0x111d68)
at xdb.il:34331
#21 0xb6beac36 in IronRuby.Runtime.RubyContext:ExecuteProgram
(this=0x25aa0, program=0xe2eb0) at xdb.il:17847
#22 0xb6beab8d in
Microsoft.Scripting.Hosting.ScriptSource:ExecuteProgram (this=0x8b978)
at xdb.il:17816
#23 0xb6beab2c in (wrapper remoting-invoke-with-check)
Microsoft.Scripting.Hosting.ScriptSource:ExecuteProgram (this=0x8b978)
at xdb.il:17807
#24 0xb6beaa4e in
Microsoft.Scripting.Hosting.Shell.CommandLine:RunFile (this=0xe2f00,
source=0x8b978) at xdb.il:17749
#25 0xb6bea389 in IronRuby.Hosting.RubyCommandLine:RunFile
(this=0xe2f00, fileName=0x48fe0) at xdb.il:17406
#26 0xb6bea2d2 in Microsoft.Scripting.Hosting.Shell.CommandLine:Run
(this=0xe2f00) at xdb.il:17363
#27 0xb6bea103 in Microsoft.Scripting.Hosting.Shell.CommandLine:Run
(this=0xe2f00, engine=0x4e880, console=0xe2ed8, options=0x4b320) at
xdb.il:17265
#28 0xb6be5570 in
Microsoft.Scripting.Hosting.Shell.ConsoleHost:RunCommandLine(this=0x4bfc8)
at xdb.il:16737
#29 0xb6be5370 in
Microsoft.Scripting.Hosting.Shell.ConsoleHost:ExecuteInternal(this=0x4bfc8)
at xdb.il:16638
#30 0xb6be520e in
Microsoft.Scripting.Hosting.Shell.ConsoleHost:Execute (this=0x4bfc8)
at xdb.il:16568
#31 0xb780b81b in Microsoft.Scripting.Hosting.Shell.ConsoleHost:Run
(this=0x4bfc8, args=0x29f48) at xdb.il:276
#32 0xb780b2ca in RubyConsoleHost:Main (args=0x29f48) at xdb.il:79
#33 0xb780b203 in (wrapper runtime-invoke)
RubyConsoleHost:runtime_invoke_int_object (param0=, param1=-1073746312, param2=0, param3=-1216302424) at xdb.il:53
#34 0x0814551e in mono_runtime_exec_main (method=0x82cdde4,
args=0x29f48, exc=0x0) at object.c:3335
#35 0x08145c3b in mono_runtime_run_main (method=0x82cdde4, argc=1,
argv=0xbffff0d8, exc=0x0) at object.c:3123
#36 0x080b1b0a in mono_main (argc=3, argv=0xbffff0d4) at driver.c:969
#37 0x0805aff1 in main (argc=149723456, argv=0x0) at main.c:34
(gdb)
And most importantly, the code that is trying to be emitted by the
DynamicMethod is as follows:
(gdb) p mono_method_get_header(method)->code
$1 = (const unsigned char *) 0x8ec15e0 “\005\002{\001”
(gdb) p mono_method_get_header(method)->code_size
$2 = 198
(gdb) p mono_disasm_code (0, method, 0x8ec15e0, 0x8ec15e0 + 198)
IL_0000: ldarg.3
IL_0001: ldarg.0
IL_0002: ldfld <System.Runtime.CompilerServices.Closure:Constants>
IL_0007: ldc.i4.0
IL_0008: ldelem.ref
IL_0009: ceq
IL_000b: brfalse IL_00a3
IL_0010: ldarg.2
IL_0011: call <IronRuby.Runtime.RubyOps:GetContextFromScope
(IronRuby.Runtime.RubyScope)>
IL_0016: ldarg.0
IL_0017: ldfld <System.Runtime.CompilerServices.Closure:Constants>
IL_001c: ldc.i4.1
IL_001d: ldelem.ref
IL_001e: castclass
IL_0023: ceq
IL_0025: brfalse IL_00a3
IL_002a: ldarg.s 4
IL_002c: brfalse IL_00a3
IL_0031: ldarg.s 4
IL_0033: castclass
IL_0038: callvirt <object:GetType ()>
IL_003d: ldtoken <IronRuby.Builtins.MutableString>
IL_0042: call <System.Type:GetTypeFromHandle
(System.RuntimeTypeHandle)>
IL_0047: ceq
IL_0049: brfalse IL_00a3
IL_004e: ldarg.0
IL_004f: ldfld <System.Runtime.CompilerServices.Closure:Constants>
IL_0054: ldc.i4.2
IL_0055: ldelem.ref
IL_0056: castclass <StrongBox1> IL_005b: ldfld <System.Runtime.CompilerServices.StrongBox
1:Value>
IL_0060: ldc.i4 189
IL_0065: ceq
IL_0067: brfalse IL_009d
IL_006c: ldarg.2
IL_006d: ldarg.3
IL_006e: ldarg.0
IL_006f: ldfld <System.Runtime.CompilerServices.Closure:Constants>
IL_0074: ldc.i4.3
IL_0075: ldelem.ref
IL_0076: castclass <CallSite1> IL_007b: dup IL_007c: stloc.0 IL_007d: ldfld <System.Runtime.CompilerServices.CallSite
1:Target>
IL_0082: ldloc.0
IL_0083: ldarg.2
IL_0084: call <IronRuby.Runtime.RubyOps:GetContextFromScope
(IronRuby.Runtime.RubyScope)>
IL_0089: ldarg.s 4
IL_008b: callvirt
<System.Func4<System.Runtime.CompilerServices.CallSite, IronRuby.Runtime.RubyContext, IronRuby.Builtins.MutableString, IronRuby.Builtins.MutableString>:Invoke (System.Runtime.CompilerServices.CallSite,IronRuby.Runtime.RubyContext,IronRuby.Builtins.MutableString)> IL_0090: call <IronRuby.Builtins.KernelOps:Require (IronRuby.Runtime.RubyScope,object,IronRuby.Builtins.MutableString)> IL_0095: tail. IL_0097: call <Microsoft.Scripting.Runtime.ScriptingRuntimeHelpers:BooleanToObject (bool)> IL_009c: ret IL_009d: br IL_00a3 IL_00a2: ret IL_00a3: ldarg.1 IL_00a4: call <System.Runtime.CompilerServices.CallSiteOps:NeedsUpdate (System.Runtime.CompilerServices.CallSite)> IL_00a9: brfalse IL_00b0 IL_00ae: ldnull IL_00af: ret IL_00b0: ldarg.1 IL_00b1: castclass <CallSite
1>
IL_00b6: callvirt
<System.Runtime.CompilerServices.CallSite1<System.Func
5<System.Runtime.CompilerServices.CallSite,
IronRuby.Runtime.RubyScope, object, IronRuby.Builtins.MutableString,
object>>:get_Update ()>
IL_00bb: ldarg.1
IL_00bc: ldarg.2
IL_00bd: ldarg.3
IL_00be: ldarg.s 4
IL_00c0: callvirt
<System.Func`5<System.Runtime.CompilerServices.CallSite,
IronRuby.Runtime.RubyScope, object, IronRuby.Builtins.MutableString,
object>:Invoke
(System.Runtime.CompilerServices.CallSite,IronRuby.Runtime.RubyScope,object,IronRuby.Builtins.MutableString)>
IL_00c5: ret
The issue here is the instruction:
IL_00a2: ret
With is right after an unconditional branch, thus will be executed,
but the IL is still wrong.