Forth
http://fforum.winglion.ru/

Проблема в C-CALL в SPF-Linux
http://fforum.winglion.ru/viewtopic.php?f=18&t=2559
Страница 1 из 1

Автор:  mgw [ Пт апр 02, 2010 16:21 ]
Заголовок сообщения:  Проблема в C-CALL в SPF-Linux

В Linux столкнулся с непонятным поведением C-CALL. Если несколько вызовов записаны в рамках одного определения, то все работает. Если их разнести в два определения не работает (валится по core dump). Как найти причину?
Пример:
Код:
: aa     \  РАБОТАЕТ
   0 1 aQWidget @ C-CALL 1 aQWidget_show @  C-CALL DROP
    _QT_App @ 1 aapp_exec @ C-CALL DROP
   ;

: a1
   0 1 aQWidget @ C-CALL 1 aQWidget_show @  C-CALL DROP
   ;
: a2
    _QT_App @ 1 aapp_exec @ C-CALL DROP
   ;
: bb     \  НЕ РАБОТАЕТ
    a1  a2
    ;
В Windows такая конструкция работает нормально. Как найти причину?

Автор:  ygrek [ Пт апр 02, 2010 22:51 ]
Заголовок сообщения: 

отключить оптимизатор
посмотреть сгенерированный код
прогнать в отладчике
дать полностью весь код чтобы можно было повторить проблему

Автор:  mgw [ Сб апр 03, 2010 22:10 ]
Заголовок сообщения: 

Закачал пример http://narod.ru/disk/19366329000/spf-call.zip.html В README описал проблему и запуск примера.

Автор:  Ilya [ Вс апр 04, 2010 12:26 ]
Заголовок сообщения: 

Немного ОФФ!
А как ищется требуемая .so-шка по функции?
В смысле: в win32 - смотрим функцию в мэсэдэене и видем всю требуемую инфу (список параметров, имя подключаемой dll-ки, и т.п), а в Лине как?

Автор:  mgw [ Пн апр 05, 2010 12:16 ]
Заголовок сообщения: 

Цитата:
А как ищется требуемая .so-шка по функции?

Если вопросы по графике QT — то программа assistant (полная справка по использованию), идет в составе QT.
Если по функциям Linux — то программа man, в составе Linux
ну а по всему остальному www.google.ru

Автор:  mgw [ Пн апр 05, 2010 18:08 ]
Заголовок сообщения: 

Специалисты по spf и ассемблеру, помогите вставить в C-CALL сохранение регистров задействованных в ядре SPF. Сейчас у меня C-CALL (spf 4.20 Linux) выглядит след. образом:
Код:
CODE C-CALL ( x1 ... xn n adr -- res ) \ int fun(x1 .. xn);
      MOV EBX, [EBP]      \ число аргументов
      MOV ESI, # 4
@@1: OR EBX, EBX
      JZ @@2
A;   PUSH [EBP] [ESI]
      LEA ESI, 4 [ESI]
      DEC EBX
      JMP @@1
@@2: CALL EAX
      MOV ECX, [EBP]
      SHL ECX, # 2
      ADD ESP, ECX
      ADD ECX, # 4
      ADD EBP, ECX
      RET
END-CODE

Автор:  Ilya [ Пн апр 05, 2010 23:02 ]
Заголовок сообщения: 

mgw писал(а):
Цитата:
А как ищется требуемая .so-шка по функции?

Если вопросы по графике QT — то программа assistant (полная справка по использованию), идет в составе QT.
Если по функциям Linux — то программа man, в составе Linux
ну а по всему остальному www.google.ru

Кста, Уважаемый - может Вы поделитесь своими наработками в области GUI под Линукс!? :wink: Особливо для неофитов! :pilot2;

Автор:  izvr [ Вт апр 06, 2010 03:54 ]
Заголовок сообщения: 

Ilya писал(а):
А как ищется требуемая .so-шка по функции?

..иногда бывает немного по-другому: название функции известно;), а название .so/.dll - предполагается;
в таком случае:
Код:
nm название_либы | grep название_функции

..полезно брать подстроку названия функции..
Еще для целей вивисекции/эксгумации есть "мега-тулзы" objdump и objcopy. Главное при их применении - не переусердствовать :)

mgw писал(а):
Специалисты по spf и ассемблеру, помогите вставить в C-CALL сохранение регистров

..вспомнил, что юнихи, в т.ч. линух используют (скорее всего) BX при работе с dll/so, следовательно, этот регистр нужно сохранять во избежание memory fault-ов. Попробуйте - должно сработать.

Автор:  mgw [ Вт апр 06, 2010 10:19 ]
Заголовок сообщения: 

Цитата:
Кста, Уважаемый - может Вы поделитесь своими наработками в области GUI под Линукс!

Горько признать, но реальных разработок на SPF у меня нет. Есть желание попробовать написать небольшую графическую либу на SPF + dll/so + QT. Меня больше всего интересует кросплатформенность (windows и linux). В качестве примера (http://narod.ru/disk/19366329000/spf-call.zip.html). Задача эта решаема http://mgw.narod.ru, но для этого надо сделать унифицированную либу как для win так и для linux. Сейчас поддержка win и linux в SPF различается кардинально, как форматом вызовов, так и синтаксисом, что на мой взгляд неоправданно. На данном этапе я застрял на C-CALL, который явно сырой (нет сохранения важных для SPF регистров), но проблема у меня с ассемблером, нет достаточных знаний.
Цитата:

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/