Page 2 of 3

Re: Kolibri libc - своя libc

Posted: Wed May 05, 2021 8:27 pm
by Coldy
Я изучу код ktcc, посмотрю, как это можно прикрутить.
P.S. заголовок в crt0.asm взят в блок virtual, соответственно этих данных в crt0.o нет.
Т.е. это как бы внешнее определение, которое нужно внутри самого crt0.o, чтобы правильно построить ссылки.

Re: Kolibri libc - своя libc

Posted: Thu May 06, 2021 1:30 am
by turbocat
Да там изучать нечего всё в файле tccmeos.c Я знаю как добавить. Но мне некогда. + Есть пример на фасме с dll.obj?

Re: Kolibri libc - своя libc

Posted: Thu May 06, 2021 12:14 pm
by Coldy
Привет!
Да, я понял, что код для Kolibri генерит tccmeos.c. Но правкой в нем дело не ограничится. Таблица импорта используется другая, ее обработка идет с конца через кучу промежуточных указателей, кроме того сама таблица размазана по всему файлу, имена библиотек зачем то задаются с магическими символами + флаг загрузки и с полным путем. Все это занимает слишком много места в образе и чрезвычайно не оптимально. Сам код загрузчика прикручен гайками к dll.inc, не используя его по прямому назначению. Все что нужно было сделать - это построить правильную таблицу импорта (см. ниже) и скормить ее Dll.Load, он всю работу сам делает. Соответственно, загрузчик крайне неоптимальный (например на каждой функции вызывается load_library, который постоянно проверяет не загружена ли библиотека). Я понимаю, что все это работает, но dll.inc (и соответственно dll.obj) использует совершенно другой более компактный формат таблицы импорта (хотя и его можно уменьшить). В текущем виде это не сможет использоваться с dll.obj, нужно приводить таблицу импорта к формату, который задается макросами library и import из файла macros.inc.

Code: Select all

...
include '../../macros.inc'
...

align 4
 ; Import table
    @IMPORT:
    library foo_lib, 'foo.obj'
    import  foo_lib, \
      foo_bar1, 'foo_bar1',    \
      foo_bar2, 'foo2'

Также я пытался вчера понять, как строится таблица импорта. Как я понял импорты генерятся не ktcc, т.е. он ничего про импорты не знает. Похоже на какие то танцы с бубном.
Расскажи поподробнее как происходит сборка приложения.

Re: Kolibri libc - своя libc

Posted: Thu May 06, 2021 1:43 pm
by turbocat
tcc по сути тут не причём. С таблицами импорта он не работает. Всё работает через crt0.o и libc.obj.a. Я так понял, что в libc.obj.a содежатся объектные файлы для каждой импортируемой функции. В них содержится указатель и имя функции. crt0.o читает эти данные и импортирует функции из динамической либы.

Re: Kolibri libc - своя libc

Posted: Thu May 06, 2021 1:48 pm
by turbocat
Ты очень много говоришь и я не понимаю. Мне нужен живой пример для импорт например console.obj через твою dll.obj на фасме

Re: Kolibri libc - своя libc

Posted: Thu May 06, 2021 2:31 pm
by Coldy
turbocat wrote:Мне нужен живой пример для импорт например console.obj через твою dll.obj на фасме
Во вложении, если надо подправь пути. Можно загружать в mtdbg, но загрузка идет сначала в dll.obj, пропускай все F8 пока не увидишь push eax - вызов точки входа приложения, чтобы зайти нажимай F7

Также добавил dll.obj, обнови его в образе, т.к. Tup заработал, но выдал ошибки по последним ревизиям.

Re: Kolibri libc - своя libc

Posted: Thu May 06, 2021 9:49 pm
by turbocat
Спасибо! Сейчас посмотрю. Охринеть тупу плохо.

Re: Kolibri libc - своя libc

Posted: Wed Jun 23, 2021 12:12 pm
by turbocat
Coldy wrote:
turbocat wrote:Мне нужен живой пример для импорт например console.obj через твою dll.obj на фасме
Во вложении, если надо подправь пути. Можно загружать в mtdbg, но загрузка идет сначала в dll.obj, пропускай все F8 пока не увидишь push eax - вызов точки входа приложения, чтобы зайти нажимай F7

Также добавил dll.obj, обнови его в образе, т.к. Tup заработал, но выдал ошибки по последним ревизиям.
Я что то запустил пример твой сегодня... Не работает... Крашится

Re: Kolibri libc - своя libc

Posted: Wed Jun 23, 2021 7:01 pm
by Coldy
Только что проверил на последней сборке (#8929), все работает нормально. Единственное - когда я загрузился первый раз были какие то глюки с сообщениями об ошибке загрузки библиотеки box_lib.obj. Потом после перезагрузки каким то волшебный все заработало нормально.

Re: Kolibri libc - своя libc

Posted: Thu Jun 24, 2021 1:00 am
by turbocat
Окей чекну завтра. Может туплю

Re: Kolibri libc - своя libc

Posted: Thu Dec 09, 2021 10:55 am
by Coldy
Привет!
Функция _ksys_exec ведет себя непредсказуемо, причина - отсутствие установки нуля для поля ksys70_t p20. Если повезет, то там будет ноль и приложение запустится.
Также ноль необходимо устанавливать для p12 и p16. Пока все работает нормально, но если функция 70.7 будет модернизирована, то будут очередные сюрпризы.

Code: Select all

 
static inline
int _ksys_exec(char *app_name, char *args)
{
    ksys70_t file_opt;
    file_opt.p00 = 7;
    file_opt.p04dw = 0;
    file_opt.p08dw = (unsigned)args;
    
    // For future compatible p12 & p 16 must be zero
    file_opt.p12 = 0; 
    file_opt.p16 = 0;
    
   file_opt.p20 = 0; // <<==  Zero reqired!
   
    file_opt.p21 = app_name;
    return _ksys_work_files(&file_opt);
}

Re: Kolibri libc - своя libc

Posted: Tue Dec 21, 2021 8:19 am
by turbocat
Спасибо что сказал. Исправлю. Хотя если уверен можешь и сам исправить.

Re: Kolibri libc - своя libc

Posted: Thu Dec 23, 2021 10:55 pm
by turbocat
Исправлено в #9463

Re: Kolibri libc - своя libc

Posted: Thu Dec 30, 2021 5:04 pm
by vitalkrilov
В libc.obj был баг при использовании sscanf(...): не считывались строки. Например, sscanf("0,0,0", "%d,%d,%d", &a, &b, &c) не работал так, как должен.
Исправил его, а также исправил баг с попыткой считывания шестнадцатеричных и восьмеричных чисел (в той же функции).
Исправленный файл приложил, его нужно загрузить в /programs/develop/ktcc/trunk/libc.obj/source/stdio/format_scan.c. Загрузите на SVN (у меня нет доступа к нему).

Re: Kolibri libc - своя libc

Posted: Thu Dec 30, 2021 7:48 pm
by IgorA
vitalkrilov wrote:Исправленный файл приложил, его нужно загрузить в /programs/develop/ktcc/trunk/libc.obj/source/stdio/format_scan.c. Загрузите на SVN (у меня нет доступа к нему).
Загрузил в рев. #9529