https://github.com/turbocat2001/kolibri-libc
Уже работает, некоторые куски кода были взяты из pdclib
Kolibri libc - своя libc
Взята математика из menuetlibc, написан stdio, реализованы kgcc и kld (см. папку linuxtools, по аналогии как в menuetlibc)
Размер libc.a - 132,8 КБ. Примера с математикой mathtest.c - 9,4 КБ (без kpack). Пока это статическая линковка. Возможно она будет скомпилена динамически и будет в дистрибутиве в /sys/lib
Размер 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 самостоятельно
Чтобы было понятно, что я имел в виду, лучше показать на примере. Для этого я модифицировал код 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 самостоятельно
Круто! Нужно попробовать запустить это чудо! Что касается 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 пофиг
Я так понимаю что в crt0.asm по приколу написан заголовок...
На самом деле в исполняемом файле заголовок генерирует tcc и ему на crt0.o пофиг
Изобретайте колёса каждый раз, когда хотите написать новую программу.
Who is online
Users browsing this forum: No registered users and 5 guests