VirtualBox

Changeset 103377 in vbox for trunk


Ignore:
Timestamp:
Feb 15, 2024 3:14:37 AM (8 months ago)
Author:
vboxsync
Message:

VMM/IEM: Implemented iemNativeTbLongJmp and fixed the associated code for arm64, then enabled it for darwin.arm64 to avoid the libunwind troubles on 13.x. bugref:10370

Location:
trunk/src/VBox/VMM
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/Makefile.kmk

    r103181 r103377  
    267267  VBoxVMM_SOURCES.amd64 += \
    268268        VMMAll/IEMAllN8veHlpA.asm
     269  VBoxVMM_SOURCES.arm64 += \
     270        VMMAll/IEMAllN8veHlpA-arm64.S
    269271  if "$(KBUILD_TARGET_ARCH)" == "arm64" && defined(VBOX_WITH_IEM_USING_CAPSTONE_DISASSEMBLER) # temp hack
    270272   VBoxVMM_DEFS        += VBOX_WITH_IEM_USING_CAPSTONE_DISASSEMBLER
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompiler.cpp

    r103376 r103377  
    59685968     * return address our selves here.  We save all non-volatile registers.
    59695969     */
    5970     uint32_t * const pu32CodeBuf = iemNativeInstrBufEnsure(pReNative, off, 10);
     5970    uint32_t * const pu32CodeBuf = iemNativeInstrBufEnsure(pReNative, off, 16);
    59715971
    59725972# ifdef RT_OS_DARWIN /** @todo This seems to be requirement by libunwind for JIT FDEs. Investigate further as been unable
     
    60046004
    60056005    /* mov r28, r0  */
    6006     off = iemNativeEmitLoadGprFromGpr(pReNative, off, IEMNATIVE_REG_FIXED_PVMCPU, IEMNATIVE_CALL_ARG0_GREG);
     6006    off = iemNativeEmitLoadGprFromGprEx(pu32CodeBuf, off, IEMNATIVE_REG_FIXED_PVMCPU, IEMNATIVE_CALL_ARG0_GREG);
    60076007    /* mov r27, r1  */
    6008     off = iemNativeEmitLoadGprFromGpr(pReNative, off, IEMNATIVE_REG_FIXED_PCPUMCTX, IEMNATIVE_CALL_ARG1_GREG);
     6008    off = iemNativeEmitLoadGprFromGprEx(pu32CodeBuf, off, IEMNATIVE_REG_FIXED_PCPUMCTX, IEMNATIVE_CALL_ARG1_GREG);
    60096009
    60106010# ifdef VBOX_WITH_IEM_NATIVE_RECOMPILER_LONGJMP
    60116011    /* Save the frame pointer. */
    6012     off = iemNativeEmitStoreGprToVCpuU64Ex(pbCodeBuf, off, ARMV8_A64_REG_BP, RT_UOFFSETOF(VMCPUCC, iem.s.pvTbFramePointerR3),
     6012    off = iemNativeEmitStoreGprToVCpuU64Ex(pu32CodeBuf, off, ARMV8_A64_REG_BP, RT_UOFFSETOF(VMCPUCC, iem.s.pvTbFramePointerR3),
    60136013                                           ARMV8_A64_REG_X2);
    60146014# endif
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r103376 r103377  
    9595 * non-volatile (and does something even more crazy for ARM), this probably
    9696 * won't work reliably on Windows. */
    97 #if defined(DOXYGEN_RUNNING) /*|| defined(RT_ARCH_AMD64)*/
     97#if defined(DOXYGEN_RUNNING) || (!defined(RT_OS_WINDOWS) && (defined(RT_ARCH_ARM64) /*|| defined(_RT_ARCH_AMD64)*/))
    9898# define VBOX_WITH_IEM_NATIVE_RECOMPILER_LONGJMP
    9999#endif
    100100#ifdef VBOX_WITH_IEM_NATIVE_RECOMPILER_LONGJMP
    101101# if !defined(IN_RING3) \
    102   || !defined(RT_ARCH_AMD64) \
    103102  || !defined(VBOX_WITH_IEM_RECOMPILER) \
    104103  || !defined(VBOX_WITH_IEM_NATIVE_RECOMPILER)
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette