Board.KolibriOS.org

Official KolibriOS board
It is currently Mon Oct 21, 2019 12:42 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 34 posts ]  Go to page Previous 1 2 3 Next
Author Message
PostPosted: Mon Apr 13, 2009 7:24 pm 
Offline

Joined: Fri Nov 21, 2008 8:16 am
Posts: 180
Да, вот еще. Позволил я себе перетащить несколько "исключений" из под макроса exc_wo_code в exc_w_code
Если помните, и в букварях опечатки бывают, проверьте, коллеги :!:
Тут лучше бы обойтись без шуток и неожиданностей
У меня Гук+Юров, бумажное издание (в таких, на удивление - опечаток меньше)
Естественно, я проверил внутреннюю непротиворечивость: стоят не только "галочки" в таблице, но и словами, русским языком, написано - "При обработке исключений 8-14, 17 и 18 в защищенном режиме процессор сохраняет в стеке слово кода ошибки EC (Error Code)"


Top
   
PostPosted: Mon Apr 13, 2009 7:35 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Я совсем не против рефакторинга. Если код не используется лучше его удалить или явно закомментировать, а не прятать в макрос у которого совсем другая смысловая нагрузка. Для этого есть if 0 ... end if


Top
   
PostPosted: Mon Apr 13, 2009 8:02 pm 
Offline

Joined: Fri Nov 21, 2008 8:16 am
Posts: 180
Да без проблем.

Кстати, if 0 заметить тоже не просто - я уже накалывался
И думал, между прочим, что это все естественно и понятно
Пример: programs\develop\libraries\libs-dev\.test\dll.inc
Делаю я этот include, но у меня всего одна либа в проекте. Грубо говоря - dll.Load я не использую.
Так она и не будет включена в мои коды.
Написано не мной, ну я и считал это давно понятным и естественным :)

Не знаю точно как в gcc, кажется там все, что написано в файле - будет тупо включено в коды...
А вот в Дельфях, к примеру - ТОЛЬКО используемое. У них это правда называется smart-linkig, и жутко этим гордятся.
Афигенный smart, конечно же... Доросли до возможностей встроенных макросов fasm-а :)


Top
   
PostPosted: Mon Apr 13, 2009 11:52 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Quote:
Кстати, if 0 заметить тоже не просто - я уже накалывался
Поэтому чаще всего код просто комментируют
;
;
;
;


Top
   
PostPosted: Tue Apr 14, 2009 2:11 pm 
Offline

Joined: Fri Nov 21, 2008 8:16 am
Posts: 180
Serge wrote:
Исключения POSIX подробно описаны в gnu libc manual

http://www.gnu.org/software/libc/manual/pdf/libc.pdf - раздел 24 (Signal Handling)
Правильно попал :?:


Top
   
PostPosted: Tue Apr 14, 2009 4:00 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Ещё стоит посмотреть описание posix.1b posix.1c - стандарты для rtos.


Top
   
PostPosted: Tue Apr 14, 2009 8:34 pm 
Offline

Joined: Fri Nov 21, 2008 8:16 am
Posts: 180
Блин, ну очень не хотел... Но, видимо -- не отвертишься :D
Ну ладно, закачал я это добро отсюда http://www.opengroup.org/onlinepubs/000 ... /susv3.zip
Вот только понять не могу, чего из них 1b, а чего 1c
там примерно такой выбор в менюхе слева
Batch Services
Development
Headers
Legacy Interfaces
Math Interfaces
Networking
Realtime
Threads


И плюс такое - Select a volume: [ XBD | XCU | XSH | XRAT ]
Что примерно расшифровывается как: [Base Definitions|Shell & Utilities|System Interfaces|Rationale]

Serge, направьте на путь истинный... А то, с моим-то английским, это все год читать можно...


Top
   
PostPosted: Fri May 15, 2009 11:53 am 
Offline

Joined: Fri Nov 21, 2008 8:16 am
Posts: 180
В общем, поизучал я немного систему сигнализации в posix и libc
Дошел до перехода из ощущения, что "знаешь почти все" - в понимание, что процесс познания в данной области видимого конца не имеет.
Пора принимать какое-то решение, и заканчивать дело конкретными кодами.

Что я вижу в programs\develop\open watcom\trunk\clib\process\signl.c (имя файла - понравилось)
Что из сигналов, порождаемых исключениями: SIGFPE, SIGILL, SIGSEGV - поддерживается только SIGFPE. Надо полагать, что к таковым же относятся SIGIOVFL и SIGIDIVZ, но таких определений я не нашел ни в стандарте libc, ни в posix.
Вопрос - почему не поддерживатся. Ответ - потому-что таковых возможностей не предоставляет ось.
Далее, про SIGFPE буквари рассказывают такое: The SIGFPE signal reports a fatal arithmetic error. Although the name is derived from “floating-point exception”, this signal actually covers all arithmetic errors, including division by zero and overflow
Вопрос - почему сделано не так. Ответ - прежний.

Далее, вопросы в порядке приоритетов

1) Надо ли делать, чтобы ось такие вещи все-таки поддерживала? Если - "не очень-то и хотелось", то дальнейшее обсуждение бессмысленно. Поэтому исхожу в дальнейшем из - "надо, и обязательно"

2) Надо ли сохранять при этом совместимось с нашими хуками исключений по FPU и SSE?
Если сохранять, то все таковые сигналы мы должны обслужить адресами соответствующих обработчиков в APPDATA. Грубо говоря - на каждое исключение.
И есть у меня ощущение, что это не очень рациональная трата ресурсов. Место в структуре закончится очень быстро.

3) Если не сохранять, то надо выкинуть поля APPDATA.fpu_handler/sse_handler и заменить их на адрес единого для всех хэндлера и dword маски на все допустимые исключения проца. Интерфейс хэндлера при этом меняется - в стеке идет номер исключения, который надо снимать по выходе из хэндлера (зачем выходить - тоже интересный вопрос).
Сопровождение. Гляжу в коды fpe387.asm::__Init_FPE_handler и fpeinth.asm::__FPE2Handler_ - вполне подъемная задача.
Естественно, я оставлю старую функциональность - реагирование только на FPE
Но, у С-developer-ов появится возможность реагировать (созданием соответствующих сигналов) на любые события из вышеперечисленных.
Ну а KoOS - это просто пара десятков байтов кодов в sys32.inc, делов на вечер.

=================================================================
Крутилась у меня интересная мысль - полностью обратиться в веру сигналов/событий
Долго крутилась...
Т.е., к сигналам относятся как наши хуки исключений, так и ожидаемые нами события как "от драйвера", так и по f10/23.
Грубо говоря - ничего в мире не существует кроме сигналов.
Типа последние - это просто заблокированные сигналы, которые, в отличие от исключений, пользователь принимает чем-то похожим на sigwait. А исключения - это такие сигналы, которые блокировать глупо, мягко говоря.
А вот иметь дополнительную возможность "захендлить" IRQ-сигналы - вовсе и не глупо...
Да и "захэндленное" рисование - тоже можно обсуждать...

Но я не готов еще к реализации такого глобального плана. Много вопросов, которые не очень понятно как решать пока.
Но готов к обсуждению всех этих вопросов, коль скоро коллегам это будет интересно.
Да и к реализации, коль скоро появится ясность


Top
   
PostPosted: Fri May 15, 2009 12:31 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
Про обратную совместимость с текущим обработчиком исключений ftp/sse думаю "не очень-то и надо".
Если делать сигналы, то пусть все будет там, хоть и IRQ (может мы таки прийдем к микроядру?).
В общем если есть желание, думаю стоит занятся, а люди готовые помочь / пообсуждать думаю есть, как и интерес.


Top
   
PostPosted: Fri May 15, 2009 12:47 pm 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
/может перейдем на AMD64 ? т.к. сейчас выпускают процессоры с поддержкой AMD64/EMT64./
PS мои познания в особенностях этих режимов скудны.


Top
   
PostPosted: Fri May 15, 2009 1:10 pm 
А давайте и на асм забъем? Все равно ведь ядро уже почти одни сплошные макросы... ну, его к черту этот муторный ассемблер. Вот понимаешь все пишут на Си, все пишут используя L4, и ваапще зачем оно ведь уже есть Линупс в котором есть все, даже то что нужно. А может вообще сразу на Яве ваять? И вообще просить у Гугла исходники Андройда? Ну, епть ну зачем нам это гребанй асм? А?!


Top
   
PostPosted: Fri May 15, 2009 1:15 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
Не млин, давай те лучше оставим сталые костыли, и ещё придумаем новые???


Top
   
PostPosted: Fri May 15, 2009 1:43 pm 
Offline

Joined: Fri Nov 21, 2008 8:16 am
Posts: 180
О чем это ВЫ: /может перейдем на AMD64 ? т.к. сейчас выпускают процессоры с поддержкой AMD64/EMT64./
Мои познания в этих технологиях еще более скудны. Поэтому не понял как связи с "обработкой исключений", так и смысла последовавших ответов.

Расшифруйте, пожалуйста.


Top
   
PostPosted: Fri May 15, 2009 4:50 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
<Lrz> "— Обязательно бахнем! И не раз — весь мир в труху!.. Но потом."... ДМБ
Galkov не обращай внимания


Top
   
PostPosted: Fri May 22, 2009 12:11 pm 
Offline

Joined: Fri Nov 21, 2008 8:16 am
Posts: 180
Вот чего я думаю.
Для большинства прикладных программистов, все это словеса умные и непонятные....
Наверное.

Может где-то как-то выложить простенький пример.
Типа 2 основых ф-ии:
Code:
int __TRY(void func(void*), void*lParam);
void __RISE(int Ecx, void*ExcData);
Хотя бы простейший однопроходный вариант, объемом так строк на 20 asm-а

Простенькая вещь в стиле Forth: __TRY запускает func в режиме перехвата исключений
Если вернулся 0 - все было тип-топ. Иначе - номер исключения. Если это "не твое" -- делай __RISE, и не напрягайся. Получится вложенная сруктура.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 34 posts ]  Go to page Previous 1 2 3 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited