Skip to content


Subversion checkout URL

You can clone with
Download ZIP
tree: 5d11607a5b
Fetching contributors…

Cannot retrieve contributors at this time

14641 lines (8831 sloc) 472.871 kB
2008-08-05 Marek Habersack <>
* (GENMDESC_PRG): when cross-compiling use full path
to the file
2008-08-05 Zoltan Varga <>
* ir-emit.h (EMIT_NEW_ARGSTORE): Fix the usage of param_types and
arg_array in the soft-float versions of the LOAD/STORE macros.
* method-to-ir.c (mono_method_to_ir2): Fix a warning in the arm switch
* ir-emit.h (NEW_VARLOADA): Handle SOFT_FLOAT correctly.
2008-08-02 Zoltan Varga <>
* mini-ia64.c (add_valuetype): Only reserve half parameter slot for each member of
a float HFA. Fixes #413621.
2008-08-02 Gert Driesen <>
* mini-x86.c (mono_arg_get_argument_info): Rename last occurrence of
frame_size to args_size. Fixes build.
2008-08-02 Zoltan Varga <>
* mini-x86.c (mono_arch_get_argument_info): Rename frame_size to args_size,
and don't align it to MONO_ARCH_FRAME_ALIGNMENT.
* mini-x86.h: Change MONO_ARCH_FRAME_ALIGNMENT to 8 so doubles stored on
the stack are not unaligned. Fixes #413247.
Fri Aug 1 18:46:42 CEST 2008 Paolo Molaro <>
* mini.c: update jitted methods performance counters.
Fri Aug 1 16:30:37 CEST 2008 Paolo Molaro <>
* mini-exceptions.c: increase the exceptions thrown performance
counter in mono_handle_exception ().
2008-07-29 Zoltan Varga <>
* aot-runtime.c: Use MonoImage's as keys in the aot_modules hash so the aot
can work with netmodules.
2008-07-28 Geoff Norton <>
* mini-x86.h: Correct the frame alignment on OSX. Fixes the jit
regression tests.
2008-07-28 Zoltan Varga <>
* mini-x86.c (mono_arch_emit_call): Emi the osx stack alignment at the
correct place.
2008-07-28 Bill Holmes <>
* mini-amd64.c (get_call_info): Winx64 fix for passing floats.
The float param registers and other param registers must be the
same index on Windows x64.
* mini-amd64.c (mono_arch_allocate_vars) : Implementing the
ArgValuetypeAddrInIReg argument case. Setting the argument
* mini-amd64.c (mono_arch_call_opcode) : Winx64 fix. Use the size
variable computed above as the copy length for arguments of storage
type ArgValuetypeAddrInIReg.
* mini-amd64.c (mono_arch_emit_call) : Implementing the
ArgValuetypeAddrInIReg argument case. This case will rely on
mono_arch_emit_outarg_vt to emit the correct code later in the process.
* mini-amd64.c (mono_arch_emit_call) : On Winx64 there always needs to be
a 32 byte stack allocation for all calls. We will omit the adjustment for
jump and tail call instructoins as they do not follow the typical call behavior.
* mini-amd64.c (mono_arch_emit_outarg_vt) : Implementing the case for
ArgValuetypeAddrInIReg. The code emitted will copy the argument to a
local variable and pass the local variable by reference to the called method.
* mini-amd64.c (mono_arch_emit_prolog, emit_load_volatile_arguments) :
Implementing the ArgValuetypeAddrInIReg argument case. When the address
of a struct is passed in a register it must be saved with the other
volatile argument on the stack.
* mini-amd64.c (mono_arch_emit_prolog) : Winx64 fix. When omitting the
frame pointer the stack adjustment value must be saved to the unwind
info structure.
Contributed under MIT/X11 license.
2008-07-28 Zoltan Varga <>
* inssel-x86.brg (stmt): Add missing OP_X86_OUTARG_ALIGN_STACK rule
which got lost in the merge.
2008-07-27 Zoltan Varga <>
* method-to-ir.c: Make the helper_sig variables extern to fix the ppc
* mini-amd64.c (emit_call_body): Add a no_patch case missed earlier.
* mini-amd64.c (emit_call_body): Avoid aligning the call instruction on
icalls, since they won't be patched.
* exceptions-amd64.c (mono_arch_get_restore_context_full): Use a slightly
different code sequence when running under valgrind to prevent some valgrind
* Add new regression test.
* method-to-ir.c (mono_method_to_ir2): Fix handling of inlined methods which
end with a throw.
* method-to-ir.c (mono_method_to_ir2): Use get_vreg_to_inst () instead of
accessing cfg->vreg_to_inst directly to prevent a crash in LDFLD.
* Add new test.
* aot-compiler.c: Fix some warnings.
* decompose.c (mono_decompose_long_opts): Implement OP_ICONV_TO_OVF_I8_UN.
Fixes #412494.
2008-07-27 Zoltan Varga <>
* driver.c (mono_main): Fix the --gc=none build. Fixes #412482.
(mini_usage_jitdeveloper): Add a missing --wapi option.
2008-07-25 Zoltan Varga <>
* mini-codegen.c: Simplify the is_fp macros.
(free_up_ireg): Remove, use free_up_reg instead.
(free_up_reg): Fix the fp case.
2008-07-26 Zoltan Varga <>
* (loadr8_membase): Increase the length of this as this is not
lowered earlier.
* exceptions-x86.c: Merge some changes which seemed to have got lost
in the linear-ir merge.
* liveness.c: Disable the liveness2 pass on 32 bit platforms.
* method-to-ir.c (mono_handle_global_vregs): Make the component vregs of a
long vreg volatile even if the variable was already created.
* liveness.c (update_liveness2): Avoid eliminating dead definitions of
volatile variables.
2008-07-26 Zoltan Varga <>
* (fcall_membase): Increase the size of the fcall opcodes.
* mini.c (mono_jit_compile_method_inner): Add support for
* method-to-ir.c (mono_method_to_ir2): Avoid a crash if
mini_method_get_context () returns NULL. Fixes #356531.
* mini.c (mono_method_to_ir): Ditto.
* method-to-ir.c (mono_method_to_ir2): Create a variable if needed when
accessing a field of a valuetype in LDFLD/STFLD. Fixes #412399.
2008-07-25 Zoltan Varga <>
* method-to-ir.c (mono_method_to_ir2): Initialize an uninitialized variable
in the LDFTN implementation.
2008-07-25 Mark Probst <>
* mini-trampolines.c (mono_magic_trampoline): When sharing generic
code, patch calls to icalls, too, even if they're not in the
shared generic code hash. Fixes #411962.
2008-07-25 Zoltan Varga <>
* Increase the length of the fcall opcodes.
* mini-x86.c (emit_move_return_value): Avoid some precision issues for
calls returning floats.
* method-to-ir.c (mono_method_to_ir2): Remove the generic sharing restrictions
* method-to-ir.c (mono_method_to_ir2): Merge some LDFTN gsharing changes
missed earlier.
* method-to-ir.c (handle_delegate_ctor): Avoid putting dynamic methods
into the domain->method_code_hash.
* aot-compiler.c: Fix win32 build.
* method-to-ir.c (EMIT_GET_RGCTX): Call EMIT_NEW_LDARG in emit_get_rgctx ().
* method-to-ir.c (mono_method_to_ir2): Use mono_array_new_specific in the
gshared NEWARR implementation.
* Remove duplicate localloc_imm opcode.
* ir-emit.h (NEW_ARGLOAD): Use cfg->args and cfg->arg_types so this macro
can be used outside of method_to_ir.
* mini.h (MonoCompile): Add arg_types field.
* method-to-ir.c (inline_method): Save/Restore cfg->args and cfg->arg_types.
* method-to-ir.c (mono_method_to_ir2): Set cfg->args and cfg->arg_types to
the values of the local arg_array and param_types array.
2008-07-24 Zoltan Varga <>
* method-to-ir.c (mono_method_to_ir2): Allocate a GOT var for NEWOBJ, since
got accesses might only get generated later when NEWOBJ is decomposed.
* method-to-ir.c (handle_delegate_ctor): Add an optimization to avoid
looking up the native code of the target method when a delegate is called
for the first time.
* mini-trampolines.c (mono_delegate_trampoline): Add the other half of the
* debug-debugger.c (MONO_DEBUGGER__debugger_info): Fix a warning.
* aot-runtime.c aot-compiler.c: Add a new option 'no-dlsym' which makes
AOT work on platforms without a working dlsym implementation.
* mini.h: Bump AOT image format version.
2008-07-24 Mark Probst <>
* mini-exceptions.c: Free a MonoType with
mono_metadata_free_type() instead of g_free().
* aot-runtime.c: Free a MonoType.
2008-07-24 Zoltan Varga <>
* method-to-ir.c (mono_method_to_ir2): Add a comment for the box+brtrue
* mini-codegen.c (mono_local_regalloc): Remove the remaining items from the
fp stack on x86.
2008-07-23 Massimiliano Mantione <>
* mini.c (sigprof_signal_handler): call the new "runtime initialized"
profiler hook.
2008-07-23 Zoltan Varga <>
* method-to-ir.c (mono_method_to_ir2): Set the stack type properly for
NEWOBJ calls on valuetypes.
* Add new test.
* mini-x86.c (mono_arch_emit_call): Use mini_type_stack_size ().
2008-07-22 Zoltan Varga <>
* mini-exceptions.c: Fix some warnings. Remove one ia64 special case as it
is no longer needed.
* mini-ia64.c (mono_arch_emit_prolog): In native-to-managed wrappers, widen
non register sized integer arguments.
(mono_arch_call_opcode): Add support for ArgInFloatRegR4.
(mono_arch_emit_outarg_vt): Pass a more reasonable alignment to
emit_memcpy2 ().
* method-to-ir.c (mono_method_to_ir2): Handle the ret_var_is_local case in
* method-to-ir.c (ADD_WIDEN_OP): New macro to insert a widening op when
two a binop with different sized arguments is emitted.
* mini.c (mono_bblock_insert_after_ins): Properly link up with the next
instruction in the ins==NULL case.
2008-07-23 Zoltan Varga <>
* mini-ops.h: Add OP_X86_OUTARG_ALIGN_STACK.
* mini-x86.c: Fix osx build.
* mini-amd64.c (mono_arch_output_basic_block): Handle varargs in the CALL_REG
opcodes as well.
* method-to-ir.c (mono_spill_global_vars): Avoid fusing a load+store into the
instruction for non int sized variables.
* method-to-ir.c (mono_method_to_ir2): Fix an assert in the LDFLD
2008-07-23 Robert Jordan <>
* method-to-ir.c: Fix MSVC build.
2008-07-22 Zoltan Varga <>
* method-to-ir.c (mono_method_to_ir2): When calling native code which returns
a non int sized type, widen it to an int since newer versions of gcc seem to
generate code which needs this.
* ssa2.c abcremoval2.c: Fix warnings.
* *: Merge the Linear IR branch.
The original branch is at trunk/branches/vargaz/mini-linear-il, and
the ChangeLog file there describes all the changes done over the years.
Further documentation can be found at
2008-07-21 Bill Holmes <>
* mini-amd64.c (get_call_info): Winx64 fix for passing floats.
The float param registers and other param registers must be the
same index on Windows x64.
Contributed under MIT/X11 license.
2008-07-21 Rodrigo Kumpera <>
* mini.c: Make the previous fix GC safe.
2008-07-21 Raja R Harinath <>
* (version.h): Allow a trailing '/' in the repository URL.
2008-07-21 Bill Holmes <>
* mini-amd64.c (get_call_info): Correcting the case for MONO_TYPE_TYPEDBYREF
on Winx64. This type will not be passed on the stack (ArgOnStack), but
ArgValuetypeAddrInIReg instead.
Contributed under MIT/X11 license.
2008-07-21 Zoltan Varga <>
* mini-codegen.c (get_register_spilling): Fix a warning.
2008-07-17 Rodrigo Kumpera <>
* mini.c: Use mono_runtime_class_init_full to avoid leaking memory
for types which the initialization fails. Raises the provided exception
at the right stop after cleanup.
2008-07-16 Zoltan Varga <>
* aot-compiler.c: Free most of the memory allocated during compilation.
* mini.c (mini_parse_debug_options): Fix a leak.
* mini.c (mini_method_compile): Don't add the method to the jit info tables
during aot compilation.
2008-07-14 Zoltan Varga <>
* mini.c (mono_method_to_ir): Disable aot for code using CCASTCLASS on x86 as
it has too much register pressure.
2008-07-13 Zoltan Varga <>
* inssel.brg (CEE_CASTCLASS): Remove some dead code.
2008-07-12 Zoltan Varga <>
* mini-x86.h aot-compiler.c aot-runtime.c: Store the plt info offset inline
on x86.
* mini-amd64.h aot-compiler.c aot-runtime.c: Store the plt info offset inline
on amd64 similar to the way it is done on arm.
* mini.h (MONO_AOT_FILE_VERSION): Bump AOT file format version.
* aot-runtime.c (load_aot_module): Rename 'info' to 'amodule' for
consistency, normalize error messages, avoid loading aot-only modules in
normal mode.
* driver.c (mono_main): Rename --aot-only command line option to --full-aot
for consistency.
* aot-compiler.c aot-runtime.c tramp-arm.c: Implement aot-only support.
2008-07-11 Martin Baulig <>
* debug-debugger.h
(MonoDebuggerInfo): Add `interruption_request'.
2008-07-12 Zoltan Varga <>
* aot-compiler.c (emit_plt): Remove some dead code.
* exceptions-arm.c (mono_arch_get_call_filter_full): Initialize ji.
* aot-runtime.c (mono_aot_get_plt_info_offset): New helper function to
return the plt info offset belonging to a given plt entry.
* mini-trampolines.c (mono_aot_plt_trampoline): Use
* aot-runtime.c aot-compiler.c tramp-arm.c: Change the arm plt code to be
similar to the amd64 code by makeing jumps through a separate jump table
instead of embedding the jump addresses into the code.
2008-07-11 Zoltan Varga <>
* mini.c (mono_method_to_ir): Disable aot for calling ldtoken in a generic
2008-07-10 Martin Baulig <>
* mini.c (mini_method_compile): Disable generics sharing when
running in the debugger.
2008-07-10 Zoltan Varga <>
* mini.c (mono_method_to_ir): Create the got var in CEE_REFANYVAL.
* inssel.brg (CEE_CASTCLASS): Avoid reusing temporary registers to prevent
the local register allocator from running out of registers on x86 when
using aot.
2008-07-10 Bill Holmes <>
* inssel-long.brg For OP_LCONV_TO_OVF_I4 an int cast is needed when
expressing IntMin for the VS Compiler. See Compiler Warning (level 2)
Contributed under MIT/X11 license.
2008-07-10 Zoltan Varga <>
* aot-compiler.c: Get rid of whitespace in the generated assembly file to
speed up the assembler.
2008-07-09 Zoltan Varga <>
* mini-arm.h tramp-arm.c exceptions-arm.c aot-compiler.c: Beginnings of aot-only
* mini.c: Move the soft float handling macros a bit earlier, add
NEW_TEMPSTORE_SOFT_FLOAT macro, fix warnings, add soft-float support in one
* mini.h: Add prototype for mono_arch_fixup_jinfo.
* mini.c (mini_init): In aot-only mode, set the root domain code manager to
read-only to help catch code allocation requests.
* mini.c inssel.brg aot-compiler.c: Make the use of IMT runtime configurable,
and turn it off when using --aot-only or when compiling with --aot=full.
* mini.c (mono_resolve_patch_target): In aot-only mode, allocate the
jump table for switches from the normal domain mempool, not the code
* mini-trampolines.c (get_unbox_trampoline): New function to return an
unbox trampoline which handles aot-only mode too.
* aot-runtime.c (mono_aot_get_unbox_trampoline): New function to lookup
an AOTed unbox trampoline.
* aot-compiler.c (emit_trampolines): Emit unbox trampolines.
2008-07-09 Bill Holmes <>
* wapihandles.c: Fixing MSVC builds. Include statement changed from <> to
Contributed under MIT/X11 license.
2008-07-09 Bill Holmes <>
* mini.c (mono_codegen): Allocate space at the end of the code block and store
the unwind information for the method at the end of the allocated block.
* mini-amd64.h: Added declarations for the unwind routines and adding field to
MonoCompileArch to hold the unwind info for SEH on Winx64
* mini-amd64.c (mono_arch_emit_prolog): Calls to the unwind routines added to store
frame pointer info for the method being compiled.
* exceptions-amd64.c (mono_arch_get_throw_corlib_exception): Added a stack adjustment before
the call to mono_exception_from_token.
* exceptions-amd64.c: Added mono_arch_unwindinfo* implementations. This code is responsible
storing the method prolog information in a format that the Winx64 SEH can understand. This
information is stored a the end of the method block because it is all 32-bit offset based.
Contributed under MIT/X11 license.
2008-07-09 Zoltan Varga <>
* mini.h: Remove duplicate definitions of the mini_wapi_ functions.
* wapihandles.c: Fix warnings.
* aot-runtime.c (load_aot_module): Add a missing error message in aot-only
* mini-trampolines.c (mono_create_jit_trampoline_in_domain): Avoid calling
mono_jit_compile_method in aot-only mode since that calls the type
* mini-trampolines.c (mono_create_delegate_trampoline): Avoid calling
get_delegate_invoke_impl in aot-only mode.
* mini.c (mono_global_codeman_reserve): Reenable the aot-only check.
2008-07-08 Zoltan Varga <>
* trace.c (mono_trace_enter_method): Fix printing of Type instances.
* aot-compiler.c (compile_method): Disable the check for GSHARED since it
is on by default.
* inssel-long.brg (reg): Add a rule for LCALL_REG (OP_I8CONST).
* tramp-amd64.c (mono_arch_nullify_plt_entry): Read the nullified class
init trampoline from the AOT file as well.
* mini-amd64.c (mono_arch_register_lowlevel_calls): Register
mono_amd64_throw_exception as a jit icall since it is needed by the aot-only
* mini.c (mini_init): Move the call to mono_exceptions_init () after
* exceptions-amd64.c: Add _full variants for the remaining exception code
creation functions as well, allow emission of relocatable code, remove
caching since that is now done by the caller.
* mini-exceptions.c: Add _full variants for the remaining exception code
creation functions as well, add aot-only support.
* aot-compiler.c (compile_method): Allow calls to methods of constructed types
if we can determine a proper token for them.
(add_wrappers): Add a few more wrappers.
(emit_method_code): Remove some dead code.
(emit_trampolines): Emit exception code too.
* mini.c (mono_method_to_ir): Call mono_array_new_2 if possible.
* jit-icalls.c (mono_array_new_2): New jit icall, specialized version of
mono_array_new_va which avoids varargs.
* mini-exceptions.c (mono_exceptions_init): Fix the ppc build.
* mini-trampolines.c: Call mono_create_specific_trampoline () instead of
mono_arch_create_specific_trampoline () in all places.
* aot-compiler.c aot-runtime.c: Refactor the trampoline emitting/loading code
a bit so it can be used for other things as well.
* mini-exceptions.c (mono_exceptions_init): Initialize throw_exception_by_name
on demand as well.
* exceptions-amd64.c: Rename the caching from the exception code creation
functions, it is done by the caller instead.
* exceptions-amd64.c: Change the signature of the exception code creation
functions to allow the creation of relocatable code later.
* mini-exceptions.c: Add a set of functions to query the various
runtime-generated exception functions.
* mini.c mini-exceptions.c: Use the newly added functions instead of the
mono_arch_.. () functions.
2008-07-07 Zoltan Varga <>
* mini-trampolines.c (mono_aot_get_trampoline_code): Removed, no longer used.
* aot-runtime.c aot-compiler.c: AOT the generic trampolines in aot-only mode.
* mini.c (mini_get_imt_trampoline): Call mono_create_specific_trampoline ().
(mini_get_vtable_trampoline): Ditto.
* tramp-amd64.c (mono_arch_create_trampoline_code_full): Create relocatable
code in the AOT case by returning the code size and a list of relocations to
the caller.
* mini-trampolines.c (mono_create_specific_trampoline): New helper function.
2008-07-07 Bill Holmes <>
* mini-amd64.c: On Winx64 the calling convention always requires the caller to
clean the stack.
Contributed under MIT/X11 license.
2008-07-07 Zoltan Varga <>
* aot-compiler.c (emit_exception_debug_info): Serialize the debug info first
so the buffer size can be computed correctly. Fixes #404735.
* debug-mini.c (mono_debug_serialize_debug_info): Lookup the debug info
normally as cfg->debug_info is already freed.
2008-07-06 Zoltan Varga <>
* mini-amd64.c: For calls returning vtypes in registers, don't store
the return address on the stack, instead allocate a separate local for
it. Fixes #404729.
2008-07-05 Mark Probst <>
* mini-trampolines.c, mini.h: Add an argument to
mono_create_jit_trampoline_in_domain() for turning off the adding
of the sync wrapper.
* mini.c: Use the JIT trampoline without sync instead of
ldftn_nosync in static RGCTX invoke wrappers so that the call can
be patched.
2008-07-04 Mark Probst <>
* driver.c: Turn on GSHARED optimization by default.
2008-07-04 Zoltan Varga <>
* mini-trampolines.c mini.c mini.h tramp-<ARCH>.c: Rename MONO_TRAMPOLINE_GENERIC
to MONO_TRAMPOLINE_JIT since it better reflects what it does.
* mini-trampolines.c (mono_get_aot_trampoline_code): New internal function to
create a variant of the generic trampoline code callable from AOTed trampolines.
* tramp-amd64.c (mono_arch_create_trampoline_code_full): Add support for generic
trampoline code callable from AOTed trampolines.
* aot-compiler.c aot-runtime.c: Add support for AOTing trampolines.
2008-07-04 Mark Probst <>
* inssel.brg, mini-ops.h: New opcode for doing CHECK_THIS in a
pass-through manner.
* mini.c: Generic method sharing. Pass MRGCTX to generic methods
and don't fail sharing for them anymore.
* mini-exceptions.c: Handle exceptions in shared generic methods.
* generic-sharing.c: When checking the context of a generic
method, also check its class's context. Don't treat wrappers as
* mini-trampolines.c: Some code factored out to
metadata/generic-sharing.c. Handle the MRGCTX case.
* jit-icalls.c, jit-icalls.h: ldvirtfn icall for generic sharing -
we must deal with the method being of another instantiation of the
class. Add static rgctx invoke wrappers to generic methods.
2008-07-04 Mark Probst <>
* mini.c: Provide all jit infos of generic shared methods with a
generic jit info.
* mini-exceptions.c: Handle the new situation that a generic info
might be available, but not info about the this/vtable/mrgctx
2008-07-03 Mark Probst <>
* mini.c: Don't accept ldftn and ldvirtftn with uninstantiated
generic methods.
2008-07-03 Zoltan Varga <>
* dominators.c (check_dominance_frontier): Fix a warning.
* mini.h: Add some missing prototypes.
* ssa.c local-propagation.c debug-debuger.c: Fix warnings.
* driver.c (mono_jit_init_version): Correct the comments since the first
argument should be the name of the root domain, not a filename.
* aot-runtime.c (make_writable): Error out if this is called while running
with --aot-only.
(load_aot_module): Ditto.
* aot-compiler.c: Really fix the computation of method indexes.
* mini-amd64.c (mono_arch_get_delegate_invoke_impl): Remove the previous
optimizations as this is no longer called frequently.
* mini-trampolines.c (mono_create_delegate_trampoline): Precompute the invoke
method and the invoke impl code and pass it to the delegate trampoline instead of
just the delegate class.
2008-07-02 Zoltan Varga <>
* aot-compiler.c: Fixup the computation of method indexes.
(add_wrappers): Create the base methods of the runtime invoke wrappers using
the method builder infrastructure.
* aot-runtime.c (decode_exception_debug_info): Don't crash if the method
has no header.
* mini-trampolines.c (mono_create_jit_trampoline_in_domain): In aot-only
mode, load the method right away instead of creating a trampoline.
* mini-x86.c (mono_arch_get_delegate_invoke_impl): Eliminate locking.
* mini-amd64.c (mono_arch_get_delegate_invoke_impl): Eliminate locking, speed up
some checks a bit.
2008-07-01 Zoltan Varga <>
* aot-runtime.c (decode_patch_info): Don't create trampolines in aot_only mode.
(mono_aot_load_method): Use method_index instead of method->token.
* mini.c (mono_jit_compile_method_inner): Move the aot_only check down, so it
can handle icalls etc. properly.
* mini.h (MONO_AOT_FILE_VERSION): Bump AOT file format version.
* aot-compiler.c aot-runtime.c: Allow AOTing many wrapper types.
* mini.c (mono_resolve_patch_target): Handle JIT_ICALL_ADDR.
(mono_codegen): Convert calls made by JIT icall wrappers to the icalls into
JIT_ICALL_ADDR patch type.
* patch-info.h: Add JIT_ICALL_ADDR patch type.
* mini.c (mono_method_to_ir): Allow AOTing methods which access the interruption
request flag.
(mono_resolve_patch_target): Handle INTERRUPTION_REQUEST_FLAG.
2008-06-30 Zoltan Varga <>
* mini.c: Use domain->jit_code_hash_lock for controlling access to
2008-06-29 Zoltan Varga <>
* mini.c (mini_parse_debug_options): Add 'dont-free-domains' option.
2008-06-27 Zoltan Varga <>
* mini-trampolines.c (mono_delegate_trampoline): Don't pass a gsctx to
get_this_arg_from_call, let it compute it when needed.
* mini-amd64.c (mono_arch_get_this_arg_reg): Add a 'code' argument, compute
gsctx from code only when needed.
* mini-trampolines.c (get_generic_context): Rename this to
mono_get_generic_context_from_code (), and move it to generic-sharing.c, where
it can be called by the arch backends.
* mini-exceptions.c (mono_print_thread_dump): Allow the argument to be NULL.
2008-06-26 Zoltan Varga <>
* driver.c (mono_main): Add experimental --aot-only command line option.
* mini.c: Error out when creating trampolines or JIT compiling if --aot-only is
2008-06-26 Kornél Pál <>
* driver.c (DllMain): Remove mono_module_handle.
Contributed under MIT/X11 license.
2008-06-25 Zoltan Varga <>
* aot-compiler.c: Add not-yet-usable 'full' option. Add some infrastructure code
for emitting methods which are not in the source assembly. Detect and report
failure of assembling+linking.
* aot-compiler.c (emit_klass_info): Call mono_class_setup_vtable ().
* aot-compiler.c: Move the contents of the has_glot_slots array to MonoCompile.
2008-06-24 Rodrigo Kumpera <>
* mini.c: Check if stats is enabled so we don't allocate memory when not needed.
2008-06-24 Zoltan Varga <>
* mini.h: Remove some obsolete prototypes.
* mini.c: Avoid storing MonoMethod pointers in the JIT stats, store their string format instead.
2008-06-24 Mark Probst <>
* mini.c (get_object_generic_inst): Variable-sized arrays are not
supported by Visual Studio, so use alloca().
2008-06-23 Zoltan Varga <>
* mini-ia64.c (add_valuetype): Increase *gr too when passing a HFA to be in sync with the ABi.
Fixes #402585.
2008-06-23 Mark Probst <>
* mini.c: Fail sharing of a generic method if it contains an open
catch clause (because we don't pass MRGCTXs yet).
2008-06-23 Mark Probst <>
* mini.c: When compiling a method with generic sharing, insert the
method instantiated with an all-Object generic context into the
jit info table, instead of the context of the first instantiation
of the method we happen to compile.
2008-06-18 Martin Baulig <>
* debug-debugger.h (MonoDebuggerInfo): Replaced `version' with
`major_version' and `minor_version'.
2008-06-17 Mark Probst <>
* generic-sharing.c, mini.c, mini.h, aot-runtime.c:
mono_method_is_generic_sharable_impl() takes an additional
argument specifying whether to treat type variables as reference
2008-06-17 Mark Probst <>
* mini.h: Removed obsolete prototypes.
2008-06-17 Mark Probst <>
* mini.c: Don't fail generic sharing for initobj and sizeof - we
already handle them.
2008-06-17 Mark Probst <>
* mini.h, mini-trampolines.c, tramp-alpha.c, tramp-amd64.c,
tramp-arm.c, tramp-hppa.c, tramp-ia64.c, tramp-mips.c,
tramp-ppc.c, tramp-s390.c, tramp-s390x.c, tramp-sparc.c,
tramp-x86.c: Added a MonoGenericContext* argument to
mono_arch_get_unbox_trampoline() so that it can call other
functions which require it.
2008-06-17 Mark Probst <>
* mini.h, mini-trampolines.c, mini-amd64.c, mini-x86.c,
mini-alpha.c, mini-arm.c, mini-ia64.c, mini-ppc.c:
mono_arch_get_this_arg_from_call() takes a
MonoGenericSharingContext* as well.
2008-06-17 Mark Probst <>
* mini.c: Factor out code for emitting unbox into emit_unbox() and
implement generic sharing of unbox.
2008-06-17 Mark Probst <>
* mini.c: Don't compute the vtable to determine whether a field is
special static, because it might not work for open types.
2008-06-17 Mark Probst <>
* mini.c: Removed the unused token_type and token_source arguments
from get_runtime_generic_context_ptr().
2008-06-17 Marek Habersack <>
* mini.c (ADD_BINOP): fix the build
2008-06-16 Zoltan Varga <>
* mini.c (ADD_BINOP): When operating on a native int and an int32, insert
a widening op.
2008-06-16 Mark Probst <>
* mini.h: Removed class relations enum that's not used anymore.
2008-06-16 Mark Probst <>
* tramp-x86.c, tramp-amd64.c: Slot access code for MRGCTXs.
* mini-trampolines.c: Distinguish between RGCTXs and MRGCTXs in
the lazy fetch trampoline access code.
2008-06-15 Zoltan Varga <>
* mini-codegen.c (mono_local_regalloc): Add some micro optimizations.
2008-06-14 Zoltan Varga <>
* mini.c: Fix some soft-float bugs. Fixes #378735 and #398348.
* mini.h (MONO_INST_LIST_ENTRY): Fix warnings on arm.
* mini.c (mono_method_to_ir): Check call signature for NEWOBJ as well.
2008-06-13 Zoltan Varga <>
* mini-x86.c inssel-x86.brg Implement unsigned min/max
* mini-ops.h: Add MIN/MAX_UN opcodes.
* mini-amd64.c inssel-amd64.brg Implement unsigned min/max
* basic-math.cs: Add more min/max tests.
* inssel.brg: Remove the OP_MIN/OP_MAX rules. Fix a warning.
2008-06-13 Mark Probst <>
* mini.c: Small fix in the prologue of emit_castclass.
2008-06-13 Zoltan Varga <>
* inssel.brg: Remove the OP_MIN/OP_MAX rules. Fix a warning.
* mini.c (mini_get_inst_for_method): Remove the Min/Max intrinsics, they
do not work even for unsigned types. Fixes #400014.
* basic-math.cs: Add regression tests for unsigned Min/Max.
2008-06-13 Mark Probst <>
* mini.c: Added additional context_used argument to several
functions, which will be needed for sharing generic methods. Use
GET_RGCTX macro wherever appropriate. Declare only one
context_used in mono_method_to_ir().
2008-06-13 Mark Probst <>
* mini.c, generic-sharing.c: Removed generic class relations.
* mini.c, tramp-amd64.c, tramp-x86.c: Additional arguments to
functions due to MRGCTX changes.
2008-06-13 Mark Probst <>
* inssel.brg, inssel-long.brg, inssel-long32.brg, mini-ops.h,
graph.c, local-propagation.c, aliasing.c: New opcodes for calls
with calculated IMT.
* mini.c: Generic sharing of calls via generic interfaces.
* jit-icalls.c, jit-icalls.h: Helper function for compiling a
generic method with non-constant MonoGenericContext*. Instead,
the context is taken out of the method itself.
2008-06-13 Mark Probst <>
* mini.c: Generic sharing of ldvirtftn.
2008-06-13 Mark Probst <>
* mini.c: Generic sharing of ldftn.
2008-06-13 Mark Probst <>
* mini.c: Do pass VTable/RGCTX argument to static generic methods.
2008-06-13 Mark Probst <>
* mini.c: Generic sharing of the special case of ldtoken followed
by a call to GetTypeFromHandle.
2008-06-13 Mark Probst <>
* mini.c: Generic sharing of box for nullable types.
2008-06-13 Zoltan Varga <>
* mini-s390x.c (add_stackParm): Fix computation of offsets when arguments
are passed on the stack. Fixes #324807.
2008-06-12 Bill Holmes <>
* mini-amd64.c:add_valuetype: Adding Winx64 code to fill the ArgInfo
for the ArgValuetypeAddrInIReg case.
* mini-amd64.c:mono_arch_allocate_vars: Adding a case for
ArgValuetypeAddrInIReg to avoid asserts. Code needs to be added here.
* mini-amd64.c: mono_arch_call_opcode: Adding Winx64 code for an ArgInfo of
type ArgValuetypeAddrInIReg. The code emitted will copy the argument to a
local variable and pass the local variable by reference to the called method.
* mini-amd64.c: mono_arch_emit_prolog: Adjust the stack for calls to
mono_jit_thread_attach and mono_get_lmf_addr for Winx64.
Contributed under MIT/X11 license.
2008-06-10 Rodrigo Kumpera <>
* debug-mini.c (mono_debug_free_method_jit_info): Moved to metadata/mono-debug.c.
* debug-mini.c (mono_debug_print_vars): Release memory after printing
2008-06-10 Martin Baulig <>
* debug-mini.c
(mono_debug_close_method): Check whether `cfg->epilogue_begin != NULL'.
2008-06-09 Kornél Pál <>
* main.c: Add and set argv [argc] to NULL to match C specification that fixes
possible error when no arguments are passed.
Contributed under MIT/X11 license.
2008-06-09 Rodrigo Kumpera <>
* mini-exceptions.c (ves_icall_get_trace): Skip source locations
where the file name is NULL.
2008-06-09 Zoltan Varga <>
* mini.c: Fix s390 build.
2008-06-08 Zoltan Varga <>
* trace.c (mono_trace_parse_options): Fix warnings.
* mini-amd64.c: Revert most of the last patch for now as it breaks the build.
2008-06-07 Zoltan Varga <>
* mini.c (remove_block_if_useless): Avoid printing the method name.
* mini.c: Remove needless setting of ins->cil_code which is now done by
* mini-amd64.c: Add some code to avoid saving callee saved registers in the
LMF. Not yet used.
* tramp-amd64.c (mono_arch_patch_callsite): Tell valgrind to discard the
translated code after it has been patched.
2008-06-06 Zoltan Varga <>
* mini-amd64.c (emit_call_body): Align the call displacement to 4 bytes to
avoid problems during code patching on SMP systems.
(emit_call): Avoid adding a patch info which is already added by
(mono_arch_emit_exceptions): Ditto.
2008-06-05 Zoltan Varga <>
* tramp-*.c (mono_arch_get_unbox_trampoline): No need to check for ret->byref,
MONO_TYPE_ISSTRUCT already checks for it.
2008-06-05 Bill Holmes <>
* mini-amd64.c:merge_argument_class_from_type: When marshaling
structs with floats on Winx64 the float registers are not used.
The integer registers are always used..
* mini-amd64.c:add_valuetype: When marshaling structs on Winx64
only one register will be used and only if the size of the struct
is 1,2,4, or 8 bytes.
* tramp-amd64.c : Adjusting size used for mono_global_codeman_reserve
to work for Winx64.
Contributed under MIT/X11 license.
2008-06-05 Martin Baulig <>
* debug-debugger.c (debugger_lookup_class): Also call
mono_class_setup_methods() here; we're only called from RTI.
2008-06-05 Andreas Färber <>
* mini.c (mini_init): Add DTrace probes ves-init-{begin,end}.
(mini_method_compile) Add DTrace probes method-compile-{begin,end}.
* (libmono_la_LIBADD,libmono_static_la_LIBADD,mono_LDADD):
Post-process object files and add dtrace-generated object, if necessary.
Contributed under MIT/X11 license.
2008-06-04 Mark Probst <>
* inssel.brg, mini-ops.h: Added opcode for unboxcast with computed
element class.
* mini.c: Generic sharing for unbox.any and castclass.
2008-06-04 Mark Probst <>
* mini.c: Ignore tailcall prefix in shared generic code and when
doing calls which require a vtable/rgctx argument.
2008-06-04 Mark Probst <>
* mini.c: Don't free the JIT info.
* driver.c: Changes in the JIT info table testing code.
2008-06-03 Zoltan Varga <>
* tramp-arm.c (mono_arch_create_trampoline_code): Check for thread
interruption. Fix some warnings.
* tramp-*.c (mono_arch_create_trampoline_code): Call the _force_ variant of
Tue Jun 3 13:07:03 CEST 2008 Paolo Molaro <>
* jit.h, mini.h, trace.c, driver.c: introduce an API to enable tracing
from embedding applications.
2008-06-02 William Holmes <>
* mini-amd64.c : Correcting some of the issues for Winx64 dealing with
reserving 32 bytes on the stack when making calls.
Contributed under MIT/X11 license.
2008-06-01 Zoltan Varga <>
* mini-arm.c (mono_arch_output_basic_block): Merge some small fixes from
the linear IL branch.
* driver.c: Print out more information for --version on arm.
2008-05-30 Zoltan Varga <>
* mini-amd64.c (mono_arch_emit_prolog): Increase max_offset when processing
bb_exit instead, since out of line bblocks might not actually be emitted
* mini-amd64.c (mono_arch_emit_prolog): Increase bb->max_offset by the
maximum epilog size for out of line bblocks if tracing is enabled.
* Merge tests/ into this file.
2008-05-28 Rodrigo Kumpera <>
* arrays.cs: Regression tests for allocating arrays with negative sizes.
2008-05-28 Zoltan Varga <>
* mini-x86.h mini-x86.c inssel-x86.brg Add support for
CAS instrinsics. Optimize the implementation of the ATOMIC_EXCHANGE
2008-05-27 Zoltan Varga <>
* mini.c (mini_get_inst_for_method): Add support for CAS instrinsics when
the 'value' to store is a constant.
* mini-ops.h: Add OP_ATOMIC_CAS_IMM opcodes.
* mini-amd64.c (mono_arch_output_basic_block): Optimize the the implementation
of ATOMIC_EXCHANGE opcodes, add support for the CAS opcodes.
2008-05-26 Zoltan Varga <>
* mini.c generic-sharing.c jit-icalls.c aot-compiler.c: Use accessor functions
for accessing method->generic_container.
2008-05-24 Zoltan Varga <>
* mini.c (mono_method_check_inlining): Avoid creating vtables if possible.
* mini.c (SIG_HANDLER_SIGNATURE): Fix sparc build too.
* mini.c (SIG_HANDLER_SIGNATURE): Fix IA64 build.
* mini.c (mono_jit_compile_method_inner): Avoid a crash if mono_class_vtable ()
2008-05-23 Zoltan Varga <>
* driver.c (mono_main): Set mono_setup_vtable_in_class_init to FALSE.
* mini.c: Handle the case when mono_class_vtable () fails.
2008-05-23 Massimiliano Mantione <>
* mini.c (sigprof_signal_handler): Support call chains (backtrace) in
the stat profiler.
2008-05-22 Mark Probst <>
* mini.c, jit-icalls.c, jit-icalls.h: Make generic sharing work
together with domain sharing.
2008-05-22 Mark Probst <>
* mini.c: Treat callvirts to final methods like non-virtual calls
when doing generic sharing, i.e. look them up in the runtime
generic context.
2008-05-22 Mark Probst <>
* inssel.brg, mini-ops.h: Added opcodes for mkrefany and refanyval
with computed types (for generic sharing).
* mini.c: Generic sharing for mkrefany and refanyval.
2008-05-22 Zoltan Varga <>
* inssel.brg (mini_emit_virtual_call): Avoid constructing a generic vtable if
* mini-trampolines.c (mono_magic_trampoline): Avoid calling setup_methods () in
the generic sharing code.
* mini-trampolines.c (mono_magic_trampoline): Call mono_class_setup_methods ()
when needed.
2008-05-21 Zoltan Varga <>
* mini.h: Remove the declaration of mono_aot_init_vtable ().
2008-05-21 C.J. Adams-collier <>
* driver.c: updated copyright date
2008-05-21 Zoltan Varga <>
* aot-runtime.c mini.c: Remove the AOT init_vtable stuff as it is no longer
2008-05-19 Martin Baulig <>
* debug-debugger.h (MonoDebuggerInfo): Add `using_mono_debugger'
pointing to the new `_mono_debug_using_mono_debugger' variable.
* driver.c
(mono_main): Check mono_debug_using_mono_debugger() rather than
the `MONO_INSIDE_MDB' environment variable to check whether we're
inside the debugger.
2008-05-19 Zoltan Varga <>
* mini.c (mini_method_compile): Use cfg->args [0] for accessing the this
2008-05-08 Rodrigo Kumpera <>
* declsec.h: Move MONO_SECMAN_FLAG to metadata/metadata-internals.h.
* mini.c: Added mini_assembly_can_skip_verification. This
function checks if the assembly requested to skip verification.
Fixes part of #387274.
2008-05-07 Zoltan Varga <>
* mini.c (mini_get_method): Disable the check for open generic classes when
using generic sharing.
* generics.cs: Add a test #387034.
* mini.c (mini_get_method): Check whenever the method class is an open generic
type, and return NULL in that case, causing a verification error. Fixes
2008-05-06 Rodrigo Kumpera <>
* driver.c (mono_main): Revert r102623. The right
thing to do is to enable the verifier under verifiable
unless a --security flag was passed.
We need this non-trivial behavior for --verify-all otherwise
mcs-compileall won't be able to use it. As it needs everything to
be verified under validil.
2008-05-06 Martin Baulig <>
Fix #383749.
* debug-mini.c (mono_debugger_thread_created): Add proper locking.
(mono_debugger_thread_cleanup): Likewise.
(mono_debugger_extended_notification): Likewise.
2008-05-06 Rodrigo Kumpera <>
* mini.c (mono_method_to_ir): Verify visibility of call related opcodes
against both inflated and non-inflated methods. We need to check against the
generic definition for cases where the instantiated method is not visible.
We need to check against the inflated types for cases where the instantiation
changes any super type. This fixes #382986.
Note that this doesn't need to be applied to other parts of mono_method_to_ir
that check for visibiliy as generic params only appears as the type subject
of tokens on call opcodes. Field manipulation and ldftn must always
target an exact type.
2008-05-06 Rodrigo Kumpera <>
* driver.c (mono_main): Using --verify-all enables the verifier under validil mode
if no related --security flag is passed.
2008-05-05 Andreas Färber <>
* mini-arch.h: Prepare support for ppc64.
Contributed under MIT/X11 license.
2008-05-05 Andreas Färber <>
* aot-runtime.c: Prepare support for ppc64.
Contributed under MIT/X11 license.
2008-05-05 Andreas Färber <>
* mini-ops.h: Prepare support for ppc64.
Contributed under MIT/X11 license.
2008-05-04 Andreas Färber <>
* helpers.c: Add support for OSX/ppc64 and Linux/ppc64 (dis)assemblers.
Contributed under MIT/X11 license.
2008-05-03 Zoltan Varga <>
* aot-runtime.c (load_aot_module): Avoid trying to load aot code for dynamic
assemblies, since aot_name is not a full path, causing us to load MS.NET
assemblies on windows.
2008-04-28 Kornél Pál <>
* mini.c (mono_jit_compile_method_inner): Use g_warning instead of g_error
* main.c: Use UTF-8 encoded command line instead of Windows default code
page on Windows to support Unicode.
* driver.c (DllMain): New function for mixed-mode assembly support.
* Add -Wl,--kill-at to libmono_la_LDFLAGS on Windows to
export __stdcall functions without decoration.
Contributed under MIT/X11 license.
2008-04-28 Mark Probst <>
* tramp-amd64.c, mini-amd64.c: Preserve R11 in the trampoline by
saving it very early.
2008-04-28 Mark Probst <>
* mini.h, mini.c: Lots of code for accessing the old RGCTX
deleted. The only way to access the new RGCTX is via the
* mini.c, mini-amd64, mini-x86.c, mini-exceptions.c: Pass the
vtable instead of the RGCTX to static methods.
* mini-tramplines.c, tramp-amd64.c, tramp-x86.c: Trampoline for
accessing the new RGCTX.
* generic-sharing.c: There is no separation between self, type
arguments and other types in the RGCTX anymore.
2008-04-25 Jonathan Chambers <>
* mini-amd64.c (add_general): Remove previous stack adjustment.
(mono_arch_call_opcode): Remove OP_OUTARG_MEMBASE and instead simply
adjust stack pointer after pushing args. Adjust ARGS_OFFSET to account
for 32 bytes of stack space reserved for all calls.
* inssel-amd64.brg (OP_OUTARG_MEMBASE): Remove.
(OP_AMD64_OUTARG_ALIGN_STACK): Take argument to specify size of stack
Code contributed under MIT/X11 license.
2008-04-23 Rodrigo Kumpera <>
* mini.c (mini_method_verify): Only verify non-inflated methods, check
against the root definition, peeling out method and type instantiations.
Cache verify success results, code that fails verification is still
checked multiple times.
2008-04-23 Zoltan Varga <>
* mini.c (mono_method_to_ir): Avoid inserting write barriers for stores of null.
2008-04-23 Jonathan Chambers <>
* mini-amd64.c (add_general): Always increment stack on Win64.
(mono_arch_call_opcode): Use OP_OUTARG_MEMBASE instead of OP_OUTARG
on Win64.
* inssel-amd64.brg (OP_OUTARG_MEMBASE): Add OP_OUTARG_MEMBASE for
stack based argument handling on Win64.
Code contributed under MIT/X11 license.
2008-04-23 Raja R Harinath <>
* (version.h): Add support for git-svn.
2008-04-22 Zoltan Varga <>
* mini-exceptions.c (mono_handle_native_sigsegv): Rework the gdb calling code
so instead of calling g_spawn_command_line_sync, we do everything by hand,
avoiding allocations and libc functions which might deadlock.
* mini-exceptions.c (mono_handle_native_sigsegv): Avoid calling gdb if the
'no-gdb-backtrace' option is set.
* mini.c (mini_parse_debug_options): Parse 'no-gdb-backtrace' option.
* mini.h (MonoDebugOptions): Add 'no_gdb_backtrace' option.
2008-04-21 Martin Baulig <>
* debug-debugger.h (MonoDebuggerInfo): Removed `attach', `detach'
and `get_lmf_addr'; `notification_address' is no longer a pointer.
2008-04-21 Martin Baulig <>
* debug-debugger.h (MonoDebuggerInfo): Added `thread_vtable_ptr',
`thread_vtable', `event_handler_ptr' and `event_handler'.
2008-04-21 Martin Baulig <>
* debug-debugger.h (MonoDebuggerInfo): Added `init_code_buffer';
allows delayed initialization of the `executable_code_buffer' when
2008-04-21 Martin Baulig <>
* mini.h (mono_debugger_create_notification_function): Removed.
* tramp-*.c (mono_debugger_create_notification_function): Removed.
* mdb-debug-info64.s
(MONO_DEBUGGER__notification_function): Added this in the .text section.
* mdb-debug-info32.s
(MONO_DEBUGGER__notification_function): Added this in the .text section.
* Fix the mdb-debug-info*.s logic; the debugger
currently only works on x86 and x86_64, so don't create it on ppc.
2008-04-21 Martin Baulig <>
* mini.h (MonoDebugOptions): Added `mdb_optimizations'.
* mini.c
(mini_method_compile): In the fp elimination check, check
`debug_options.mdb_optimizations' in addition to
* driver.c (mono_main): Added `--debug=mdb-optimizations' option to
disable some JIT optimizations which are only disabled when
running inside the debugger.
Added `--help-debug' option to describe the debugging options.
(parse_debug_options): New static function to parse the `--debug'
options, so we can easily add more stuff in future.
2008-04-20 Zoltan Varga <>
* mini.c (set_exception_type_from_invalid_il): Avoid reading invalid memory when
the method has no body.
2008-04-19 Jonathan Chambers <>
* mini-amd64.c (cpuid): Implement with MSVC intrinsic as inline
assembly is not allowed in MSVC 64-bit compiler.
(mono_arch_cpu_init): Don't set floating point precision on MSVC build
as we get floating point exceptions everywhere.
* exceptions-amd64.c (get_throw_trampoline): Push empty args on stack to
correctly align arguments for call to throw_exception.
(prepare_for_guard_pages): Cast to guint64 instead of unsigned long.
Code contributed under MIT/X11 license.
2008-04-19 Zoltan Varga <>
* mini-amd64.c (amd64_patch): Make the check for (%rip) addressing more strict.
2008-04-17 Zoltan Varga <>
* inssel.brg (OP_SWITCH): Use (gint64) instead of (long) to cast a large constant.
* mini-amd64.c (NEW_INS): Set cil_code.
* mini.c (mini_method_compile): Move the disabling of fp elimination to here
from mini-amd64.c so all debugger related logic is in one place.
* mini.c: Set cfg->ip to NULL after passes which set it so instructions created
later won't have a random ip assigned to them.
2008-04-16 Zoltan Varga <>
* mini-trampolines.c (mono_create_jump_trampoline): Add an assert to check that
the arch specific function initializes code_size.
(mono_create_delegate_trampoline): Ditto.
* mini-mips.h mini-mips.c inssel-mips.brg inssel-long32-mips.brg
tramp-mips.c: Resurrect MIPS port and also fix the issues on little-endian
* liveness.c (mono_analyze_liveness): Disable the initlocals optimization if
running under the debugger.
* linear-scan.c (mono_linear_scan): Avoid sharing registers if running under the
* mini.c (mini_method_compile): Set a few flags in cfg if running under the
debugger. Also move the disabling of optimizations here from driver.c.
(mono_allocate_stack_slots_full): Avoid sharing stack slots if running under the
* mini.h (MonoCompile): Add a few new flags.
2008-04-15 Zoltan Varga <>
* mini.c (mono_method_to_ir): Set cfg->ip before processing an IL instruction
so the cil_code field of created MonoInst's is properly set.
(mini_select_instructions): Ditto.
* mini.h (MONO_INST_NEW): Initialize the cil_code field using cfg->ip.
* mini.c inssel.brg inssel-x86.brg inssel-amd64.brg: Use MONO_INST_NEW ()
in many places so the ins->cil_code field is properly initialized.
* mini.c (mono_bblock_add_inst): Call MONO_ADD_INS () so the logic is in one
2008-04-14 Zoltan Varga <>
* mini.c (mini_method_compile): Print a different message when compiling a
shared method.
* mini.c (GENERIC_SHARING_FAILURE): Print a failure message when verbose_level
> 1.
2008-04-11 Zoltan Varga <>
* mini-amd64.c (mono_arch_output_basic_block): Implement OP_ABS directly using
SSE2 instructions.
* basic-math.cs: Fix warnings. Add a test for Math.Abs ().
2008-04-11 Zoltan Varga <>
* mini.c (handle_stack_args): Make this return void since its return value was
never used. Also set cfg->unverifiable for invalid IL instead of calling
2008-04-10 Mark Probst <>
* mini.c: Make sure "this" is live in catch clauses with type
variables in shared generic code.
2008-04-08 Mark Probst <>
* mini.c: Replaced uses of MONO_TYPE_IS_REFERENCE with calls to
generic_class_is_reference_type() to ensure the proper behaviour
when sharing generic code and the type in question is a type
2008-04-08 Zoltan Varga <>
* mini-exceptions.c: Applied patch from Mark Spruiell ( Fix
race conditions when printing thread dumps. Fixes #377738.
2008-04-08 Massimiliano Mantione <>
aliasing.c (update_aliasing_information_on_inst): Fixed a bug which
shows up when both MonoInst arguments can cause aliasig.
There is likely no way in the current JIT to trigger this problem, but
it showed up in the development of generics sharing, when in a new
opcode both args of an OP_GROUP can be aliases (addresses of a local).
When the generics sharing code will be committed, its tests will be
valid also for this bug.
2008-04-08 Zoltan Varga <>
* aot-runtime.c (decode_patch_info): Always transform PATCH_INFO_WRAPPER to
* mini.c (mono_resolve_patch_target): Fix a crash in the AOT case if method is
2008-04-07 Zoltan Varga <>
* mini-exceptions.c (mono_handle_exception_internal): When --debug=casts is used,
use a more detailed exception message for InvalidCastException.
* mini.h (MonoJitTlsData): Add 'class_cast_from' and 'class_cast_to' fields.
* driver.c (mono_main): Add --debug=casts option to turn on better
InvalidCastException message details.
* mini.c (mini_get_debug_options): New helper function to return the address of
the debug_options variable.
* mini.c (mono_get_jit_tls_intrinsic): New helper function to create a load of
the jit_tls TLS variable.
* mini.c (mono_jit_tls): New TLS variable.
* inssel.brg: Save the details of a cast to a TLS variable when the --debug=casts
option is used.
2008-04-07 Rodrigo Kumpera <>
* mini.h: Removed verifer related stuff. This code was moved to verify.c
* mini.c: Removed verifer related stuff, code moved to verify.c.
* driver.c: Using code from verify.c instead of mini.c.
2008-04-05 Zoltan Varga <>
* mini.c (check_for_method_verify): Remove the mscorlib comment since it is no
longer valid.
2008-04-04 Rodrigo Kumpera <>
* mini.c (check_for_method_verify): Enabling verification of
corlib if mono_verify_all is set. Bugs in the verifier preventing that
have been fixed.
2008-04-04 Zoltan Varga <>
* exceptions-amd64.c (throw_exception): Unify the win32/non-win32 cases, save
caller saved registers as well.
* exceptions-amd64.c (mono_arch_get_restore_context): Restore most caller
saved registers as well.
2008-03-30 Zoltan Varga <>
* mini-x86.c inssel-x86.brg: Add min/max intrinsics.
* mini-amd64.c mini-amd64.h Get rid of the non-SSE2 floating point
2008-03-27 Zoltan Varga <>
* mini-amd64.c (mono_arch_get_this_arg_reg): Add a 'gsctx' argument and pass it
to get_call_info.
(get_call_info): Take a gsctx argument instead of 'cfg'.
2008-03-26 Zoltan Varga <>
* mini.c (check_for_method_verify): Avoid verifying mscorlib methods even if
mono_verify_all is set.
* driver.c (compile_all_methods_thread_main): Don't exit at the first error.
* mini.c mini.h: Remove the unused and incomplete stack merge verification code.
2008-03-25 Zoltan Varga <>
* driver.c (compile_all_methods_thread_main): Error out if compilation fails with
an exception.
* driver.c mini.c mini.h: Add a --verify-all development option to test the
verifier and the code generated by the compiler.
2008-03-25 Mark Probst <>
* mini.c: Generic sharing of the non-nullable case of the box
2008-03-24 Zoltan Varga <>
* inssel.brg: Fix the build.
* Add a test for lconv.ovf.u8.un.
2008-03-24 Rodrigo Kumpera <>
* mini.c (mono_method_to_ir): Implement readonly for ldelema and
Array:Address. Fixes #372410.
* New tests for readonly prefix.
2008-03-23 Zoltan Varga <>
* mini.h mini.c mini-trampolines.c: Move trampoline related code to
* mini.h mini.c mini-exceptions.c: Move mini_init_exceptions () to
* mini-amd64.c mini-s390.c (mono_arch_lowering_pass): Use mono_decompose_op_imm ().
* mini.c (mono_decompose_op_imm): New helper function.
* mini-s390x.c (calculate_sizes): Rename this to get_call_info for consistency
with the other architectures, add an 'mp' argument, fold 'sz' argument into the
return value.
* mini-s390x.c: Handle DIV_IMM/REM_IMM in the lowering pass instead of in
mono_arch_output_basic_block. Fix warnings.
* inssel-s390x.brg: Remove the unneccesary OP_LMUL_IMM rule to fix the s390x build
for now.
2008-03-22 Zoltan Varga <>
* mini-exceptions.c (ves_icall_get_frame_info): Remove the ia64/s390 workarounds
since the extra frame is now detected automatically inside the loop.
* mini-s390.c (mono_arch_peephole_pass_2): Remove the arch independent peephole
opts which are now in mono_peephole_ins ().
* mini-s390.c (mono_arch_output_basic_block): Fix OP_FCALL_MEMBASE.
* mini-exceptions.c (ves_icall_get_frame_info): Skip native-to-managed wrapper
frames and skip duplicate managed-to-native frames. Fixes #367665.
* mini-x86.c (mono_arch_peephole_pass_1): Remove the arch independent peephole
opts which are now in mono_peephole_ins ().
(mono_arch_peephole_pass_2): Ditto.
* mini-codegen.c (mono_peephole_ins): Fix a problem on 32 bit platforms.
* mini-codegen.c (mono_peephole_ins): New helper function containing the
arch independent peephole optimizations.
* mini-amd64.c (mono_arch_peephole_pass_1): Remove the arch independent peephole
opts which are now in mono_peephole_ins ().
* mini-amd64.c (mono_arch_peephole_pass_2): Ditto.
* mini-s390.c (mono_arch_output_basic_block): Fix build.
* tramp-s390.c (mono_arch_get_vcall_slot): Handle an additional instruction
* mini-s390.c (mono_arch_output_basic_block): Handle big offsets in the
CALL_MEMBASE opcodes. Fix setting of the destination in the OP_LCONV_TO_OVF_I
2008-03-21 Zoltan Varga <>
* mini-s390.c (calculate_sizes): Rename this to get_call_info for consistency
with the other architectures, add an 'mp' argument, fold 'sz' argument into the
return value.
* mini-s390.c: Handle DIV_IMM/REM_IMM in the lowering pass instead of in
mono_arch_output_basic_block. Fix warnings.
2008-03-20 Zoltan Varga <>
* inssel-long32.brg: Add rules for long conv.ovf.i/conv.ovf.u/conv.ovf.i.un/
2008-03-20 Zoltan Varga <>
* inssel-long.brg: Add rules for long conv.ovf.i/conv.ovf.u/conv.ovf.i.un/
* Add new tests.
2008-03-20 Kornél Pál <>
* mini.c: Removed Windows version macros.
2008-03-20 Mark Probst <>
* generic-sharing.c: Put reflection types in the extensible part
of the runtime generic context.
* mini.c: Generic sharing of the GetTypeHandle special case of the
ldtoken instruction.
2008-03-20 Zoltan Varga <>
* mini.h (MONO_BB_FOR_EACH_INS_SAFE): New helper macro.
* mini-<ARCH>.c: Use the new macro instead in the peephole/lowering passes.
* mini.h (MONO_DEL_INS): Rename to MONO_DELETE_INS and Add a 'bb' argument for
consistency with the other version on the linear IR branch.
* mini-<ARCH>.c: Update callers of MONO_DEL_INS.
* inssel-long32.brg inssel-long.brg: Add rules for conv.ovf.i/conv.ovf.u.
* Add new tests.
2008-03-19 Zoltan Varga <>
* inssel-long32.brg inssel-long.brg: Add rules for conv.ovf.i.un/conv.ovf.u.un.
* Add new tests.
2008-03-19 Mark Probst <>
* mini.c: Two variables with the same name were declared in
nesting contexts and one wasn't initialized. Fixed.
2008-03-19 Mark Probst <>
* mini.c: Generic sharing of the initobj instruction.
Tue Mar 18 20:18:02 CET 2008 Paolo Molaro <>
* mini.c: make the test to optimize ldtoken from typeof() more
2008-03-18 Mark Probst <>
* mini.c: Generic sharing of the initobj instruction for reference
Tue Mar 18 12:39:27 CET 2008 Paolo Molaro <>
* mini.h, mini-amd64.c, mini-x86.c, tramp-amd64.c, tramp-x86.c: change
the mono_breakpoint_clean_code() code to perform bound checks.
Tue Mar 18 11:50:14 CET 2008 Paolo Molaro <>
* mini.h, mini-trampolines.c, tramp-*.c: change the signature of
mono_arch_patch_callsite() to include the start of the managed method
to be able to perform bound checks.
2008-03-17 Mark Probst <>
* mini.c: Generic sharing for the isinst instruction.
2008-03-17 Mark Probst <>
* mini-ops.h, inssel.brg, inssel-long.brg, inssel-long32.brg,
inssel-long32-mips.brg: Added opcodes for doing indirect calls
with the runtime generic context argument.
* mini.c: Share calls to several types of unsharable methods by
putting the address of the method code in the runtime generic
context and doing an indirect call.
* graph.c, local-propagation.c, aliasing.c: Added the new opcodes
to switches.
2008-03-16 Mark Probst <>
* generic-sharing.c: Change due to a change in the runtime genric
context API.
2008-03-15 Martin Baulig <>
* tramp-x86.c
(mono_arch_nullify_class_init_trampoline): Add call to
mono_breakpoint_clean_code() to make things work when running
inside the debugger.
* tramp-amd64.c
(mono_arch_nullify_class_init_trampoline): Add call to
mono_breakpoint_clean_code() to make things work when running
inside the debugger.
2008-03-14 Zoltan Varga <>
* inssel-long.brg (reg): Fix 64 bit build.
2008-03-14 Mark Probst <>
* mini.c, mini.h: Share static generic code by passing it an
implicit argument pointing to the runtime generic context.
* mini-ops.h, inssel.brg, inssel-long.brg, inssel-long32.brg,
inssel-long32-mips.brg: New opcodes for calling shared static,
which need to be passed the runtime generic context.
* mini-amd64.c, mini-x86.c: Save the runtime generic context
argument on the stack in the prologue if needed. New function for
finding the runtime generic context argument from the registers
saved by the trampoline.
* mini-amd64.h, mini-x86.h: Specify which register to use for the
runtime generic context argument.
* tramp-amd64.c: Also restore the register used for the runtime
generic context argument.
* mini-trampoline.c: Resolve shared static calls by consulting the
runtime generic context via the new argument.
* generic-sharing.c: Add an argument to sharability-checking
functions that specifies whether type variables should be treated
as sharable type arguments.
* inssel-x86.brg: Removed a superfluous, buggy rule.
* graph.c, local-propagation.c, aliasing.c: Added the new opcodes
to switches.
2008-03-14 Martin Baulig <>
* debug-debugger.c (main_thread_handler): Call
mono_runtime_run_main() without sending any notifications.
* debug-debugger.h (MonoDebuggerInfo): Added `get_method_signature.
2008-03-14 Zoltan Varga <>
* mini-trampolines.c (mono_magic_trampoline): Fix build on platforms without IMT.
2008-03-14 Mark Probst <>
* tramp-x86.c: Fixed register restore offsets in the trampoline
code for ECX and EDX.
2008-03-12 Geoff Norton <>
* mini-arm.h: Add some #defines for locating sp, pc, r4 with
different ucontext_t implementations.
* exceptions-arm.c: Use the above defines to get exceptions working on
iPhone (based on a patch by Luke Howard
* mini-arm.c: Implement iPhone icache support (based on a patch by
Luke Howard
2008-03-12 Mark Probst <>
* mini.c: Enable generic sharing of calls to non-static
non-interface non-generic non-value-type methods.
* mini-trampolines.c: Resolve calls from shared generic code.
2008-03-11 Zoltan Varga <>
* Delete il2tests, merge it into iltests.
* tramp-amd64.c (mono_arch_create_trampoline_code): Correctly save RBP as well.
Mon Mar 10 11:59:34 CET 2008 Paolo Molaro <>
* mini.c: some fixes for the AOT compiler.
2008-03-07 Zoltan Varga <>
* Add clob:1 to some float opcodes.
2008-03-07 Rodrigo Kumpera <>
* mini.h: Added MiniVerifierMode enumeration.
* mini.c: Added mini_verifier_set_mode to control
the usage of the new verifier.
* mini.c (mono_method): Integrated the new verifier.
* driver.c: Extended --security option with validil and
verifiable options to activate the new verifier.
2008-03-07 Zoltan Varga <>
* mini.c jit-icalls.h jit-icalls.c: Generalize the exception creation
optimization to ctors taking 0 or 2 arguments too.
* mini.c (mono_method_to_ir): Optimalize the size of the exception throwing code
a bit.
* jit-icalls.h (mono_create_corlib_exception): New JIT icall.
* mini-amd64.c (mono_arch_emit_prolog): Improve the first_bb optimization a bit.
2008-03-06 Zoltan Varga <>
* mini.c (mono_method_to_ir): Apply one of the ldstr optimizations in the
non-aot case as well.
* Reduce the max size of some frequently used opcodes.
* aot-runtime.c (decode_patch_info): Update this after the ldfld/stfld wrapper
* aot-compiler.c (encode_patch): Ditto.
* mini.h (G_MININT32): Fix the definition of this.
2008-03-05 Zoltan Varga <>
* mini.h: Define G_MININT32/G_MAXINT32 if using an older glib version.
* cfold.c: Remove definition of G_MININT32 which is now in mini.h.
2008-03-04 Zoltan Varga <>
* mini-amd64.c (mono_arch_compute_omit_fp): Don't disable fp elimination for
methods returning vtypes in registers.
(mono_arch_allocate_vars): Ditto.
* mini-amd64.c (mono_arch_get_this_arg_reg): New arch specific helper function.
* tramp-amd64.c (mono_arch_get_unbox_trampoline): Use mono_arch_get_this_arg_reg ().
* generics.cs: Add a test from the linear IR branch.
* mini-amd64.c (emit_load_volatile_arguments): Handle vtypes passed in regs too.
* mini.c (inline_method): Cache failed inline attempts.
2008-03-04 Mark Probst <>
* mini.c: For shared methods of generic classes put the location
of "this" into the MonoGenericJitInfo.
* mini-x86.c, mini-amd64.c, mini.h: Added function for fetching a
register out of a MonoContext by register number. Add the generic
sharing context as an argument to mono_arch_find_this_argument().
* mini-alpha.c, mini-arm.c, mini-hppa.c, mini-ia64.c, mini-mips.c,
mini-ppc.c, mini-s390.c, mini-s390x.c, mini-sparc.c: Added stub
for new arch function.
* mini-exception.c: Handle open exception clauses in shared
generic code.
* mini-trampolines.c: Supply additional argument to
2008-03-04 Zoltan Varga <>
* (regtests): Run the bench.exe tests last.
2008-03-03 Zoltan Varga <>
* mini-amd64.c (mono_arch_emit_prolog): Improve the first bblock optimization
a bit.
2008-03-02 Zoltan Varga <>
* mini.c (mono_method_to_ir): Allow callvirt on static methods for compatibility
with MS.
* mini-amd64.c (mono_arch_emit_prolog): Fix tracing after the last change.
* mini-amd64.c (mono_arch_emit_prolog): Avoid saving dead arguments.
* mini.c (mono_method_check_inlining): Avoid disabling inlining for methods
whose class has no cctor.
* liveness.c (mono_analyze_liveness): Mark dead arguments with MONO_INST_IS_DEAD.
2008-03-01 Zoltan Varga <>
* mini.c (mono_method_to_ir): Report calling a static method using callvirt as
2008-02-29 Zoltan Varga <>
* mini-ops.h: Remove OP_SPARC_INARG_VT, add a new OP_VTARG_ADDR opcode instead
to be in sync with the code on the linear IR branch.
* mini-sparc.c inssel-sparc.brg: Use OP_VTARG_ADDR.
* inssel-s390.brg (OP_SETRET (freg)): Set dreg correctly.
2008-02-27 Zoltan Varga <>
* mini-mips.c: Use cfg->vret_addr instead of cfg->ret.
* mini-s390x.c: Use cfg->vret_addr instead of cfg->ret.
* mini-s390.c: Use cfg->vret_addr instead of cfg->ret.
* mini-<ARCH>.h mini.c: Get rid of the MONO_ARCH_HAVE_CREATE_VARS define.
* mini-<ARCH>.c (mono_arch_create_vars): Define this for all architectures.
* mini.c (mono_method_to_ir): Avoid invalid memory reads for methods without a
2007-11-14 Yoichi NAKAYAMA <>
* inssel-mips.brg (OP_OUTARG_MEMBASE (CEE_LDIND_R4 (base))): Add missing
* mini-codegen.c (mono_spillvar_offset_int): Remove assertion.
(mono_spillvar_offset_float): Ditto.
* mini-mips.c (mono_arch_emit_prolog): Ditto.
* inssel-long32-mips.brg: Fix wrong branching, reduce redundant code
* basic-long.cs: Add regression tests for them.
* mini-mips.c (add_float32_arg): Respect o32 calling convention in gr
(mono_arch_allocate_vars): Fix representation of single-precision float
(mono_arch_output_basic_block): Ditto.
* inssel-mips.brg: Ditto, remove duplicate items.
* mini-mips.c (emit_load_volatile_arguments): New function to handle
arguments of tail calls as on other platforms.
(mono_arch_output_basic_block): Handle tail calls.
* inssel-mips.brg (OP_OUTARG_VT (CEE_LDOBJ (base))): Correct destination
* objects.cs (test_5_pass_static_struct): Add test for it.
Contributed under MIT/X11 license.
2008-02-26 Zoltan Varga <>
* Use gmcs for compiling the regression tests.
* *.2.cs * Rename to *.cs and *.il.
2008-02-24 Zoltan Varga <>
* regalloc.h: Make the vassign array smaller.
* mini.c (mini_method_compile): Remove an unused field in cfg.
* mini-codegen.c: Add a bunch of micro optimizations.
2008-02-23 Zoltan Varga <>
* regalloc.h: Remove some unused fields.
2008-02-22 Zoltan Varga <>
* mini-amd64.c (mono_arch_patch_code): Fix a warning.
* ssa.c (mono_ssa_remove): Avoid declaring volatile variables dead.
2008-02-22 Mark Probst <>
* mini.h: New trampoline type (RGCTX_LAZY_FETCH).
* mini-trampolines.c, tramp-amd64.c, tramp-x86.c: RGCTX lazy fetch
trampoline: Fetch an entry from the runtime generic context. If
it's NULL, jump to the actual trampoline to fill the runtime
generic context. Otherwise, return it.
* mini.c: Call the lazy fetch trampoline to get entries out of the
runtime generic context.
* tramp-ia64.c, tramp-arm.c, tramp-alpha.c, tramp-s390.c,
tramp-s390x.c, tramp-ppc.c, tramp-hppa.c, tramp-mips.c,
tramp-sparc.c: Stubs for the lazy fetch trampoline.
2008-02-21 Mark Probst <>
* mini.c: Fetch data out of the extensible part of the runtime
generic context instead of calling a helper function.
* generic-sharing.c: Some functions moved into
metadata/generic-sharing.c. Helper function for fetching other
types now checks and asserts against extensible rgctx (just for
debugging purposes - the helper function isn't called anymore
unless for debugging).
2008-02-21 Zoltan Varga <>
* mini-arm.c (mono_arch_output_basic_block): Implement proper argument passing
for tail calls up to the point that the tests in iltests.exe run. Also add a
dummy CKFINITE implementation.
(mono_arch_emit_prolog): Avoid saving the method in the LMF since it is only
needed for trampoline LMF frames.
* exceptions-arm.c (mono_arch_find_jit_info): Only read lmf->method for
trampoline LMF frames.
2008-02-21 Rodrigo Kumpera <>
* mini.c (inline_method): clean any pending loader error when inlining fail.
Otherwise loader errors in mono_method_to_ir leaks and cause spurious errors.
2008-02-21 Zoltan Varga <>
* aot-compiler.c (encode_patch): Handle ICALL_ADDR patch type.
* aot-runtime.c (decode_patch_info): Ditto.
* mini.c (mono_resolve_patch_target): Ditto.
* aot-compiler.c (compile_method): Add some experimental code for AOT compiling
icall wrappers.
* patch-info.h (PATCH_INFO): Add 'ICALL_ADDR' patch type.
* mini.c (mono_method_to_ir): Convert a CEE_MONO_LDPTR opcode to an AOT constant
if it references an icall address.
2008-02-20 Zoltan Varga <>
* Remove some more unused opcodes.
* Remove some unused opcodes.
* mini-ia64.c (mono_arch_lowering_pass): Add some more opcodes. Use
mono_op_imm_to_op ().
* mini-sparc.c (opcode_to_sparc_cond): Use the mono_opcode_to_cond () functions
instead of a switch statement.
* mini-sparc.c (mono_arch_allocate_vars): Allocate a stack slot for use by
the int<->float conversion opcodes instead of using mono_spillvar_offset_float ().
* mini-codegen.c: Eliminate rassign macro which is no longer needed.
* mini-codegen.c: Remove unused mono_regstate2_... functions.
* mini-codegen.c (mono_print_ins_index): Avoid printing an index when it is
2008-02-19 Zoltan Varga <>
* driver.c (mono_main): Improve error reporting when an assembly cannot be
opened. Fixes #362607.
* Remove some unused opcodes.
* Add a test for static methods in interfaces.
2008-02-18 Zoltan Varga <>
* genmdesc.c (build_table): Fix a crash on older glib versions.
* Remove some unused opcodes.
* genmdesc.c: Error out if the .md contains CEE_ opcodes if
* Remove some unused opcodes.
* mini.h mini-ops.h mini.c: Define the OP_Ccc opcodes in mini-ops.h normally
like the other opcodes.
2008-02-17 Zoltan Varga <>
* mini-ia64.c: Use cfg->vret_addr instead of cfg->ret.
* mini-arm.h mini-arm.c: Use cfg->vret_addr instead of cfg->ret.
* mini-sparc.c: Use cfg->vret_addr instead of cfg->ret. Name the MonoCompile
variables 'cfg' instead of 'm' for consistency.
* mini-x86.c: Use cfg->vret_addr instead of cfg->ret.
* mini.h (MonoCompile): Add new 'vret_addr' field which represents the hidden
argument holding the vtype return address, to avoid the ambigious use of
cfg->ret for this purpose.
* mini.c (NEW_RETLOADA): Use vret_addr if set.
* mini-amd64.c: Use cfg->vret_addr instead of cfg->ret.
* mini-codegen.c (mono_print_ins): Rename to mono_print_ins_index (), Add a
new mono_print_ins () function which only takes one argument.
2008-02-15 Zoltan Varga <>
* mini-s390.h (MONO_OUTPUT_VTR): Use cfg instead of s, avoid assignments to
macro arguments.
2008-02-14 Zoltan Varga <>
* mini-ops.h: Get rid of OP_SPARC_LOCALLOC_IMM.
* mini-sparc.c inssel-sparc.brg: Use OP_LOCALLOC_IMM instead of OP_SPARC_LOCALLOC_IMM.
* mini-x86.c: Sync with the version on the linear IR branch by adding new
opcodes and other small changes.
* mini-ops.h: Add some new opcodes from the linear IR branch.
* mini-ops.h: Get rid of the OP_X86_..._MEMBASE opcodes.
* mini-x86.c inssel-x86.brg Get rid of the confusing _MEMBASE
opcodes, use the REG_MEMBASE opcodes instead.
* mini-amd64.c inssel-amd64.brg Get rid of the confusing _MEMBASE
opcodes, use the REG_MEMBASE opcodes instead.
* mini-amd64.c (mono_arch_output_basic_block): Sync with the version on the
linear IR branch.
* mini.c (mono_op_imm_to_op): New helper function.
* mini-ops.h: Add some opcodes from linear IR branch.
2008-02-13 Zoltan Varga <>
* mini-alpha.h mini-alpha.c tramp-alpha.c: Alpha port updates from Sergey Tikhonov
2008-02-12 Zoltan Varga <>
* mini.c (mono_normalize_opcodes): Always convert CEE_CONV_R4/R8 to
* mini-ia64.c Add OP_ICONV_TO_R4/R8.
2008-02-09 Zoltan Varga <>
* aot-compiler.c (emit_method_code): Add an assert.
* mini-arm.h mini-arm.c exceptions-arm.c: Modify the exception throwing code and
the IMT code so it is AOT friendly. Enable AOT for methods which call interface
2008-02-08 Zoltan Varga <>
* mini-arm.c (mono_arch_output_basic_block): Fix the ordering of arguments for
some load/store opcodes so they are consistent.
(mono_arch_emit_prolog): Simplify some code.
* aot-runtime.c (mono_aot_get_plt_entry): Fix a warning.
* objects.cs: Add tests for large argument offsets on ARM.
* mini-arm.c (mono_arch_emit_prolog): Fix handling of arguments with large
stack offsets. Fixes #359651.
* mini.c (mono_normalize_opcodes): Remap CEE_CONV_R4/R8 properly.
* Add OP_LCONV_TO_R4/R8.
* mini-ia64.h mini-ia64.c: Get rid of CEE_ opcodes.
* mini-ops.h: Add OP_ICONV_TO_R_UN opcode.
* mini.c (mono_normalize_opcodes): Remap CEE_CONV_R_UN too.
* mini-s390x.c mini-arm.c mini-s390.c: Get
rid of CEE_CONV_R_UN.
* mini-s390x.c mini-s390x.h inssel-s390x.brg: Get rid of CEE_ opcodes.
2008-02-07 Zoltan Varga <>
* mini-s390.c mini-s390.h Get rid of CEE_ opcodes.
* mini.c (mono_normalize_opcodes): Add some more opcodes.
* mini-arm.c mini-arm.h Get rid of CEE_ opcodes.
* Remove some unused opcodes.
* mini-sparc.c mini-sparc.h Get rid of CEE_ opcodes.
* mini-x86.c mini-x86.h Get rid of CEE_ opcodes.
* mini.c mini-<ARCH>.c: Remove mono_arch_local_regalloc (), instead make
arch specific functions for its parts. Call the peephole pass after local
regalloc so the prolog can compute a more accurate max_offset.
* mini.c (mono_normalize_opcodes): New mini pass to convert CEE_ opcodes to
the corresponding OP_I/OP_L opcodes.
* mini-amd64.c mini-amd64.h Get rid of CEE_ opcodes.
* mini-sparc.c (mono_arch_output_basic_block): Fix the sparc build.
2008-02-06 Zoltan Varga <>
* mini-s390.c (mono_arch_get_inst_for_method): Remove the Interlocked cases
as they are handled in mini.c.
* mini-s390x.c (mono_arch_get_inst_for_method): Ditto.
* mini-<ARCH>.c (mono_arch_get_inst_for_method): Remove the MemoryBarrier
case since it is handled in mini.c.
* (sparc_setfreg_float): Fix the sparc build.
* mini-ops.h: Add new opcodes OP_CALL/OP_CALLVIRT.
* *.c: Use the new opcodes in the IR and back end code.
* mini-ops.h cpu-<ARCH>.md: Correct the name of the bgt_un opcodes.
* mini-amd64.c (emit_call_body): Use a far-call for calling dynamic methods.
2008-02-06 Mark Probst <>
* mini-trampolines.c (mono_generic_class_init_trampoline): Removed
an assert because it has a race condition.
2008-02-06 Zoltan Varga <>
* tramp-amd64.c (mono_arch_patch_callsite): Add more diagnostics.
* inssel.brg mini-<ARCH>.c cpu-<ARCH>.md: Get rid of unused CEE_RET opcode.
* mini-<ARCH>.c cpu-<ARCH>.md: Get rid of unused LDIND/STIND opcodes.
* *.brg mini-<ARCH>.c cpu-<ARCH>.md: Get rid of OP_SETREG/OP_SETFREG/OP_SETREGIMM,
2008-02-05 Zoltan Varga <>
* (move): Correct the maximum size of move.
2008-02-05 Mark Probst <>
* tramp-amd64.c, tramp-x86.c, mini-trampolines.c: Added a check in
the generic class init trampoline to return quickly if the class
is already inited.
2008-02-04 Zoltan Varga <>
* tramp-amd64.c (mono_arch_patch_callsite): Add some diagnostics to help debug
issues where an 32 bit callsite cannot be patched by a 64 bit address.
2008-02-03 Zoltan Varga <>
* generics.2.cs Merge some tests from the linear IR
2008-01-31 Zoltan Varga <>
* objects.cs: Add some soft-float tests.
* mini.c: Fix a couple more soft-float issues.
* helpers.c (mono_disassemble_code): Fix disassembly on ARM.
* mini-amd64.c (peephole_pass): Use IXOR instead of LXOR for zeroing a register to
avoid a REX prefix.
2008-01-30 Zoltan Varga <>
* exceptions-x86.c (mono_arch_find_jit_info): Fix stack unwinding when an
exception happens while compiling a virtual method.
2008-01-29 Zoltan Varga <>
* mini-sparc.c (mono_arch_emit_epilog): Fix folding of negative return values.
* mini-sparc.c: Fix build.
* mini-sparc.c (get_call_info): Add support for generic sharing.
* mini-exceptions.c: Add a FIXME.
2008-01-27 Zoltan Varga <>
* mini-exceptions.c (mono_handle_exception_internal): Remove the old style
altstack handling code.
* mini-s390.c (mono_arch_emit_exceptions): Really fix a warning.
* mini-s390.c (mono_arch_emit_exceptions): Fix a warning.
* mini-s390.c: Add support for generic sharing.
* mini-exceptions.c (ves_icall_System_Security_SecurityFrame_GetSecurityFrame):
Fix CAS on s390.
(ves_icall_System_Security_SecurityFrame_GetSecurityStack): Ditto.
* mini-s390x.c (mono_arch_emit_exceptions): Fix a warning.
* mini-s390x.c: Add support for generic sharing.
* mini-exceptions.c (ves_icall_System_Security_SecurityFrame_GetSecurityFrame):
Fix CAS on ia64.
(ves_icall_System_Security_SecurityFrame_GetSecurityStack): Ditto.
* mini-s390x.c: Use is_imm16 instead of is_uimm16 when checking whenever s390_aghi
can be used since it takes a 16 bit signed immediate.
* inssel-s390x.brg: Fix OP_SETRET.
* mini-s390x.c (mono_arch_output_basic_block): Fix OP_BREAK.
* mini-codegen.c (mono_opcode_to_cond): Fix a warning.
* mini-s390x.c Implement sext.i4 properly by sign extension.
* mini.c (mono_create_delegate_trampoline): Don't use mono_create_ftpntr here.
* mini-trampolines.c (mono_delegate_trampoline): Use mono_get_addr_from_ftnptr
in one place.
* mini-ia64.h mini-ia64.c: Add minimal support for the delegate trampoline
* mini.h inssel-x86.brg inssel-amd64.brg tramp-alpha.c tramp-ia64.c: Get rid
of the unused mono_arch_patch_delegate_trampoline stuff.
2008-01-26 Zoltan Varga <>
* basic-long.cs: Move the fp related tests to basic-float.cs.
* mini-ops.h (OP_OUTARG_FREG_R4): New opcode.
* mini-ia64.c inssel-ia64.brg: Implement proper R4 argument passing.
* basic-calls.cs: Add a test for proper float argument passing.
* mini-ia64.h (mono_ia64_context_get_ip): Do not substract 1 from the ip
if the context corresponds to an exception received through a signal.
* exceptions.cs: Add a test for nullref handling at the start of a try
* mini-ia64.c (mono_arch_call_opcode): Fix ia64 argument passing.
* jit-icalls.c (mono_break): New JIT icall.
* mini-<ARCH>.c: Use mono_break instead of mono_arch_break.
* mini-arm.c (arm_patch): Add support for patching the blx calling sequence.
2008-01-25 Zoltan Varga <>
* cpu-*.md: Get rid of unused opcodes.
* Rename this to for consistency with other archs.
* Move mini-trampolines.c to $(common_sources) since it is now used
by all platforms.
* mini-s390x.h tramp-s390x.c Rework the s390x trampoline code to use
the arch independent trampoline code in mini-trampolines.c.
* aot-runtime.c (mono_aot_init_vtable): Fix a warning.
* mini.c (get_runtime_generic_context_ptr): Fix a warning.
* mini-s390.h: Remove an unused define.
* mini-s390.h tramp-s390.c Rework the s390 trampoline code to use
the arch independent trampoline code in mini-trampolines.c.
* mini-arm.c (mono_arch_emit_prolog): Fix build.
2008-01-24 Zoltan Varga <>
* mini-sparc.c (mono_arch_output_basic_block): Remove some unecessary code.
* mini-s390.c (mono_arch_emit_prolog): Fix build.
* mini-s390x.c (mono_arch_emit_prolog): Fix build.
* mini-ppc.c (mono_arch_emit_prolog): Fix build.
* Use smaller sizes for int opcodes.
* *.c: Get rid of the NOT_IMPLEMENTED define which is now in mini.h.
* *.cs: Add some tests from the linear-ir branch. Move structs tests to
* driver.c (mono_main): Add a --break-at-bb command line argument for JIT
* mini.h *.c: Change cfg->vars to contain the MonoMethodVar entries directly
instead of though a pointer to save an indirection when accessing elements of
the array.
* mini.h (MONO_IS_COND_BRANCH_OP): Move these macros here from mini.c. Fix
some typos.
(NOT_IMPLEMENTED): New helper macro.
(MONO_BB_FOR_EACH_INS): New helper macro to iterate through the instructions
of a bb.
* *.c: Use the new helper macro.
2008-01-21 Zoltan Varga <>
* mini-x86.h (MONO_ARCH_AOT_SUPPORTED): Disable AOT for apple x86.
2008-01-20 Zoltan Varga <>
* mini-amd64.c (mono_arch_emit_prolog): Optimize the omit fp case to save two
stack slots.
2008-01-18 Zoltan Varga <>
* mini-amd64.c (mono_arch_emit_prolog): Disable the new optimization if
profiling is enabled.
* mini-amd64.c (mono_arch_call_opcode): Emit the save_sp_to_lmf instruction at
the end.
(mono_arch_emit_prolog): Add more first bblock optimizations.
* mini-amd64.c (mono_arch_call_opcode): Keep assignments to the arg registers
in order if possible.
(mono_arch_emit_prolog): Optimize assignments to arg registers in the first
bblock, since the arguments are still in their original registers.
* mini.c (type_from_op): Calling add.ovf on floats is not valid IL code.
2008-01-17 Zoltan Varga <>
* mini.c (mono_method_to_ir): Use the no-spilling optimization for CEE_CALLI
as well.
* mini-amd64.c (mono_arch_emit_prolog): Save an instruction if the LMF is at
offset 0.
* mini-amd64.h (MONO_ARCH_HAVE_NOTIFY_PENDING_EXC): Turn on this for amd64.
* exceptions-amd64.c (mono_arch_notify_pending_exc): New function to
process async exceptions received while in unmanaged code.
* mini.c (mini_init): Install a callback with the runtime which will be called
when a thread receives an async exception while in unmanaged code.
* mini.c driver.c: Update after mono_get_native_wrapper () signature change.
* mini-s390x.c (mono_arch_output_basic_block): Fix s390x build.
2008-01-16 Wade Berrier <>
fix build
2008-01-16 Zoltan Varga <>
* mini-x86.c (mono_arch_output_basic_block): Remove some gccism which prevents
compilation with sun cc.
* cpu-*.md: Fix the build.
* Fix the length of some load membase opcodes. Fixes #354241.
* mini-amd64.h: Add some comments to the MonoLMF structure.
* mini-ops.h cpu-amd64.c: Add a OP_AMD64_SAVE_SP_TO_LMF opcode.
* mini-amd64.c exceptions-amd64.c tramp-amd64.c: Avoid setting the rip field
in the LMF structure if possible. This saves two instructions in the
managed->native wrappers.
* mini-ops.h *.md: Make some opcodes names uniform by removing the op_ prefix.
2008-01-16 Mark Probst <>
* generic-sharing.c: New type argument lookup code which uses the
runtime generic context template.
2008-01-15 Zoltan Varga <>
* mini.c (mono_method_to_ir): Avoid emitting a write barrier when storing NULL.
* mini-arm.c (add_general): Fix arm eabi parameter passing.
(mono_arch_output_basic_block): Fix localloc implementation.
* mini-amd64.c (peephole_pass): Sync store+load optimizations with the x86 version.
* mini-ia64.c (peephole_pass): Fix ia64 build.
* mini-amd64.c (peephole_pass): Fix a warning.
* mini-amd64.c (mono_arch_allocate_vars): Make sure the LMF is always stored
at a constant offset from sp/fp.
* exceptions-amd64.c (mono_arch_find_jit_info): Compute the LMF address from fp/sp
instead of obtaining it from *lmf in the managed method case.
2008-01-14 Zoltan Varga <>
* exceptions-amd64.c (mono_arch_find_jit_info): Remove some duplicate code.
Mon Jan 14 12:33:06 CET 2008 David S. Miller <>
* mini.h (MonoInstList): New type.
mono_inst_list_first, mono_inst_list_last,
mono_inst_list_next, mono_inst_list_prev): New instruction
list handling interfaces.
(MonoBasicBlock): Remove 'last_ins' and 'code', replace with
list head 'ins_list'.
(MonoInst): Replace next pointer with list head 'node'.
(MonoCallInst): Make 'out_args' a MonoInstList.
(MONO_INST_NEW_CALL): Explicitly init ->out_args.
(MonoCompile): Delete reverse_inst_list and
* mini-hppa.c (mono_arch_call_opcode, NEW_INS,
mono_arch_lowering_pass, mono_arch_local_regalloc,
mono_arch_output_basic_block, mono_arch_emit_prolog):
Convert to new instruction lists.
(insert_after_ins): Delete.
* inssel.brg (MONO_EMIT_NEW_BRANCH_BLOCK): Convert to new
instruction lists.
* mini-hppa.h (MONO_EMIT_NEW_COMPARE_BRANCH_BLOCK): Likewise.
split_bblock, mono_add_ins_to_end, mono_emit_call_args,
mono_emulate_opcode, mono_emit_load_got_addr,
inline_method, mono_method_to_ir, mono_print_bb_code,
print_dfn, decompose_pass, nullify_basic_block,
replace_out_block_in_code, remove_block_if_useless,
merge_basic_blocks, move_basic_block_to_end,
try_unsigned_compare, optimize_branches, mono_print_code,
mini_select_instructions, remove_critical_edges): Likewise.
* mini-amd64.c (emit_sig_cookie, mono_arch_call_opcode,
peephole_pass_1, peephole_pass, mono_arch_lowering_pass,
mono_arch_output_basic_block, mono_arch_emit_prolog):
* mini-mips.c (mono_arch_call_opcode, peephole_pass,
NEW_INS, mono_arch_lowering_pass, mono_arch_local_regalloc,
mono_arch_output_basic_block): Likewise.
(inst_list_prepend, insert_after_ins): Delete.
instruction lists.
* mini-x86.c (emit_sig_cookie, mono_arch_call_opcode,
peephole_pass_1, peephole_pass, mono_arch_output_basic_block,
mono_arch_emit_prolog): Likewise.
* cfold.c (mono_constant_fold): Likewise.
* liveness.c (visit_bb, mono_analyze_liveness,
optimize_initlocals): Likewise.
* ssapre.c (dump_code, process_bb, code_motion): Likewise.
* graph.c (mono_draw_code_cfg): Likewise.
* ssa.c (mono_ssa_rename_vars, mono_ssa_compute,
mono_ssa_remove, mono_ssa_avoid_copies, mono_ssa_create_def_use,
mono_ssa_cprop): Likewise.
* abcremoval (get_relations_from_previous_bb, process_block):
* local-propagation (mono_cprop_invalidate_values,
mono_local_cprop_bb): Likewise.
* mini-s390x.c (mono_arch_call_opcode, emit_sig_cookie,
peephole_pass, mono_arch_output_basic_block,
mono_arch_emit_prolog): Likewise.
* mini-arm.c (mono_arch_call_opcode, peephole_pass,
NEW_INS, mono_arch_lowering_pass, mono_arch_local_regalloc,
mono_arch_emit_prolog): Likewise.
(insert_after_ins): Delete.
* aliasing.c (print_code_with_aliasing_information,
mono_build_aliasing_information, mono_aliasing_deadce):
Convert to new instruction lists.
* mini-ia64.c (emit_sig_cookie, mono_arch_call_opcode,
peephole_pass, NEW_INS, mono_arch_lowering_pass,
mono_arch_local_regalloc, mono_arch_output_basic_block):
(insert_after_ins): Delete.
* mini-sparc.c (emit_sig_cookie, mono_arch_call_opcode,
peephole_pass, mono_arch_output_basic_block): Convert to
new instruction lists.
* mini-codegen (InstList, inst_list_prepend,
insert_after_ins): Delete.
(insert_before_ins, get_register_force_spilling,
get_register_spilling, free_up_ireg, free_up_reg,
create_copy_ins, create_spilled_store, alloc_int_reg,
alloc_float_reg, alloc_reg, mono_local_regalloc): Convert
to new instruction lists.
* mini-ppc.c (mono_arch_call_opcode, peephole_pass,
NEW_INS, mono_arch_lowering_pass, mono_arch_local_regalloc,
mono_arch_output_basic_block, mono_arch_emit_prolog): Likewise.
(insert_after_ins): Delete.
* mini-alpha.c (NEW_INS, peephole_pass, mono_arch_lowering_pass,
mono_arch_local_regalloc, mono_arch_output_basic_block,
mono_arch_call_opcode): Convert to new instruction lists.
(insert_after_ins): Delete.
* mini-s390.c (mono_arch_call_opcode, emit_sig_cookie,
peephole_pass, mono_arch_output_basic_block,
mono_arch_emit_prolog): Convert to new instruction lists.
2008-01-11 Zoltan Varga <>
* mini-amd64.c (mono_arch_output_basic_block): Use a 4 byte load in OP_CHECK_THIS.
* mini-sparc.c (mono_arch_output_basic_block): Use a byte load in CHECK_THIS.
Fixes #353182.
* (version.h): Make this work with non-bash shells.
2008-01-10 Zoltan Varga <>
* mini.c (handle_delegate_ctor): Optimize away setting of NULL target.
2008-01-08 Zoltan Varga <>
* mini.c (mono_method_to_ir): Fix possible reading of invalid memory in
the InitializeArray optimization.
2008-01-06 Zoltan Varga <>
* mini.c driver.c: Don't include os/gc_wrapper.h.
2008-01-05 Zoltan Varga <>
* mini.c (print_jit_stats): Print GC statistics if available.
2008-01-04 Zoltan Varga <>
* mini-amd64.c (mono_arch_allocate_vars): Align argument storage offsets to 8.
2007-12-29 Zoltan Varga <>
* mini-ppc.c (mono_arch_get_delegate_invoke_impl): Fix flushing of icache.
2007-12-26 Zoltan Varga <>
* mini.c (mini_init): Move the setting of GC_stackbottom to mono_gc_base_init ().
* mini.c (mini_init): Call mono_gc_base_init () instead of MONO_GC_PRE_INIT ().
* driver.c (mono_main): Ditto.
2007-12-23 Zoltan Varga <>
* mini-trampolines.c (mono_delegate_trampoline): Use mono_get_delegate_invoke ().
* aot-compiler.c (emit_klass_info): Avoid emitting info if one of the methods
in the vtable can't be encoded.
(compile_method): Ditto.
2007-12-21 Zoltan Varga <>
* mini.c (setup_jit_tls_data): Use the MONO_ARCH_INIT_TOP_LMF_ENTRY macro if
* mini-amd64.h mini-amd64.c exceptions-amd64.c tramp-amd64.c: Rename lmf->ebp to
* exceptions-amd64.c (mono_arch_find_jit_info): Fix the detection of whenever
the top LMF entry belongs to the current method.
* mini.c: Update after renaming of mono_thread_get_pending_exception ().
2007-12-20 Zoltan Varga <>
* tramp-ia64.c (mono_arch_create_trampoline_code): Fix a warning.
* tramp-ia64.c (mono_arch_create_trampoline_code): Ditto.
* tramp-sparc.c (mono_arch_create_trampoline_code): Check for thread interruption.
* tramp-amd64.c (mono_arch_create_trampoline_code): Ditto.
* tramp-x86.c (mono_arch_create_trampoline_code): Check for thread interruption.
* mini-amd64.h mini-amd64.c inssel-amd64.brg: Add ulong->double
* basic-float.cs: Add an ulong->double cast test.
2007-12-15 Zoltan Varga <>
* mini.c (mono_method_to_ir): Fix a warning.
2007-12-14 Zoltan Varga <>
* mini-ops.h: Add OP_SWITCH.
* mini.c graph.c ssa.c aliasing.c mini-<ARCH>.c inssel-<ARCH>.brg: Avoid using
CEE_SWITCH in back-end code, use OP_SWITCH instead.
2007-12-11 Geoff Norton <>
* mini-s390x.c: Minor change to the MAX() define to allow
it to compile with other gcc versions.
2007-12-11 Geoff Norton <>
* mini-s390x.c: Implement sext_i4 to fix the build on s390x
2007-12-11 Rodrigo Kumpera <>
exceptions-arm.c (mono_arch_get_restore_context): Restore
the frame pointer.
exceptions-arm.c (throw_exception): Save the frame pointer.
This is a partial fix for #323747. Only the client side is
2007-12-11 Rodrigo Kumpera <>
* mini.c (mono_method_to_ir): Verbose message in CEE_NEWOBJ
was using an unrelated variable to log the class which
needed the cctor to be called. This was crashing on arm.
2007-12-09 Robert Jordan <>
* mini-x86.c (mono_arch_emit_epilog):
Consider all kinds of 64-bit types. Fixes #323114.
2007-12-08 Zoltan Varga <>
* tramp-amd64.c (mono_arch_create_trampoline_code): Clean up the code a bit.
2007-12-07 Zoltan Varga <>
* mini-amd64.c (peephole_pass): Add a missing instruction check.
Fri Dec 7 22:08:23 CET 2007 Paolo Molaro <>
* mini.c: run type ctor before allocating an object, not only
when running it's constructor method (fixes at least part of bug #342507).
2007-12-07 Zoltan Varga <>
* mini-trampolines.c (mono_delegate_trampoline): Fix a warning.
* mini-trampolines.c (mono_generic_class_init_trampoline): Remove a debug printf.
* mini.h mini-amd64.c mini-x86.c: Get rid of the mono_arch_find_vtable ()
* tramp-x86.c tramp-amd64.c mini-trampolines.c: Pass the vtable argument to
mono_generic_class_init_trampoline () the same as it is done with the other
* mini-arm.h mini-arm.c tramp-arm.c inssel-arm.brg
aot-runtime.c aot-compiler.c: Implement AOT support.
2007-12-07 Mark Probst <>
* mini-trampolines.c (mono_generic_class_init_trampoline): Fixed
build for archs which don't have the vtable trampoline defined
2007-12-07 Zoltan Varga <>
* tramp-x86.c (mono_arch_create_trampoline_code): Fix the build.
* tramp-ppc.c (mono_arch_create_trampoline_code): Use the new helper function.
* mini-trampolines.c (mono_get_trampoline_func): New helper function.
* tramp-<ARCH>.c: Use the new helper function.
2007-12-07 Mark Probst <>
* inssel.brg: Added a pattern for the OP_TRAMPCALL_VTABLE
trampoline call, which takes a vtable argument.
* graph.c, mini-ops.h, local-propagation.c, aliasing.c: Treat
OP_TRAMPCALL_VTABLEs like other calls.
* mini-amd64.c, mini-amd64.h, mini-x86.c, mini-x86.h: Designated a
register to hold the vtable argument to the OP_TRAMPCALL_VTABLE
call. Implemented a support function which fetches the vtable
from a register set.
* mini.c, mini.h, tramp-amd64.c, tramp-x86.c, mini-trampolines.c:
Implemented a generic class init trampoline, using the
* mini.c: Implemented static field access when sharing generic
code. This implies initing the class using the new
2007-12-07 Mark Probst <>
* mini.c: Don't compile methods with sharing enabled if their
classes are disabled for sharing.
2007-12-06 Zoltan Varga <>
* inssel.brg: Add a missing sign extension to the GETCHR and array access
opcodes. Fixes #346563.
* objects.cs: Add a new test.
* aot-compiler.c (emit_method_code): Put back an #ifdef which is needed.
* mini-<ARCH>.h mini.c aot-compiler.c aot-runtime.c: Get rid of the
HAVE_PIC_AOT define and use AOT_SUPPORTED instead.
2007-12-06 Zoltan Varga <>
* mini-arm.h mini-arm.c: Add support for the common vtable trampoline.
2007-12-03 Zoltan Varga <>
* mini-arm.c (mono_arch_emit_exceptions): Avoid uninitialized memory in the
code stream.
2007-12-02 Zoltan Varga <>
* mini.c aot-compiler.c aot-runtime.c: Implement the delegate creation
optimization in the AOT case.
2007-11-30 Zoltan Varga <>
* aot-runtime (mono_aot_get_method_from_vt_slot): Add support for multi-byte method ref encodings.
* aot-runtime.c (decode_klass_ref): Implement decoding of generic instances.
* aot-compiler.c (encode_klass_ref): Implement proper encoding of generic instances.
* mini.c (mono_method_to_ir): Optimize the common ldftn+create delegate combination.
* mini-trampolines.c (mono_delegate_trampoline): Add some code to handle the case when the delegate
is created by the inlined delegate ctor.
* mini-x86.c (mono_arch_output_basic_block): Unify div/rem code and handle the case when sreg2 is EDX.
* mini.c (mono_jit_compile_method_inner): Replace calls to delegate invoke with the trampoline here too.
2007-11-29 Zoltan Varga <>
* Fix the length of ckfinite.
2007-11-28 Zoltan Varga <>
* mini-x86.c (mono_arch_output_basic_block): Unify div/rem code and handle the case when sreg2 is EDX.
* mini-x86.c (mono_arch_output_basic_block): Clean up the fp stack properly in CKFINITE.
(mono_arch_output_basic_block): Get rid of unused last_ins and last_offset.
* mini-x86.c (mono_arch_output_basic_block): Add some micro optimizations.
* mini-x86.c inssel-x86.brg Move the implementation of the
2007-11-28 Martin Baulig <>
* mini-x86.c
(mono_arch_get_delegate_invoke_impl): Call mono_debug_add_delegate_trampoline()
after creating the trampoline.
2007-11-27 Zoltan Varga <>
* aot-runtime.c (load_aot_module): Check runtime version if needed.
* aot-compiler.c: Add bind-to-runtime-version for producing AOT files which only load into a runtime with
the same version.
* generic-sharing.c (mono_helper_get_rgctx_other_ptr): Change the signature to take the calling class
instead of the calling method to help AOT.
* mini.c (get_runtime_generic_context_other_ptr): Update after the change.
2007-11-26 Zoltan Varga <>
* aot-runtime.c (mono_aot_init_vtable): Simplify this if MONO_ARCH_COMMON_VTABLE_TRAMPOLINE
is defined.
2007-11-23 Zoltan Varga <>
* aot-compiler.c (emit_class_name_table): Properly encode generic class names.
* aot-compiler.c (compile_method): Correct check for generic method definitions.
(encode_method_ref): No need to handle generic method definitions specially.
* mini.h (MONO_AOT_FILE_VERSION): Bump this.
* aot-runtime.c (decode_klass_ref): Clean this up and rename from
* aot-compiler.c (encode_klass_ref): Clean this up and rename from
(compile_method): Enable generic sharing.
2007-11-22 Zoltan Varga <>
* mini.c (get_runtime_generic_context_other_ptr): Disable AOT here.
(mini_method_compile): Add preliminary support for AOTing shared generic code.
* aot-compiler.c (compile_method): Add preliminary support for AOTing shared
generic code.
* mini-trampolines.c: Fix a warning.
* mini.c (get_runtime_generic_context_other_ptr): Use NEW_METHODCONST instead of
(mono_method_to_ir): Use NEW_DOMAINCONST in one place.
(generic_class_is_reference_type): Remove unused function.
* mini-trampolines.c (mono_magic_trampoline): Avoid loading metadata if possible
in the generic vtable trampoline case.
* aot-runtime.c (mono_aot_init_vtable): Use the generic vtable trampoline.
* aot-runtime.c (mono_aot_get_method_from_vt_slot): New helper function to
return an AOT method based on a vtable slot.
* aot-compiler.c (compile_method): Avoid AOTing synchronized methods for now.
* mini.c (mini_get_vtable_trampoline): Export this.
2007-11-22 Martin Baulig <>
* debug-debugger.h
(MonoDebuggerInfo): Move `debugger_version' up.
2007-11-22 Martin Baulig <>
* mini-amd64.c
(mono_arch_get_delegate_invoke_impl): Call mono_debug_add_delegate_trampoline().
* mini-trampolines.c
(mono_delegate_trampoline): Call mono_debugger_trampoline_compiled()
after compiling the method.
2007-11-20 Martin Baulig <>
* debug-mini.c
(mono_debugger_insert_method_breakpoint): Moved into mono-debug-debugger.c.
(mono_debugger_remove_breakpoint): Likewise.
(mono_debugger_check_breakpoints): Likewise.
* debug-debugger.c: Implement the new breakpoint interface here.
2007-11-18 Zoltan Varga <>
* mini-amd64.c (mono_arch_output_basic_block): Unify the implementation of
CEE_CONV_I1/SEXT_I1 and I2 since they are the same.
* mini-x86.c (mono_arch_output_basic_block): Ditto.
2007-11-17 Zoltan Varga <>
* mini-amd64.c (mono_arch_output_basic_block): Fix a typo.
* mini-x86.c (mono_arch_get_inst_for_method): Remove code which is now in
* mini-ia64.c (mono_arch_get_inst_for_method): Remove code which is now in
* mini-amd64.c (mono_arch_compute_omit_fp): Disable fp elimination for methods
returning a vtype in a register.
* mini.c (mini_get_inst_for_method): Move the handling of the atomic operations
here from the arch specific code.
* mini-amd64.c (mono_arch_get_inst_for_method): Remove code which is now in
* mini-amd64.c (mono_arch_output_basic_block): Add some micro optimizations.
(mono_arch_emit_prolog): Increment maximum prolog size.
* mini-amd64.c inssel-amd64.brg Move the implementation of the
* mini-x86.c (get_call_info): Receive a MonoCompile instead of a
* mini-ia64.c (get_call_info): Receive a MonoCompile instead of a
MonoGenericSharingContext. Allocate memory from the cfg mempool.
2007-11-15 Mark Probst <>
* mini.c, mini.h, generic-sharing.c: Functions for producing code
which extract fields out of the runtime generic context. Full
sharing of the NEWARR opcode.
Thu Nov 15 14:20:21 CET 2007 Paolo Molaro <>
* abcremoval.c, mini.c, ssa.c, ssapre.c: updated to implement
2007-11-13 Zoltan Varga <>
* mini-trampolines.c (mono_delegate_trampoline): Update after
mono_marshal_get_delegate_invoke () signature change.
2007-11-13 Mark Probst <>
* mini.c: Removed the shared context in favor of the generic
sharing context. Allocate the MonoJitInfo structure with room for
the generic sharing context if it's needed.
* mini.h: Remove MonoGenericSharingContext declaration. It's in
domain-internals.h now.
* mini-x86.c: Pass the generic sharing context to get_call_info ().
* generic-sharing.c: Several changes for working without a shared
context and instead operating on open types instead.
2007-11-12 David S. Miller <>
* inssel-sparc.brg: Fix double instruction emit.
2007-11-12 Zoltan Varga <>
* mini.c (mono_jit_runtime_invoke): Avoid trying to compile the Array
Get/Set/Address methods.
* mini.c debug-debugger.c mini-trampolines.c: Update after
mono_marshal_get_delegate_invoke signature change.
2007-11-12 Rodrigo Kumpera <>
* Increase the max size of OP_THROW to 24 bytes.
This can happens with dynamic methods. Fixes the other bug in #322722.
2007-11-12 Rodrigo Kumpera <>
* tramp-arm.c (mono_arch_patch_callsite): Support patching
BX call sequence.
* mini-arm.c (arm_patch): Implement patching of BX call
sequence. Fixes one of the bugs in #322722.
2007-11-03 David S. Miller <>
* mini-sparc.c (mono_arch_flush_icache): Make more efficient
under Linux. We only need to flush every 32-byte cache line.
2007-11-07 Massimiliano Mantione <>
* mini.c:
move_basic_block_to_end: Add branches when needed, eventually creating
a new BB.
optimize_branches: added a parameter that tells if it's ok to create
new BBs (doing is "df_visit" has been called is (IMHO) a nightmare),
and avoid calling move_basic_block_to_end when it's not ok.
Fixes bug 318677.
2007-11-07 Mark Probst <>
* mini.c: Abort inlining call to InitializeArray if something
looks wrong. Let the icall handle it, which now has proper safety
2007-11-05 Rodrigo Kumpera <>
* mini.c (mono_spill_call): add support for soft-float.
* mini.c (mono_method_to_ir): add support for soft-float
to inlined functions that return float.
* mini.c (mono_method_to_ir): add support for soft-float
to cee_stsfld opcode on float fields.
2007-11-05 Geoff Norton <>
* mini-x86.h: Fix the structure access for X86 Leopard.
2007-11-05 Martin Baulig <>
* mini-trampolines.c
(mono_magic_trampoline): Call mono_debugger_trampoline_compiled()
after compiling the method to notify the debugger.
2007-11-05 Martin Baulig <>
* debug-debugger.h (MonoDebuggerInfo): Use the new breakpoint tables.
2007-11-02 Zoltan Varga <>
* mini-sparc.c (EMIT_COND_SYSTEM_EXCEPTION_GENERAL): Applied patch from
David Miller <>. Allow larger offsets in branches.
2007-11-01 Zoltan Varga <>
* mini-amd64.c (mono_arch_emit_prolog): Check the domain as well for
native-to-managed wrappers.
2007-11-01 Geoff Norton <>
* mini-ppc.h, mini-x86.h: Handle Leopards renaming of some structure
Wed Oct 31 20:23:14 CET 2007 Paolo Molaro <>
* mini.c, mini-x86.c: when getting back from unmanaged code
to managed via a marshaled delegate we also need to set the
right domain.
Wed Oct 31 19:53:33 CET 2007 Paolo Molaro <>
* mini-amd64.c, mini-amd64.h, tramp-amd64.c: breakpoint table support
for amd64.
Wed Oct 31 19:29:30 CET 2007 Paolo Molaro <>
* mini.c, mini.h, mini-x86, tramp-x86.c, mini-x86.h: added API to
let the debugger or other external agents to tell the JIT when
a sw breakpoint has been inserted in the code that the JIT needs
to be able to inspect.
2007-10-31 Martin Baulig <>
* debug-debugger.h
(MonoDebuggerInfo): Remove `runtime_class_init'.
2007-10-30 Martin Baulig <>
* debug-mini.h
(mono_debugger_thread_created): Added `MonoThread *' argument.
(mono_debugger_extended_notification): New public method.
(mono_debugger_trampoline_compiled): New public method.
* debug-mini.c
(MonoDebuggerThreadInfo): Added `thread' and
`extended_notifications' fields.
* debug-debugger.c
(debugger_executable_code_buffer): New static variable.
* debug-debugger.h
(MonoDebuggerInfo): Added `executable_code_buffer',
`executable_code_buffer_size', `breakpoint_info_area',
`breakpoint_table' and `breakpoint_table_size'.
2007-10-26 Rodrigo Kumpera <>
* mini-arm.c (mono_arch_build_imt_thunk): Take the advantage
that IP either is an unused value or the vtable pointer. IMT
calls use vtable + offset now. Reduced by almost half the size
of IMT entries.
2007-10-26 Jonathan Chambers <>
* mini-amd64.c: Begin Win64 port. Use AMD64_ARG_REG#
defines to access param registers. Replace long usage with
gsize as sizeof(long) != sizeof(void*) on Win64.
* mini-amd64.h: Add %rdi and %rsi to MonoLMF structure
on Win64. Fix intrinsic, use _AddressOfReturnAddress
instead of non-existant _GetAddressOfReturnAddress.
* tramp-amd64.c: Use AMD64_ARG_REG# defines to access
param registers. Save/restore %rdi and %rsi in MonoLMF.
* exceptions-amd64.c: Use AMD64_ARG_REG# defines to access
param registers. Modify (throw_exception) signature to take
%rdi and %rsi on Win64.
Code is contributed under MIT/X11 license.
Thu Oct 25 23:06:58 CEST 2007 Paolo Molaro <>
* helpers.c: unlink debugging output files.
2007-10-25 Zoltan Varga <>
* mini.c: Move mono_create_ftnptr () to object.c.
2007-10-24 Rodrigo Kumpera <>
* helpers.c (mono_disassemble_code): MonoCompile parameter is now
optional. This function can now be used to disassemble code generated
outside the JIT such as trampolines and IMT thunks.
* mini-arm.h: defined MONO_ARCH_HAVE_IMT.
* mini-arm.c (decode_vcall_slot_from_ldr): added, extract the
vtable pointer from a ldr instruction.
* mini-arm.c (mono_arch_get_vcall_slot_addr): support the
new IMT call sequence.
* mini-arm.c (mono_arch_output_basic_block): emit the IMT
call sequence for interface invocations.
* mini-arm.c (mono_arch_emit_imt_argument): added, required
for imt support. This function is empty since IMT on ARM requires no
special handling on the IR side.
* mini-arm.c (mono_arch_find_imt_method): added, required for
imt support.
* mini-arm.c (mono_arch_find_this_argument): added, required
for imt support.
* mini-arm.c (arm_emit_value_and_patch_ldr): added, patches
a ldr instruction to load a value stored in the code stream.
* mini-arm.c (mono_arch_build_imt_thunk):added, required
for imt support.
2007-10-23 Zoltan Varga <>
* mini.c (mini_init): Install the jump trampoline callback.
Tue Oct 23 17:07:52 CEST 2007 Paolo Molaro <>
* mini-trampolines.c: handle synchronized methods with the common
vtable trampoline (bug #335601).
2007-10-17 Zoltan Varga <>
* mini-ia64.h mini-amd64.c: Add support for the common vtable trampoline.
* inssel.brg (mini_emit_virtual_call): Fix the computation of ins->inst_offset on
64 bit platforms.
* mini-ia64.h mini-ia64.c: Add support for IMT.
* mini-x86.c (mono_arch_emit_prolog): Increase the size allocated for the
prolog. Fixes #331958.
2007-10-15 Zoltan Varga <>
* mini-sparc.h mini-sparc.c: Add support for the common vtable trampoline.
Mon Oct 15 11:18:52 CEST 2007 Paolo Molaro <>
* mini-ppc.c, mini-ppc.h: ppc support for the common vtable
Mon Oct 15 10:41:27 CEST 2007 Paolo Molaro <>
* mini-amd64.c, mini-amd64.h: amd64 support for the common vtable
Mon Oct 15 10:39:26 CEST 2007 Paolo Molaro <>
* mini-x86.c, mini-x86.h: x86 support for the common vtable
Mon Oct 15 10:37:15 CEST 2007 Paolo Molaro <>
* mini-trampolines.c: changed the magic rampoline to understand
the common vtable trampoline method: the method to invoke is
determined by the vtable displacement of the call.
Mon Oct 15 10:35:12 CEST 2007 Paolo Molaro <>
* mini.c, mini.h: register the common vtable trampoline if the
architecture supports it.
Mon Oct 15 09:50:52 CEST 2007 Paolo Molaro <>
* use the correct max length for tls_get.
2007-10-14 Zoltan Varga <>
* mini.c (mono_method_to_ir): Use mini_get_class in CEE_LDELEM_ANY and
CEE_STELEM_ANY. Fixes #333696.
Thu Oct 11 18:04:29 CEST 2007 Paolo Molaro <>
* exceptions-x86.c: provide more graceful handling of the case where
we followed a bogus function pointer from managed code (bug #332866).
2007-10-11 Mark Probst <>
* mini.h, mini.c: Introduced the MonoGenericSharingContext, which
replaces the generic_shared flag and will carry more information
in the future.
* generic-sharing.c: Added mini_type_stack_size() which allows
allows open types if given a generic sharing context.
mini_get_basic_type_from_generic() takes a
MonoGenericSharingContext* instead of a MonoCompile* now.
* mini-alpha.c, mini-amd64.c, mini-arm.c, mini-hppa.c,
mini-ia64.c, mini-mips.c, mini-ppc.c, mini-s390.c, mini-s390x.c,
mini-sparc.c, mini-x86.c: Trivial changes required by the two
changes above. Just passing arguments through to the right
Wed Oct 10 19:44:42 CEST 2007 Paolo Molaro <>
* mini-arm.c: unify the call emission to emit_code_seq().
Wed Oct 10 13:05:46 CEST 2007 Paolo Molaro <>
* tramp-arm.c: reduced the trampoline size.
2007-10-10 Mark Probst <>
* generic-sharing.c, mini.h, mini-amd64.c, mini-x86.c: Moved type
variable handling out of arch-specific code.
Wed Oct 10 10:49:28 CEST 2007 Paolo Molaro <>
* mini-arm.c: implemented fast delegate dispatch.
2007-10-09 Zoltan Varga <>
* mini-amd64.c (mono_arch_compute_omit_fp): Add more checks to ensure
that fp elimination is turned off if the space required by locals is too
big. Fixes #331958.
Tue Oct 9 21:01:03 CEST 2007 Paolo Molaro <>
*, mini-arm.c, mini-arm.h, tramp-arm.c: ported
ARM to the new style trampoline.
2007-10-09 Zoltan Varga <>
* tramp-amd64.c: Rework the specific trampoline code to make it smaller.
* mini-amd64.h mini-amd64.c: Export amd64_patch as mono_amd64_patch.
2007-10-09 Martin Baulig <>
* debug-debugger.h
(MonoDebuggerMetadataInfo): Added `field_info_type_offset' and
Tue Oct 9 09:47:51 CEST 2007 Paolo Molaro <>
* mini-ppc.c, mini-ppc.h, mini-ops.h, inssel-ppc.brg,
removed more internal usage of the r11 register and made it available
to the register allocator.
2007-10-08 Mark Probst <>
* mini.c, mini-amd64.c, mini-x86.c: Allow open generic contexts
when sharing generics and treat type variables as references.
Mon Oct 8 10:55:38 CEST 2007 Paolo Molaro <>
* mini-ppc.c: started removing the internal uses of register r11
to eventually allow the register allocator to manage it as an
additional available register.
Mon Oct 8 14:25:39 CEST 2007 Paolo Molaro <>
* tramp-amd64.c: fixed memory corruption in the trampoline generation.
Mon Oct 8 12:06:33 CEST 2007 Paolo Molaro <>
* tramp-ppc.c, tramp-x86.c: reduce the alignment requirements for
specific trampolines as they are not performance critical as a jump
target (maybe align as before only for AOT code?). This saves about
200 KB of native code on x86 for monodevelop startup.
Mon Oct 8 10:04:40 CEST 2007 Paolo Molaro <>
* tramp-ppc.c: reduce the size of the trampolines, saves 160KB on
monodevelop startup.
2007-10-06 Zoltan Varga <>
* mini-sparc.c (mono_arch_get_vcall_slot_addr): Allow signed displacements.
* mini-sparc.h mini-sparc.c: Implement IMT support.
* tramp-sparc.c (mono_arch_create_trampoline_code): Rework the trampoline code so
its smaller and doesn't clobber sparc_g1.
* mini-sparc.c (mono_arch_get_vcall_slot_addr): Update after trampoline changes.
Fri Oct 5 18:28:11 CEST 2007 Paolo Molaro <>
* mini-ppc.c: optimized the size of the IMT thunks a bit.
Fri Oct 5 18:08:30 CEST 2007 Paolo Molaro <>
* mini-ppc.c: implemented fast delegate invocation.
Fri Oct 5 00:01:05 CEST 2007 Paolo Molaro <>
* mini-ppc.h, mini-ppc.c: IMT support for the PPC architecture.
Thu Oct 4 22:04:49 CEST 2007 Paolo Molaro <>
* mini-ppc.c, mini-ppc.h, tramp-ppc.c, port the PPC
code to the new style trampoline in preparation for IMT support.
Thu Oct 4 19:01:59 CEST 2007 Paolo Molaro <>
* mini-ppc.c, tramp-ppc.c: don't use r13 as it's used by the PPC EABI
systems already. This also reduces the specific trampiline sizes and
prepares for the use of r12 as the IMT identifier register.
Thu Oct 4 16:38:27 CEST 2007 Paolo Molaro <>
* mini-mips.h: endianess fix (simplified from a patch by
Thomas Kunze <>, bug #323737).
Thu Oct 4 14:43:49 CEST 2007 Paolo Molaro <>
* exceptions-ppc.c, mini-ppc.h: refactor to use macros
to access ucontext fields and enable netbsd support
(partially from Magnus Henoch <>).
Thu Oct 4 12:35:27 CEST 2007 Paolo Molaro <>
* patch from Henryk Plötz <> to
use the preprocessor from the CPP env var if it is set.
Wed Oct 3 17:11:38 CEST 2007 Paolo Molaro <>
* mini-trampolines.c: fixed an assertion and moved it earlier in the
code, before interface_offset gets used.
2007-10-02 Zoltan Varga <>
* mini-trampolines.c (mono_convert_imt_slot_to_vtable_slot): Call
mono_class_setup_vtable () before accessing klass->vtable.
2007-10-01 Zoltan Varga <>
* aot-compiler.c (get_plt_index): Rework the handling of wrappers to be not so
Mon Oct 1 15:00:27 CEST 2007 Paolo Molaro <>
* mini.c, mini-trampolines.c, mini.h: enable the lazy filling of the
IMT slots (this saves hundreds of KB of memory in programs like
IronPython and Monodevelop).
Mon Oct 1 14:44:19 CEST 2007 Paolo Molaro <>
* mini.c: print the delegate counter.
Mon Oct 1 14:36:50 CEST 2007 Paolo Molaro <>
* mini-x86.c: make it easier to enable the debugging code for IMT
2007-09-28 Martin Baulig <>
* debug-debugger.h
(MonoDebuggerMetadataInfo): Add `klass_image_offset',
`mono_method_klass_offset' and `mono_method_token_offset'.
2007-09-20 Mark Probst <>
* mini.c: First generics sharing implementation. Can only share
in very simple cases. If sharing doesn't work it falls back to
dedicated compilation.
* mini.h: Flag in MonoCompile to specify whether generic
compilation is shared. Flags enum for marking which generic inst
of a context is used. Prototypes for helper functions.
* generic-sharing.c: Helper functions for generic method sharing.
* optflags-def.h: Optimization flag (gshared) for enabling generic
method sharing added.
* generic-sharing.c added.
2007-09-19 Daniel Nauck <>
* mini.c (mono_thread_abort): fixed typo in r86014. It should be '==' instead of '!='.
2007-09-19 Massimiliano Mantione <>
* mini.c (mono_thread_abort): Correctly handle ThreadAbortException,
fixes bug 325507.
2007-09-19 Martin Baulig <>
* mini.c (mini_cleanup): Only call mono_debugger_cleanup() here;
mono_debug_cleanup() is now part of mono_cleanup().
2007-09-18 Zoltan Varga <>
* driver.c (mono_main): Fix a warning.
2007-09-17 Zoltan Varga <>
* aot-compiler.c: Optimize various parts when processing large assemblies.
Fixes ##325568.
* mini.c (mono_patch_info_hash): Improve hash function.
2007-09-14 Jonathan Chambers <>
* mini-exceptions.c: Add HAVE_UNISTD_H check around include.
Code is contributed under MIT/X11 license.
2007-09-14 Zoltan Varga <>
* mini.c (mini_init): Fix a leak.
* debug-mini.c (mono_debug_free_method_jit_info): Fix a leak.
Fri Sep 14 12:53:13 CEST 2007 Paolo Molaro <>
* mini.c: redirect string.InternalAllocStr() to the managed allocator.
2007-09-14 Zoltan Varga <>
* mini-amd64.c (mono_arch_find_imt_method): Add support for AOT code.
2007-09-13 Zoltan Varga <>
* generics.cs: Add some generics
variance tests.
* inssel.brg: Reorganize the isinst/castclass code to reduce code duplication.
* mini.c (handle_alloc): Enable managed allocators in AOT code.
* aot-compiler.c (encode_patch): Add support for MONO_WRAPPER_ALLOC.
* aot-runtime.c (decode_patch_info): Ditto.
2007-09-12 Jonathan Chambers <>
* mini-x86.c (mono_arch_get_delegate_invoke_impl): Implement
static case. Cache delegates in architecture specific code,
based on number of parameters.
* mini-amd64.c (mono_arch_get_delegate_invoke_impl): Cache delegates
in architecture specific code, based on number of parameters.
* mini-trampolines.c (mono_delegate_trampoline): Architecture specific
caching happen in architecture specific code now.
Code is contributed under MIT/X11 license.
2007-09-12 Jonathan Chambers <>
* mini.h, mini.c, mini-x86.c, mini-amd64.c, mini-hppa.c, mini-mips.c,
mini-s390x.c, mini-arm.c, mini-ia64.c, mini-sparc.c, mini-ppc.c, mini-alpha.c,
mini-s390.c: Add mono_arch_init and mono_arch_cleanup methods.
Code is contributed under MIT/X11 license.
2007-05-15 Massimiliano Mantione <>
* mini.c: (mono_thread_abort) Fixed bug #82416.
Tue Sep 11 16:15:53 CEST 2007 Paolo Molaro <>
* mini.: hook the new managed GC allocation feature into the JIT.
Tue Sep 11 16:14:16 CEST 2007 Paolo Molaro <>
* mini.c: implementation for the new runtime tls opcode.
2007-09-11 Martin Baulig <>
* debug-debugger.h
(MonoDebuggerMetadataInfo): Add `mono_method_flags_offset' and
2007-09-07 Zoltan Varga <>
* driver.c mini.h mini.c: Add a new devel command line option for injecting
async exceptions into a method.
* mini-amd64.h mini-amd64.c: Implement injecting of async exceptions for the
purpose of testing whenever the unwinder works at every instruction.
Thu Sep 6 12:42:14 CEST 2007 Paolo Molaro <>
* mini.c: check accessibility of method used in ldftn (fixes
bug #82635).
2007-09-04 Zoltan Varga <>
* mini-amd64.c (mono_arch_output_basic_block): Fix a warning.
* inssel.brg: Fix a warning.
2007-09-03 Martin Baulig <>
now takes the `main_method' as argument.
2007-09-02 Zoltan Varga <>
* (endfilter): Add missing src1:i argument.
2007-08-30 Jonathan Chambers <>
* driver.c: include the cil-coff.h header on Windows.
Code is contributed under MIT/X11 license.
Thu Aug 30 16:17:23 CEST 2007 Paolo Molaro <>
* mini.c, driver.c: don't include the cil-coff.h header.
Thu Aug 30 14:50:53 CEST 2007 Paolo Molaro <>
* mini.c: flag places that needs fixes fo soft-float support.
Wed Aug 29 18:26:20 CEST 2007 Paolo Molaro <>
* mini.h, inssel-float.brg: fix soft-float constant loads on big
endian systems (partially from Dean Jenkins, bug #81924).
2007-08-28 Mark Probst <>
* mini.c (check_linkdemand): Remove embedded reference object in
call to LinkDemandSecurityException.
(mono_jit_compile_method_inner): Call LinkDemandSecurityException
with an IntPtr instead of a reference object.
2007-08-28 Zoltan Varga <>
* mini.c (handle_initobj): Handle alignment properly.
* inssel.brg (mini_emit_memset): Ditto.
* inssel.brg (mini_emit_memcpy): Ditto.
* inssel-sparc.brg: Ditto.
* mini.h mini.c inssel-*.brg: Pass alignment information to OP_MEMCPY/MEMSET.
2007-08-26 Zoltan Varga <>
* mini-exceptions.c (mono_handle_exception_internal): Skip the first frame for
exceptions raised in unmanaged code. Fixes part of #82594.
2007-08-24 Mark Probst <>
* mini.c (mono_method_to_ir), declsec.c
(mono_declsec_linkdemand_aptc): Fixed custom attr leaks.
2007-08-22 Martin Baulig <>
* debug-mini.h
(MonoDebuggerThreadInfo): New typedef.
(mono_debugger_thread_table): New global variable.
(mono_debugger_thread_created): New public function.
(mono_debugger_thread_cleanup): New public function.
* debug-debugger.h
- removed `get_current_thread' and `lookup_assembly'.
- removed `data_table'.
- added `thread_table'.
* mini.c
(mono_thread_start_cb): Call mono_debugger_thread_created().
(mono_thread_attach_cb): Likewise.
(mini_thread_cleanup): Call mono_debugger_thread_cleanup().
(mini_cleanup): Move mono_debug_cleanup() down, after free'ing the
initial domain.
* driver.c (mono_main): Move mono_debug_init() up, before calling
mini_init(); mono_debug_init_1() and mono_debug_init_2() are gone.
Tue Aug 21 16:40:04 CEST 2007 Paolo Molaro <>
* mini-x86.c, inssel-x86.brg: group multiple stack adjustments
together when passing several arguments of type double (gives a small
speedup and saves a few bytes of generated code).
2007-08-20 Jb Evain <>
* mini.c (mono_method_to_ir): fix leak on InvalidProgramException.
2007-08-20 Jb Evain <>
* mini.c (mono_method_to_ir): throw MethodAccessException
and FieldAccessException instead of InvalidProgramException.
2007-08-20 Mark Probst <>
* mini.c: CoreCLR security checks.
* mini.h: Removed MonoSecurityMode (moved to
metadata/security-manager.h) and mono_security_mode global var
(replaced by set/get functions in security-manager.h).
* driver.c: Added "core-clr-test" security mode for testing. Used
set-function for setting security mode.
2007-08-17 Mark Probst <>
* mini.c: MonoJitInfo's are freed hazardously now. Statistics for
the new jit_info_table.
* driver.c: Test code for the new jit_info_table (enabled by the
2007-08-14 Zoltan Varga <>
* tramp-amd64.c (mono_arch_nullify_class_init_trampoline): Fix
detection of call <REG> instruction sequence. Fixes build on freebsd.
2007-08-13 Zoltan Varga <>
* mini-exceptions.c: Fix a warning.
2007-08-11 Zoltan Varga <>
* exceptions-amd64.c (mono_arch_handle_altstack_exception): Enable the new
stack overflow handling code on amd64 too.
* mini-exceptions.c (mono_setup_altstack): Make this use
mono_thread_get_stack_bounds ().
* mini-x86.h: Disable sigaltstack on solaris x86.
2007-08-10 Zoltan Varga <>
* mini-exceptions.c (mono_setup_altstack): Enable this to work on solaris x86.
2007-08-10 Geoff Norton <>
* tramp-x86.c: Remove some unneeded alignment changes on Apple. Fixes #82387.
2007-08-08 Zoltan Varga <>
* mini-exceptions.c (mono_print_thread_dump): Enable this on amd64 too.
* mini-amd64.h (MONO_INIT_CONTEXT_FROM_FUNC): Fix a warning.
2007-08-03 Neale Ferguson <>
* mini-s390.c (add_general): Adjust offset calculation to take into account of rounding up
due to alignment.
Thu Aug 2 17:36:22 CEST 2007 Paolo Molaro <>
* mini-ppc.c: avoid an invalid encoding of unsigned right shift by 0
to be emitted (bug #82281).
2007-08-01 Martin Baulig <>
Merged the `debugger-dublin' branch.
* debug-debugger.h (MonoDebuggerInfo):
Removed the `old_*' compatibility entries.
Added `debugger_version' and `data_table'.
Renamed `get_method_addr_or_bpt' -> `insert_breakpoint'.
Renamed `remove_method_breakpoint' -> `remove_breakpoint'.
* debug-mini.c
(MiniDebugMethodBreakpointInfo): Add `address_list'.
(mono_debugger_check_breakpoints): Take a `MonoDebugMethodAddress *'
instead of a `gconstpointer'.
(mono_debugger_insert_method_breakpoint): Return a
`MonoDebugMethodAddressList *'.
2007-06-28 Martin Baulig <>
* debug-debugger.h (MonoDebuggerInfo): Added `debugger_version'.
2007-08-01 Zoltan Varga <>
* mini-amd64.h (MONO_INIT_CONTEXT_FROM_FUNC): Avoid using
__builtin_frame_address () since it is broken on older gcc versions.
Tue Jul 31 17:34:42 CEST 2007 Paolo Molaro <>
* mini.c, mini.h, mini-exceptions.c: added a bit of documentation
on the stack overflow handling and made the managed stack overflows
catchable in most cases using soft guard pages.
* exceptions-x86.c: added code to restore the protection in the soft
guard pages at the end of exception handling.
2007-07-31 Zoltan Varga <>
* mini.c (SIG_HANDLER_SIGNATURE): Fix a warning.
Mon Jul 30 17:43:13 CEST 2007 Paolo Molaro <>
* exceptions-ppc.c, mini-ppc.h: arch-specific stack overflow
exception handling.
Mon Jul 30 17:38:13 CEST 2007 Paolo Molaro <>
* mini-alpha.h, mini-ia64.h, mini-sparc.h: disable the altstack
signal handling support until it has been ported to the new mechanism.
* mini.c: fixed stack overflow detection and use the new
architecture code to handle signals on the altstack.
Mon Jul 30 17:33:02 CEST 2007 Paolo Molaro <>
* exceptions-amd64.c, mini-amd64.h: amd64 code to handle
stack overflows on the alt stack.
Mon Jul 30 17:29:56 CEST 2007 Paolo Molaro <>
* exceptions-x86.c, mini-x86.h, mini.h: new code to handle
stack overflows on the alt stack.
Mon Jul 30 11:50:06 CEST 2007 Paolo Molaro <>
* exceptions-ppc.c: cleanup preparing for altstack support.
Mon Jul 30 11:31:24 CEST 2007 Paolo Molaro <>
* exceptions-arm.c: cleanup preparing for altstack support.
2007-07-27 Mark Probst <>
* mini.c (print_jit_stats): Output hazard pointer stats.
2007-07-26 Mark Probst <>
* driver.c, mini.c: Replaced security mode flags with a single
enum variable.
Thu Jul 26 20:12:12 CEST 2007 Paolo Molaro <>
* mini.c, mini-exceptions.c: cleanup the sigaltstack code.
2007-07-25 Mark Probst <>
* mini.c, mini.h, driver.c (mono_main): Added command-line flag
(which doesn't do anything yet) for activating Core CLR
(Silverlight) security.
Tue Jul 24 21:16:17 CEST 2007 Paolo Molaro <>
* mini-codegen.c: work around a possible gcc bug on arm.
Tue Jul 24 17:20:19 CEST 2007 Paolo Molaro <>
* driver.c, mini-x86.h, mini-amd64.h: print a nice error
message for platforms that don't support AOT compilation.
Mon Jul 23 10:29:29 CEST 2007 Paolo Molaro <>
* mini.h, mini.c, driver.c: temporary smcs hack.
Mon Jul 23 09:29:34 CEST 2007 Paolo Molaro <>
* mini-arm.h, mini-arm.c: arm EABI fixes.
2007-07-22 Zoltan Varga <>
* exceptions-x86.c (mono_arch_find_jit_info): Handle the lmf->method == NULL
* tramp-x86.c (mono_arch_create_trampoline_code): Only set lmf->method for
trampolines taking a method argument.
* mini-x86.h (MonoLMF): Add an 'esp' field plus comments.
* mini-x86.c (mono_arch_emit_prolog): Update after changes to the LMF structure.
* tramp-x86.c (mono_arch_create_trampoline_code): Ditto.
* exceptions-x86.c (mono_arch_get_jit_info): Properly clean up the stack after
JIT compilation throws an exception. Fixes #82050.
2007-07-19 Mark Probst <>
* mini.c: Removed the MonoLoaderErrorKind enum and replaced it
with the MONO_EXCEPTION_ defines.
2007-07-17 Zoltan Varga <>
* mini-amd64.c (mono_arch_find_imt_method): Handle mov reg,IMM64 case. Fixes
* mini-amd64.c (mono_arch_find_imt_method): Add some debug code to help find out
the cause of an assertion.
Mon Jul 16 19:31:21 CEST 2007 Paolo Molaro <>
* mini.c, jit-icalls.c: mono_get_inflated_method() is obsolete,
2007-07-15 Zoltan Varga <>
* mini-amd64.c (mono_arch_build_imt_thunk): Remove the non-32bit MonoMethod
assert. Should fix #82103.
2007-07-14 Zoltan Varga <>
* mini-exceptions.c (mono_jit_walk_stack_from_ctx): Use MONO_CONTEXT_GET_SP ()
here too. Fixes #82095.
* mini-amd64.c (mono_arch_build_imt_thunk): Add support for non-32bit MonoMethod
* mini-amd64.c (mono_arch_get_vcall_slot_addr): Add a couple asserts.
* mini-amd64.h: Enable IMT for amd64.
* mini-amd64.c (mono_arch_build_imt_thunk): Optimize IMT thunk size.
2007-07-12 Zoltan Varga <>
* mini-amd64.c (mono_arch_get_vcall_slot_addr): Add support for IMT call sequences.
2007-07-12 Mark Probst <>
* mini.c (check_linkdemand, mono_method_to_ir): Abort compilation
as soon as check_linkdemand sets an exception_type.
Thu Jul 12 12:18:22 CEST 2007 Paolo Molaro <>
* mini-x86.c: fixed offsets for IMT call sequence.
* mini-x86.h: enable IMT again.
2007-07-11 Zoltan Varga <>
* trace.c (mono_trace_enter_method): Decode MonoType too.
* mini-amd64.c (mono_arch_get_vcall_slot_addr): Handle signed displacements too.
* mini.h mini-x86.h mini-trampolines.c: Change the signature of mono_arch_find_imt_method () to pass the calling code address too.
* mini-amd64.c: Add preliminary IMT implementation.
Wed Jul 11 18:21:30 CEST 2007 Paolo Molaro <>
* mini-x86.c: adjusted mono_arch_get_vcall_slot_addr () to
understand the new IMT-base interface invocation (thanks to
Daniel Nauck for the report and the remote debugging session).
Wed Jul 11 14:54:39 CEST 2007 Paolo Molaro <>
* mini-x86.c: size and speed optimizations for the IMT bsearch.
2007-07-11 Zoltan Varga <>
* (aotcheck): Make this actually use the AOTed code.
Wed Jul 11 12:41:32 CEST 2007 Paolo Molaro <>
* mini-trampolines.c: implement AOT IMT support.
* mini-x86.h: enable IMT support for wider testing.
2007-07-10 Zoltan Varga <>
* inssel.brg (emit_imt_argument): Add aot support here.
* aot-runtime.c (decode_patch_info): Fix reading of MONO_PATCH_INFO_METHOD.
Tue Jul 10 17:50:58 CEST 2007 Paolo Molaro <>
* mini-x86.c, mini-x86.h, tramp-x86.c: x86 arch-specific changes
of the IMT implementation, partially from massi, with my
implementation of the bsearch sequence. Disabled by default until
the AOT code is implemented.
2007-07-10 Zoltan Varga <>
* The source argument of sext_i1/i2 must by a byte reg.
* inssel-x86.brg: Add reg:ldind.i1(regvar) rules. Fixes #82056.
Tue Jul 10 17:33:12 CEST 2007 Paolo Molaro <>
* inssel.brg, mini.c, mini.h, mini-trampolines.c:
arch-independent IMT JIT code from Massimiliano
Mantione ( with small cleanups from me.
Tue Jul 10 13:07:24 CEST 2007 Paolo Molaro <>
* fix svn invocation to get the svn revision to be
independent of the local language (build fix).
2007-07-09 Mark Probst <>
* mini.c (inline_method): Reset cfg->exception_type if the
inlining is aborted. Fixes: 82049.
Mon Jul 9 17:26:47 CEST 2007 Paolo Molaro <>
* mini.c: remove assert from exception handling code when exception_ptr
is not set.
2007-07-05 Zoltan Varga <>
* mini.c (mono_codegen): Add an assert.
* mini-x86.c (mono_arch_emit_prolog): Allocate space for the profiler method
enter and leave code.
* mini-amd64.c (mono_arch_emit_prolog): Likewise.