Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Пн дек 11, 2017 7:12 am

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




Начать новую тему  Ответить на тему  [ 218 сообщений ]  На страницу Пред. 111 12 13 14 15
Автор Сообщение
 Заголовок сообщения: Re: Tiny C Compiler
СообщениеДобавлено: Чт окт 06, 2016 12:05 am 
Не в сети

Зарегистрирован: Вт мар 08, 2016 11:00 pm
Сообщения: 269
вряд ли, я не в курсе как оно там устроено внутри.

и я не пробовал собирать его gcc 5.4. проверил, обновил версию


Вернуться к началу
 Заголовок сообщения: Re: Tiny C Compiler
СообщениеДобавлено: Пн окт 10, 2016 2:29 am 
Не в сети

Зарегистрирован: Вс окт 27, 2013 8:13 pm
Сообщения: 85
Компилятор не может найти start.o

Запускал с помощью Run с такими параметрами:

/usbhd0/1/ktcc_26_161007/tcc /usbhd0/1/ktcc_26_161007/samples/consoleio.c -o /usbhd0/1/ktcc_26_161007/samples/consoleio -lck -B /usbhd0/1/ktcc_26_161007

Раскидал start.o по всем папкам, но безрезультатно. libck.a и conio.h находит без проблем. ЧЯДНТ?


Вернуться к началу
 Заголовок сообщения: Re: Tiny C Compiler
СообщениеДобавлено: Пн окт 10, 2016 10:57 am 
Не в сети

Зарегистрирован: Вт мар 08, 2016 11:00 pm
Сообщения: 269
Есть какая то проблема с относительными путями в КОС, ключ -B не отрабатывает. Нужно зайти в папку с tcc и оттуда запускаться

Т.е в консоли (shell)
cd /usbhd0/1/ktcc_26_161007
tcc samples/consoleio.c -o samples/consoleio -lck

Если верить моему readme, еще вариант положить start.o рядом с .С файлом (возможно в текущую папку)


Вернуться к началу
 Заголовок сообщения: Re: Tiny C Compiler
СообщениеДобавлено: Пн окт 10, 2016 6:21 pm 
Не в сети

Зарегистрирован: Вс окт 27, 2013 8:13 pm
Сообщения: 85
Siemargl писал(а):
Т.е в консоли (shell)
cd /usbhd0/1/ktcc_26_161007
tcc samples/consoleio.c -o samples/consoleio -lck

Да, спасибо, это работает.

Siemargl писал(а):
Есть какая то проблема с относительными путями в КОС, ключ -B не отрабатывает. Нужно зайти в папку с tcc и оттуда запускаться

Проблема, видимо, не в KOS. Без ключа -B, компилятор не находит также conio.h, а с ключом находит.


Вернуться к началу
 Заголовок сообщения: Re: Tiny C Compiler
СообщениеДобавлено: Пн окт 10, 2016 6:26 pm 
Не в сети

Зарегистрирован: Вт мар 08, 2016 11:00 pm
Сообщения: 269
akron1 писал(а):
Siemargl писал(а):
Есть какая то проблема с относительными путями в КОС, ключ -B не отрабатывает. Нужно зайти в папку с tcc и оттуда запускаться

Проблема, видимо, не в KOS. Без ключа -B, компилятор не находит также conio.h, а с ключом находит.

Возможно, еще ньюансы реализации. Заголовки должны искаться по ключу -I, а -B например в Win32 версии Tcc работает.

Когда нибудь доберусь - в ридми есть целый список errata, чего бы еще поправить и улучшить.


Вернуться к началу
 Заголовок сообщения: Re: Tiny C Compiler
СообщениеДобавлено: Пн фев 06, 2017 9:04 pm 
Не в сети

