Board.KolibriOS.org

Official KolibriOS board
It is currently Mon May 27, 2019 1:25 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 58 posts ]  Go to page Previous 1 2 3 4 Next
Author Message
 Post subject: Re: gcc и kolibri
PostPosted: Tue Sep 20, 2016 5:11 pm 
Offline

Joined: Tue Mar 08, 2016 11:00 pm
Posts: 436
какая замечательная бяка https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991

tldr для всех программ, использующих невыровненные структуры __attribute__((packed)), нужно обязательно компилировать с опцией -mno-ms-bitfields.

например, в колибри файловые операции, предполагают указатель на имя с 25го байта

4.8.2, 4.9.2 подвержены - и написано в багрепорте, что и 5.3.0 тоже


Top
   
 Post subject: Re: gcc и kolibri
PostPosted: Tue Sep 20, 2016 5:45 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Я столкнулся с этим при декодировании EDID в видеодрайверах.


Top
   
 Post subject: Re: gcc и kolibri
PostPosted: Fri Oct 28, 2016 1:45 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
gcc-5.4.0 для windows. Содержимое архива распаковать в /home/autubuild/tools
Статические библиотеки и библиотеки импорта. Распаковать в /home/autubuild/tools/win32
готовые dll
Основные отличия от предыдущего gcc-4.8:
портирована libgcc
libstdc++ поддерживает wide char функции
исправлена обработка исключений С++
синхронизация переписана с использованием фьютексов


Top
   
 Post subject: Re: gcc и kolibri
PostPosted: Sat Oct 29, 2016 7:06 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
gcc-5.4.0 для linux


Top
   
 Post subject: Re: gcc и kolibri
PostPosted: Wed Nov 02, 2016 5:27 pm 
Offline
User avatar

Joined: Mon Nov 19, 2012 5:22 pm
Posts: 455
Такая проблемка возникла. Программа компилируется, линкуется, но после запуска появляется консоль и всё, ничего не выводится(код простой хелловорлд). mingw скачал версии 5.4, линковал с последними либами следующими командами:
kos32-gcc -c -D_KOS_ main.cpp
kos32-ld -o cmm.kex -static -nostdlib -T -app-static.lds --stack 0x100000 $(Path_Libs) main.o -lc -lgcc
kos32-objcopy cmm.kex -O binary
Все файлы он точно нашёл и они точно для Колибри. Как выяснилось, выполнение до main(..) не доходит(делал там деление на 0, вылетов не происходило).

_________________
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!


Top
   
 Post subject: Re: gcc и kolibri
