Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Вт сен 26, 2017 8:33 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 30 сообщений ]  На страницу 1 2 След.
Автор Сообщение
 Заголовок сообщения: LibC(MenuetLibC) + GCC
СообщениеДобавлено: Пт сен 10, 2010 9:00 pm 
Не в сети

Зарегистрирован: Вс июл 25, 2010 5:30 pm
Сообщения: 4
Всем привет ... кто разбирается в Cи помогите плиз.
Програмируя под KOS на Си, наткнулся на следующую проблемму :
Мне нужно было отобразить какойнить рисунок, и вот - libJPEG и libPNG которые шли с MenuetLibC(bin pack) (*.lib) без проблем линковались . И всё бы ничего еслибы они не валились в рантайме .
Могу позже выложить лог крэша из борда ... но я думаю он не сильно поможет .
Если кто на это натыкался , то подскажите плиз ,как была решена проблемма. (компиля под винду "тот же код" всё работает и не крэшится!!);


Вернуться к началу
 Заголовок сообщения: Re: LibC(MenuetLibC) + GCC
СообщениеДобавлено: Вс сен 12, 2010 7:17 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Наверное, все дело в том, что Menuet и Kolibri уже несколько лет как не совместимы...
Можно бороться, думаю, пересобрав эти самые библиотеки, используя версию libc для kolibri, которую можно найти на сайте diamond'а


Вернуться к началу
 Заголовок сообщения: Re: LibC(MenuetLibC) + GCC
СообщениеДобавлено: Вс фев 20, 2011 11:28 am 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Очень-очень плохая новость для всех, кто пользуется LibC для GCC и MinGW.
Кроме костылявой реализации сигналов, в библиотеке большие проблемы с реализацией crt, а может быть, и чего-то еще.
А именно: некорректно работает передача аргументов программе (argc, argv). Данные функции используются, насколько я знаю, в fceu, shell и возможно других программах (cObj?), не говоря уже про те, которые я пытаюсь портировать.
Временами (по не очень ясным пока причинам) получается скомпилированная программа, в которой argc всегда равен очень большому числу, а обращение к argv[n] приводит к page fault. Подобную проблему можно увидеть, например, в реализации brainfuck для Колибри.
Спойлер: Показать
В коде есть проверка на argc>=2, но даже если никаких параметров не передано, argc значительно больше 2, поэтому происходит обращение к argv[1]. И - page fault.

Код, ответственный за разбор параметров, подписан diamond'ом, что очень печально. Боюсь, в ближайшее время он не сможет помочь с исправлением этой ошибки в libc. Поэтому очень большая просьба для всех, кому не безразлична libc и кто использует ее для своих программ: если вы найдете (нашли) ошибку, пожалуйста, расскажите, в чем дело и как ее исправить.
Возможно, мне помог бы исходный код newlib.

Спойлер: Показать
Не верится?
Этот код работает:
Код:
void main(int argc, char** argv){
int x=argc;
printf ("argc .. %d ..  \n", x);
char * fil;
fil=argv[1];
printf ("file .. %s ..  \n", fil);}

А этот код не работает:
Код:
void main(int argc, char** argv){
printf ("argc .. %d ..  \n", argc);
printf ("file .. %s ..  \n", argv[1]);}


Вернуться к началу
 Заголовок сообщения: Re: LibC(MenuetLibC) + GCC
СообщениеДобавлено: Вс фев 20, 2011 3:18 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3928
Sorcerer

У меня правильно работает. Ты наверное забыл указать размер стека. Для программ с newlib опции линковки: -nostdlib -static -T kos.ld --image-base 0 --stack 0x100000
Стек только резервируется, так что больше чем надо не выделится.


Вернуться к началу
 Заголовок сообщения: Re: LibC(MenuetLibC) + GCC
СообщениеДобавлено: Вс фев 20, 2011 5:31 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
я компилирую mgcc. вечером проверю,спасибо... не думал,что стек не выделяется динамически... как примерно рассчитать достаточный его объем?


Вернуться к началу
 Заголовок сообщения: Re: LibC(MenuetLibC) + GCC
