VirtualBox

Changeset 40597 in vbox for trunk/src/bldprogs/VBoxTpG.cpp


Ignore:
Timestamp:
Mar 23, 2012 6:08:21 PM (13 years ago)
Author:
vboxsync
Message:

VTG: Some more options.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bldprogs/VBoxTpG.cpp

    r40594 r40597  
    188188static unsigned             g_cAssemblerOptions         = 0;
    189189static const char          *g_apszAssemblerOptions[32];
     190static const char          *g_pszProbeFnName            = "SUPR0FireProbe";
     191static bool                 g_fProbeFnImported          = true;
    190192/** @} */
    191193
     
    724726                    ";\n"
    725727                    "BEGINCODE\n"
    726                     "extern IMPNAME(SUPR0FireProbe)\n" /** @todo VBoxDrv may eventually need special handling wrt importing. */
    727                     );
     728                    "extern %sNAME(%s)\n",
     729                    g_fProbeFnImported ? "IMP" : "",
     730                    g_pszProbeFnName);
    728731    RTListForEach(&g_ProviderHead, pProvider, VTGPROVIDER, ListEntry)
    729732    {
     
    772775            }
    773776            else if (g_cBits == 32)
    774             {
    775                 /** @todo Check that none of the first 5 arguments are larger than pointer or
    776                  *        32-bit!! */
    777                 ScmStreamPrintf(pStrm,
     777                /* Assumes the size of the arguments are no larger than a
     778                   pointer.  This is asserted in the header. */
     779                ScmStreamPrintf(pStrm, g_fProbeFnImported ?
    778780                                "        mov     edx, [eax + 4]     ; idProbe\n"
    779                                 "        mov     ecx, IMP(SUPR0FireProbe)\n"
     781                                "        mov     ecx, IMP(%s)\n"
    780782                                "        mov     [esp + 4], edx     ; Replace pVTGProbeLoc with idProbe.\n"
    781                                 "        jmp     ecx\n");
    782             }
     783                                "        jmp     ecx\n"
     784                                :
     785                                "        mov     edx, [eax + 4]     ; idProbe\n"
     786                                "        mov     [esp + 4], edx     ; Replace pVTGProbeLoc with idProbe.\n"
     787                                "        jmp     NAME(%s)\n"
     788                                , g_pszProbeFnName);
    783789            else if (fWin64)
    784                 ScmStreamPrintf(pStrm,
    785                                 "        mov     rax, IMP(SUPR0FireProbe) wrt RIP\n"
     790                ScmStreamPrintf(pStrm, g_fProbeFnImported ?
     791                                "        mov     rax, IMP(%s) wrt RIP\n"
    786792                                "        mov     ecx, [rcx + 4]     ; idProbe replaces pVTGProbeLoc.\n"
    787                                 "        jmp     rax\n");
     793                                "        jmp     rax\n"
     794                                :
     795                                "        mov     ecx, [rcx + 4]     ; idProbe replaces pVTGProbeLoc.\n"
     796                                "        jmp     NAME(SUPR0FireProbe)\n"
     797                                , g_pszProbeFnName);
    788798            else
    789                 ScmStreamPrintf(pStrm,
    790                                 "        lea     rax, [IMP(SUPR0FireProbe) wrt RIP]\n" //??? macho64?
     799                ScmStreamPrintf(pStrm, g_fProbeFnImported ?
     800                                "        lea     rax, [IMP(%s) wrt RIP]\n" //??? macho64?
    791801                                "        mov     edi, [rdi + 4]     ; idProbe replaces pVTGProbeLoc.\n"
    792                                 "        jmp     rax\n");
     802                                "        jmp     rax\n"
     803                                :
     804                                "        mov     edi, [rdi + 4]     ; idProbe replaces pVTGProbeLoc.\n"
     805                                "        jmp     NAME(SUPR0FireProbe)\n"
     806                                , g_pszProbeFnName);
    793807
    794808            ScmStreamPrintf(pStrm,
     
    18161830        kVBoxTpGOpt_AssemblerOutputOpt,
    18171831        kVBoxTpGOpt_AssemblerOption,
     1832        kVBoxTpGOpt_ProbeFnName,
     1833        kVBoxTpGOpt_ProbeFnImported,
    18181834        kVBoxTpGOpt_End
    18191835    };
     
    18361852        { "--assembler-output-opt",             kVBoxTpGOpt_AssemblerOutputOpt,         RTGETOPT_REQ_STRING  },
    18371853        { "--assembler-option",                 kVBoxTpGOpt_AssemblerOption,            RTGETOPT_REQ_STRING  },
     1854        { "--probe-fn-name",                    kVBoxTpGOpt_ProbeFnName,                RTGETOPT_REQ_STRING  },
     1855        { "--probe-fn-imported",                kVBoxTpGOpt_ProbeFnImported,            RTGETOPT_REQ_BOOL    },
    18381856    };
    18391857
     
    19321950
    19331951            /*
    1934              * Out options.
     1952             * Our options.
    19351953             */
    19361954            case kVBoxTpGOpt_Assembler:
     
    19551973                g_apszAssemblerOptions[g_cAssemblerOptions] = ValueUnion.psz;
    19561974                g_cAssemblerOptions++;
     1975                break;
     1976           
     1977            case kVBoxTpGOpt_ProbeFnName:
     1978                g_pszProbeFnName = ValueUnion.psz;
     1979                break;
     1980
     1981            case kVBoxTpGOpt_ProbeFnImported:
     1982                g_pszProbeFnName = ValueUnion.psz;
    19571983                break;
    19581984
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