Page 2 of 20

Re: Tiny C Compiler

Posted: Mon Aug 21, 2006 7:31 pm
by rabid rabbit
halyavin wrote:Выкладываю адаптацию этого компилятора для KolibriOS: http://shade.msu.ru/~msu-se/metcc.zip (работает под windows).
Если он работает под виндой, то нафига изобретать велосипед, если есть, например, MS VC++?

Posted: Mon Aug 21, 2006 11:04 pm
by andrew_programmer
В последствии он будет портирован в Колибри.А вот портировать майкрософтовский компилятор нереально(он платный и его код майкрософт не откроет).

Posted: Tue Aug 22, 2006 11:37 pm
by Serge
А как из программы получить доступ к командной строке и пути ?

Posted: Wed Aug 23, 2006 2:05 pm
by Ghost
Какието нелады с новой либой :
C Code:
_msys_write_text(6 - offs, 8, fcolor | FONT0, header, strlen(header));

Disassembled (old library):

seg000:000002F1 mov eax, 6
seg000:000002F6 mov ecx, ds:offs
seg000:000002FC sub eax, ecx
seg000:000002FE mov ecx, offset header
seg000:00000303 push ecx
seg000:00000304 mov [ebp+var_C], eax
seg000:00000307 call strlen
seg000:0000030C add esp, 4
seg000:0000030F push eax
seg000:00000310 mov eax, offset header
seg000:00000315 push eax
seg000:00000316 mov eax, ds:dword_C4E
seg000:0000031C push eax
seg000:0000031D mov eax, 8
seg000:00000322 push eax
seg000:00000323 mov eax, [ebp+var_C]
seg000:00000326 push eax
seg000:00000327 call _msys_write_text


Disassembled (new library):

seg000:000002F1 mov eax, 6
seg000:000002F6 mov ecx, ds:offs
seg000:000002FC sub eax, ecx
seg000:000002FE mov ecx, offset header
seg000:00000303 push ecx
seg000:00000304 mov [ebp+var_C], eax
seg000:00000307 loc_307:
seg000:00000307 call near ptr loc_307+1

seg000:0000030C add esp, 4
seg000:0000030F push eax
seg000:00000310 mov eax, offset header
seg000:00000315 push eax
seg000:00000316 mov eax, ds:dword_BE2
seg000:0000031C push eax
seg000:0000031D mov eax, 8
seg000:00000322 push eax
seg000:00000323 mov eax, [ebp-0Ch]
seg000:00000326 push eax
seg000:00000327 call _msys_write_text

Posted: Wed Aug 23, 2006 6:41 pm
by Serge
Ghost
Значит при компоновке strlen не найдена. Я сталкивался с подобной фигней. Если функция объявлена но её нет в библиотеке или в коде программы, компилятор не выводит никаких сообщений (unresolved externals) а записывает call с неправильным смещением.

Posted: Wed Aug 23, 2006 8:50 pm
by halyavin
Ghost
Размер melibc.a равен 50510? string.h подключен? Если все равно вставляет call $+1, не находя фунцию, то пошли прогу на мыло (http://shade.msu.ru/~msu-se/0ptlmcol6e.gif).

Posted: Thu Aug 24, 2006 9:22 pm
by Ghost
halyavin
Либу брал из обновлённого metcc.zip, скачал metccfix1.zip - всё Ok.

Posted: Fri Aug 25, 2006 10:58 am
by vectoroc
попытался добавить поддержку argc argv в main-е...
параметры парсятся по-пробельно. Просьба всем кому интересно потестить
http://victor.kolibrios.org/download/metcc/bin.rar - бинарник компилера и загрузчика
http://victor.kolibrios.org/download/metcc/source.rar - исходные файлы, которые я правил

Posted: Sat Aug 26, 2006 1:06 pm
by vectoroc
Немного улучшил распознование параметров. Теперь если параметр начинается с двойных кавычек, пробелы игнорируются, и оканчивается этот параметр первой встречной кавычкой. Лишние пробельные символы между параметрами игнорируются.
Ссылки те же

Posted: Sat Aug 26, 2006 7:01 pm
by vectoroc
По совсем непонятным мне причинам при длинном передаваемом параметре некоторые отладочные сообщения в начале не выводятся (например сообщение о старте программы сразу после mf_init). Переполнения выделенного буффера вроде не происходит, хотя я не уверен ,что проверка проходит вообще(она сразу после первого отладочного сообщения). Может это ядрышко борохлит?

Posted: Sun Aug 27, 2006 8:22 am
by halyavin
Victor
Учти, что буфер для отладочных сообщений имеет ограниченный размер (4096 байт по-моему). Приеду из Петрозаводска 1 сентября - включу твои изменения (если ты не решишь залить все на SVN раньше).

Posted: Sun Aug 27, 2006 7:57 pm
by vectoroc
с свн я только читать могу... так что самому придётся :-Р

Posted: Mon Aug 28, 2006 4:55 pm
by diamond
http://diamondz.land.ru/klbr_doc/63.htm
Длина буфера - 512 байт. При переполнении буфера все полученные данные теряются и заполнение начинается снова с нуля.

Posted: Tue Aug 29, 2006 7:10 pm
by O01eg
Люди, а как писать статистические либы на нём, вроде бы можно, но я не знаю как.

Posted: Thu Aug 31, 2006 7:42 pm
by O01eg
Кстати, ковырялся я с ним:
stderr и stdout перенаправить в отладку
выложить размеры и знаки данных в tcc (а то libogg тебует)
определить NULL
скомпилировать melibc.a в metcc