СообщениеДобавлено: Вс фев 20, 2011 8:19 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Не понял :(
У моего ld нет опции stack. Это кому такой параметр нужно передавать? Или в menuetlibc это в crt0_coff.asm параметр app_stack (который идет после заголовка MENUET01)?


Вернуться к началу
 Заголовок сообщения: Re: LibC(MenuetLibC) + GCC
СообщениеДобавлено: Вс фев 20, 2011 8:30 pm 
Не в сети

Зарегистрирован: Чт ноя 25, 2010 8:26 pm
Сообщения: 41
Если не ошибаюсь, эта опция для mingw32-ld. Или для бинарников в формате PE.
Как-то так.


Вернуться к началу
 Заголовок сообщения: Re: LibC(MenuetLibC) + GCC
СообщениеДобавлено: Вс фев 20, 2011 8:39 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Беда :( у меня нет mingw


Вернуться к началу
 Заголовок сообщения: Re: LibC(MenuetLibC) + GCC
СообщениеДобавлено: Вс фев 20, 2011 8:50 pm 
Не в сети
Mentor
Аватара пользователя

Зарегистрирован: Вт янв 15, 2008 11:27 am
Сообщения: 750
Sorcerer
можешь пока mingw не искать. добавление опции --stack 0x100000 в исходник mld и его перекомпилирование не помогло.


Вернуться к началу
 Заголовок сообщения: Re: LibC(MenuetLibC) + GCC
СообщениеДобавлено: Вс фев 20, 2011 10:33 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3928
Sorcerer

Опция --stack толька для сборки с newlibc. Она в coff и рассчитана на mingw или кросскомпилятор если в Linux.


Вернуться к началу
 Заголовок сообщения: Re: LibC(MenuetLibC) + GCC
СообщениеДобавлено: Пн фев 21, 2011 12:00 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1599
"Код, ответственный за разбор параметров, подписан diamond'ом, что очень печально. Боюсь, в ближайшее время он не сможет помочь с исправлением этой ошибки в libc." - а что, глюки здесь умел исправлять только diamond? То-то в последнее время никто ничего не исправляет...
P.S. Размер стека в menuetlibc задаётся статически константой в crt0*.asm.

_________________
Сделаем мир лучше!


Вернуться к началу
 Заголовок сообщения: Re: LibC(MenuetLibC) + GCC
СообщениеДобавлено: Пн фев 21, 2011 1:54 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Программист, написавший код, понимает его скорее всего лучше, чем кто-либо еще, мне кажется.
Размер стека - это app_stack в crt0.asm, и выглядит он как обычно в программах для Колибри на FASM - в конце файла "app_stack:". Действительно ли проблема в этом, или может быть, что нет?


Вернуться к началу
 Заголовок сообщения: Re: LibC(MenuetLibC) + GCC
СообщениеДобавлено: Пн фев 21, 2011 1:57 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3928
CleverMouse писал(а):
а что, глюки здесь умел исправлять только diamond

Так и было. Кстати, не нашёл исходников menuetlibc на svn. Надо залить. Иначе начнётся путаница с версиями.


Вернуться к началу
 Заголовок сообщения: Re: LibC(MenuetLibC) + GCC
СообщениеДобавлено: Пн фев 21, 2011 2:00 pm 
Не в сети
Mentor
Аватара пользователя

Зарегистрирован: Вт янв 15, 2008 11:27 am
Сообщения: 750
Serge писал(а):
Надо залить. Иначе начнётся путаница с версиями.

Да, залить просто необходимо. Но нужно выбрать лучшую версию.
Если будет на svn, то и ошибки проще исправлять. Я уже несколько мелких нашёл.


Вернуться к началу
 Заголовок сообщения: Re: LibC(MenuetLibC) + GCC
СообщениеДобавлено: Пн фев 21, 2011 2:16 pm 
Вообще-то diamond это человек, как и все остальные человеки. Может хватит его пытаться канонизировать? Он еще жив и здоров. Баги исправлял не только он, но поскольку его соображалка работает лучше и быстрее, чем у многих из нас - то так получалось, что он быстрее правил и тащил на себе все. Что собственно и привело к тому что "сгорел" на работе.


Вернуться к началу
   
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 30 сообщений ]  На страницу 1 2 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB