VirtualBox

Changeset 58800 in vbox for trunk/src/VBox/Runtime/r0drv


Ignore:
Timestamp:
Nov 20, 2015 2:39:08 PM (9 years ago)
Author:
vboxsync
Message:

Runtime/r0drv: Add 'pszModule' argument to RTR0DbgKrnlInfoQueryMember and implemented necessary changes
on Solaris.

Location:
trunk/src/VBox/Runtime/r0drv
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/r0drv/darwin/dbgkrnlinfo-r0drv-darwin.cpp

    r58598 r58800  
    11611161
    11621162
    1163 RTR0DECL(int) RTR0DbgKrnlInfoQueryMember(RTDBGKRNLINFO hKrnlInfo, const char *pszStructure,
     1163RTR0DECL(int) RTR0DbgKrnlInfoQueryMember(RTDBGKRNLINFO hKrnlInfo, const char *pszModule, const char *pszStructure,
    11641164                                         const char *pszMember, size_t *poffMember)
    11651165{
  • trunk/src/VBox/Runtime/r0drv/solaris/dbgkrnlinfo-r0drv-solaris.c

    r58774 r58800  
    135135
    136136
     137/**
     138 * Helper for opening the specified kernel module.
     139 *
     140 * @param pszModule         The name of the module.
     141 * @param pMod              Where to store the module handle.
     142 * @param pCtf              Where to store the CTF handle.
     143 *
     144 * @returns Pointer to the CTF structure for the module.
     145 */
     146static int rtR0DbgKrnlInfoModRetainEx(const char *pszModule, modctl_t **ppMod, ctf_file_t **ppCtf)
     147{
     148    char *pszMod = RTStrDup(pszModule);
     149    if (RT_LIKELY(pszMod))
     150    {
     151        int rc = rtR0DbgKrnlInfoModRetain(pszMod, ppMod, ppCtf);
     152        RTStrFree(pszMod);
     153        if (RT_SUCCESS(rc))
     154        {
     155            AssertPtrReturn(*ppMod, VERR_INTERNAL_ERROR_2);
     156            AssertPtrReturn(*ppCtf, VERR_INTERNAL_ERROR_3);
     157        }
     158        return rc;
     159    }
     160    return VERR_NO_MEMORY;
     161}
     162
     163
    137164RTR0DECL(int) RTR0DbgKrnlInfoOpen(PRTDBGKRNLINFO phKrnlInfo, uint32_t fFlags)
    138165{
     
    198225
    199226
    200 RTR0DECL(int) RTR0DbgKrnlInfoQueryMember(RTDBGKRNLINFO hKrnlInfo, const char *pszStructure,
     227RTR0DECL(int) RTR0DbgKrnlInfoQueryMember(RTDBGKRNLINFO hKrnlInfo, const char *pszModule, const char *pszStructure,
    201228                                         const char *pszMember, size_t *poffMember)
    202229{
     
    210237        RT_ASSERT_PREEMPTIBLE();
    211238
     239    ctf_file_t *pCtf = NULL;
     240    modctl_t   *pMod = NULL;
     241    if (!pszModule)
     242    {
     243        pCtf = pThis->pGenUnixCTF;
     244        pMod = pThis->pGenUnixMod;
     245    }
     246    else
     247    {
     248        int rc2 = rtR0DbgKrnlInfoModRetainEx(pszModule, &pMod, &pCtf);
     249        if (RT_FAILURE(rc2))
     250            return rc2;
     251        Assert(pMod);
     252        Assert(pCtf);
     253    }
     254
    212255    int rc = VERR_NOT_FOUND;
    213     ctf_id_t TypeIdent = ctf_lookup_by_name(pThis->pGenUnixCTF, pszStructure);
     256    ctf_id_t TypeIdent = ctf_lookup_by_name(pCtf, pszStructure);
    214257    if (TypeIdent != CTF_ERR)
    215258    {
    216259        ctf_membinfo_t MemberInfo;
    217260        RT_ZERO(MemberInfo);
    218         if (ctf_member_info(pThis->pGenUnixCTF, TypeIdent, pszMember, &MemberInfo) != CTF_ERR)
     261        if (ctf_member_info(pCtf, TypeIdent, pszMember, &MemberInfo) != CTF_ERR)
    219262        {
    220263            *poffMember = (MemberInfo.ctm_offset >> 3);
    221             return VINF_SUCCESS;
    222         }
    223     }
    224 
     264            rc = VINF_SUCCESS;
     265        }
     266    }
     267
     268    if (pszModule)
     269        rtR0DbgKrnlInfoModRelease(pMod, pCtf);
    225270    return rc;
    226271}
     
    258303        RT_ASSERT_PREEMPTIBLE();
    259304
    260     modctl_t   *pMod;
    261     ctf_file_t *pCtf;
     305    modctl_t   *pMod = NULL;
     306    ctf_file_t *pCtf = NULL;
    262307    if (!pszModule)
    263308    {
    264309        pCtf = pThis->pGenUnixCTF;
    265310        pMod = pThis->pGenUnixMod;
    266         NOREF(pMod);
    267311    }
    268312    else
    269313    {
    270         char *pszMod = RTStrDup(pszModule);
    271         if (RT_LIKELY(pszMod))
    272         {
    273             int rc = rtR0DbgKrnlInfoModRetain(pszMod, &pMod, &pCtf);
    274             RTStrFree(pszMod);
    275             if (RT_FAILURE(rc))
    276                 return VERR_MODULE_NOT_FOUND;
    277             AssertPtrReturn(pMod, VERR_INTERNAL_ERROR_5);
    278             AssertPtrReturn(pCtf, VERR_INTERNAL_ERROR_4);
    279         }
    280         else
    281             return VERR_NO_MEMORY;
     314        int rc2 = rtR0DbgKrnlInfoModRetainEx(pszModule, &pMod, &pCtf);
     315        if (RT_FAILURE(rc2))
     316            return rc2;
     317        Assert(pMod);
     318        Assert(pCtf);
    282319    }
    283320
     
    290327        {
    291328            *pcbType = cbType;
    292             if (pszModule)
    293                 rtR0DbgKrnlInfoModRelease(pMod, pCtf);
    294             return VINF_SUCCESS;
    295         }
    296         rc = VERR_WRONG_TYPE;
     329            rc = VINF_SUCCESS;
     330        }
     331        else
     332            rc = VERR_WRONG_TYPE;
    297333    }
    298334
  • trunk/src/VBox/Runtime/r0drv/solaris/initterm-r0drv-solaris.c

    r57358 r58800  
    118118         * Mandatory: Preemption offsets.
    119119         */
    120         rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, "cpu_t", "cpu_runrun", &g_offrtSolCpuPreempt);
     120        rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, NULL, "cpu_t", "cpu_runrun", &g_offrtSolCpuPreempt);
    121121        if (RT_FAILURE(rc))
    122122        {
     
    125125        }
    126126
    127         rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, "cpu_t", "cpu_kprunrun", &g_offrtSolCpuForceKernelPreempt);
     127        rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, NULL, "cpu_t", "cpu_kprunrun", &g_offrtSolCpuForceKernelPreempt);
    128128        if (RT_FAILURE(rc))
    129129        {
     
    132132        }
    133133
    134         rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, "kthread_t", "t_preempt", &g_offrtSolThreadPreempt);
     134        rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, NULL, "kthread_t", "t_preempt", &g_offrtSolThreadPreempt);
    135135        if (RT_FAILURE(rc))
    136136        {
     
    139139        }
    140140
    141         rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, "kthread_t", "t_did", &g_offrtSolThreadId);
     141        rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, NULL, "kthread_t", "t_did", &g_offrtSolThreadId);
    142142        if (RT_FAILURE(rc))
    143143        {
     
    146146        }
    147147
    148         rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, "kthread_t", "t_intr", &g_offrtSolThreadIntrThread);
     148        rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, NULL, "kthread_t", "t_intr", &g_offrtSolThreadIntrThread);
    149149        if (RT_FAILURE(rc))
    150150        {
     
    153153        }
    154154
    155         rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, "kthread_t", "t_lockp", &g_offrtSolThreadLock);
     155        rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, NULL, "kthread_t", "t_lockp", &g_offrtSolThreadLock);
    156156        if (RT_FAILURE(rc))
    157157        {
     
    160160        }
    161161
    162         rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, "kthread_t", "t_procp", &g_offrtSolThreadProc);
     162        rc = RTR0DbgKrnlInfoQueryMember(g_hKrnlDbgInfo, NULL, "kthread_t", "t_procp", &g_offrtSolThreadProc);
    163163        if (RT_FAILURE(rc))
    164164        {
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