Kolibri libc - своя libc

Discussing libraries simplifying applications development
Coldy
Posts: 115
Joined: Tue Apr 09, 2019 8:57 pm

Re: Kolibri libc - своя libc

Post by Coldy »

Я изучу код ktcc, посмотрю, как это можно прикрутить.
P.S. заголовок в crt0.asm взят в блок virtual, соответственно этих данных в crt0.o нет.
Т.е. это как бы внешнее определение, которое нужно внутри самого crt0.o, чтобы правильно построить ссылки.
User avatar
turbocat
Posts: 184
Joined: Thu Jun 25, 2020 1:14 am
Has thanked: 1 time
Been thanked: 2 times

Re: Kolibri libc - своя libc

Post by turbocat »

Да там изучать нечего всё в файле tccmeos.c Я знаю как добавить. Но мне некогда. + Есть пример на фасме с dll.obj?
Изобретайте колёса каждый раз, когда хотите написать новую программу.
Coldy
Posts: 115
Joined: Tue Apr 09, 2019 8:57 pm

Re: Kolibri libc - своя libc

Post 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, т.е. он ничего про импорты не знает. Похоже на какие то танцы с бубном.
Расскажи поподробнее как происходит сборка приложения.
User avatar
turbocat
Posts: 184
Joined: Thu Jun 25, 2020 1:14 am
Has thanked: 1 time
Been thanked: 2 times

Re: Kolibri libc - своя libc

Post by turbocat »

tcc по сути тут не причём. С таблицами импорта он не работает. Всё работает через crt0.o и libc.obj.a. Я так понял, что в libc.obj.a содежатся объектные файлы для каждой импортируемой функции. В них содержится указатель и имя функции. crt0.o читает эти данные и импортирует функции из динамической либы.
Изобретайте колёса каждый раз, когда хотите написать новую программу.
User avatar
turbocat
Posts: 184
Joined: Thu Jun 25, 2020 1:14 am
Has thanked: 1 time
Been thanked: 2 times

Re: Kolibri libc - своя libc

Post by turbocat »

Ты очень много говоришь и я не понимаю. Мне нужен живой пример для импорт например console.obj через твою dll.obj на фасме
Изобретайте колёса каждый раз, когда хотите написать новую программу.
Coldy
Posts: 115
Joined: Tue Apr 09, 2019 8:57 pm

Re: Kolibri libc - своя libc

Post by Coldy »

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

Также добавил dll.obj, обнови его в образе, т.к. Tup заработал, но выдал ошибки по последним ревизиям.
Attachments
hello_console_h2.7z
(36.54 KiB) Downloaded 133 times
User avatar
turbocat
Posts: 184
Joined: Thu Jun 25, 2020 1:14 am
Has thanked: 1 time
Been thanked: 2 times

Re: Kolibri libc - своя libc

Post by turbocat »

Спасибо! Сейчас посмотрю. Охринеть тупу плохо.
Изобретайте колёса каждый раз, когда хотите написать новую программу.
User avatar
turbocat
Posts: 184
Joined: Thu Jun 25, 2020 1:14 am
Has thanked: 1 time
Been thanked: 2 times

Re: Kolibri libc - своя libc

Post by turbocat »

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

Также добавил dll.obj, обнови его в образе, т.к. Tup заработал, но выдал ошибки по последним ревизиям.
Я что то запустил пример твой сегодня... Не работает... Крашится
Изобретайте колёса каждый раз, когда хотите написать новую программу.
Coldy
Posts: 115
Joined: Tue Apr 09, 2019 8:57 pm

Re: Kolibri libc - своя libc

Post by Coldy »

Только что проверил на последней сборке (#8929), все работает нормально. Единственное - когда я загрузился первый раз были какие то глюки с сообщениями об ошибке загрузки библиотеки box_lib.obj. Потом после перезагрузки каким то волшебный все заработало нормально.
User avatar
turbocat
Posts: 184
Joined: Thu Jun 25, 2020 1:14 am
Has thanked: 1 time
Been thanked: 2 times

Re: Kolibri libc - своя libc

Post by turbocat »

Окей чекну завтра. Может туплю
Изобретайте колёса каждый раз, когда хотите написать новую программу.
Coldy
Posts: 115
Joined: Tue Apr 09, 2019 8:57 pm

Re: Kolibri libc - своя libc

Post 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);
}
User avatar
turbocat
Posts: 184
Joined: Thu Jun 25, 2020 1:14 am
Has thanked: 1 time
Been thanked: 2 times

Re: Kolibri libc - своя libc

Post by turbocat »

Спасибо что сказал. Исправлю. Хотя если уверен можешь и сам исправить.
Изобретайте колёса каждый раз, когда хотите написать новую программу.
User avatar
turbocat
Posts: 184
Joined: Thu Jun 25, 2020 1:14 am
Has thanked: 1 time
Been thanked: 2 times

Re: Kolibri libc - своя libc

Post by turbocat »

Исправлено в #9463
Изобретайте колёса каждый раз, когда хотите написать новую программу.
User avatar
vitalkrilov
Posts: 26
Joined: Sun Dec 26, 2021 3:04 am

Re: Kolibri libc - своя libc

Post 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 (у меня нет доступа к нему).
Attachments
format_scan.c
(12.33 KiB) Downloaded 56 times
User avatar
IgorA
Posts: 939
Joined: Mon Oct 27, 2008 10:10 pm

Re: Kolibri libc - своя libc

Post by IgorA »

vitalkrilov wrote:Исправленный файл приложил, его нужно загрузить в /programs/develop/ktcc/trunk/libc.obj/source/stdio/format_scan.c. Загрузите на SVN (у меня нет доступа к нему).
Загрузил в рев. #9529
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest