From b092aa34a2dbe5b77d375dc56f4599ea32e982f3 Mon Sep 17 00:00:00 2001 From: Galkov Date: Sat, 23 May 2009 08:23:03 +0000 Subject: [PATCH] changing by forum post 23500: 1) f68:15,18 moved to f68:24,25 2) f68:15,18 set to obsolete git-svn-id: svn://kolibrios.org@1077 a494cfbc-eb01-0410-851d-a64ba20cac60 --- kernel/trunk/core/memory.inc | 12 ++- kernel/trunk/docs/sysfuncr.txt | 92 +++++++++++-------- kernel/trunk/docs/sysfuncs.txt | 88 ++++++++++-------- .../open watcom/trunk/clib/fpu/fpe387.asm | 4 +- .../open watcom/trunk/clib/fpu/fpeinth.asm | 2 +- 5 files changed, 112 insertions(+), 86 deletions(-) diff --git a/kernel/trunk/core/memory.inc b/kernel/trunk/core/memory.inc index 010bae9c07..6a17c174d7 100644 --- a/kernel/trunk/core/memory.inc +++ b/kernel/trunk/core/memory.inc @@ -991,15 +991,17 @@ f68call: dd f68.12 dd f68.13 dd f68.14 - dd f68.15 + dd f68.fail ;moved to f68.24 dd f68.16 dd f68.17 - dd f68.18 + dd f68.fail ;moved to f68.25 dd f68.19 dd f68.20 dd f68.21 dd f68.22 dd f68.23 + dd f68.24 + dd f68.25 align 4 f68: @@ -1009,7 +1011,7 @@ f68: cmp eax, 11 jb .fail - cmp eax, 23 + cmp eax, 25 ja .fail jmp dword [f68call+eax*4-11*4] @@ -1032,7 +1034,7 @@ f68: call get_event_ex mov [esp+36], eax ret -.15: +.24: mov eax, [current_slot] xchg ebx, [eax+APPDATA.exc_handler] xchg ecx, [eax+APPDATA.except_mask] @@ -1051,7 +1053,7 @@ f68: call srv_handlerEx ;ebx mov [esp+36], eax ret -.18: +.25: mov eax, [current_slot] btr [eax+APPDATA.except_mask],ebx setc byte[esp+36] diff --git a/kernel/trunk/docs/sysfuncr.txt b/kernel/trunk/docs/sysfuncr.txt index 5336fedf69..30325c3732 100644 --- a/kernel/trunk/docs/sysfuncr.txt +++ b/kernel/trunk/docs/sysfuncr.txt @@ -3655,35 +3655,10 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); определяется первым dword-ом ====================================================================== -==== Функция 68, подфункция 15 - установить обработчик исключений === +== Функция 68, подфункция 15 - установить обработчик исключений FPU. = ====================================================================== -Параметры: - * eax = 68 - номер функции - * ebx = 15 - номер подфункции - * ecx = адрес нового обработчика исключений - * edx = маска обрабатываемых исключений -Возвращаемое значение: - * eax = адрес старого обработчика исключений - (0, если он не был установлен) - * ebx = маска старого обработчика исключений -Замечания: - * Номер бита в маске исключений соответствуют номеру исключения по - спецификации на процессор (Intel-PC). Так например, исключения FPU - имеют номер 16 (#MF), а SSE - 19 (#XF). - * В данной реализации игнорируется запрос на перехват исключения 7 - - система обрабатывает #NM самостоятельно. - * Пользовательский обработчик получает номер исключения параметром - в стеке. Поэтому правильный выход из обработчика: RET 4. Возврат - при этом производится на команду, вызвавшую исключение. - * При передаче управления обработчику исключений, сбрасывается - соответствующий бит в маске исключений. Возникновение этого же - исключения в последствии - приведет к default-обработке такового. - А именно: к завершению работы приложения, или приостановке с - нотификацией отлаживающему приложению. - * После завершения критических действий в обработчике пользователя, - восстановление бита маски данного исключения можно сделать - подфункцией 18. Сброс флагов исключений в модулях FPU и XMM - - также возлагается на обработчик пользователя. +Удалена (в текущей реализации посто возвращает 0) +Использовать подфункции 24, 25 ====================================================================== =========== Функция 68, подфункция 16 - загрузить драйвер. =========== @@ -3724,19 +3699,10 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * Предварительно должен быть получен хэндл драйвера подфункцией 16. ====================================================================== -= Функция 68, подфункция 18 - изменение состояния активности сигнала = +== Функция 68, подфункция 18 - установить обработчик исключений SSE. = ====================================================================== -Параметры: - * eax = 68 - номер функции - * ebx = 18 - номер подфункции - * ecx = номер сигнала - * edx = значение устанавливаемой активности (0/1) -Возвращаемое значение: - * eax = старое значение активности сигнала (0/1) -Замечания: - * В текущей реализации изменяется только маска пользовательского - обработчика исключений, установленного подфункцией 15. При этом - номер сигнала соответствует номеру исключения. +Удалена (в текущей реализации посто возвращает 0) +Использовать подфункции 24, 25 ====================================================================== ============= Функция 68, подфункция 19 - загрузить DLL. ============= @@ -3830,6 +3796,52 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * При завершении потока освобождаются все открытые им области памяти. +====================================================================== +==== Функция 68, подфункция 24 - установить обработчик исключений === +====================================================================== +Параметры: + * eax = 68 - номер функции + * ebx = 24 - номер подфункции + * ecx = адрес нового обработчика исключений + * edx = маска обрабатываемых исключений +Возвращаемое значение: + * eax = адрес старого обработчика исключений + (0, если он не был установлен) + * ebx = маска старого обработчика исключений +Замечания: + * Номер бита в маске исключений соответствуют номеру исключения по + спецификации на процессор (Intel-PC). Так например, исключения FPU + имеют номер 16 (#MF), а SSE - 19 (#XF). + * В данной реализации игнорируется запрос на перехват исключения 7 + - система обрабатывает #NM самостоятельно. + * Пользовательский обработчик получает номер исключения параметром + в стеке. Поэтому правильный выход из обработчика: RET 4. Возврат + при этом производится на команду, вызвавшую исключение. + * При передаче управления обработчику исключений, сбрасывается + соответствующий бит в маске исключений. Возникновение этого же + исключения в последствии - приведет к default-обработке такового. + А именно: к завершению работы приложения, или приостановке с + нотификацией отлаживающему приложению. + * После завершения критических действий в обработчике пользователя, + восстановление бита маски данного исключения можно сделать + подфункцией 18. Сброс флагов исключений в модулях FPU и XMM - + также возлагается на обработчик пользователя. + +====================================================================== += Функция 68, подфункция 25 - изменение состояния активности сигнала = +====================================================================== +Параметры: + * eax = 68 - номер функции + * ebx = 25 - номер подфункции + * ecx = номер сигнала + * edx = значение устанавливаемой активности (0/1) +Возвращаемое значение: + * eax = старое значение активности сигнала (0/1) +Замечания: + * В текущей реализации изменяется только маска пользовательского + обработчика исключений, установленного подфункцией 15. При этом + номер сигнала соответствует номеру исключения. + ====================================================================== ======================== Функция 69 - отладка. ======================= ====================================================================== diff --git a/kernel/trunk/docs/sysfuncs.txt b/kernel/trunk/docs/sysfuncs.txt index 4a654aec6e..77f5e6941c 100644 --- a/kernel/trunk/docs/sysfuncs.txt +++ b/kernel/trunk/docs/sysfuncs.txt @@ -3627,33 +3627,10 @@ Returned value: first dword ====================================================================== -====== Function 68, subfunction 15 - set new exceptions handler ====== +====== Function 68, subfunction 15 - set FPU exception handler. ====== ====================================================================== -Parameters: - * eax = 68 - function number - * ebx = 15 - subfunction number - * ecx = address of the new exception handler - * edx = the mask of processing exceptions -Returned value: - * eax = address of the old exception handler (0, if it was not set) - * ebx = the old mask of exception handler -Remarks: - * Bit number in mask of exceptions is correspond to exception number - by CPU-specification (Intel-PC). For example, FPU-exception have - number 16 (#MF), and SSE-exception - 19 (#XF) - * The current implementation ignore the inquiry for hook of 7 - exception - system process #NM by one's own. - * User handler get exception number in stack parameter. So, correct - exit from handler is: RET 4. Return from handler is to the same - instruction, that was cause the exception - * When control is transfering to user handler, corresponding bit in - exception mask is clearing. Rising this exception in consequence - - reduce to default-handling. Exactly: terminating the application, - or suspending with debug-notify to owner. - * After completion of critical operations in user handler, it may be - rising corresponding bit in exception mask by using subfunction 18 - Clearing exceptions flags in FPU and/or XMM modules - is - responsibility of user handler too. +Deleted (in current implementation only 0 is returned). +Using subfunctions 24, 25 is true. ====================================================================== ============= Function 68, subfunction 16 - load driver. ============= @@ -3694,19 +3671,10 @@ Remarks: * Previously one must obtain driver handle by subfunction 16. ====================================================================== -==== Function 68, subfunction 18 - change state of signal activity === +====== Function 68, subfunction 18 - set SSE exception handler. ====== ====================================================================== -Parameters: - * eax = 68 - function number - * ebx = 15 - subfunction number - * ecx = signal number - * edx = value of activity (0/1) -Returned value: - * eax = value of old activity for this signal (0/1) -Remarks: - * In current implementation, it is changed only exception mask for - user exception handler, wich was previously set by subfunction 15. - At that, number of signal correspond to exception number. +Deleted (in current implementation only 0 is returned). +Using subfunctions 24, 25 is true. ====================================================================== =============== Function 68, subfunction 19 - load DLL. ============== @@ -3746,6 +3714,50 @@ Remarks: * The contents of the block are unchanged up to the shorter of the new and old sizes. +====================================================================== +====== Function 68, subfunction 24 - set new exceptions handler ====== +====================================================================== +Parameters: + * eax = 68 - function number + * ebx = 24 - subfunction number + * ecx = address of the new exception handler + * edx = the mask of processing exceptions +Returned value: + * eax = address of the old exception handler (0, if it was not set) + * ebx = the old mask of exception handler +Remarks: + * Bit number in mask of exceptions is correspond to exception number + by CPU-specification (Intel-PC). For example, FPU-exception have + number 16 (#MF), and SSE-exception - 19 (#XF) + * The current implementation ignore the inquiry for hook of 7 + exception - system process #NM by one's own. + * User handler get exception number in stack parameter. So, correct + exit from handler is: RET 4. Return from handler is to the same + instruction, that was cause the exception + * When control is transfering to user handler, corresponding bit in + exception mask is clearing. Rising this exception in consequence + - reduce to default-handling. Exactly: terminating the application, + or suspending with debug-notify to owner. + * After completion of critical operations in user handler, it may be + rising corresponding bit in exception mask by using subfunction 18 + Clearing exceptions flags in FPU and/or XMM modules - is + responsibility of user handler too. + +====================================================================== +==== Function 68, subfunction 25 - change state of signal activity === +====================================================================== +Parameters: + * eax = 68 - function number + * ebx = 25 - subfunction number + * ecx = signal number + * edx = value of activity (0/1) +Returned value: + * eax = value of old activity for this signal (0/1) +Remarks: + * In current implementation, it is changed only exception mask for + user exception handler, wich was previously set by subfunction 15. + At that, number of signal correspond to exception number. + ====================================================================== ====================== Fucntion 69 - debugging. ====================== ====================================================================== diff --git a/programs/develop/open watcom/trunk/clib/fpu/fpe387.asm b/programs/develop/open watcom/trunk/clib/fpu/fpe387.asm index 8a88394401..d181474304 100644 --- a/programs/develop/open watcom/trunk/clib/fpu/fpe387.asm +++ b/programs/develop/open watcom/trunk/clib/fpu/fpe387.asm @@ -60,7 +60,7 @@ defp __Init_FPE_handler push EDX ; ... mov EAX, 68 - mov EBX, 15 + mov EBX, 24 mov EDX, 10000h ; 1 shl 16 - #MF lea ECX, __FPE2Handler_ int 40h ; set new exception handler @@ -94,7 +94,7 @@ defp __Fini_FPE_handler add ESP,4 ; remove temporary mov EAX, 68 - mov EBX, 15 + mov EBX, 24 mov ECX, dword ptr Save87 ; restore handler mov EDX, dword ptr OldMask ; restore mask int 40h ; set new ecxeption handler diff --git a/programs/develop/open watcom/trunk/clib/fpu/fpeinth.asm b/programs/develop/open watcom/trunk/clib/fpu/fpeinth.asm index c4c5ce38e3..7cb0f0cf2f 100644 --- a/programs/develop/open watcom/trunk/clib/fpu/fpeinth.asm +++ b/programs/develop/open watcom/trunk/clib/fpu/fpeinth.asm @@ -131,7 +131,7 @@ opcode: ; but it may not returned at all... push ECX mov EAX, 68 - mov EBX, 18 ; + mov EBX, 25 ; mov ECX, 16 ; #MF mov EDX, 1 ; rise activity int 40h ; change state of signal activity