From 5e0f8e873857ce3ca3f532aff0936beb28e412c8 Mon Sep 17 00:00:00 2001 From: gdkchan Date: Tue, 10 Jan 2023 19:16:59 -0300 Subject: Implement JIT Arm64 backend (#4114) * Implement JIT Arm64 backend * PPTC version bump * Address some feedback from Arm64 JIT PR * Address even more PR feedback * Remove unused IsPageAligned function * Sync Qc flag before calls * Fix comment and remove unused enum * Address riperiperi PR feedback * Delete Breakpoint IR instruction that was only implemented for Arm64 --- .../Signal/UnixSignalHandlerRegistration.cs | 45 ++++++++++++++-------- 1 file changed, 30 insertions(+), 15 deletions(-) (limited to 'ARMeilleure/Signal/UnixSignalHandlerRegistration.cs') diff --git a/ARMeilleure/Signal/UnixSignalHandlerRegistration.cs b/ARMeilleure/Signal/UnixSignalHandlerRegistration.cs index 945a01da..22009240 100644 --- a/ARMeilleure/Signal/UnixSignalHandlerRegistration.cs +++ b/ARMeilleure/Signal/UnixSignalHandlerRegistration.cs @@ -3,23 +3,23 @@ using System.Runtime.InteropServices; namespace ARMeilleure.Signal { - [StructLayout(LayoutKind.Sequential, Pack = 1)] - unsafe struct SigSet + static partial class UnixSignalHandlerRegistration { - fixed long sa_mask[16]; - } + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public unsafe struct SigSet + { + fixed long sa_mask[16]; + } - [StructLayout(LayoutKind.Sequential, Pack = 1)] - struct SigAction - { - public IntPtr sa_handler; - public SigSet sa_mask; - public int sa_flags; - public IntPtr sa_restorer; - } + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct SigAction + { + public IntPtr sa_handler; + public SigSet sa_mask; + public int sa_flags; + public IntPtr sa_restorer; + } - static partial class UnixSignalHandlerRegistration - { private const int SIGSEGV = 11; private const int SIGBUS = 10; private const int SA_SIGINFO = 0x00000004; @@ -27,9 +27,24 @@ namespace ARMeilleure.Signal [LibraryImport("libc", SetLastError = true)] private static partial int sigaction(int signum, ref SigAction sigAction, out SigAction oldAction); + [LibraryImport("libc", SetLastError = true)] + private static partial int sigaction(int signum, IntPtr sigAction, out SigAction oldAction); + [LibraryImport("libc", SetLastError = true)] private static partial int sigemptyset(ref SigSet set); + public static SigAction GetSegfaultExceptionHandler() + { + int result = sigaction(SIGSEGV, IntPtr.Zero, out SigAction old); + + if (result != 0) + { + throw new InvalidOperationException($"Could not get SIGSEGV sigaction. Error: {result}"); + } + + return old; + } + public static SigAction RegisterExceptionHandler(IntPtr action) { SigAction sig = new SigAction @@ -49,7 +64,7 @@ namespace ARMeilleure.Signal if (OperatingSystem.IsMacOS()) { - result = sigaction(SIGBUS, ref sig, out SigAction oldb); + result = sigaction(SIGBUS, ref sig, out _); if (result != 0) { -- cgit v1.2.3