Page 15 of 20
Re: Tiny C Compiler
Posted: Thu Oct 06, 2016 12:05 am
by Siemargl
вряд ли, я не в курсе как оно там устроено внутри.
и я не пробовал собирать его gcc 5.4. проверил, обновил версию
Re: Tiny C Compiler
Posted: Mon Oct 10, 2016 2:29 am
by akron1
Компилятор не может найти 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
Posted: Mon Oct 10, 2016 10:57 am
by Siemargl
Есть какая то проблема с относительными путями в КОС, ключ -B не отрабатывает. Нужно зайти в папку с tcc и оттуда запускаться
Т.е в консоли (shell)
cd /usbhd0/1/ktcc_26_161007
tcc samples/consoleio.c -o samples/consoleio -lck
Если верить моему readme, еще вариант положить start.o рядом с .С файлом (возможно в текущую папку)
Re: Tiny C Compiler
Posted: Mon Oct 10, 2016 6:21 pm
by akron1
Siemargl wrote:
Т.е в консоли (shell)
cd /usbhd0/1/ktcc_26_161007
tcc samples/consoleio.c -o samples/consoleio -lck
Да, спасибо, это работает.
Siemargl wrote:Есть какая то проблема с относительными путями в КОС, ключ -B не отрабатывает. Нужно зайти в папку с tcc и оттуда запускаться
Проблема, видимо, не в KOS. Без ключа -B, компилятор не находит также conio.h, а с ключом находит.
Re: Tiny C Compiler
Posted: Mon Oct 10, 2016 6:26 pm
by Siemargl
akron1 wrote:Siemargl wrote:Есть какая то проблема с относительными путями в КОС, ключ -B не отрабатывает. Нужно зайти в папку с tcc и оттуда запускаться
Проблема, видимо, не в KOS. Без ключа -B, компилятор не находит также conio.h, а с ключом находит.
Возможно, еще ньюансы реализации. Заголовки должны искаться по ключу -I, а -B например в Win32 версии Tcc работает.
Когда нибудь доберусь - в ридми есть целый список errata, чего бы еще поправить и улучшить.
Re: Tiny C Compiler
Posted: Mon Feb 06, 2017 9:04 pm
by netryx
У меня возникает ошибка, когда ktcc, собранный на Win32, при линковке приложения для KOS падает в Segmentation fault. kTcc собранный для Kolibri, и запущенный под Kolibri нормально линкует при этих же параметрах. При поиске ошибки с удивлением для себя обнаружил заголовок MENUET02 там, где должна быть BSS секция(в kex файле, собранным kTcc из-под Kolibri).
Примерно понял в чем ошибка, приведу правленный мною код, который заработал нормально на обеих платформах(tccmeos.c):
Code: Select all
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;
}
Изменено:
Code: Select all
//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
Posted: Mon Feb 06, 2017 10:48 pm
by Siemargl
Внес в SVN. Хотя что нулям не место в бинарнике, но мусору там точно не должно быть.
В принципе, бинарники обычно kpack-уются, так что неважно.
Но по хорошему, загрузчик должен инициализировать .bss, в чем я в Колибри не уверен.
В редакциях <=6429 BSS вообще не писался.
На самом деле, в плане работ по tcc, есть интересная другая ветка
https://github.com/mirror/tinycc, с которой бы смержиться когда либо.
В ней работает __fastcall и --bounds_check, хотя сходу не захотел печатать стек при нарушении границ.
Re: Tiny C Compiler
Posted: Sun Feb 12, 2017 8:02 am
by Serge
Siemargl wrote:
Но по хорошему, загрузчик должен инициализировать .bss, в чем я в Колибри не уверен.
Можешь не сомневаться. Ядро всегда обнуляет память, выделяемую для приложения.
Re: Tiny C Compiler
Posted: Wed Feb 21, 2018 11:48 am
by p1a
Здравствуйте, tcc не запускается на реальной машине ничего не выводя на доску отладки и не показывая ошибок.
Ноутбук очень старый, не запускает некоторые программы такие как animage ругаясь на неподдерживаемые инструкции!
Re: Tiny C Compiler
Posted: Wed Feb 21, 2018 1:12 pm
by Leency
Какй процессор, модель ноутбука?
Re: Tiny C Compiler
Posted: Wed Feb 21, 2018 1:19 pm
by p1a
Leency wrote:Какй процессор, модель ноутбука?
На обороте написано что satellite 1625cdt/4.3
Кажется AMD K6.
Re: Tiny C Compiler
Posted: Wed Feb 21, 2018 6:41 pm
by Siemargl
p1a wrote:Leency wrote:Какй процессор, модель ноутбука?
На обороте написано что satellite 1625cdt/4.3
Кажется AMD K6.
запускаешь под колибри или под windows ?
можно собрать версию под старые процы, хотя с этим проблема - надо и newlib пересобирать под К6 (
Re: Tiny C Compiler
Posted: Wed Feb 21, 2018 7:37 pm
by p1a
Siemargl wrote:p1a wrote:Leency wrote:Какй процессор, модель ноутбука?
На обороте написано что satellite 1625cdt/4.3
Кажется AMD K6.
запускаешь под колибри или под windows ?
можно собрать версию под старые процы, хотя с этим проблема - надо и newlib пересобирать под К6 (
Запускал только под колибри, может стоит попробовать ещё где-то.
Никогда ничего не собирал под другую архитектуру(.
Re: Tiny C Compiler
Posted: Tue Mar 13, 2018 12:00 am
by Siemargl
Обновленная версия - мартовская 2018, Startrek Edition.
Добавлена буферизация чтения в libck - иначе Стартрек несколько минут побайтово читал хелп-файл с виртуального /fd0/1.
Также добавлены несколько функций в libck, и в ней же исправлены обнаруженные при работе ошибки.
Обновлено от сентября 2018, поправлено возвращаемое значение fwrite,
неверный импорт из coff при похожих именах (в частности вместо con_getch2 линковалась con_getch)
Обновлено октябрь 2018 - забытые исправления из транка.
Re: Tiny C Compiler
Posted: Thu Oct 04, 2018 10:03 pm
by b00bl1k
Ошибка при компиляции примера
Code: Select all
>kos32-tcc.exe samples\winbasics.c -lck
In file included from samples/winbasics.c:10:
include/kos32sys1.h:579: error: field 'zero' has incomplete type
Ошибки при сборке libc
Code: Select all
In file included from stdio/printf.c:3:
include/conio.h:18:23: ошибка: несовместимые типы для «dword»
typedef unsigned long dword; /* 32-bit unsigned integer */
^~~~~
In file included from include/stdlib.h:3,
from stdio/printf.c:1:
include/kolibrisys.h:19:22: замечание: здесь была предыдущая декларация «dword»
typedef unsigned int dword;
^~~~~
string/is.c:2:16: ошибка: несовместимые типы для «__is»
unsigned short __is[129] = {
^~~~
In file included from string/is.c:1:
include/ctype.h:21:23: замечание: здесь была предыдущая декларация «__is»
extern unsigned short __is[128];
gcc-8.2.1 x86_64