Re: Tiny C Compiler
Posted: Thu Oct 06, 2016 12:05 am
вряд ли, я не в курсе как оно там устроено внутри.
и я не пробовал собирать его gcc 5.4. проверил, обновил версию
и я не пробовал собирать его gcc 5.4. проверил, обновил версию
Да, спасибо, это работает.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 и оттуда запускаться
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
Можешь не сомневаться. Ядро всегда обнуляет память, выделяемую для приложения.Siemargl wrote: Но по хорошему, загрузчик должен инициализировать .bss, в чем я в Колибри не уверен.
На обороте написано что satellite 1625cdt/4.3Leency wrote:Какй процессор, модель ноутбука?
запускаешь под колибри или под windows ?p1a wrote:На обороте написано что satellite 1625cdt/4.3Leency wrote:Какй процессор, модель ноутбука?
Кажется AMD K6.
Запускал только под колибри, может стоит попробовать ещё где-то.Siemargl wrote:запускаешь под колибри или под windows ?p1a wrote:На обороте написано что satellite 1625cdt/4.3Leency wrote:Какй процессор, модель ноутбука?
Кажется AMD K6.
можно собрать версию под старые процы, хотя с этим проблема - надо и newlib пересобирать под К6 (
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 typeCode: 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];