Module: wine Branch: master Commit: 97847eeee8aaaad9b141e14d4468838960ea3093 URL: https://source.winehq.org/git/wine.git/?a=commit;h=97847eeee8aaaad9b141e14d4...
Author: Alexandre Julliard julliard@winehq.org Date: Mon Aug 24 13:30:19 2020 +0200
ntdll: Avoid referencing winecrt0 exception handlers from the Unix library.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntdll/unix/virtual.c | 10 ++++++---- include/wine/exception.h | 17 ++++------------- 2 files changed, 10 insertions(+), 17 deletions(-)
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c index fa46ec0966..e3f2820de5 100644 --- a/dlls/ntdll/unix/virtual.c +++ b/dlls/ntdll/unix/virtual.c @@ -92,6 +92,8 @@ struct file_view unsigned int protect; /* protection for all pages at allocation time and SEC_* flags */ };
+#define __EXCEPT_SYSCALL __EXCEPT_HANDLER(0) + /* per-page protection flags */ #define VPROT_READ 0x01 #define VPROT_WRITE 0x02 @@ -3142,7 +3144,7 @@ BOOL virtual_check_buffer_for_read( const void *ptr, SIZE_T size ) dummy = p[0]; dummy = p[count - 1]; } - __EXCEPT_PAGE_FAULT + __EXCEPT_SYSCALL { return FALSE; } @@ -3175,7 +3177,7 @@ BOOL virtual_check_buffer_for_write( void *ptr, SIZE_T size ) p[0] |= 0; p[count - 1] |= 0; } - __EXCEPT_PAGE_FAULT + __EXCEPT_SYSCALL { return FALSE; } @@ -3197,7 +3199,7 @@ BOOL WINAPI IsBadStringPtrA( LPCSTR str, UINT_PTR max ) volatile const char *p = str; while (p != str + max) if (!*p++) break; } - __EXCEPT_PAGE_FAULT + __EXCEPT_SYSCALL { return TRUE; } @@ -3219,7 +3221,7 @@ BOOL WINAPI IsBadStringPtrW( LPCWSTR str, UINT_PTR max ) volatile const WCHAR *p = str; while (p != str + max) if (!*p++) break; } - __EXCEPT_PAGE_FAULT + __EXCEPT_SYSCALL { return TRUE; } diff --git a/include/wine/exception.h b/include/wine/exception.h index a6ada7af21..a2b0bb08dc 100644 --- a/include/wine/exception.h +++ b/include/wine/exception.h @@ -163,27 +163,18 @@ extern DWORD __cdecl __wine_finally_ctx_handler( EXCEPTION_RECORD *record, const __WINE_FRAME * const __eptr __attribute__((unused)) = &__f; \ do {
-/* convenience handler for page fault exceptions */ -#define __EXCEPT_PAGE_FAULT \ +#define __EXCEPT_HANDLER(handler) \ } while(0); \ __wine_pop_frame( &__f.frame ); \ break; \ } else { \ - __f.frame.Handler = __wine_exception_handler_page_fault; \ + __f.frame.Handler = (handler); \ if (__wine_setjmpex( &__f.jmp, &__f.frame )) { \ const __WINE_FRAME * const __eptr __attribute__((unused)) = &__f; \ do {
-/* convenience handler for all exceptions */ -#define __EXCEPT_ALL \ - } while(0); \ - __wine_pop_frame( &__f.frame ); \ - break; \ - } else { \ - __f.frame.Handler = __wine_exception_handler_all; \ - if (__wine_setjmpex( &__f.jmp, &__f.frame )) { \ - const __WINE_FRAME * const __eptr __attribute__((unused)) = &__f; \ - do { +#define __EXCEPT_PAGE_FAULT __EXCEPT_HANDLER(__wine_exception_handler_page_fault) +#define __EXCEPT_ALL __EXCEPT_HANDLER(__wine_exception_handler_all)
#define __ENDTRY \ } while (0); \