Зарегистрирован: Чт мар 31, 2016 10:18 am
Сообщения: 11
У меня возникает ошибка, когда ktcc, собранный на Win32, при линковке приложения для KOS падает в Segmentation fault. kTcc собранный для Kolibri, и запущенный под Kolibri нормально линкует при этих же параметрах. При поиске ошибки с удивлением для себя обнаружил заголовок MENUET02 там, где должна быть BSS секция(в kex файле, собранным kTcc из-под Kolibri).
Примерно понял в чем ошибка, приведу правленный мною код, который заработал нормально на обеих платформах(tccmeos.c):
Код:
int tcc_output_me(TCCState* s1,const char *filename)
{
   me_info me;
    int i;
   int offset;
    FILE* f;
    //printf("%d\n",s1->nb_sections);
   memset(&me,0,sizeof(me));
   me.s1=s1;
   relocate_common_syms();
   assign_addresses(&me);

   if (s1->do_debug)
      tcc_output_dbgme(filename, &me);

   me.header.entry_point=tcc_find_symbol_me(&me,"start");
   me.header.params= tcc_find_symbol_me(&me,"__argv"); // <--
   me.header.argv= tcc_find_symbol_me(&me,"__path"); // <--

   f=fopen(filename,"wb");
   offset=0;
    for (i=0;i<8;i++)
        me.header.magic[i]=me_magic[i];
   /*me.header.magic[0]='M';me.header.magic[1]='E';
   me.header.magic[2]='N';me.header.magic[3]='U';
   me.header.magic[4]='E';me.header.magic[5]='T';
   me.header.magic[6]='0';me.header.magic[7]='1';*/
   printf("\nHeader at:%i",offset);
   offset+=fwrite(&me.header,1,sizeof(IMAGE_MEOS_FILE_HEADER),f);
   meos_section_info* si;
   printf("\nCode at:%i",offset);
   for(si=me.code_sections;si;si=si->next)
      offset+=fwrite(si->data,1,si->data_size,f);
   printf("\nData at:%i",offset);
   for (si=me.data_sections;si;si=si->next)
      offset+=fwrite(si->data,1,si->data_size,f);
   printf("\nBSS at:%i",offset);
   for (si=me.bss_sections;si;si=si->next){
      //my mod
      if (si->data==NULL){
         printf("\nError! BSS data is NULL! size:%i",(int)si->data_size);
         si->data=calloc(si->data_size,1);
      }
      //end my mod
      offset+=fwrite(si->data,1,si->data_size,f);
   }
   printf("\nComplete! Writed %i bytes.\n",offset);
/*
    if (me.bss_sections) // Siemargl testin, what we lose
    {
        tcc_error_noabort("We lose .BSS section when linking KOS32 executable");
    }
*/
   fclose(f);
   return 0;
}

Изменено:
Код:
      //my mod
      if (si->data==NULL){
         printf("\nError! BSS data is NULL! size:%i",(int)si->data_size);
         si->data=calloc(si->data_size,1);
      }
      //end my mod

а KTCC из под Kolibri может успешно читать из NULL образ своего же запущеного процесса. И записывать в файл. Но это может привести к серьезным ошибкам, поскольку данные в BSS должны быть нулями в момент запуска процесса. То есть ktcc может генерировать бинарники с багами.


Вернуться к началу
 Заголовок сообщения: Re: Tiny C Compiler
СообщениеДобавлено: Пн фев 06, 2017 10:48 pm 
Не в сети

Зарегистрирован: Вт мар 08, 2016 11:00 pm
Сообщения: 269
Внес в SVN. Хотя что нулям не место в бинарнике, но мусору там точно не должно быть.
В принципе, бинарники обычно kpack-уются, так что неважно.
Но по хорошему, загрузчик должен инициализировать .bss, в чем я в Колибри не уверен.

В редакциях <=6429 BSS вообще не писался.

На самом деле, в плане работ по tcc, есть интересная другая ветка https://github.com/mirror/tinycc, с которой бы смержиться когда либо.
В ней работает __fastcall и --bounds_check, хотя сходу не захотел печатать стек при нарушении границ.


Вернуться к началу
 Заголовок сообщения: Re: Tiny C Compiler
СообщениеДобавлено: Вс фев 12, 2017 8:02 am 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3929
Siemargl писал(а):
Но по хорошему, загрузчик должен инициализировать .bss, в чем я в Колибри не уверен.
Можешь не сомневаться. Ядро всегда обнуляет память, выделяемую для приложения.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 218 сообщений ]  На страницу Пред. 111 12 13 14 15

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


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

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


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

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