Board.KolibriOS.org

Official KolibriOS board
It is currently Fri Feb 21, 2020 10:03 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 56 posts ]  Go to page Previous 1 2 3 4 Next
Author Message
 Post subject: Re: порт SQLite 1.0
PostPosted: Sun Nov 09, 2008 2:25 pm 
Offline

Joined: Wed Jun 04, 2008 10:16 pm
Posts: 174
vectoroc wrote:
gcc линкует набор ".obj" файлов (COFF) в ".a" файл. Студия наверно поступает подобным же образом, кладёт .obj файлы в ".lib" (кстати, у этого файла в самом начале написано !<arch>)

Не очень понял, к чему это...
Serge wrote:
Компилируй через ассемблер. В итоге объектник будет раза в три меньше.

Написал такой вот asm_code.asm:
Code:
format MS COFF
align 4
public EXPORTS
extrn sqlite_open
extrn sqlite_exec
sqlite_open_name   db   'sqlite_open',0
sqlite_exec_name   db   'sqlite_exec',0
EXPORTS   dd   sqlite_open_name, sqlite_open, sqlite_exec_name, sqlite_exec

После компиляции получается obj-файл в 240 байт, содержащий ссылки на sqlite_open и sqlite_exec. Как сделать так, чтобы необходимые элементы из sqlite.obj были включены в него?


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Sun Nov 09, 2008 3:02 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
barsuk

Я про другое. Ставишь в опциях Assembly-Only Listing (/FA), правишь его и компилируешь masm: ml /c <file>

Если такие заморочки c obj может сделать inc файл для загрузки pe dll в asm программах ?


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Sun Nov 09, 2008 4:01 pm 
Offline
User avatar

Joined: Thu Mar 01, 2007 4:16 pm
Posts: 426
> может сделать inc файл для загрузки pe dll в asm программах ?
Ну тогда не inc (зачем же остальных обламывать), а динамическую COFF-библиотеку.

..bw


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Sun Nov 09, 2008 4:11 pm 
Offline

Joined: Wed Jun 04, 2008 10:16 pm
Posts: 174
Serge
Сделал так. Добавил в asm-файл таблицу экспорта, как положено. Действительно, результат гораздо компактнее, чем в VC. Однако, при попытке просмотреть obj-файл с помощью cobj вылетает ошибка "Memory request failed" (под эмулятором).


Attachments:
sqlite.obj.7z [107.55 KiB]
Downloaded 134 times
Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Sun Nov 09, 2008 4:12 pm 
Offline

Joined: Mon May 01, 2006 10:12 pm
Posts: 349
Я тогда не очень понял, как ты пытался скомпилять библиотеку

_________________
Image


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Sun Nov 09, 2008 4:22 pm 
Offline

Joined: Wed Jun 04, 2008 10:16 pm
Posts: 174
vectoroc
DLL-библиотека в Колибри это COFF OBJ файл. Его я и пытался сделать. Для этого написал один с-файл, в который заинклюдил все с-файлы проекта. Получился 1 obj-файл.


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Sun Nov 09, 2008 8:02 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
barsuk

Зачем в asm файл ? Всё на С.
Code:
typedef struct
{
  char *name;
  void *f;
}export_t;
 
char szCreatePixmap[]    = "CreatePixmap";
char szDestroyPixmap[]   = "DestroyPixmap";

export_t EXPORTS[] =
         {
           { szStart,           start },
           { szVersion,         (void*)0x00010001 },

           { szCreatePixmap,    CreatePixmap    },
           { szDestroyPixmap,   DestroyPixmap   },
           { NULL, NULL },
         };

Я компилирую mingw. Там немного проще - можно прямо указать имя
export_t EXPORTS[] __asm__("EXPORTS")
Скачал объектник, попробую разобраться.

Посмотрел. Там OMF. Надо компилировать ml /c /coff


bw Наверное ты прав. Если несколько библиотек и перекрёстные ссылки одним инклюдом не обойдёшся. Хотя со стороны выглядит довольно идиотски.


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Mon Nov 10, 2008 2:10 am 
Offline

Joined: Wed Jun 04, 2008 10:16 pm
Posts: 174
Serge wrote:
Зачем в asm файл ? Всё на С.

VC++, увы, не умеет не ставить "_" перед экспортируемыми символами.
Serge wrote:
Посмотрел. Там OMF. Надо компилировать ml /c /coff

Скомпилировал - все равно не загружается... Файл приложил.


Attachments:
sqlite.obj.7z [114.78 KiB]
Downloaded 127 times
Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Mon Nov 10, 2008 8:17 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Так всё экспортируется через таблицу EXPORTS. Надо исправить только этот символ.


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Mon Nov 10, 2008 9:20 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Загрузчик ограничивал длину всех символов до 16 знаков а СРР делает очень длинные имена. Теперь длина увеличена 256. Вторая хорошая новость: если нет EXPORTS проверяется _EXPORTS.
Остались пять внешних ссылок:
Code:
extrn __ftol:near       ; CODE XREF: _roundFunc
                             ; _sqliteRealToSortable
     extrn _sqliteDir:near   ; DATA XREF: _fopen
     extrn _last_fileaccess_ebx:near
                             ; DATA XREF: _kos_FileSystemAccess
     extrn _debuf:near
     extrn _atExitList:near  ; DATA XREF: _atexit
                             ; _kos_ExitApp

Это пишется и на доску отладки во время загрузки.

Лучше использовать нормальную malloc, 68.12 для этого плохо подходит.


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Mon Nov 10, 2008 5:08 pm 
Offline

Joined: Wed Jun 04, 2008 10:16 pm
Posts: 174
Serge wrote:
Загрузчик ограничивал длину всех символов до 16 знаков а СРР делает очень длинные имена. Теперь длина увеличена 256. Вторая хорошая новость: если нет EXPORTS проверяется _EXPORTS.

Спасибо, но не смог пока что воспользоваться: пересобрал trunk ядро, и теперь все приложения, которые используют DLL, падают с Page Fault.
Serge wrote:
Лучше использовать нормальную malloc, 68.12 для этого плохо подходит.

Нормальный malloc - это malloc из mcsmemm.cpp в библиотеке для VC? Там используется функция 64, которая, как я понял, считается устаревшей.


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Mon Nov 10, 2008 5:51 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
barsuk

Запусти под mtdbg. Здорово помогает.
Где-то есть версия для ф.68 Если malloc используется активно, попробуй этот. Он должен компилироваться и VC. Эта версия для драйвера. Надо заменить mem_alloc и mem_free на вызовы ф.68


Attachments:
File comment: dlmalloc от Doug Lea
malloc.7z [37.43 KiB]
Downloaded 128 times
Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Mon Nov 17, 2008 1:51 am 
Offline
User avatar

Joined: Mon Apr 16, 2007 6:38 pm
Posts: 1222
можно здесь - http://www.sqlite.org/cvstrac/wiki?p=SqlitePorts отметиться =)

_________________
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Mon Nov 17, 2008 7:34 pm 
Offline

Joined: Wed Jun 04, 2008 10:16 pm
Posts: 174
Постарался избавиться от внешних ссылок. Не загружается - вешает систему. На доске отладки ничего не видно.

Serge, чем из винды удобно смотреть внешние ссылки coff obj файла?

Gluk wrote:
можно здесь - http://www.sqlite.org/cvstrac/wiki?p=SqlitePorts отметиться =)

Думаю, рановато еще... Надо хотя бы библиотеку собрать.


Attachments:
sqlite.obj.7z [114.78 KiB]
Downloaded 128 times
Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Mon Nov 17, 2008 7:39 pm 
Offline
User avatar

Joined: Thu Mar 01, 2007 4:16 pm
Posts: 426
> Serge, чем из винды
И из линуха, и не только obj :-).

..bw


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

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


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