C-- Sphinx Compiler
-
revision #6787
Проверил, строка "/sys/lib/../calc" запускает calc.
Вот это viewtopic.php?f=31&t=659&p=67590#p67589 правилось или нет?
Вот это viewtopic.php?f=31&t=659&p=67590#p67589 правилось или нет?
Из хаоса в космос
Должно, теперь это делается до файловых систем.
При сборке некоторых программ(например, Eolite) падает с General protection fault.
Может быть, попробовать стек побольше сделать?
Или может какая-то функция в libc недоработана?
Забавный факт, для сборки под винду достаточно bat-ника, содержащего только одну строку:
Сравните с содержимым Makefile
Может быть, попробовать стек побольше сделать?
Или может какая-то функция в libc недоработана?
Забавный факт, для сборки под винду достаточно bat-ника, содержащего только одну строку:
Code: Select all
gcc -fno-exceptions -D_WIN32_ -D__CONSOLE__ -o cmm.exe *.cpp
Spoiler:
Code: Select all
Compiler = gcc
#Compiler_Options = -c -fno-exceptions -D_UNIX_
Compiler_Options = -c -fno-exceptions -D_WIN32_ -D__CONSOLE__
#-D: _WIN32_ or _UNIX_
#-D: for _WIN32_ add -D__CONSOLE__
Exe_file = cmm
All_Libs = main.o toka.o tokb.o tokc.o toke.o tokr.o errors.o debug.o outobj.o outpe.o disasm.o switch.o outle.o pointer.o new_type.o class.o res.o optreg.o libobj.o port.o
####################
## Makefile rules ##
####################
all : $(Exe_file)
$(Exe_file) : $(All_Libs)
$(Compiler) -o $(Exe_file) $(All_Libs)
clean:
rm *.o
# next are the exceptions that don't have to be compiled with the /zu option
# since they will never be called from a interrupt. hey.. I _tried_ to find
# a clean solution..
main.o : main.cpp
$(Compiler) $(Compiler_Options) $<
toka.o : toka.cpp
$(Compiler) $(Compiler_Options) $<
tokb.o : tokb.cpp
$(Compiler) $(Compiler_Options) $<
tokc.o : tokc.cpp
$(Compiler) $(Compiler_Options) $<
toke.o : toke.cpp
$(Compiler) $(Compiler_Options) $<
tokr.o : tokr.cpp
$(Compiler) $(Compiler_Options) $<
errors.o :errors.cpp
$(Compiler) $(Compiler_Options) $<
debug.o : debug.cpp
$(Compiler) $(Compiler_Options) $<
outobj.o : outobj.cpp
$(Compiler) $(Compiler_Options) $<
outpe.o : outpe.cpp
$(Compiler) $(Compiler_Options) $<
disasm.o : disasm.cpp
$(Compiler) $(Compiler_Options) $<
switch.o : switch.cpp
$(Compiler) $(Compiler_Options) $<
outle.o : outle.cpp
$(Compiler) $(Compiler_Options) $<
pointer.o : pointer.cpp
$(Compiler) $(Compiler_Options) $<
new_type.o : new_type.cpp
$(Compiler) $(Compiler_Options) $<
class.o : class.cpp
$(Compiler) $(Compiler_Options) $<
res.o : res.cpp
$(Compiler) $(Compiler_Options) $<
optreg.o : optreg.cpp
$(Compiler) $(Compiler_Options) $<
libobj.o : libobj.cpp
$(Compiler) $(Compiler_Options) $<
port.o: port.cpp
$(Compiler) $(Compiler_Options) $<
.cpp.o:
$(Compiler) $(Compiler_Options) $<
.asm.o:
fasm $<
0CodErr
Невероятно, работает (залил на SVN).
Может быть еще есть скрипт для компиляции Колибри бинарника из-под Windows?
Невероятно, работает (залил на SVN).
Может быть еще есть скрипт для компиляции Колибри бинарника из-под Windows?
Из хаоса в космос
Пытался собрать для Ubuntu 16.04. В итоге кое-как собрал, компилятор CMM работает не стабильно, легкие примеры компилирует, но бинарник не запускается к колибриос. Может кто нибудь сможет довести его до конца.
Spoiler:
Технологии меняют мир, а я - меняю технологии.
Тоже пытался собрать под Убунтой, и тоже неудачно. 64-битная версия компилирует нечто левое. 32-битная версия вроде работает, простые примеры тоже вроде запускаются в Колибри (в моём случае в эмуляторе kex). Но на более сложных проектах (к примеру Eolite) cmm вылетает в sigsegv. Те же самые исходники компилируются виндовой версией под wine без проблем. Печалька.
Довел компилятор для Ubuntu 16.04 x64 до корректной компиляции бинарников для KolibriOS. Но остался один баг, при компиляции тяжелых программ (например Eolite) - крэшиться.
Перед компиляцией исходников прикрепленных в этом сообщении не забудьте установить.
Перед компиляцией исходников прикрепленных в этом сообщении не забудьте установить.
Code: Select all
sudo apt-get install gcc-multilib
Технологии меняют мир, а я - меняю технологии.
Для Ubuntu. Более новее версия компилятора взятого с SVN, еще крэшится
- Attachments
-
-
cmm.r7531.tar.gz (564.6 KiB)Downloaded 272 times
-
Технологии меняют мир, а я - меняю технологии.
pavelyakov
Можешь собрать нормальный компилятор под Колибри?
Тот что есть, ничерта не компилит из-за проблем с путями.
Можешь собрать нормальный компилятор под Колибри?
Тот что есть, ничерта не компилит из-за проблем с путями.
- Attachments
-
-
SCREEN_2.PNG (106.81 KiB)Viewed 10763 times
-
Из хаоса в космос
а не надо добавить -D_WС_ ?0CodErr wrote:Забавный факт, для сборки под винду достаточно bat-ника, содержащего только одну строку:Code: Select all
gcc -fno-exceptions -D_WIN32_ -D__CONSOLE__ -o cmm.exe *.cpp
Проверьте на компиляции конструкций типа (E)AX, (E)BX и т.п.
Дебагер показывает, где в стеке вызовов произошла ошибка сигментации, но я так её и не нашел.
(gdb) backtrace
#0 0xf7e4ad7b in malloc () from /lib/i386-linux-gnu/libc.so.6
#1 0x5655af74 in MALLOC(int) ()
#2 0x565b6020 in BackString(char*) ()
#3 0x5655f7f6 in CheckMassiv(char*&, int, int, int*, int*, long*) ()
#4 0x5655ef0b in CheckAllMassiv(char*&, int, _SINFO_*, _ITOK_*, int, int) ()
#5 0x5657a98e in getinto_e_ax(int, int, _ITOK_*, char*&, _SINFO_*, int, int)
()
#6 0x5657bd14 in do_e_axmath(int, int, char**) ()
#7 0x565a0173 in constructcompare(int, unsigned int, LVIC*) ()
#8 0x565a0e5f in compare(int, unsigned int*, REGISTERSTAT**, REGISTERSTAT**, LVIC*) ()
#9 0x565a5639 in dofor(unsigned int) ()
#10 0x5659951d in docommand() ()
#11 0x565990d7 in doblock2() ()
#12 0x5659909e in doblock() ()
#13 0x565a58e0 in dofor(unsigned int) ()
#14 0x5659951d in docommand() ()
#15 0x565990d7 in doblock2() ()
#16 0x565a9239 in setproc(int) ()
#17 0x565b2dc1 in insert_dynamic(int) ()
#18 0x56564ad3 in docalls() ()
#19 0x56558ab0 in compile() ()
#20 0x565587ec in main ()
(gdb) backtrace
#0 0xf7e4ad7b in malloc () from /lib/i386-linux-gnu/libc.so.6
#1 0x5655af74 in MALLOC(int) ()
#2 0x565b6020 in BackString(char*) ()
#3 0x5655f7f6 in CheckMassiv(char*&, int, int, int*, int*, long*) ()
#4 0x5655ef0b in CheckAllMassiv(char*&, int, _SINFO_*, _ITOK_*, int, int) ()
#5 0x5657a98e in getinto_e_ax(int, int, _ITOK_*, char*&, _SINFO_*, int, int)
()
#6 0x5657bd14 in do_e_axmath(int, int, char**) ()
#7 0x565a0173 in constructcompare(int, unsigned int, LVIC*) ()
#8 0x565a0e5f in compare(int, unsigned int*, REGISTERSTAT**, REGISTERSTAT**, LVIC*) ()
#9 0x565a5639 in dofor(unsigned int) ()
#10 0x5659951d in docommand() ()
#11 0x565990d7 in doblock2() ()
#12 0x5659909e in doblock() ()
#13 0x565a58e0 in dofor(unsigned int) ()
#14 0x5659951d in docommand() ()
#15 0x565990d7 in doblock2() ()
#16 0x565a9239 in setproc(int) ()
#17 0x565b2dc1 in insert_dynamic(int) ()
#18 0x56564ad3 in docalls() ()
#19 0x56558ab0 in compile() ()
#20 0x565587ec in main ()
Технологии меняют мир, а я - меняю технологии.
посмотри параметр - размер, с которым вызван malloc
и количество выделенной памяти на тот момент процессу
и количество выделенной памяти на тот момент процессу
revision #7545
Кажется я нашёл, почему под линуксом cmm вылетал. Автор явно рассчитывал на то, что память, выделяемая malloc, содержит нули. Под виндой это почти так (первые байты всё равно не нулевые), а в убунте нет. К тому-же, под виндой, free обычно весьма толерантно относится к левому указателю, а линукс безжалостно генерирует сигнал, после чего программа завершается.
После внесения правок Eolite компилируется и под убунтой.
Кроме того я внёс исправление обратных слешей на прямые, это должно и для Колибри подойти.
Кажется я нашёл, почему под линуксом cmm вылетал. Автор явно рассчитывал на то, что память, выделяемая malloc, содержит нули. Под виндой это почти так (первые байты всё равно не нулевые), а в убунте нет. К тому-же, под виндой, free обычно весьма толерантно относится к левому указателю, а линукс безжалостно генерирует сигнал, после чего программа завершается.
После внесения правок Eolite компилируется и под убунтой.
Кроме того я внёс исправление обратных слешей на прямые, это должно и для Колибри подойти.
По обоим вопросам нет. Покажи где такое используетсяtsdima wrote:revision #7545
Кажется я нашёл, почему под линуксом cmm вылетал. Автор явно рассчитывал на то, что память, выделяемая malloc, содержит нули. Под виндой это почти так (первые байты всё равно не нулевые), а в убунте нет. К тому-же, под виндой, free обычно весьма толерантно относится к левому указателю, а линукс безжалостно генерирует сигнал, после чего программа завершается.
...
Какая то заморочка в websvn diff, не могу посмотреть все исправления (
Who is online
Users browsing this forum: No registered users and 0 guests