Page 1 of 3

Kolibri libc - своя libc

Posted: Sat Feb 06, 2021 3:42 pm
by maxcodehack
https://github.com/turbocat2001/kolibri-libc
Уже работает, некоторые куски кода были взяты из pdclib

Re: Kolibri libc - своя libc

Posted: Sat Feb 20, 2021 7:20 pm
by maxcodehack
Взята математика из menuetlibc, написан stdio, реализованы kgcc и kld (см. папку linuxtools, по аналогии как в menuetlibc)
Размер libc.a - 132,8 КБ. Примера с математикой mathtest.c - 9,4 КБ (без kpack). Пока это статическая линковка. Возможно она будет скомпилена динамически и будет в дистрибутиве в /sys/lib

Re: Kolibri libc - своя libc

Posted: Thu Apr 08, 2021 11:11 pm
by punk_joker
Перенес тему в подфорум Прикладные библиотеки

Re: Kolibri libc - своя libc

Posted: Sat May 01, 2021 1:42 am
by turbocat
Думаю это та вещь на которую стоит обратить внимание. Хотя библиотека не совсем протестирована и возможно в ней есть ошибки, она отличается от всех libc в кос. Ведь она использует нативных формат библиотек колибри, то-есть MS COFF. Никакого перегруженного PE или ELF или уж тем более статической линковки! LIBC.OBJ весит 16 КБ и её можно использовать вместе с FASM.(Для этого она и создавалась). В данный момент libc.obj уже находится в минимальной сборке. Так что юзайте и сообщайте о проблемах.

Re: Kolibri libc - своя libc

Posted: Sat May 01, 2021 10:28 am
by Coldy
Поддерживаю на 100%. Такой библиотеки не хватало в \LIB, libс была только на CD. Со временем прошу также добавить в эту библиотеку поддержку автозагрузки библиотек.

Re: Kolibri libc - своя libc

Posted: Wed May 05, 2021 1:24 am
by turbocat
Для tcc библиотека является "автозагружаемой". Боппан создал отличный загрузчик. Но всё же формат самих библиотек мне не нравится. Зачем в таблице экспорта ТЕКСТ! Почему бы не иметь просто массив указателей. Всё равно файл является объектным и все символы можно и так просмотреть... Вообщем время покажет...

Re: Kolibri libc - своя libc

Posted: Wed May 05, 2021 10:00 am
by Coldy
Привет!
Чтобы было понятно, что я имел в виду, лучше показать на примере. Для этого я модифицировал код crt0.asm (во вложении), при HDR_VER = 2 не нужно больше всовывать в каждое приложение загрузчик библиотек. В результате crt0.o, легче в 1,5 раза становится, соответственно все приложения, которые будут с ним линковаться тоже будут меньше по размеру. Т.е. все, что раньше было в dll.inc и, соответственно, в приложениях, теперь живет в dll.obj, которая грузится ядром автоматически если версия заголовка = 2. Dll.obj делает всю работу по загрузке библиотек и связыванию импортов. Следом за стандартным заголовком надо добавить заголовок KX (это совершенно другой формат, не тот, что предложил Kenshin), о котором знает пока только dll.obj. Описание заголовка KX см. тут http://websvn.kolibrios.org/filedetails ... ReadMe.txt
Единственное, в crt0.asm я пока прописал __i_ptr__ как внешний символ. На самом деле это - адрес таблицы экспорта (т.е. по сути это метка если писать на fasm), аналогично как в случае применения dll.inc. Т.е. чтобы собрать итоговое приложение вместо символа __i_ptr__ надо просто прописать адрес начала таблицы импорта.

Еще комментарии по коду:
1. сисфункцию 68.11 не нужно вызывать, т.к. сисфункции 68.18 и 68.19 делают это неявно
2. memmove наверное тоже можно отключить если HDR_VER = 2, тогда размер будет еще меньше
3. Комментарии рекомендую писать на английском языке. На русском у меня текст в одном редакторе не распознал кодировку.

И да, dll.obj в дистибутиве будет понимать KX заголовок, когда заработает автосборка, пока все так, как описывал в топике про автозагрузку библиотек. Но никто не мешает собрать dll.obj самостоятельно :)

Re: Kolibri libc - своя libc

Posted: Wed May 05, 2021 11:46 am
by turbocat
Круто! Нужно попробовать запустить это чудо! Что касается memmove эта функция которая используется tcc для работы с юнионами. По какой то неизвестной причине прога крашилась при её вызове. А вот при статической линковке всё норм!

Re: Kolibri libc - своя libc

Posted: Wed May 05, 2021 11:47 am
by turbocat
Если внезапно это заработает то memmove будет удалён....

Re: Kolibri libc - своя libc

Posted: Wed May 05, 2021 11:54 am
by Coldy
Заработает :) Если будут проблемы, могу помочь с интеграцией.

Re: Kolibri libc - своя libc

Posted: Wed May 05, 2021 11:57 am
by turbocat
Автоимпорт это круто! Но какая то каша из заголовков. Можно ли пологать что в будущем это будет один формат KX(если вы договоритесь с Kenshin)

Re: Kolibri libc - своя libc

Posted: Wed May 05, 2021 1:37 pm
by turbocat
А ты можешь пожалуйста свой код из crt0.asm переместить в отдельную crt0_dll.asm например. Хочется всё таки сохранить возможность использовать то и то.

Re: Kolibri libc - своя libc

Posted: Wed May 05, 2021 4:53 pm
by Coldy
Ты сначала попробуй это прикрутить, чтоб все линковалось нормально и работало. Для старого варианта надо просто указать HDR_VER=1. Как вариант до сборки создавать отдельный файл (и подключать его из crt0.asm) сначала с HDR_VER=1, а потом с HDR_VER=2.

Re: Kolibri libc - своя libc

Posted: Wed May 05, 2021 7:39 pm
by turbocat
Ты есть в телеге?

Re: Kolibri libc - своя libc

Posted: Wed May 05, 2021 7:42 pm
by turbocat
Начинаю тыкать.... А откуда я возьму __i_ptr__?
Я так понимаю что в crt0.asm по приколу написан заголовок...
На самом деле в исполняемом файле заголовок генерирует tcc и ему на crt0.o пофиг