Kolibri libc - своя libc

Discussing libraries simplifying applications development
  • Взята математика из menuetlibc, написан stdio, реализованы kgcc и kld (см. папку linuxtools, по аналогии как в menuetlibc)
    Размер libc.a - 132,8 КБ. Примера с математикой mathtest.c - 9,4 КБ (без kpack). Пока это статическая линковка. Возможно она будет скомпилена динамически и будет в дистрибутиве в /sys/lib
  • Перенес тему в подфорум Прикладные библиотеки
    to infinity and beyond
  • Думаю это та вещь на которую стоит обратить внимание. Хотя библиотека не совсем протестирована и возможно в ней есть ошибки, она отличается от всех libc в кос. Ведь она использует нативных формат библиотек колибри, то-есть MS COFF. Никакого перегруженного PE или ELF или уж тем более статической линковки! LIBC.OBJ весит 16 КБ и её можно использовать вместе с FASM.(Для этого она и создавалась). В данный момент libc.obj уже находится в минимальной сборке. Так что юзайте и сообщайте о проблемах.
    Изобретайте колёса каждый раз, когда хотите написать новую программу.
  • Поддерживаю на 100%. Такой библиотеки не хватало в \LIB, libс была только на CD. Со временем прошу также добавить в эту библиотеку поддержку автозагрузки библиотек.
  • Для tcc библиотека является "автозагружаемой". Боппан создал отличный загрузчик. Но всё же формат самих библиотек мне не нравится. Зачем в таблице экспорта ТЕКСТ! Почему бы не иметь просто массив указателей. Всё равно файл является объектным и все символы можно и так просмотреть... Вообщем время покажет...
    Изобретайте колёса каждый раз, когда хотите написать новую программу.
  • Привет!
    Чтобы было понятно, что я имел в виду, лучше показать на примере. Для этого я модифицировал код 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 197 times
    Last edited by Coldy on Wed May 05, 2021 5:12 pm, edited 1 time in total.
  • Круто! Нужно попробовать запустить это чудо! Что касается memmove эта функция которая используется tcc для работы с юнионами. По какой то неизвестной причине прога крашилась при её вызове. А вот при статической линковке всё норм!
    Изобретайте колёса каждый раз, когда хотите написать новую программу.
  • Если внезапно это заработает то memmove будет удалён....
    Изобретайте колёса каждый раз, когда хотите написать новую программу.
  • Заработает :) Если будут проблемы, могу помочь с интеграцией.
  • Автоимпорт это круто! Но какая то каша из заголовков. Можно ли пологать что в будущем это будет один формат KX(если вы договоритесь с Kenshin)
    Изобретайте колёса каждый раз, когда хотите написать новую программу.
  • А ты можешь пожалуйста свой код из crt0.asm переместить в отдельную crt0_dll.asm например. Хочется всё таки сохранить возможность использовать то и то.
    Изобретайте колёса каждый раз, когда хотите написать новую программу.
  • Ты сначала попробуй это прикрутить, чтоб все линковалось нормально и работало. Для старого варианта надо просто указать HDR_VER=1. Как вариант до сборки создавать отдельный файл (и подключать его из crt0.asm) сначала с HDR_VER=1, а потом с HDR_VER=2.
  • Ты есть в телеге?
    Изобретайте колёса каждый раз, когда хотите написать новую программу.
  • Начинаю тыкать.... А откуда я возьму __i_ptr__?
    Я так понимаю что в crt0.asm по приколу написан заголовок...
    На самом деле в исполняемом файле заголовок генерирует tcc и ему на crt0.o пофиг
    Изобретайте колёса каждый раз, когда хотите написать новую программу.
  • Who is online

    Users browsing this forum: No registered users and 4 guests