За год работы с menuetlibc и newlib я стал более опытен и научился работать с map-файлами.
И вот сегодня я осознал, что основная часть программ (которую мне удалось собрать для Колибри, но которая всё же падает при запуске) падает при обращении либо к init_brk, либо sbrk. Что вообще эти функции должны делать и почему при обращении к ним программа может упасть? По идее, эти функции должны управлять памятью, верно? В каких случаях тогда может наблюдаться эпик фейл?
Если разобраться с этими багами, вероятно, в Колибри заработают еще пару эмуляторов и языков программирования. Да и вообще, лучше без багов, чем с ними
menuetlibc: sbrk/init_brk
Это строе никсовое управление памятью. newlib его не использует. Аналог в Колибри ф64.
Судя по коду, init_brk инициализирует кучу, sbrk выделяет очередной блок динамической памяти из кучи. На них основаны malloc/realloc/free, которые из этого блока нарезают уже маленькие области. Почему падает, вопрос к телепатам. Может, памяти не хватает?
Сделаем мир лучше!
Памяти валом и у системы, и у приложения. И это странно.
А дизассемблировать эти функции не пробовал? Или под отладчиком выяснить команду процессора, на которой вылетает приложение?
В menuetlibc, лежащей на svn, могут быть проблемы, если приложение многопоточное и много потоков пытаются выделять/освобождать память параллельно. Для исправления достаточно вставить вызовы malloc_lock() в начало malloc() и free(), src/libc/ansi/stdlib/malloc.c, и malloc_unlock() перед каждым return и в конце free().
Сделаем мир лучше!
проблемы со сборкой библиотеки:
joker@joker-VirtualBox:~$ cd menuetlibc
joker@joker-VirtualBox:~/menuetlibc$ make
Building library for linux
gcc mkversion.c -o mkversion
./mkversion < version > include/libc/version.h
make -C linuxtools
make[1]: Вход в каталог `/home/joker/menuetlibc/linuxtools'
Makefile:1: /osrules.mak: Нет такого файла или каталога
make[1]: *** Нет правила для сборки цели `/osrules.mak'. Останов.
make[1]: Выход из каталога `/home/joker/menuetlibc/linuxtools'
make: *** [all] Ошибка 2
joker@joker-VirtualBox:~/menuetlibc$
Настроил вроде как все правильно
joker@joker-VirtualBox:~$ cd menuetlibc
joker@joker-VirtualBox:~/menuetlibc$ make
Building library for linux
gcc mkversion.c -o mkversion
./mkversion < version > include/libc/version.h
make -C linuxtools
make[1]: Вход в каталог `/home/joker/menuetlibc/linuxtools'
Makefile:1: /osrules.mak: Нет такого файла или каталога
make[1]: *** Нет правила для сборки цели `/osrules.mak'. Останов.
make[1]: Выход из каталога `/home/joker/menuetlibc/linuxtools'
make: *** [all] Ошибка 2
joker@joker-VirtualBox:~/menuetlibc$
Настроил вроде как все правильно
to infinity and beyond
64х-битная ОС?*
32x
to infinity and beyond
Переменную окружения MENUETDEV устанавливал?
Уже все нормально Толи я при создании переменной окружения путь не правильный указал, толи из-за добавления в .bash_profile.
to infinity and beyond
Скажите пожалуйста куда пропала библиотека menuetlibc ? С SVN имею ввиду.
Последний раз была в Rev. 4798 .
Последний раз была в Rev. 4798 .
Да, я тоже заметил пропажу. Интересно, кто удалил.
Слонёнок вряд ли сознается сам.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Вот так временное становится постоянным
Who is online
Users browsing this forum: No registered users and 24 guests