summaryrefslogtreecommitdiff
path: root/src/VBox/Debugger/DBGPlugInLinux.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/VBox/Debugger/DBGPlugInLinux.cpp')
-rw-r--r--src/VBox/Debugger/DBGPlugInLinux.cpp55
1 files changed, 36 insertions, 19 deletions
diff --git a/src/VBox/Debugger/DBGPlugInLinux.cpp b/src/VBox/Debugger/DBGPlugInLinux.cpp
index 07fa9648..bbe5df34 100644
--- a/src/VBox/Debugger/DBGPlugInLinux.cpp
+++ b/src/VBox/Debugger/DBGPlugInLinux.cpp
@@ -4,7 +4,7 @@
*/
/*
- * Copyright (C) 2008-2010 Oracle Corporation
+ * Copyright (C) 2008-2013 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -73,7 +73,7 @@ typedef DBGDIGGERLINUX *PDBGDIGGERLINUX;
/*******************************************************************************
* Internal Functions *
*******************************************************************************/
-static DECLCALLBACK(int) dbgDiggerLinuxInit(PVM pVM, void *pvData);
+static DECLCALLBACK(int) dbgDiggerLinuxInit(PUVM pUVM, void *pvData);
/*******************************************************************************
@@ -91,7 +91,7 @@ static uint64_t g_au64LnxKernelAddresses[] =
/**
* @copydoc DBGFOSREG::pfnQueryInterface
*/
-static DECLCALLBACK(void *) dbgDiggerLinuxQueryInterface(PVM pVM, void *pvData, DBGFOSINTERFACE enmIf)
+static DECLCALLBACK(void *) dbgDiggerLinuxQueryInterface(PUVM pUVM, void *pvData, DBGFOSINTERFACE enmIf)
{
return NULL;
}
@@ -100,7 +100,7 @@ static DECLCALLBACK(void *) dbgDiggerLinuxQueryInterface(PVM pVM, void *pvData,
/**
* @copydoc DBGFOSREG::pfnQueryVersion
*/
-static DECLCALLBACK(int) dbgDiggerLinuxQueryVersion(PVM pVM, void *pvData, char *pszVersion, size_t cchVersion)
+static DECLCALLBACK(int) dbgDiggerLinuxQueryVersion(PUVM pUVM, void *pvData, char *pszVersion, size_t cchVersion)
{
PDBGDIGGERLINUX pThis = (PDBGDIGGERLINUX)pvData;
Assert(pThis->fValid);
@@ -108,7 +108,7 @@ static DECLCALLBACK(int) dbgDiggerLinuxQueryVersion(PVM pVM, void *pvData, char
/*
* It's all in the linux banner.
*/
- int rc = DBGFR3MemReadString(pVM, 0, &pThis->AddrLinuxBanner, pszVersion, cchVersion);
+ int rc = DBGFR3MemReadString(pUVM, 0, &pThis->AddrLinuxBanner, pszVersion, cchVersion);
if (RT_SUCCESS(rc))
{
char *pszEnd = RTStrEnd(pszVersion, cchVersion);
@@ -128,7 +128,7 @@ static DECLCALLBACK(int) dbgDiggerLinuxQueryVersion(PVM pVM, void *pvData, char
/**
* @copydoc DBGFOSREG::pfnTerm
*/
-static DECLCALLBACK(void) dbgDiggerLinuxTerm(PVM pVM, void *pvData)
+static DECLCALLBACK(void) dbgDiggerLinuxTerm(PUVM pUVM, void *pvData)
{
PDBGDIGGERLINUX pThis = (PDBGDIGGERLINUX)pvData;
Assert(pThis->fValid);
@@ -140,7 +140,7 @@ static DECLCALLBACK(void) dbgDiggerLinuxTerm(PVM pVM, void *pvData)
/**
* @copydoc DBGFOSREG::pfnRefresh
*/
-static DECLCALLBACK(int) dbgDiggerLinuxRefresh(PVM pVM, void *pvData)
+static DECLCALLBACK(int) dbgDiggerLinuxRefresh(PUVM pUVM, void *pvData)
{
PDBGDIGGERLINUX pThis = (PDBGDIGGERLINUX)pvData;
NOREF(pThis);
@@ -149,15 +149,15 @@ static DECLCALLBACK(int) dbgDiggerLinuxRefresh(PVM pVM, void *pvData)
/*
* For now we'll flush and reload everything.
*/
- dbgDiggerLinuxTerm(pVM, pvData);
- return dbgDiggerLinuxInit(pVM, pvData);
+ dbgDiggerLinuxTerm(pUVM, pvData);
+ return dbgDiggerLinuxInit(pUVM, pvData);
}
/**
* @copydoc DBGFOSREG::pfnInit
*/
-static DECLCALLBACK(int) dbgDiggerLinuxInit(PVM pVM, void *pvData)
+static DECLCALLBACK(int) dbgDiggerLinuxInit(PUVM pUVM, void *pvData)
{
PDBGDIGGERLINUX pThis = (PDBGDIGGERLINUX)pvData;
Assert(!pThis->fValid);
@@ -182,7 +182,7 @@ static DECLCALLBACK(int) dbgDiggerLinuxInit(PVM pVM, void *pvData)
/**
* @copydoc DBGFOSREG::pfnProbe
*/
-static DECLCALLBACK(bool) dbgDiggerLinuxProbe(PVM pVM, void *pvData)
+static DECLCALLBACK(bool) dbgDiggerLinuxProbe(PUVM pUVM, void *pvData)
{
PDBGDIGGERLINUX pThis = (PDBGDIGGERLINUX)pvData;
@@ -195,16 +195,16 @@ static DECLCALLBACK(bool) dbgDiggerLinuxProbe(PVM pVM, void *pvData)
for (unsigned i = 0; i < RT_ELEMENTS(g_au64LnxKernelAddresses); i++)
{
DBGFADDRESS KernelAddr;
- DBGFR3AddrFromFlat(pVM, &KernelAddr, g_au64LnxKernelAddresses[i]);
+ DBGFR3AddrFromFlat(pUVM, &KernelAddr, g_au64LnxKernelAddresses[i]);
DBGFADDRESS HitAddr;
- static const uint8_t s_abLinuxVersion[] = "Linux version 2.";
- int rc = DBGFR3MemScan(pVM, 0, &KernelAddr, LNX_MAX_KERNEL_SIZE, 1,
- s_abLinuxVersion, sizeof(s_abLinuxVersion) - 1, &HitAddr);
+ static const uint8_t s_abLinuxVersion2x[] = "Linux version 2.";
+ int rc = DBGFR3MemScan(pUVM, 0, &KernelAddr, LNX_MAX_KERNEL_SIZE, 1,
+ s_abLinuxVersion2x, sizeof(s_abLinuxVersion2x) - 1, &HitAddr);
if (RT_SUCCESS(rc))
{
char szTmp[128];
- char const *pszY = &szTmp[sizeof(s_abLinuxVersion) - 1];
- rc = DBGFR3MemReadString(pVM, 0, &HitAddr, szTmp, sizeof(szTmp));
+ char const *pszY = &szTmp[sizeof(s_abLinuxVersion2x) - 1];
+ rc = DBGFR3MemReadString(pUVM, 0, &HitAddr, szTmp, sizeof(szTmp));
if ( RT_SUCCESS(rc)
&& *pszY >= '0'
&& *pszY <= '6')
@@ -214,6 +214,23 @@ static DECLCALLBACK(bool) dbgDiggerLinuxProbe(PVM pVM, void *pvData)
return true;
}
}
+ static const uint8_t s_abLinuxVersion3x[] = "Linux version 3.";
+ rc = DBGFR3MemScan(pUVM, 0, &KernelAddr, LNX_MAX_KERNEL_SIZE, 1,
+ s_abLinuxVersion3x, sizeof(s_abLinuxVersion3x) - 1, &HitAddr);
+ if (RT_SUCCESS(rc))
+ {
+ char szTmp[128];
+ char const *pszY = &szTmp[sizeof(s_abLinuxVersion3x) - 1];
+ rc = DBGFR3MemReadString(pUVM, 0, &HitAddr, szTmp, sizeof(szTmp));
+ if ( RT_SUCCESS(rc)
+ && *pszY >= '0'
+ && *pszY <= '9')
+ {
+ pThis->AddrKernelBase = KernelAddr;
+ pThis->AddrLinuxBanner = HitAddr;
+ return true;
+ }
+ }
}
return false;
}
@@ -222,7 +239,7 @@ static DECLCALLBACK(bool) dbgDiggerLinuxProbe(PVM pVM, void *pvData)
/**
* @copydoc DBGFOSREG::pfnDestruct
*/
-static DECLCALLBACK(void) dbgDiggerLinuxDestruct(PVM pVM, void *pvData)
+static DECLCALLBACK(void) dbgDiggerLinuxDestruct(PUVM pUVM, void *pvData)
{
}
@@ -231,7 +248,7 @@ static DECLCALLBACK(void) dbgDiggerLinuxDestruct(PVM pVM, void *pvData)
/**
* @copydoc DBGFOSREG::pfnConstruct
*/
-static DECLCALLBACK(int) dbgDiggerLinuxConstruct(PVM pVM, void *pvData)
+static DECLCALLBACK(int) dbgDiggerLinuxConstruct(PUVM pUVM, void *pvData)
{
return VINF_SUCCESS;
}