PostPosted: Wed Nov 02, 2016 6:09 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
GerdtR
У меня нет хрустального шара :( . Нужен бинарник, мап-файл и исходник чтобы сравнить.
-nostdlib лишнее. Из-за него библиотеки могут не оттуда прилинковаться.


Top
   
 Post subject: Re: gcc и kolibri
PostPosted: Wed Nov 02, 2016 7:14 pm 
Offline
User avatar

Joined: Mon Nov 19, 2012 5:22 pm
Posts: 455
Перед компиляцией скачал mingw5.4, содержимое msys-kos32-5.4.0 скопировал поверх с заменой(только либы скопировал в mingw5.4\lib\kos), добавил в PATH путь до папки bin. Всё, дальше make (да, переименовал mingw32-make в make, а то не удобно) и вот. Тестил в qemu. Ну только раздел /kolibrios не настраивал, но я же статическую libc линковал, не критично, я так думаю.


Attachments:
1.ZIP [71.16 KiB]
Downloaded 89 times

_________________
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Top
   
 Post subject: Re: gcc и kolibri
PostPosted: Wed Nov 02, 2016 8:22 pm 
Offline

Joined: Tue Mar 08, 2016 11:00 pm
Posts: 436
GerdtR wrote:
Такая проблемка возникла. Программа компилируется, линкуется, но после запуска появляется консоль и всё, ничего не выводится(код простой хелловорлд). mingw скачал версии 5.4, линковал с последними либами следующими командами:
kos32-gcc -c -D_KOS_ main.cpp
kos32-ld -o cmm.kex -static -nostdlib -T -app-static.lds --stack 0x100000 $(Path_Libs) main.o -lc -lgcc
kos32-objcopy cmm.kex -O binary
Все файлы он точно нашёл и они точно для Колибри. Как выяснилось, выполнение до main(..) не доходит(делал там деление на 0, вылетов не происходило).
Я когда корректировал makefile для сборки cmm под 5.4, потом перепроверил, что cmm работает и компилит в рабочие программы. Попробуй собрать make'om.
Но там (и вообще в моих тестах) ключики немного другие.


Top
   
 Post subject: Re: gcc и kolibri
PostPosted: Wed Nov 02, 2016 11:47 pm 
Offline
User avatar

Joined: Mon Nov 19, 2012 5:22 pm
Posts: 455
Siemargl, совсем забыл про твои правки. Скачал с свн весь каталог с cmm, компильнул - тоже самое - ни надписей, только пустая консоль. Обновил образ КолибриОС - не помогло. Скинул с свн инклудники(я с виндовыми всегда компилил, проблем не было), что в Makefile указаны, чисто с ними компилил - ругался, что stddef.h не найден, скопировал его и всё что он потянул с собой из виндовых, потом отругался на отсутствующий stdarg.h, опять тоже самое(причём с более старого mingw пришлось копировать, так как в новом его тоже нет), потом выругался так, что просто закрыл консоль :D Функций не понаходил типа strlen и другие со стандартной библиотеки. Дурь полная, короче. Завтра буду дальше шаманить, но что-то я недопонимаю.

_________________
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!


Top
   
 Post subject: Re: gcc и kolibri
PostPosted: Thu Nov 03, 2016 12:24 am 
Offline

Joined: Tue Mar 08, 2016 11:00 pm
Posts: 436
У тебя какая то проблема инициализации libc - вылетает __main() в процессе инициализации.
Похоже не находит функцию при загрузке dll (адрес -1) и завершается.

Проверь, что у тебя libc.dll верная.

А про не найденные strlen, stddef - должны быть настроены пути к sdk (newlib там живет) внутри makefile


Top
   
 Post subject: Re: gcc и kolibri
PostPosted: Thu Nov 03, 2016 6:55 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
GerdtR
Ничего удивительного. __main вызывает __do_global_ctors (void), которая регистрирует обработчики исключений и выполняет конструкторы глобальных объектов, а также вызывает atexit (__do_global_dtors), которую ты переопределил как
Code:
int atexit (void (*function) (void)) 
{
   //function();
   
   exit(0);
}
что в результате и происходит. У libc и libgcc перекрёстные зависимости, поэтому надо линковать -lc -lgcc -lc


Top
   
 Post subject: Re: gcc и kolibri
PostPosted: Thu Nov 03, 2016 6:25 pm 
Offline
User avatar

Joined: Mon Nov 19, 2012 5:22 pm
Posts: 455
Siemargl, я линкую libc.a, то есть libc.dll мне не нужен. А библиотеки последние скачал.
И так. Исправил я свой main.cpp, теперь без переопределений, функции все нашлись. Однако запустил и опять пустая консоль. В отладчике смотрел, до моего main действительно доходит, и printf вызывается, он вызывает _fputc_r, потом _putc_r, но почему-то на консоли ничего. В процессе работы никакой функции из console.obj не вызывается. Толком не разобрался ещё, но в _putc_r сначала вызывается mutex_lock, потом mutex_init_function, потом он как-то прыгает, точно не понял как и куда и уже mutex_unlock. То есть кроме работы с мьютексами ничего не вызывается, никаких функций больше. Ну указатель на мою строку там мелькает как положено и буквы все прокручивает в цикле, но вот вывод не проиходит.

Попробовал поставить брэкпоинт на con_write_string (других функций вывода из ряда con_... не увидел), отладчик не останавливался, то есть функция не вызывается.


Attachments:
2.ZIP [71.2 KiB]
Downloaded 95 times

_________________
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Top
   
 Post subject: Re: gcc и kolibri
PostPosted: Thu Nov 03, 2016 6:59 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
потому что надо printf("Hello World\n")


Top
   
 Post subject: Re: gcc и kolibri
PostPosted: Thu Nov 03, 2016 7:15 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Quote:
потому что надо printf("Hello World\n")
Ну это что-то странное :)
Или чудит этот ваш gcc.
Проверил на Delphi два варианта
Code:
   printf('Hello!');
и
Code:
   printf('Hello!'#10);
и оба работают.


Top
   
 Post subject: Re: gcc и kolibri
PostPosted: Thu Nov 03, 2016 10:25 pm 
Offline
User avatar

Joined: Mon Nov 19, 2012 5:22 pm
Posts: 455
Ура! printf("Hello World\n") заработало, Serge спасибо) Теперь с cmm осталось разобраться и всё.

_________________
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 58 posts ]  Go to page Previous 1 2 3 4 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited