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