diff options
author | Jiyoung Yun <jy910.yun@samsung.com> | 2016-12-27 16:46:08 +0900 |
---|---|---|
committer | Jiyoung Yun <jy910.yun@samsung.com> | 2016-12-27 16:46:08 +0900 |
commit | db20f3f1bb8595633a7e16c8900fd401a453a6b5 (patch) | |
tree | e5435159cd1bf0519276363a6fe1663d1721bed3 /src/pal/tests/palsuite/exception_handling/SetUnhandledExceptionFilter/test1/test1.cpp | |
parent | 4b4aad7217d3292650e77eec2cf4c198ea9c3b4b (diff) | |
download | coreclr-db20f3f1bb8595633a7e16c8900fd401a453a6b5.tar.gz coreclr-db20f3f1bb8595633a7e16c8900fd401a453a6b5.tar.bz2 coreclr-db20f3f1bb8595633a7e16c8900fd401a453a6b5.zip |
Imported Upstream version 1.0.0.9127upstream/1.0.0.9127
Diffstat (limited to 'src/pal/tests/palsuite/exception_handling/SetUnhandledExceptionFilter/test1/test1.cpp')
-rw-r--r-- | src/pal/tests/palsuite/exception_handling/SetUnhandledExceptionFilter/test1/test1.cpp | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/pal/tests/palsuite/exception_handling/SetUnhandledExceptionFilter/test1/test1.cpp b/src/pal/tests/palsuite/exception_handling/SetUnhandledExceptionFilter/test1/test1.cpp new file mode 100644 index 0000000000..5a067f9354 --- /dev/null +++ b/src/pal/tests/palsuite/exception_handling/SetUnhandledExceptionFilter/test1/test1.cpp @@ -0,0 +1,82 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +/*============================================================= +** +** Source: test1.c +** +** Purpose: Sets up a new unhandled exception filter, and makes sure it +** returns the previous filter. Raises an unhandled exception and +** makes sure this reaches the filter. +** +** +**============================================================*/ + + +#include <palsuite.h> + +/* This isn't defined in the pal, so copied from win32 */ +#define EXCEPTION_EXECUTE_HANDLER 1 +#define EXCEPTION_CONTINUE_EXECUTION -1 + + +int InFilter = FALSE; + +LONG PALAPI FirstFilter(LPEXCEPTION_POINTERS p) +{ + return EXCEPTION_EXECUTE_HANDLER; +} + +LONG PALAPI ContinueFilter(LPEXCEPTION_POINTERS p) +{ + InFilter = TRUE; + + Trace("This test has succeeded as far at the automated checks can " + "tell. Manual verification is now required to be completely sure.\n"); + Trace("Now the PAL's handling of application errors will be tested " + "with an exception code of %u.\n", + p->ExceptionRecord->ExceptionCode); + Trace("Please verify that the actions that the PAL now takes are " + "as specified for it.\n"); + + return EXCEPTION_CONTINUE_SEARCH; +} + +int __cdecl main(int argc, char *argv[]) +{ + LPTOP_LEVEL_EXCEPTION_FILTER OldFilter; + + if(0 != (PAL_Initialize(argc, argv))) + { + return FAIL; + } + + + SetUnhandledExceptionFilter(FirstFilter); + + OldFilter = SetUnhandledExceptionFilter(ContinueFilter); + if (OldFilter != FirstFilter) + { + Fail("SetUnhandledExceptionFilter did not return a pointer to the " + "previous filter!\n"); + } + + /* + * Raise an unhandled exception. This should cause our filter to be + * excecuted and the program to exit with a code the same as the + * exception code. + */ + RaiseException(3,0,0,0); + + + /* + * This code should not be executed because the toplevelhandler is + * expected to "just" set the exit code and abend the program + */ + Fail("An unhandled exception did not cause the program to abend with" + "the exit code == the ExceptionCode!\n"); + + PAL_Terminate(); + return FAIL; +} |