VirtualBox

Ignore:
Timestamp:
Nov 9, 2022 9:15:54 PM (2 years ago)
Author:
vboxsync
Message:

ValKit/bs3-cpu-basic-2: Added tests for the indirect call instructions. bugref:9898

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-basic-2-x0.c

    r97477 r97489  
    36483648PROTO_ALL(bs3CpuBasic2_call_jv__ud2);
    36493649PROTO_ALL(bs3CpuBasic2_call_jv_back__ud2);
     3650PROTO_ALL(bs3CpuBasic2_call_ind_mem__ud2);
     3651PROTO_ALL(bs3CpuBasic2_call_ind_xAX__ud2);
     3652PROTO_ALL(bs3CpuBasic2_call_ind_xDI__ud2);
     3653FNBS3FAR  bs3CpuBasic2_call_ind_r9__ud2_c64;
    36503654
    36513655PROTO_ALL(bs3CpuBasic2_jmp_opsize_begin);
     
    36593663PROTO_ALL(bs3CpuBasic2_call_jv_opsize__ud2);
    36603664PROTO_ALL(bs3CpuBasic2_call_jv_opsize_back__ud2);
     3665PROTO_ALL(bs3CpuBasic2_call_ind_mem_opsize__ud2);
     3666FNBS3FAR  bs3CpuBasic2_call_ind_mem_opsize__ud2__intel_c64;
     3667PROTO_ALL(bs3CpuBasic2_call_ind_xAX_opsize__ud2);
    36613668PROTO_ALL(bs3CpuBasic2_jmp_opsize_end);
    36623669#undef PROTO_ALL
     
    36693676FNBS3FAR bs3CpuBasic2_jmp_jv16_wrap_forward__ud2;
    36703677FNBS3FAR bs3CpuBasic2_jmp_jv16_opsize_wrap_forward__ud2;
     3678FNBS3FAR bs3CpuBasic2_call_jv16_wrap_forward__ud2;
     3679FNBS3FAR bs3CpuBasic2_call_jv16_opsize_wrap_forward__ud2;
    36713680
    36723681FNBS3FAR bs3CpuBasic2_jmp_target_wrap_backward;
     
    36753684FNBS3FAR bs3CpuBasic2_jmp_jv16_wrap_backward__ud2;
    36763685FNBS3FAR bs3CpuBasic2_jmp_jv16_opsize_wrap_backward__ud2;
     3686FNBS3FAR bs3CpuBasic2_call_jv16_wrap_backward__ud2;
     3687FNBS3FAR bs3CpuBasic2_call_jv16_opsize_wrap_backward__ud2;
    36773688
    36783689
     
    37433754            {  0,  true,           -1,  true, bs3CpuBasic2_call_jv_opsize__ud2_c16,             },
    37443755            {  0,  true,           -1,  true, bs3CpuBasic2_call_jv_opsize_back__ud2_c16,        },
     3756            {  0, false,           -1,  true, bs3CpuBasic2_call_ind_mem__ud2_c16,               },
     3757            {  0,  true,           -1,  true, bs3CpuBasic2_call_ind_mem_opsize__ud2_c16,        },
     3758            {  0, false, X86_GREG_xAX,  true, bs3CpuBasic2_call_ind_xAX__ud2_c16,               },
     3759            {  0, false, X86_GREG_xDI,  true, bs3CpuBasic2_call_ind_xDI__ud2_c16,               },
     3760            {  0,  true, X86_GREG_xAX,  true, bs3CpuBasic2_call_ind_xAX_opsize__ud2_c16,        },
    37453761
    37463762            { -1, false,           -1, false, bs3CpuBasic2_jmp_jb_wrap_backward__ud2,           },
     
    37533769            { -1,  true,           -1, false, bs3CpuBasic2_jmp_jv16_opsize_wrap_backward__ud2,  },
    37543770            { +1,  true,           -1, false, bs3CpuBasic2_jmp_jv16_opsize_wrap_forward__ud2,   },
     3771            { -1, false,           -1,  true, bs3CpuBasic2_call_jv16_wrap_backward__ud2,        },
     3772            { +1, false,           -1,  true, bs3CpuBasic2_call_jv16_wrap_forward__ud2,         },
     3773            { -1,  true,           -1,  true, bs3CpuBasic2_call_jv16_opsize_wrap_backward__ud2, },
     3774            { +1,  true,           -1,  true, bs3CpuBasic2_call_jv16_opsize_wrap_forward__ud2,  },
    37553775        };
    37563776
     
    38213841        }
    38223842
    3823         /* Limit the wraparound CS segment to exlcude bs3CpuBasic2_jmp_target_wrap_backward
     3843        /* Limit the wraparound CS segment to exclude bs3CpuBasic2_jmp_target_wrap_backward
    38243844           and run the backward wrapping tests. */
    38253845        if (!BS3_MODE_IS_RM_OR_V86(bMode))
    38263846        {
    38273847            Bs3GdteSpare03.Gen.u16LimitLow = BS3_FP_OFF(bs3CpuBasic2_jmp_target_wrap_backward) - 1;
    3828             CtxExpected.cs = Ctx.cs = BS3_SEL_SPARE_03;
     3848            CtxExpected.cs    = Ctx.cs = BS3_SEL_SPARE_03;
     3849            CtxExpected.rsp.u = Ctx.rsp.u;
    38293850            for (iTest = 0; iTest < RT_ELEMENTS(s_aTests); iTest++)
    38303851                if (s_aTests[iTest].iWrap < 0)
     
    38483869                    else
    38493870                        CtxExpected.rip.u = BS3_FP_OFF(bs3CpuBasic2_jmp_target_wrap_backward);
     3871                    CtxExpected.rsp.u = Ctx.rsp.u;
     3872                    if (s_aTests[iTest].fCall && (s_aTests[iTest].iWrap == 0 || !s_aTests[iTest].fOpSizePfx))
     3873                        CtxExpected.rsp.u -= s_aTests[iTest].fOpSizePfx ? 4 : 2;
    38503874                    //Bs3TestPrintf("cs:rip=%04RX16:%04RX64 v2\n", Ctx.cs, Ctx.rip.u);
    38513875                    Bs3TrapSetJmpAndRestore(&Ctx, &TrapCtx);
     
    38933917            {  32,  true, false,           -1,  true, bs3CpuBasic2_call_jv_opsize__ud2_c32,            },
    38943918            {  32,  true, false,           -1,  true, bs3CpuBasic2_call_jv_opsize_back__ud2_c32,       },
     3919            {  32, false, false,           -1,  true, bs3CpuBasic2_call_ind_mem__ud2_c32,              },
     3920            {  32,  true, false,           -1,  true, bs3CpuBasic2_call_ind_mem_opsize__ud2_c32,       },
     3921            {  32, false, false, X86_GREG_xAX,  true, bs3CpuBasic2_call_ind_xAX__ud2_c32,              },
     3922            {  32, false, false, X86_GREG_xDI,  true, bs3CpuBasic2_call_ind_xDI__ud2_c32,              },
     3923            {  32,  true, false, X86_GREG_xAX,  true, bs3CpuBasic2_call_ind_xAX_opsize__ud2_c32,       },
    38953924            /* 64bit/Intel: Use the _c64 tests, which are written to ignore the o16 prefix. */
    38963925            {  64, false,  true,           -1, false, bs3CpuBasic2_jmp_jb__ud2_c64,                    },
     
    39123941            {  64,  true,  true,           -1,  true, bs3CpuBasic2_call_jv_opsize__ud2_c64,            },
    39133942            {  64,  true,  true,           -1,  true, bs3CpuBasic2_call_jv_opsize_back__ud2_c64,       },
     3943            {  64, false,  true,           -1,  true, bs3CpuBasic2_call_ind_mem__ud2_c64,              },
     3944            {  64,  true,  true,           -1,  true, bs3CpuBasic2_call_ind_mem_opsize__ud2__intel_c64,},
     3945            {  64, false,  true, X86_GREG_xAX,  true, bs3CpuBasic2_call_ind_xAX__ud2_c64,              },
     3946            {  64, false,  true, X86_GREG_xDI,  true, bs3CpuBasic2_call_ind_xDI__ud2_c64,              },
     3947            {  64, false,  true, X86_GREG_x9,   true, bs3CpuBasic2_call_ind_r9__ud2_c64,               },
     3948            {  64,  true,  true, X86_GREG_xAX,  true, bs3CpuBasic2_call_ind_xAX_opsize__ud2_c64,       }, /* no intel version needed */
    39143949            /* 64bit/AMD: Use the _c32 tests. */
    39153950            {  64, false, false,           -1, false, bs3CpuBasic2_jmp_jb__ud2_c32,                    },
     
    39223957            {  64,  true, false,           -1, false, bs3CpuBasic2_jmp_jv_opsize_back__ud2_c32,        },
    39233958            {  64, false, false,           -1, false, bs3CpuBasic2_jmp_ind_mem__ud2_c64,               }, /* using c64 here */
    3924             {  64,  true, false,           -1, false, bs3CpuBasic2_jmp_ind_mem_opsize__ud2_c64,        }, /* using c64 here */
     3959            {  64,  true, false,           -1, false, bs3CpuBasic2_jmp_ind_mem_opsize__ud2_c64,        }, /* ditto */
    39253960            {  64, false, false, X86_GREG_xAX, false, bs3CpuBasic2_jmp_ind_xAX__ud2_c64,               }, /* ditto */
    39263961            {  64, false, false, X86_GREG_xDI, false, bs3CpuBasic2_jmp_ind_xDI__ud2_c64,               }, /* ditto */
     
    39313966            {  64,  true, false,           -1,  true, bs3CpuBasic2_call_jv_opsize__ud2_c32,            },
    39323967            {  64,  true, false,           -1,  true, bs3CpuBasic2_call_jv_opsize_back__ud2_c32,       },
     3968            {  64, false, false,           -1,  true, bs3CpuBasic2_call_ind_mem__ud2_c64,              }, /* using c64 here */
     3969            {  64,  true, false,           -1,  true, bs3CpuBasic2_call_ind_mem_opsize__ud2_c64,       }, /* ditto */
     3970            {  64, false, false, X86_GREG_xAX,  true, bs3CpuBasic2_call_ind_xAX__ud2_c64,              }, /* ditto */
     3971            {  64, false, false, X86_GREG_xDI,  true, bs3CpuBasic2_call_ind_xDI__ud2_c64,              }, /* ditto */
     3972            {  64, false, false, X86_GREG_x9,   true, bs3CpuBasic2_call_ind_r9__ud2_c64,               }, /* ditto */
     3973            {  64,  true, false, X86_GREG_xAX,  true, bs3CpuBasic2_call_ind_xAX_opsize__ud2_c64,       }, /* ditto */
    39333974        };
    39343975        uint8_t const           cBits    = BS3_MODE_IS_64BIT_CODE(bMode) ? 64 : 32;
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