VirtualBox

Changeset 55572 in vbox for trunk/src/VBox/GuestHost/OpenGL


Ignore:
Timestamp:
Apr 30, 2015 5:58:22 PM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
99944
Message:

3D: crUtill DLL: drop disabled code and init Runtime on DLL load (Windows hosts).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/GuestHost/OpenGL/util/error.c

    r53726 r55572  
    1515 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
    1616 */
    17 #if 1
    1817
    1918#define LOG_GROUP LOG_GROUP_SHARED_CROPENGL
     
    2221#include <iprt/stream.h>
    2322#include <iprt/initterm.h>
     23#include <iprt/asm.h>
    2424#include <VBox/log.h>
    2525
     
    2727# include <windows.h>
    2828# include "cr_environment.h"
     29# include "cr_error.h"
     30# include "VBox/VBoxGuestLib.h"
     31# include "iprt/initterm.h"
    2932#endif
    3033
     
    99102#ifdef IN_GUEST
    100103    /* Give things a chance to close down. */
    101     raise(SIGTERM);
    102     exit(1);
     104    //raise(SIGTERM);
     105    //exit(1);
     106    ASMBreakpoint();
    103107#endif
    104108}
     
    144148}
    145149
    146 #else
    147 /* Copyright (c) 2001, Stanford University
    148  * All rights reserved
    149  *
    150  * See the file LICENSE.txt for information on redistributing this software.
    151  */
    152 
    153 #include "cr_environment.h"
    154 #include "cr_error.h"
    155 #include "cr_string.h"
    156 #include "cr_net.h"
    157 #include "cr_process.h"
    158 
    159 #ifdef WINDOWS
    160 #define WIN32_LEAN_AND_MEAN
    161 #include <windows.h>
    162 #include <io.h>
    163 #include <fcntl.h>
    164 #endif
    165 
    166 #include <stdio.h>
    167 #include <stdlib.h>
    168 #include <stdarg.h>
    169 #include <signal.h>
    170 
    171 #ifndef IN_GUEST
    172 #define LOG_GROUP LOG_GROUP_SHARED_CROPENGL
    173 #endif
    174 #if !defined(IN_GUEST) || defined(CR_DEBUG_BACKDOOR_ENABLE)
    175 #include <VBox/log.h>
    176 #endif
    177 
    178 #if defined(WINDOWS)
    179 # define CR_DEBUG_CONSOLE_ENABLE
    180 
    181 # include "Shlwapi.h"
    182 #endif
    183 
    184 #if defined(WINDOWS) && defined(IN_GUEST)
    185 # ifndef CR_DEBUG_BACKDOOR_ENABLE
    186 #  error "CR_DEBUG_BACKDOOR_ENABLE is expected!"
    187 # endif
    188 #else
    189 # ifdef CR_DEBUG_BACKDOOR_ENABLE
    190 #  error "CR_DEBUG_BACKDOOR_ENABLE is NOT expected!"
    191 # endif
    192 #endif
    193 
    194 
    195 #ifdef CR_DEBUG_BACKDOOR_ENABLE
    196 # include <VBoxDispMpLogger.h>
    197 # include <iprt/err.h>
    198 #endif
    199 
    200 
    201 static char my_hostname[256];
    202 #ifdef WINDOWS
    203 static HANDLE my_pid;
    204 #else
    205 static int my_pid = 0;
    206 #endif
    207 static int canada = 0;
    208 static int swedish_chef = 0;
    209 static int australia = 0;
    210 static int warnings_enabled = 1;
    211 
    212 #ifdef DEBUG_misha
    213 //int g_VBoxFbgFBreakDdi = 0;
    214 #define DebugBreak() Assert(0)
    215 #endif
    216 
    217 void __getHostInfo( void )
    218 {
    219     char *temp;
    220     /* on windows guests we're typically get called in a context of VBoxOGL!DllMain ( which calls VBoxOGLcrutil!crNetInit ),
    221      * which may lead to deadlocks..
    222      * Avoid it as it is needed for debugging purposes only */
    223 #if !defined(IN_GUEST) || !defined(RT_OS_WINDOWS)
    224     if ( crGetHostname( my_hostname, sizeof( my_hostname ) ) )
    225 #endif
    226     {
    227         crStrcpy( my_hostname, "????" );
    228     }
    229     temp = crStrchr( my_hostname, '.' );
    230     if (temp)
    231     {
    232         *temp = '\0';
    233     }
    234     my_pid = crGetPID();
    235 }
    236 
    237 static void __crCheckCanada(void)
    238 {
    239     static int first = 1;
    240     if (first)
    241     {
    242         const char *env = crGetenv( "CR_CANADA" );
    243         if (env)
    244             canada = 1;
    245         first = 0;
    246     }
    247 }
    248 
    249 static void __crCheckSwedishChef(void)
    250 {
    251     static int first = 1;
    252     if (first)
    253     {
    254         const char *env = crGetenv( "CR_SWEDEN" );
    255         if (env)
    256             swedish_chef = 1;
    257         first = 0;
    258     }
    259 }
    260 
    261 static void __crCheckAustralia(void)
    262 {
    263     static int first = 1;
    264     if (first)
    265     {
    266         const char *env = crGetenv( "CR_AUSTRALIA" );
    267         const char *env2 = crGetenv( "CR_AUSSIE" );
    268         if (env || env2)
    269             australia = 1;
    270         first = 0;
    271     }
    272 }
    273 
    274 static void outputChromiumMessage( FILE *output, char *str )
    275 {
    276     fprintf( output, "%s%s%s%s\n", str,
    277             swedish_chef ? " BORK BORK BORK!" : "",
    278             canada ? ", eh?" : "",
    279             australia ? ", mate!" : ""
    280             );
    281     fflush( output );
    282 }
    283 
    284 #ifdef WINDOWS
    285 static void crRedirectIOToConsole()
    286 {
    287     int hConHandle;
    288     HANDLE StdHandle;
    289     FILE *fp;
    290 
    291     AllocConsole();
    292 
    293     StdHandle = GetStdHandle(STD_OUTPUT_HANDLE);
    294     hConHandle = _open_osfhandle((long)StdHandle, _O_TEXT);
    295     fp = _fdopen( hConHandle, "w" );
    296     *stdout = *fp;
    297     *stderr = *fp;
    298 
    299     StdHandle = GetStdHandle(STD_INPUT_HANDLE);
    300     hConHandle = _open_osfhandle((long)StdHandle, _O_TEXT);
    301     fp = _fdopen( hConHandle, "r" );
    302     *stdin = *fp;
    303 }
    304 #endif
    305 
    306 
    307 DECLEXPORT(void) crError(const char *format, ... )
    308 {
    309     va_list args;
    310     static char txt[8092];
    311     int offset;
    312 #ifdef WINDOWS
    313     DWORD err;
    314 #endif
    315 
    316     __crCheckCanada();
    317     __crCheckSwedishChef();
    318     __crCheckAustralia();
    319     if (!my_hostname[0])
    320         __getHostInfo();
    321 #ifdef WINDOWS
    322     if ((err = GetLastError()) != 0 && crGetenv( "CR_WINDOWS_ERRORS" ) != NULL )
    323     {
    324         static char buf[8092], *temp;
    325 
    326         SetLastError(0);
    327         sprintf( buf, "err=%d", err );
    328 
    329         FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
    330                 FORMAT_MESSAGE_FROM_SYSTEM |
    331                 FORMAT_MESSAGE_MAX_WIDTH_MASK, NULL, err,
    332                 MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ),
    333                 (LPTSTR) &temp, 0, NULL );
    334         if ( temp )
    335         {
    336             crStrncpy( buf, temp, sizeof(buf)-1 );
    337             buf[sizeof(buf)-1] = 0;
    338         }
    339 
    340         temp = buf + crStrlen(buf) - 1;
    341         while ( temp > buf && isspace( *temp ) )
    342         {
    343             *temp = '\0';
    344             temp--;
    345         }
    346 
    347         offset = sprintf( txt, "\t-----------------------\n\tWindows ERROR: %s\n\t----------------------\nCR Error(%s:%d): ", buf, my_hostname, my_pid );
    348     }
    349     else
    350     {
    351         offset = sprintf( txt, "OpenGL Error: ");
    352     }
    353 #else
    354     offset = sprintf( txt, "OpenGL Error: " );
    355 #endif
    356     va_start( args, format );
    357     vsprintf( txt + offset, format, args );
    358 #if defined(IN_GUEST)
    359     crDebug("%s", txt);
    360     outputChromiumMessage( stderr, txt );
    361 #else
    362     LogRel(("%s\n", txt));
    363 #endif
    364 #ifdef WINDOWS
    365     if (crGetenv( "CR_GUI_ERROR" ) != NULL)
    366     {
    367         MessageBox( NULL, txt, "Chromium Error", MB_OK );
    368     }
    369     else
    370     {
    371 #endif
    372         va_end( args );
    373 #ifdef WINDOWS
    374     }
    375 #if !defined(DEBUG_leo) && !defined(DEBUG_ll158262) && !defined(DEBUG_misha)
    376     if (crGetenv( "CR_DEBUG_ON_ERROR" ) != NULL)
    377 #endif
    378     {
    379         DebugBreak();
    380     }
    381 #endif
    382 
    383 #ifdef IN_GUEST
    384     /* Give chance for things to close down */
    385     raise( SIGTERM );
    386 
    387     exit(1);
    388 #endif
    389 }
    390 
    391 void crEnableWarnings(int onOff)
    392 {
    393     warnings_enabled = onOff;
    394 }
    395 
    396 #ifdef DEBUG_misha
    397 # undef crWarning
    398 #endif
    399 DECLEXPORT(void) crWarning(const char *format, ... )
    400 {
    401     if (warnings_enabled) {
    402         va_list args;
    403         static char txt[8092];
    404         int offset;
    405 
    406         __crCheckCanada();
    407         __crCheckSwedishChef();
    408         __crCheckAustralia();
    409         if (!my_hostname[0])
    410             __getHostInfo();
    411         offset = sprintf( txt, "OpenGL Warning: ");
    412         va_start( args, format );
    413         vsprintf( txt + offset, format, args );
    414 #if defined(IN_GUEST)
    415         crDebug("%s", txt);
    416         outputChromiumMessage( stderr, txt );
    417 #else
    418         LogRel(("%s\n", txt));
    419 #endif
    420         va_end( args );
    421 
    422 #if defined(WINDOWS) && defined(DEBUG) && !defined(IN_GUEST) && defined(DEBUG_misha)
    423         DebugBreak();
    424 #endif
    425     }
    426 }
    427 
    428 DECLEXPORT(void) crInfo(const char *format, ... )
    429 {
    430     va_list args;
    431     static char txt[8092];
    432     int offset;
    433 
    434     __crCheckCanada();
    435     __crCheckSwedishChef();
    436     __crCheckAustralia();
    437     if (!my_hostname[0])
    438         __getHostInfo();
    439     offset = sprintf( txt, "OpenGL Info: ");
    440     va_start( args, format );
    441     vsprintf( txt + offset, format, args );
    442 #if defined(IN_GUEST)
    443     crDebug("%s", txt);
    444     outputChromiumMessage( stderr, txt );
    445 #else
    446     LogRel(("%s\n", txt));
    447 #endif
    448     va_end( args );
    449 }
    450 
    451 #ifdef CR_DEBUG_BACKDOOR_ENABLE
    452 static DECLCALLBACK(void) crDebugBackdoorRt(char* pcszStr)
    453 {
    454     RTLogBackdoorPrintf("%s", pcszStr);
    455 }
    456 
    457 static DECLCALLBACK(void) crDebugBackdoorDispMp(char* pcszStr)
    458 {
    459     VBoxDispMpLoggerLog(pcszStr);
    460 }
    461 #endif
    462 
    463 
    464 #if defined(WINDOWS) /* && (!defined(DEBUG_misha) || !defined(IN_GUEST) ) */
    465 # define CR_DEBUG_DBGPRINT_ENABLE
    466 #endif
    467 
    468 #ifdef CR_DEBUG_DBGPRINT_ENABLE
    469 static void crDebugDbgPrint(const char *str)
    470 {
    471     OutputDebugString(str);
    472     OutputDebugString("\n");
    473 }
    474 
    475 static void crDebugDbgPrintF(const char * szString, ...)
    476 {
    477     char szBuffer[4096] = {0};
    478     va_list pArgList;
    479     va_start(pArgList, szString);
    480     vsprintf( szBuffer, szString, pArgList );
    481     va_end(pArgList);
    482 
    483     OutputDebugStringA(szBuffer);
    484 }
    485 
    486 static void crDebugDmlPrint(const char* pszDesc, const char* pszCmd)
    487 {
    488     crDebugDbgPrintF("<?dml?><exec cmd=\"%s\">%s</exec>, ( %s )\n", pszCmd, pszDesc, pszCmd);
    489 }
    490 
    491 
    492 DECLEXPORT(void) crDbgCmdPrint(const char *description1, const char *description2, const char *cmd, ...)
    493 {
    494     va_list args;
    495     char aTxt[8092];
    496     char aCmd[8092];
    497 
    498     sprintf( aTxt, "%s%s", description1, description2 );
    499 
    500     va_start( args, cmd );
    501 
    502     vsprintf( aCmd, cmd, args );
    503 
    504     va_end( args );
    505 
    506     crDebugDmlPrint(aTxt, aCmd);
    507 
    508     crDebug("%s: %s", aTxt, aCmd);
    509 }
    510 
    511 DECLEXPORT(void) crDbgCmdSymLoadPrint(const char *modName, const void*pvAddress)
    512 {
    513     static bool fEnable = false;
    514     static bool fInitialized = false;
    515     const char * pszName;
    516     static const char * pszModulePath = NULL;
    517 
    518     if (!fInitialized)
    519     {
    520 #ifndef DEBUG_misha
    521         if (crGetenv( "CR_DEBUG_MODULE_ENABLE" ))
    522 #endif
    523         {
    524             fEnable = true;
    525         }
    526 
    527         fInitialized = true;
    528     }
    529 
    530     if (!fEnable)
    531         return;
    532 
    533     pszName = PathFindFileNameA(modName);
    534 
    535     if (!pszModulePath)
    536         pszModulePath = crGetenv("CR_DEBUG_MODULE_PATH");
    537     if (!pszModulePath)
    538         pszModulePath = "c:\\Users\\senmk\\Downloads\\Data\\Data";
    539 
    540     crDbgCmdPrint("load modules for ", pszName, ".reload /i /f %s\\%s=%#p", pszModulePath, pszName, pvAddress);
    541 }
    542 
    543 #endif
    544 
    545 DECLEXPORT(void) crDebug(const char *format, ... )
    546 {
    547     va_list args;
    548     static char txt[8092];
    549     int offset;
    550 #ifdef WINDOWS
    551     DWORD err;
    552 #endif
    553     static FILE *output;
    554     static int first_time = 1;
    555     static int silent = 0;
    556 #ifdef CR_DEBUG_BACKDOOR_ENABLE
    557     typedef DECLCALLBACK(void) FNCRGEDUGBACKDOOR(char* pcszStr);
    558     typedef FNCRGEDUGBACKDOOR *PFNCRGEDUGBACKDOOR;
    559     static PFNCRGEDUGBACKDOOR pfnLogBackdoor = NULL;
    560 #endif
    561 #ifdef CR_DEBUG_DBGPRINT_ENABLE
    562     static int dbgPrintEnable = 0;
    563 #endif
    564 
    565     if (first_time)
    566     {
    567         const char *fname = crGetenv( "CR_DEBUG_FILE" );
    568         const char *fnamePrefix = crGetenv( "CR_DEBUG_FILE_PREFIX" );
    569         char str[2048];
    570 #ifdef CR_DEBUG_CONSOLE_ENABLE
    571         int logToConsole = 0;
    572 #endif
    573 #ifdef CR_DEBUG_BACKDOOR_ENABLE
    574         if (crGetenv( "CR_DEBUG_BACKDOOR" ))
    575         {
    576             int rc = VBoxDispMpLoggerInit();
    577             if (RT_SUCCESS(rc))
    578                 pfnLogBackdoor = crDebugBackdoorDispMp;
    579             else
    580                 pfnLogBackdoor = crDebugBackdoorRt;
    581         }
    582 #endif
    583 #ifdef CR_DEBUG_DBGPRINT_ENABLE
    584         if (crGetenv( "CR_DEBUG_DBGPRINT" ))
    585         {
    586             dbgPrintEnable = 1;
    587         }
    588 #endif
    589 
    590         if (!fname && fnamePrefix)
    591         {
    592             char pname[1024];
    593             if (crStrlen(fnamePrefix) < sizeof (str) - sizeof (pname) - 20)
    594             {
    595                 crGetProcName(pname, 1024);
    596                 sprintf(str,
    597 #ifdef RT_OS_WINDOWS
    598                 "%s_%s_%u.txt", fnamePrefix, pname, GetCurrentProcessId()
    599 #else
    600                 "%s_%s_%lu.txt", fnamePrefix, pname, crGetPID()
    601 #endif
    602                 );
    603                 fname = &str[0];
    604             }
    605         }
    606 
    607         first_time = 0;
    608         if (fname)
    609         {
    610             char debugFile[2048], *p;
    611             crStrcpy(debugFile, fname);
    612             p = crStrstr(debugFile, "%p");
    613             if (p) {
    614                 /* replace %p with process number */
    615                 unsigned long n = (unsigned long) crGetPID();
    616                 sprintf(p, "%lu", n);
    617             }
    618             fname = debugFile;
    619             output = fopen( fname, "w" );
    620             if (!output)
    621             {
    622                 crError( "Couldn't open debug log %s", fname );
    623             }
    624         }
    625         else
    626         {
    627 #ifdef CR_DEBUG_CONSOLE_ENABLE
    628             if (crGetenv( "CR_DEBUG_CONSOLE" ))
    629             {
    630                 crRedirectIOToConsole();
    631                 logToConsole = 1;
    632             }
    633 #endif
    634             output = stderr;
    635         }
    636 
    637 #if !defined(DEBUG)/* || defined(DEBUG_misha)*/
    638         /* Release mode: only emit crDebug messages if CR_DEBUG
    639          * or CR_DEBUG_FILE is set.
    640          */
    641         if (!fname && !crGetenv("CR_DEBUG")
    642 #ifdef CR_DEBUG_CONSOLE_ENABLE
    643                     && !logToConsole
    644 #endif
    645 #ifdef CR_DEBUG_BACKDOOR_ENABLE
    646                     && !pfnLogBackdoor
    647 #endif
    648 #ifdef CR_DEBUG_DBGPRINT_ENABLE
    649                     && !dbgPrintEnable
    650 #endif
    651                 )
    652             silent = 1;
    653 #endif
    654     }
    655 
    656     if (silent)
    657         return;
    658 
    659     __crCheckCanada();
    660     __crCheckSwedishChef();
    661     __crCheckAustralia();
    662     if (!my_hostname[0])
    663         __getHostInfo();
    664 
    665 #ifdef WINDOWS
    666     if ((err = GetLastError()) != 0 && crGetenv( "CR_WINDOWS_ERRORS" ) != NULL )
    667     {
    668         static char buf[8092], *temp;
    669 
    670         SetLastError(0);
    671         sprintf( buf, "err=%d", err );
    672 
    673         FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
    674                 FORMAT_MESSAGE_FROM_SYSTEM |
    675                 FORMAT_MESSAGE_MAX_WIDTH_MASK, NULL, err,
    676                 MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ),
    677                 (LPTSTR) &temp, 0, NULL );
    678         if ( temp )
    679         {
    680             crStrncpy( buf, temp, sizeof(buf)-1 );
    681             buf[sizeof(buf)-1] = 0;
    682         }
    683 
    684         temp = buf + crStrlen(buf) - 1;
    685         while ( temp > buf && isspace( *temp ) )
    686         {
    687             *temp = '\0';
    688             temp--;
    689         }
    690 
    691         offset = sprintf( txt, "\t-----------------------\n\tWindows ERROR: %s\n\t-----------------\nCR Debug(%s:%d): ", buf, my_hostname, my_pid );
    692     }
    693     else
    694     {
    695         offset = sprintf( txt, "[0x%x.0x%x] OpenGL Debug: ", GetCurrentProcessId(), crThreadID());
    696     }
    697 #else
    698     offset = sprintf( txt, "[0x%lx.0x%lx] OpenGL Debug: ", crGetPID(), crThreadID());
    699 #endif
    700     va_start( args, format );
    701     vsprintf( txt + offset, format, args );
    702 #ifdef CR_DEBUG_BACKDOOR_ENABLE
    703     if (pfnLogBackdoor)
    704     {
    705         pfnLogBackdoor(txt);
    706     }
    707 #endif
    708 #ifdef CR_DEBUG_DBGPRINT_ENABLE
    709     if (dbgPrintEnable)
    710     {
    711         crDebugDbgPrint(txt);
    712     }
    713 #endif
    714 #if defined(IN_GUEST)
    715     outputChromiumMessage( output, txt );
    716 #else
    717     if (!output
    718 #ifndef DEBUG_misha
    719             || output==stderr
    720 #endif
    721             )
    722     {
    723         LogRel(("%s\n", txt));
    724     }
    725     else
    726     {
    727         LogRel(("%s\n", txt));
    728         outputChromiumMessage(output, txt);
    729     }
    730 #endif
    731     va_end( args );
    732 }
    733 
    734 #if defined(DEBUG_misha) && defined(RT_OS_WINDOWS)
     150#if defined(RT_OS_WINDOWS)
    735151BOOL WINAPI DllMain(HINSTANCE hDLLInst, DWORD fdwReason, LPVOID lpvReserved)
    736152{
     
    741157        case DLL_PROCESS_ATTACH:
    742158        {
     159            int rc;
     160            rc = RTR3InitDll(RTR3INIT_FLAGS_UNOBTRUSIVE); CRASSERT(rc);
     161            rc = VbglR3Init();
     162            LogRel(("crUtill DLL loaded.\n"));
     163# if defined(DEBUG_misha)
    743164            char aName[MAX_PATH];
    744              GetModuleFileNameA(hDLLInst, aName, RT_ELEMENTS(aName));
    745              crDbgCmdSymLoadPrint(aName, hDLLInst);
    746             break;
     165            GetModuleFileNameA(hDLLInst, aName, RT_ELEMENTS(aName));
     166            crDbgCmdSymLoadPrint(aName, hDLLInst);
     167# endif
     168             break;
    747169        }
     170
     171        case DLL_PROCESS_DETACH:
     172        {
     173            LogRel(("crUtill DLL unloaded."));
     174            VbglR3Term();
     175        }
     176
    748177        default:
    749178            break;
     
    753182}
    754183#endif
    755 #endif
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette