вряд ли, я не в курсе как оно там устроено внутри.
и я не пробовал собирать его gcc 5.4. проверил, обновил версию
Tiny C Compiler
Компилятор не может найти 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 находит без проблем. ЧЯДНТ?
Запускал с помощью 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 находит без проблем. ЧЯДНТ?
Есть какая то проблема с относительными путями в КОС, ключ -B не отрабатывает. Нужно зайти в папку с tcc и оттуда запускаться
Т.е в консоли (shell)
cd /usbhd0/1/ktcc_26_161007
tcc samples/consoleio.c -o samples/consoleio -lck
Если верить моему readme, еще вариант положить start.o рядом с .С файлом (возможно в текущую папку)
Т.е в консоли (shell)
cd /usbhd0/1/ktcc_26_161007
tcc samples/consoleio.c -o samples/consoleio -lck
Если верить моему readme, еще вариант положить start.o рядом с .С файлом (возможно в текущую папку)
Да, спасибо, это работает.Siemargl wrote: Т.е в консоли (shell)
cd /usbhd0/1/ktcc_26_161007
tcc samples/consoleio.c -o samples/consoleio -lck
Проблема, видимо, не в KOS. Без ключа -B, компилятор не находит также conio.h, а с ключом находит.Siemargl wrote:Есть какая то проблема с относительными путями в КОС, ключ -B не отрабатывает. Нужно зайти в папку с tcc и оттуда запускаться
Возможно, еще ньюансы реализации. Заголовки должны искаться по ключу -I, а -B например в Win32 версии Tcc работает.akron1 wrote:Проблема, видимо, не в KOS. Без ключа -B, компилятор не находит также conio.h, а с ключом находит.Siemargl wrote:Есть какая то проблема с относительными путями в КОС, ключ -B не отрабатывает. Нужно зайти в папку с tcc и оттуда запускаться
Когда нибудь доберусь - в ридми есть целый список errata, чего бы еще поправить и улучшить.
У меня возникает ошибка, когда ktcc, собранный на Win32, при линковке приложения для KOS падает в Segmentation fault. kTcc собранный для Kolibri, и запущенный под Kolibri нормально линкует при этих же параметрах. При поиске ошибки с удивлением для себя обнаружил заголовок MENUET02 там, где должна быть BSS секция(в kex файле, собранным kTcc из-под Kolibri).
Примерно понял в чем ошибка, приведу правленный мною код, который заработал нормально на обеих платформах(tccmeos.c):
Изменено:
а KTCC из под Kolibri может успешно читать из NULL образ своего же запущеного процесса. И записывать в файл. Но это может привести к серьезным ошибкам, поскольку данные в BSS должны быть нулями в момент запуска процесса. То есть ktcc может генерировать бинарники с багами.
Примерно понял в чем ошибка, приведу правленный мною код, который заработал нормально на обеих платформах(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
Внес в SVN. Хотя что нулям не место в бинарнике, но мусору там точно не должно быть.
В принципе, бинарники обычно kpack-уются, так что неважно.
Но по хорошему, загрузчик должен инициализировать .bss, в чем я в Колибри не уверен.
В редакциях <=6429 BSS вообще не писался.
На самом деле, в плане работ по tcc, есть интересная другая ветка https://github.com/mirror/tinycc, с которой бы смержиться когда либо.
В ней работает __fastcall и --bounds_check, хотя сходу не захотел печатать стек при нарушении границ.
В принципе, бинарники обычно kpack-уются, так что неважно.
Но по хорошему, загрузчик должен инициализировать .bss, в чем я в Колибри не уверен.
В редакциях <=6429 BSS вообще не писался.
На самом деле, в плане работ по tcc, есть интересная другая ветка https://github.com/mirror/tinycc, с которой бы смержиться когда либо.
В ней работает __fastcall и --bounds_check, хотя сходу не захотел печатать стек при нарушении границ.
Можешь не сомневаться. Ядро всегда обнуляет память, выделяемую для приложения.Siemargl wrote: Но по хорошему, загрузчик должен инициализировать .bss, в чем я в Колибри не уверен.
Здравствуйте, tcc не запускается на реальной машине ничего не выводя на доску отладки и не показывая ошибок.
Ноутбук очень старый, не запускает некоторые программы такие как animage ругаясь на неподдерживаемые инструкции!
Ноутбук очень старый, не запускает некоторые программы такие как animage ругаясь на неподдерживаемые инструкции!
Какй процессор, модель ноутбука?
Из хаоса в космос
На обороте написано что satellite 1625cdt/4.3Leency wrote:Какй процессор, модель ноутбука?
Кажется AMD K6.
запускаешь под колибри или под windows ?p1a wrote:На обороте написано что satellite 1625cdt/4.3Leency wrote:Какй процессор, модель ноутбука?
Кажется AMD K6.
можно собрать версию под старые процы, хотя с этим проблема - надо и newlib пересобирать под К6 (
Запускал только под колибри, может стоит попробовать ещё где-то.Siemargl wrote:запускаешь под колибри или под windows ?p1a wrote:На обороте написано что satellite 1625cdt/4.3Leency wrote:Какй процессор, модель ноутбука?
Кажется AMD K6.
можно собрать версию под старые процы, хотя с этим проблема - надо и newlib пересобирать под К6 (
Никогда ничего не собирал под другую архитектуру(.
Обновленная версия - мартовская 2018, Startrek Edition.
Добавлена буферизация чтения в libck - иначе Стартрек несколько минут побайтово читал хелп-файл с виртуального /fd0/1.
Также добавлены несколько функций в libck, и в ней же исправлены обнаруженные при работе ошибки.
Обновлено от сентября 2018, поправлено возвращаемое значение fwrite,
неверный импорт из coff при похожих именах (в частности вместо con_getch2 линковалась con_getch)
Обновлено октябрь 2018 - забытые исправления из транка.
Добавлена буферизация чтения в libck - иначе Стартрек несколько минут побайтово читал хелп-файл с виртуального /fd0/1.
Также добавлены несколько функций в libck, и в ней же исправлены обнаруженные при работе ошибки.
Обновлено от сентября 2018, поправлено возвращаемое значение fwrite,
неверный импорт из coff при похожих именах (в частности вместо con_getch2 линковалась con_getch)
Обновлено октябрь 2018 - забытые исправления из транка.
- Attachments
-
-
tcc_26_181012.zip (268.24 KiB)Downloaded 286 times
-
Last edited by Siemargl on Fri Oct 12, 2018 12:22 pm, edited 2 times in total.
Ошибка при компиляции примера
Ошибки при сборке libc
gcc-8.2.1 x86_64
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
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];
Who is online
Users browsing this forum: No registered users and 0 guests