diff --git a/CHANGELOG.md b/CHANGELOG.md index 55a88e850..9dbaa6e7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Fixes + +- Fixed IL2CPP line number processor to no longer crash in Unity 2023 builds ([#1450](https://github.com/getsentry/sentry-unity/pull/1450)) + ### Dependencies - Bump Cocoa SDK from v8.10.0 to v8.11.0 ([#1433](https://github.com/getsentry/sentry-unity/pull/1433)) diff --git a/package-dev/Runtime/SentryInitialization.cs b/package-dev/Runtime/SentryInitialization.cs index 7fff137de..e2d3406f5 100644 --- a/package-dev/Runtime/SentryInitialization.cs +++ b/package-dev/Runtime/SentryInitialization.cs @@ -140,7 +140,7 @@ private Il2CppMethods _il2CppMethods ; #else = new Il2CppMethods( - il2cpp_gchandle_get_target, + Il2CppGcHandleGetTargetShim, Il2CppNativeStackTraceShim, il2cpp_free); @@ -189,10 +189,21 @@ void SwapHexByte(IntPtr buffer, Int32 offset1, Int32 offset2) return Marshal.PtrToStringAnsi(debugIdPtr); } +#if UNITY_2023 + private static IntPtr Il2CppGcHandleGetTargetShim(IntPtr gchandle) => il2cpp_gchandle_get_target(gchandle); + + // Available in Unity `2013.3.12f1` (and later) + // Il2CppObject* il2cpp_gchandle_get_target(Il2CppGCHandle gchandle) + [DllImport("__Internal")] + private static extern IntPtr il2cpp_gchandle_get_target(IntPtr gchandle); +#else + private static IntPtr Il2CppGcHandleGetTargetShim(IntPtr gchandle) => il2cpp_gchandle_get_target(gchandle.ToInt32()); + // Available in Unity `2019.4.34f1` (and later) // Il2CppObject* il2cpp_gchandle_get_target(uint32_t gchandle) [DllImport("__Internal")] private static extern IntPtr il2cpp_gchandle_get_target(int gchandle); +#endif // Available in Unity `2019.4.34f1` (and later) // void il2cpp_free(void* ptr) diff --git a/src/Sentry.Unity/ISentryUnityInfo.cs b/src/Sentry.Unity/ISentryUnityInfo.cs index 1150bacaf..8a44c124e 100644 --- a/src/Sentry.Unity/ISentryUnityInfo.cs +++ b/src/Sentry.Unity/ISentryUnityInfo.cs @@ -25,7 +25,7 @@ public Il2CppMethods( public Il2CppFree Il2CppFree { get; } } - public delegate IntPtr Il2CppGcHandleGetTarget(int gchandle); + public delegate IntPtr Il2CppGcHandleGetTarget(IntPtr gchandle); public delegate void Il2CppNativeStackTrace( IntPtr exc, out IntPtr addresses, diff --git a/src/Sentry.Unity/Il2CppEventProcessor.cs b/src/Sentry.Unity/Il2CppEventProcessor.cs index 3df18060a..5e2ac549e 100644 --- a/src/Sentry.Unity/Il2CppEventProcessor.cs +++ b/src/Sentry.Unity/Il2CppEventProcessor.cs @@ -322,7 +322,7 @@ private NativeStackTrace GetNativeStackTrace(Exception e) var addresses = IntPtr.Zero; try { - var gchandle = GCHandle.ToIntPtr(gch).ToInt32(); + var gchandle = GCHandle.ToIntPtr(gch); var addr = _il2CppMethods.Il2CppGcHandleGetTarget(gchandle); var numFrames = 0;