xamarin-macios/runtime
Thays Grazia 7cd34d2501
[debugger] Work around a debugger issue when using the interpreter (#15451)
There's a bug in the Mono runtime where the interpreter does not disable optimizations when the debugger is attached, which leads to the interpreter optimizing code and the debugger ending up rather confused.

The bug is fixed in the Mono runtime (https://github.com/dotnet/runtime/pull/71436), but there's no immediate way for the runtime to release this fix, so here we're implementing a workaround that disables interpreter optimizations if the debugging is enabled. It's somewhat clunky because the Mono external API wasn't designed for this, so we have to abuse the API a bit to accomplish the effect we want.

This is somewhat risky (since we're changing the startup path in a pretty big way), but there's an escape hatch via an environment variable, and also the workaround will not be in effect for release builds.

While the runtime issue exists in legacy mono/mono as well, we'll fix the Mono runtime for legacy, because we don't have to wait to consume legacy mono (https://github.com/xamarin/xamarin-macios/pull/15507). This means that the workaround is for .NET scenarios only.

Co-authored-by: Manuel de la Pena <mandel@microsoft.com>
Co-authored-by: Rolf Bjarne Kvinge <rolf@xamarin.com>
2022-07-15 13:46:14 +02:00
..
xamarin [runtime] Handle fatal managed exceptions a bit better in the runtime. (#15029) 2022-05-16 21:31:37 +02:00
.gitignore [runtime] Move MonoVM-specific initialization to MonoVM-specific code. (#10899) 2021-03-18 07:23:39 +01:00
COOP.md [src] Remove ObjectWrapper. 2020-05-04 11:31:19 +02:00
Delegates.cs.t4 [dotnet][linker] Eliminate code that is only required for CoreCLR on iOS and tvOS (#11577) 2021-05-18 09:33:41 -04:00
EXCEPTIONS.md [runtime] Improve documentation about exceptions a little bit. 2016-06-08 20:11:07 +02:00
Makefile Make our local .NET the default .NET for the build. (#15086) 2022-06-07 10:11:02 +02:00
README.md Initial review pass for COOP for watchOS. 2016-05-26 17:47:10 +02:00
Xamarin.framework-iphoneos.Info.plist [runtime] Split the build differently: build libraries for simulator and device separately. (#7143) 2019-10-03 16:38:44 +02:00
Xamarin.framework-iphonesimulator.Info.plist [runtime] Split the build differently: build libraries for simulator and device separately. (#7143) 2019-10-03 16:38:44 +02:00
Xamarin.framework-tvos.Info.plist Rename bundle identifier for the frameworks we ship. Fixes #6920. (#6926) 2019-09-06 09:30:49 -07:00
Xamarin.framework-tvsimulator.Info.plist [runtime] Split the build differently: build libraries for simulator and device separately. (#7143) 2019-10-03 16:38:44 +02:00
Xamarin.framework-watchos.Info.plist Rename bundle identifier for the frameworks we ship. Fixes #6920. (#6926) 2019-09-06 09:30:49 -07:00
Xamarin.framework-watchsimulator.Info.plist [runtime] Split the build differently: build libraries for simulator and device separately. (#7143) 2019-10-03 16:38:44 +02:00
bindings-generator.cs [C] Clear OpenTK namespace (#13767) 2022-02-14 18:50:23 +01:00
bindings-generator.csproj Fix some whitespace issues in various files. (#12399) 2021-08-11 10:06:46 +02:00
bindings.h [runtime] Use the correct underlying types for our own nfloat/n(u)int types. (#12714) 2021-09-15 09:17:43 +02:00
bindings.m [runtime] Return the exception from wrapper methods for exception marshalling. (#11382) 2021-05-04 08:25:38 +02:00
coreclr-bridge.m [runtime] Improve error reporting when calling mono_assembly_open. (#15139) 2022-06-03 10:41:43 +02:00
delegates.h.t4 [runtime] Support automatic GCHandle -> MonoObject* conversion for parameters and return values when calling managed delegates. 2020-05-04 11:22:26 +02:00
delegates.inc.t4 [runtime] Implement functions for getting and setting array elements for CoreCLR. (#11519) 2021-05-13 07:11:49 +02:00
delegates.t4 [runtime] Don't call 'retain' and 'autorelease' selectors on returned NativeObjects. (#14690) 2022-04-20 14:09:09 +02:00
exports.t4 [dotnet/runtime] Fix a few issues with regards to extensions in .NET. Fixes #13742. (#14115) 2022-02-15 08:27:25 +01:00
extension-main.m [xcode12] Bump for beta 1 (#8935) 2020-06-26 14:02:44 -04:00
frameworks.h [runtime] MapKit is available on macOS/arm64. (#11363) 2021-04-29 14:45:58 +02:00
launcher.h Build our runtime. 2016-04-24 14:47:24 -04:00
launcher.m [CoreCLR] Add support for mono_assembly_open. 2021-03-25 07:32:32 +01:00
libmonotouch.csproj Fix some whitespace issues in various files. (#12399) 2021-08-11 10:06:46 +02:00
libxammac.csproj Fix some whitespace issues in various files. (#12399) 2021-08-11 10:06:46 +02:00
main-internal.h [xcode12] Bump for beta 1 (#8935) 2020-06-26 14:02:44 -04:00
mono-runtime.h.t4 [tools] Use MONO_AOT_MODE_INTERP_ONLY instead of MONO_AOT_MODE_INTERP for x86_64. (#15429) 2022-07-12 09:56:51 +02:00
mono-runtime.m.t4 [runtime] Deal with the rest of the Mono Embedding API for CoreCLR. (#11642) 2021-05-21 07:53:41 +02:00
monotouch-debug.h [runtime] Move a few mono function declaration to the generated logic for mono function declarations instead of doing it manually. (#10849) 2021-03-12 07:37:27 +01:00
monotouch-debug.m [runtime] Remove dead code. (#15479) 2022-07-13 20:33:40 +02:00
monotouch-main.m [runtime] Handle fatal managed exceptions a bit better in the runtime. (#15029) 2022-05-16 21:31:37 +02:00
monotouch-support.h [Runtime] Move some of the changes back to int. (#7529) (#7606) 2019-12-16 22:06:51 -05:00
monovm-bridge.m [debugger] Work around a debugger issue when using the interpreter (#15451) 2022-07-15 13:46:14 +02:00
nsstring-localization.m Build our runtime. 2016-04-24 14:47:24 -04:00
product.h [.NET] Rename our product assemblies. Fixes #13748. (#13847) 2022-02-16 21:30:32 +01:00
runtime-generated.h.t4 [runtime] Add support for generating managed delegates only for CoreCLR. 2021-03-25 07:32:32 +01:00
runtime-internal.h [runtime] Add support for tracking created and destroyed MonoObject* instances for CoreCLR. (#11657) 2021-05-25 08:19:27 +02:00
runtime.m [runtime] Adjust exception handling to always return managed exceptions if so requested. (#15432) 2022-07-13 10:59:40 +02:00
shared.h [runtime] Move the code to wrap every managed thread with an NSAutoreleasePool to the MonoVM bridge. (#11257) 2021-04-21 16:21:09 +02:00
shared.m [CoreCLR] Implement xamarin_gchandle_get_target. (#11333) 2021-04-27 14:59:03 +02:00
slinked-list.h Build our runtime. 2016-04-24 14:47:24 -04:00
trampolines-arm64-asm.s [runtime] Add correct prologue/epilogue to xamarin_arm64_common_trampoline 2021-05-11 15:54:39 +02:00
trampolines-arm64-objc_msgSend.inc.s [runtime] Be a bit defensive after handling Objective-C exceptions and return a consistent value. (#11601) 2021-05-19 07:35:46 +02:00
trampolines-arm64-objc_msgSend.s [runtime] Implement xamarin_dyn_objc_msgSend for ARM64. 2021-05-11 15:54:39 +02:00
trampolines-arm64-objc_msgSendSuper.s [runtime] Implement xamarin_dyn_objc_msgSend for ARM64. 2021-05-11 15:54:39 +02:00
trampolines-arm64.h Xamarin.Mac native Apple Silicon targetting support (#10115) 2021-03-17 21:48:02 -04:00
trampolines-arm64.m Use pointer-sized GCHandles everywhere. (#10597) 2021-02-11 08:18:38 +01:00
trampolines-i386-asm.s [runtime] Rename CallState to XamarinCallState to keep the public namespace cleaner. (#5940) 2019-04-23 16:53:35 +01:00
trampolines-i386-objc_msgSend-copyframe.inc [runtime] Don't store xmm registers where we store other registers. 2016-05-17 11:24:02 +02:00
trampolines-i386-objc_msgSend-post.inc [runtime] Make sure the stack is correctly aligned to 16 bytes. 2016-05-17 11:24:03 +02:00
trampolines-i386-objc_msgSend-pre.inc [runtime] Make sure the stack is correctly aligned to 16 bytes. 2016-05-17 11:24:03 +02:00
trampolines-i386-objc_msgSend.s Implement support for exception marshalling. 2016-05-17 11:23:48 +02:00
trampolines-i386-objc_msgSendSuper.s Implement support for exception marshalling. 2016-05-17 11:23:48 +02:00
trampolines-i386-objc_msgSendSuper_stret.s Implement support for exception marshalling. 2016-05-17 11:23:48 +02:00
trampolines-i386-objc_msgSend_stret.s Implement support for exception marshalling. 2016-05-17 11:23:48 +02:00
trampolines-i386.h [runtime] Rename CallState to XamarinCallState to keep the public namespace cleaner. (#5940) 2019-04-23 16:53:35 +01:00
trampolines-i386.m Use pointer-sized GCHandles everywhere. (#10597) 2021-02-11 08:18:38 +01:00
trampolines-internal.h Use pointer-sized GCHandles everywhere. (#10597) 2021-02-11 08:18:38 +01:00
trampolines-invoke.m [Xcode 13.3] Initial commit to Xcode 13.3 release 2022-03-14 22:54:33 -04:00
trampolines-varargs.h [runtime] Rename CallState to XamarinCallState to keep the public namespace cleaner. (#5940) 2019-04-23 16:53:35 +01:00
trampolines-varargs.m Use pointer-sized GCHandles everywhere. (#10597) 2021-02-11 08:18:38 +01:00
trampolines-x86_64-asm.s [runtime] Fix crash in the x86_64 dynamic registrar. (#5989) 2019-05-06 07:25:49 +02:00
trampolines-x86_64-objc_msgSend-copyframe.inc Implement support for exception marshalling. 2016-05-17 11:23:48 +02:00
trampolines-x86_64-objc_msgSend-post.inc Implement support for exception marshalling. 2016-05-17 11:23:48 +02:00
trampolines-x86_64-objc_msgSend-pre.inc Implement support for exception marshalling. 2016-05-17 11:23:48 +02:00
trampolines-x86_64-objc_msgSend.s Implement support for exception marshalling. 2016-05-17 11:23:48 +02:00
trampolines-x86_64-objc_msgSendSuper.s Implement support for exception marshalling. 2016-05-17 11:23:48 +02:00
trampolines-x86_64-objc_msgSendSuper_stret.s Implement support for exception marshalling. 2016-05-17 11:23:48 +02:00
trampolines-x86_64-objc_msgSend_stret.s Implement support for exception marshalling. 2016-05-17 11:23:48 +02:00
trampolines-x86_64.h [runtime] Fix crash in the x86_64 dynamic registrar. (#5989) 2019-05-06 07:25:49 +02:00
trampolines-x86_64.m Use pointer-sized GCHandles everywhere. (#10597) 2021-02-11 08:18:38 +01:00
trampolines.m [runtime] Fix 'skip_nested_brace' to not read past the string. Fixes #15253. (#15257) 2022-06-14 14:26:07 +02:00
xamarin-support.m [dotnet] Build macOS/.NET for ARM64 as well. (#10959) 2021-03-25 07:26:48 +01:00

README.md

Native runtime

This directory contains the native runtime for Xamarin.iOS and Xamarin.Mac.

Cooperative GC

See COOP.md

Generated code

A few files are generated automatically:

delegates.h|inc, Delegates.cs

These files contain the code required to glue the native runtime and the managed runtime.

mono-runtime.m, xamarin/mono-runtime.h

These files contain code that makes other code, consumers of the mono runtime, oblivious to whether the mono runtime is linked statically, dynamically, or using dlopen at runtime.

If you need to use a new function from the Mono headers, add it to exports.t4.

If you need a new enum / constant / typedef / etc, add it to mono-runtime.h.t4.

Shipped headers

These are the headers shipped with XI/XM (they're not for public consumption, but we need them to build generated code on customers machine, in particular main.m and registrar.m)

xamarin/runtime.h xamarin/trampolines.h xamarin/main.h xamarin/xamarin.h