Changeset 21381 for trunk/src/kernel32


Ignore:
Timestamp:
Jul 5, 2010, 2:30:14 AM (15 years ago)
Author:
dmik
Message:

Implemented compiler-level SEH (try/catch) support for GCC.

Location:
trunk/src/kernel32
Files:
3 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/KERNEL32.DEF

    r21361 r21381  
    13451345    EncodePointer              = _EncodePointer@4                 @3530 NONAME
    13461346    RtlUniform                 = _RtlUniform@4                    @3531 NONAME
     1347   
     1348    ___seh_handler                                                @3600 NONAME
     1349    _EnableSEH@0                                                  @3601 NONAME
     1350   
  • trunk/src/kernel32/exceptions.cpp

    r21337 r21381  
    12071207        dprintfException(pERepRec, pERegRec, pCtxRec, p);
    12081208        dprintf(("KERNEL32: OS2ExceptionHandler: FPU exception\n"));
    1209         if(!fIsOS2Image && !fExitProcess)  //Only for real win32 apps
     1209        if((!fIsOS2Image || fSEHEnabled) && !fExitProcess)  //Only for real win32 apps or if SEH enabled
    12101210        {
    12111211                if(OSLibDispatchException(pERepRec, pERegRec, pCtxRec, p) == FALSE)
     
    14671467#endif
    14681468
    1469         if(!fIsOS2Image && !fExitProcess)  //Only for real win32 apps
     1469        if((!fIsOS2Image || fSEHEnabled) && !fExitProcess)  //Only for real win32 apps or if SEH enabled
    14701470        {
    14711471            if(OSLibDispatchException(pERepRec, pERegRec, pCtxRec, p) == TRUE)
  • trunk/src/kernel32/kernel32.mak

    r21342 r21381  
    174174$(ODIN32_LIB)\WIN32K.LIB \
    175175$(ODIN32_LIB)\UNICODE.LIB \
     176$(ODIN32_LIB)\seh.lib \
    176177$(ODIN32_LIB)\ntdll.lib \
    177178so32dll.lib \
  • trunk/src/kernel32/kernel32dbg.def

    r21361 r21381  
    13441344    EncodePointer              = _EncodePointer@4                 @3530 NONAME
    13451345    RtlUniform                 = _RtlUniform@4                    @3531 NONAME
     1346   
     1347    ___seh_handler                                                @3600 NONAME
     1348    _EnableSEH@0                                                  @3601 NONAME
  • trunk/src/kernel32/makefile

    r6871 r21381  
    1717# Subdirectories.
    1818SUBDIRS = \
    19 unicode
     19unicode \
     20seh
    2021
    2122
  • trunk/src/kernel32/wprocess.cpp

    r21339 r21381  
    7878BOOL    fSwitchTIBSel = TRUE;           // TRUE  -> switch TIB selectors
    7979                                        // FALSE -> don't
     80BOOL    fSEHEnabled = FALSE;            // TRUE  -> SEH support enabled
     81                                        // FALSE -> not enabled
    8082BOOL    fExitProcess = FALSE;
    8183
     
    105107
    106108
     109//******************************************************************************
     110//******************************************************************************
     111VOID WIN32API EnableSEH()
     112{
     113    if(!fSEHEnabled) {
     114        ODIN_SetTIBSwitch(TRUE);
     115        fSEHEnabled = TRUE;
     116    }
     117    return;
     118}
    107119//******************************************************************************
    108120//******************************************************************************
     
    494506{
    495507    dprintf(("ODIN_SetTIBSwitch %d", fSwitchTIB));
    496     fSwitchTIBSel = fSwitchTIB;
    497     if(fSwitchTIBSel) {
    498          SetWin32TIB();
    499     }
    500     else RestoreOS2TIB();
     508    if (!fSEHEnabled) {
     509        fSwitchTIBSel = fSwitchTIB;
     510        if(fSwitchTIBSel) {
     511             SetWin32TIB();
     512        }
     513        else RestoreOS2TIB();
     514    } else {
     515        dprintf(("ODIN_SetTIBSwitch: ignored due to fSEHEnabled = TRUE"));
     516    }
    501517}
    502518//******************************************************************************
Note: See TracChangeset for help on using the changeset viewer.