Bug 14027

Summary: Не работают моды в стабильной ветке - проблема с mmap()
Product: Branch 4.0 Reporter: Evgeny Sinelnikov <sin>
Component: quake3Assignee: Nobody's working on this, feel free to take it <nobody>
Status: CLOSED WONTFIX QA Contact: Q.A. 4.0 <qa-4.0>
Severity: major    
Priority: P2 CC: erthad, lakostis, ldv, silicium, vsu
Version: 4.0   
Hardware: all   
OS: Linux   

Description Evgeny Sinelnikov 2008-01-16 03:47:42 MSK
При попытке загрузки модов, например osp 1.03a, возникает сбой. Лог консоли:
..............
..............
..............
--------------------------------
Loading vm file vm/ui.qvm...
VM malloc return 0xb025a000 for 585280
Received signal 11, exiting...
----- CL_Shutdown -----
RE_Shutdown( 1 )
-----------------------

Ошибка происходит сразу после вызова mmap2 (строка 1084) в файле vm_x86.c во
время вызова memcpy (строка 1096).

Экспериментальным методом удалось запустить моды... Для этого пришлось побайтно
записать в замапленную область нули.

--- a/quake3/code/qcommon/vm_x86.c
+++ b/quake3/code/qcommon/vm_x86.c
@@ -1093,6 +1093,11 @@ void VM_Compile( vm_t *vm, vmHeader_t *header ) {
        vm->codeBase = malloc(compiledOfs);
 #endif

+       char e = 0;
+       int ii;
+       for (ii = 0; ii < compiledOfs; ii++)
+               vm->codeBase[ii] = e;
+
        Com_Memcpy( vm->codeBase, buf, compiledOfs );

 #ifdef VM_X86_MMAP

Забавно, что в текущем Сизифе это работает. Причём апдейты quake3, Glibc,
libgcc4.1 и SDL из Сизифа не помогают. Один и тот же бинарий на бранче работает
иначе, хотя на вид это совпадение. Проблема, скорее всего, в ядре...
Steps to Reproduce:
1. Готовим паки
2. Запускаем мод
3. Получаем сбой
Comment 1 Vladimir V. Kamarzin 2008-01-16 08:30:40 MSK
Если просто развернуть osp в ~/.q3a/osp, запустить quake3 и попытаться применить
мод osp, вываливается на 
"Failed loading /usr/lib/games/quake3/osp/uii386.so:
/usr/lib/games/quake3/osp/uii386.so: cannot open shared object file: No such
file or directory"

Если подсунуть uii386.so из baseq3, мод как бы стартует:
Sys_LoadDll(/home/vvk/.q3a/osp/uii386.so): succeeded ...
Sys_LoadDll(ui) found **vmMain** at  0xaf11779c
Sys_LoadDll(ui) succeeded!

Но при попытке запуска сервера вываливается:
***Loading vm file vm/qagame.qvm...
Received signal 11, exiting...

Мне казалось что для osp нужен какой-то свой uii386.so, и поэтому она не
работает. Или это не так?
Comment 2 Evgeny Sinelnikov 2008-01-16 13:41:56 MSK
(In reply to comment #1)
Тут проблема от распаковки не решалась, да и костыль это не удобный... К тому же
по вашей ошибке видно, что движок не смог загрузить следующий архив...

В общем эта бага повторяется на бранче и не поворяется не Сизифе с одними и теми
же бинарниками (паки, моды, сам quake3, glibc, libgcc4.1, libSDL, kernel -
2.6.18-std-smp-alt10)... Объяснить это трудно... Сборку с вышеописанным патчем
можно найти здесь:
http://mastersin.vfose.ru/Local/i686/SRPMS.sisyphus/
http://mastersin.vfose.ru/Local/i686/RPMS.sisyphus/

> Но при попытке запуска сервера вываливается:
> ***Loading vm file vm/qagame.qvm...
> Received signal 11, exiting...
> 
> Мне казалось что для osp нужен какой-то свой uii386.so, и поэтому она не
> работает. Или это не так?

Нет, проблема в том, что почему-то механизм распаковки и предкомпиляции кода
(Just in time compiler имени автора Quake3) на последнем этапе копирования
скомпилированного кода в замапленную область памяти падает...
Comment 3 Konstantin Pavlov 2008-01-28 19:54:06 MSK
Исправлено в 1.34-alt7.svn1114
Comment 4 Evgeny Sinelnikov 2008-03-12 04:27:33 MSK
(In reply to comment #3)
> Исправлено в 1.34-alt7.svn1114

Не совсем понятно как конкретно это исправлено...
С одной стороны в бранче обновлённого пакета нет, а сдругой стороны не понятно
выявлена ли проблема появления этого бага в ядре. Надеюсь это не проявится в
новых ядрах серии 2.6.24... До последнего времени эту проблему можно было решить
выкачав собранную версию у меня... теперь из сизифа (надеюсь по зависимостям ещё
не разошлось) или установив новое ядро из сизифа...

В самом сизифе исправление имеет смысл, только при работе с ядрами серии 2.6.18,
ибо проявляется только на них и, соотвественно, в основном у обычных
пользователей дистрибутива...

К сожалению модули для 2.6.24-std-def уже не пособираешь не переехав на Сизиф
из-за зависимостей. Я думаю, что вопрос об этой проблеме в ядре стоит как
поставить...

Так или иначе обновившись из бранча, quake3 сейчас всё равно не запустишь...
Comment 5 Michael Shigorin 2014-11-05 20:15:36 MSK
В 4.0/branch исправления не будут вноситься уже технически (заглушена очередь на сборку), поэтому прошу ошибки, актуальные для sisyphus/p7/t7, перевесить на текущие ветки или сизиф.