Changeset 8844
- Timestamp:
- 05/15/08 13:28:05 (5 months ago)
- Files:
-
- trunk/src/VBox/Debugger/DBGPlugInSolaris.cpp (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/VBox/Debugger/DBGPlugInSolaris.cpp
r8820 r8844 118 118 AssertCompileSize(SOL32_module_t, 0xd4); 119 119 120 typedef struct SOL_utsname 121 { 122 char sysname[257]; 123 char nodename[257]; 124 char release[257]; 125 char version[257]; 126 char machine[257]; 127 } SOL_utsname_t; 128 AssertCompileSize(SOL_utsname_t, 5 * 257); 129 120 130 /** @} */ 121 131 … … 148 158 *******************************************************************************/ 149 159 /** Validates a 32-bit solaris kernel address */ 150 #define SOL32_VALID_ADDRESS(Addr) ((Addr) > UINT32_C(0x80000000) && (Addr) < UINT32_C(0xfffff000)) 151 160 #define SOL32_VALID_ADDRESS(Addr) ((Addr) > UINT32_C(0x80000000) && (Addr) < UINT32_C(0xfffff000)) 161 162 /** The max data segment size of the 'unix' module. */ 163 #define SOL_UNIX_MAX_DATA_SEG_SIZE 0x01000000 152 164 153 165 … … 176 188 Assert(pThis->fValid); 177 189 178 return VERR_NOT_IMPLEMENTED; 190 /* 191 * It's all in the utsname symbol... 192 */ 193 DBGFADDRESS Addr; 194 SOL_utsname_t UtsName; 195 DBGFSYMBOL SymUtsName; 196 int rc = DBGFR3SymbolByName(pVM, "utsname", &SymUtsName); 197 if (RT_SUCCESS(rc)) 198 rc = DBGFR3MemRead(pVM, DBGFR3AddrFromFlat(pVM, &Addr, SymUtsName.Value), &UtsName, sizeof(UtsName)); 199 if (RT_FAILURE(rc)) 200 { 201 /* 202 * Try searching by the name... 203 */ 204 memset(&UtsName, '\0', sizeof(UtsName)); 205 strcpy(&UtsName.sysname[0], "SunOS"); 206 rc = DBGFR3MemScan(pVM, &pThis->AddrUnixData, SOL_UNIX_MAX_DATA_SEG_SIZE, 207 (uint8_t *)&UtsName.sysname[0], sizeof(UtsName.sysname), &Addr); 208 if (RT_SUCCESS(rc)) 209 rc = DBGFR3MemRead(pVM, DBGFR3AddrFromFlat(pVM, &Addr, Addr.FlatPtr - RT_OFFSETOF(SOL_utsname_t, sysname)), 210 &UtsName, sizeof(UtsName)); 211 } 212 213 /* 214 * Copy out the result (if any). 215 */ 216 if (RT_SUCCESS(rc)) 217 { 218 if ( UtsName.nodename[-1] != '\0' 219 || UtsName.release[-1] != '\0' 220 || UtsName.version[-1] != '\0' 221 || UtsName.machine[-1] != '\0' 222 || UtsName.machine[sizeof(UtsName.machine) - 1] != '\0') 223 { 224 //rc = VERR_DBGF_UNEXPECTED_OS_DATA; 225 rc = VERR_GENERAL_FAILURE; 226 RTStrPrintf(pszVersion, cchVersion, "failed - bogus utsname"); 227 } 228 else 229 RTStrPrintf(pszVersion, cchVersion, "%s %s", UtsName.version, UtsName.release); 230 } 231 else 232 RTStrPrintf(pszVersion, cchVersion, "failed - %Rrc", rc); 233 234 return rc; 179 235 } 180 236 … … 365 421 DBGFADDRESS CurAddr = pThis->AddrUnixData; 366 422 DBGFADDRESS MaxAddr; 367 DBGFR3AddrFromFlat(pVM, &MaxAddr, CurAddr.FlatPtr + 0x01000000);423 DBGFR3AddrFromFlat(pVM, &MaxAddr, CurAddr.FlatPtr + SOL_UNIX_MAX_DATA_SEG_SIZE); 368 424 const uint8_t *pbExpr = (const uint8_t *)&pThis->AddrUnixText.FlatPtr; 369 425 const uint32_t cbExpr = sizeof(uint32_t);//pThis->AddrUnixText.FlatPtr < _4G ? sizeof(uint32_t) : sizeof(uint64_t)

