Kolibri libc - своя libc

Discussing libraries simplifying applications development
maxcodehack
Posts: 412
Joined: Mon Sep 07, 2020 7:09 pm

Kolibri libc - своя libc

Post by maxcodehack »

https://github.com/turbocat2001/kolibri-libc
Уже работает, некоторые куски кода были взяты из pdclib
(просто редко захожу на пару минут)
maxcodehack
Posts: 412
Joined: Mon Sep 07, 2020 7:09 pm

Re: Kolibri libc - своя libc

Post by maxcodehack »

Взята математика из menuetlibc, написан stdio, реализованы kgcc и kld (см. папку linuxtools, по аналогии как в menuetlibc)
Размер libc.a - 132,8 КБ. Примера с математикой mathtest.c - 9,4 КБ (без kpack). Пока это статическая линковка. Возможно она будет скомпилена динамически и будет в дистрибутиве в /sys/lib
(просто редко захожу на пару минут)
punk_joker
Posts: 1275
Joined: Tue Apr 12, 2011 11:19 pm

Re: Kolibri libc - своя libc

Post by punk_joker »

Перенес тему в подфорум Прикладные библиотеки
я лишь учусь
User avatar
turbocat
Posts: 165
Joined: Thu Jun 25, 2020 1:14 am

Re: Kolibri libc - своя libc

Post by turbocat »

Думаю это та вещь на которую стоит обратить внимание. Хотя библиотека не совсем протестирована и возможно в ней есть ошибки, она отличается от всех libc в кос. Ведь она использует нативных формат библиотек колибри, то-есть MS COFF. Никакого перегруженного PE или ELF или уж тем более статической линковки! LIBC.OBJ весит 16 КБ и её можно использовать вместе с FASM.(Для этого она и создавалась). В данный момент libc.obj уже находится в минимальной сборке. Так что юзайте и сообщайте о проблемах.
Изобретайте колёса каждый раз, когда хотите написать новую программу.
Coldy
Posts: 115
Joined: Tue Apr 09, 2019 8:57 pm

Re: Kolibri libc - своя libc

Post by Coldy »

Поддерживаю на 100%. Такой библиотеки не хватало в \LIB, libс была только на CD. Со временем прошу также добавить в эту библиотеку поддержку автозагрузки библиотек.
User avatar
turbocat
Posts: 165
Joined: Thu Jun 25, 2020 1:14 am

Re: Kolibri libc - своя libc

Post by turbocat »

Для tcc библиотека является "автозагружаемой". Боппан создал отличный загрузчик. Но всё же формат самих библиотек мне не нравится. Зачем в таблице экспорта ТЕКСТ! Почему бы не иметь просто массив указателей. Всё равно файл является объектным и все символы можно и так просмотреть... Вообщем время покажет...
Изобретайте колёса каждый раз, когда хотите написать новую программу.
Coldy
Posts: 115
Joined: Tue Apr 09, 2019 8:57 pm

Re: Kolibri libc - своя libc

Post 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 самостоятельно :)
Attachments
crt0.asm
(7.02 KiB) Downloaded 142 times
Last edited by Coldy on Wed May 05, 2021 5:12 pm, edited 1 time in total.
User avatar
turbocat
Posts: 165
Joined: Thu Jun 25, 2020 1:14 am

Re: Kolibri libc - своя libc

Post by turbocat »

Круто! Нужно попробовать запустить это чудо! Что касается memmove эта функция которая используется tcc для работы с юнионами. По какой то неизвестной причине прога крашилась при её вызове. А вот при статической линковке всё норм!
Изобретайте колёса каждый раз, когда хотите написать новую программу.
User avatar
turbocat
Posts: 165
Joined: Thu Jun 25, 2020 1:14 am

Re: Kolibri libc - своя libc

Post by turbocat »

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

Re: Kolibri libc - своя libc

Post by Coldy »

Заработает :) Если будут проблемы, могу помочь с интеграцией.
User avatar
turbocat
Posts: 165
Joined: Thu Jun 25, 2020 1:14 am

Re: Kolibri libc - своя libc

Post by turbocat »

Автоимпорт это круто! Но какая то каша из заголовков. Можно ли пологать что в будущем это будет один формат KX(если вы договоритесь с Kenshin)
Изобретайте колёса каждый раз, когда хотите написать новую программу.
User avatar
turbocat
Posts: 165
Joined: Thu Jun 25, 2020 1:14 am

Re: Kolibri libc - своя libc

Post by turbocat »

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

Re: Kolibri libc - своя libc

Post by Coldy »

Ты сначала попробуй это прикрутить, чтоб все линковалось нормально и работало. Для старого варианта надо просто указать HDR_VER=1. Как вариант до сборки создавать отдельный файл (и подключать его из crt0.asm) сначала с HDR_VER=1, а потом с HDR_VER=2.
User avatar
turbocat
Posts: 165
Joined: Thu Jun 25, 2020 1:14 am

Re: Kolibri libc - своя libc

Post by turbocat »

Ты есть в телеге?
Изобретайте колёса каждый раз, когда хотите написать новую программу.
User avatar
turbocat
Posts: 165
Joined: Thu Jun 25, 2020 1:14 am

Re: Kolibri libc - своя libc

Post by turbocat »

Начинаю тыкать.... А откуда я возьму __i_ptr__?
Я так понимаю что в crt0.asm по приколу написан заголовок...
На самом деле в исполняемом файле заголовок генерирует tcc и ему на crt0.o пофиг
Изобретайте колёса каждый раз, когда хотите написать новую программу.
Post Reply

Who is online

Users browsing this forum: No registered users and 2 guests