e2k-ports
e2k-ports copied to clipboard
webkit segfault
патч для webkit https://github.com/ilyakurdyukov/e2k-ports/blob/main/webkitgtk-2.34.3-e2k.patch сегфолтит epiphany
bt full проверил на разных версиях, каждый раз одна и та же ошибка
0x0000455563445920 in JSC::MarkedBlock::Handle::sweep(JSC::FreeList*) () from /usr/lib64/libjavascriptcoregtk-4.0.so.18
(gdb) bt full
#0 0x0000455563445920 in JSC::MarkedBlock::Handle::sweep(JSC::FreeList*) () at /usr/lib64/libjavascriptcoregtk-4.0.so.18
#1 0x000045556336a360 in JSC::BlockDirectory::sweep() () at /usr/lib64/libjavascriptcoregtk-4.0.so.18
#2 0x000045556344a458 in JSC::MarkedSpace::sweepBlocks() () at /usr/lib64/libjavascriptcoregtk-4.0.so.18
#3 0x0000455563390780 in JSC::Heap::sweepSynchronously() () at /usr/lib64/libjavascriptcoregtk-4.0.so.18
#4 0x00004555633a6f98 in JSC::Heap::finalize() () at /usr/lib64/libjavascriptcoregtk-4.0.so.18
#5 0x00004555633a03d8 in JSC::Heap::handleNeedFinalize(unsigned int) () at /usr/lib64/libjavascriptcoregtk-4.0.so.18
#6 0x00004555633a04f0 in JSC::Heap::handleNeedFinalize() () at /usr/lib64/libjavascriptcoregtk-4.0.so.18
#7 0x000045556339d3b0 in JSC::Heap::finishChangingPhase(JSC::GCConductor) () at /usr/lib64/libjavascriptcoregtk-4.0.so.18
#8 0x000045556339d190 in JSC::Heap::changePhase(JSC::GCConductor, JSC::CollectorPhase) () at /usr/lib64/libjavascriptcoregtk-4.0.so.18
#9 0x000045556339b6b0 in JSC::Heap::runEndPhase(JSC::GCConductor) () at /usr/lib64/libjavascriptcoregtk-4.0.so.18
#10 0x00004555633971d0 in JSC::Heap::runCurrentPhase(JSC::GCConductor, JSC::CurrentThreadState*) () at /usr/lib64/libjavascriptcoregtk-4.0.so.18
#11 0x00004555633be380 in WTF::ScopedLambdaFunctor<void (JSC::CurrentThreadState&), JSC::Heap::collectInMutatorThread()::{lambda(JSC::CurrentThreadState&)#1}>::implFunction(void*, JSC::CurrentThreadState&) () at /usr/lib64/libjavascriptcoregtk-4.0.so.18
#12 0x000045556342da48 in JSC::callWithCurrentThreadState(WTF::ScopedLambda<void (JSC::CurrentThreadState&)> const&) () at /usr/lib64/libjavascriptcoregtk-4.0.so.18
#13 0x000045556339d808 in JSC::Heap::collectInMutatorThread() () at /usr/lib64/libjavascriptcoregtk-4.0.so.18
#14 0x000045556339f838 in JSC::Heap::stopIfNecessarySlow(unsigned int) () at /usr/lib64/libjavascriptcoregtk-4.0.so.18
#15 0x000045556339f5e8 in JSC::Heap::stopIfNecessarySlow() () at /usr/lib64/libjavascriptcoregtk-4.0.so.18
#16 0x0000455563427218 in JSC::LocalAllocator::allocateSlowCase(JSC::Heap&, JSC::GCDeferralContext*, JSC::AllocationFailureMode) () at /usr/lib64/libjavascriptcoregtk-4.0.so.18
#17 0x0000455562e58280 in void* JSC::tryAllocateCellHelper<JSC::JSFinalObject>(JSC::Heap&, unsigned long, JSC::GCDeferralContext*, JSC::AllocationFailureMode) ()
at /usr/lib64/libjavascriptcoregtk-4.0.so.18
#18 0x00004555636541e8 in JSC::constructEmptyObject(JSC::JSGlobalObject*) () at /usr/lib64/libjavascriptcoregtk-4.0.so.18
#19 0x00004555646d1118 in JSC::LiteralParser<char16_t>::parse(JSC::ParserState) () at /usr/lib64/libjavascriptcoregtk-4.0.so.18
#20 0x0000455564477118 in JSC::JSONParse(JSC::JSGlobalObject*, WTF::String const&) () at /usr/lib64/libjavascriptcoregtk-4.0.so.18
#21 0x000045555d9be650 in () at /usr/lib64/libwebkit2gtk-4.0.so.37
#22 0x000045555d9bf2a0 in () at /usr/lib64/libwebkit2gtk-4.0.so.37
#23 0x000045555a578380 in () at /usr/lib64/libwebkit2gtk-4.0.so.37
#24 0x000045555a6fc3b8 in () at /usr/lib64/libwebkit2gtk-4.0.so.37
#25 0x000045555a6fc8c8 in webkit_user_content_filter_store_save () at /usr/lib64/libwebkit2gtk-4.0.so.37
#26 0x000045555575e6d0 in () at /usr/lib64/epiphany/libephymain.so
#27 0x0000455556c41d08 in () at /usr/lib64/libgio-2.0.so.0
#28 0x00004555570aedf0 in () at /usr/lib64/libglib-2.0.so.0
#29 0x00004555570a63c8 in () at /usr/lib64/libglib-2.0.so.0
#30 0x00004555570a8d78 in g_main_context_dispatch () at /usr/lib64/libglib-2.0.so.0
#31 0x00004555570a9600 in () at /usr/lib64/libglib-2.0.so.0
#32 0x00004555570a9868 in g_main_context_iteration () at /usr/lib64/libglib-2.0.so.0
#33 0x0000455556cefae8 in g_application_run () at /usr/lib64/libgio-2.0.so.0
#34 0x0000000000017930 in main ()
webkit-minibrowser точно так же крешится спек сборки https://abf.io/import/webkit4/blob/2.36.4/webkit4.spec думаю может что во флагах компиляции не так.
Именно SIGSEGV или может SIGILL?
Именно сегфолт
Thread 1 "epiphany" received signal **SIGSEGV**, Segmentation fault
exc_data_page delayed interrupt at 0x455563445910 ALS0
--Type <RET> for more, q to quit, c to continue without paging--
0x0000455563445920 in JSC::MarkedBlock::Handle::sweep(JSC::FreeList*) () from /usr/lib64/libjavascriptcoregtk-4.0.so.18
Было какое-то падение, но только на страницах использующих javascript, появлялось из-за отключения COMPUTED_GOTO в патче (поэтому в опубликованном патче этого нет), что в LCC выходит медленнее, но отключенное COMPUTED_GOTO в webkit видимо сломано для 64-бит архитектур.
Проверьте что COMPUTED_GOTO включено. (LCC должен определяться как GCC совместимый.)
PlatformHave.h:
#if COMPILER(GCC_COMPATIBLE)
#define HAVE_COMPUTED_GOTO 1
#endif
PlatformEnable.h:
/* Determine if we need to enable Computed Goto Opcodes or not: */
#if HAVE(COMPUTED_GOTO) || !ENABLE(C_LOOP)
#define ENABLE_COMPUTED_GOTO_OPCODES 1
#endif
Также для qt5-webkit было падение что решилось компиляцией на -O1, видимо где-то ошибка в компиляторе.
Проверил, всё на месте и включено. Разница с altlinux в том что в моем случае отключен JIT Сейчас попробую пересобрать без явного отключения опции билд лог есть здесь https://abf.io/build_lists/4156976
JIT не может быть включен, потому что поддержки Эльбруса нет. (JIT не бывает портабельным и делается на каждую архитектуру отдельно.)
Еще какие-то идеи будут? Может реально баг компилятора я собираю с 1.25.23
Попробуйте сами найти проблему. Также попробуйте скомпилировать с оптимизацией -O1.
Собираю уже, каждая итерация 2 часа занимает.
В общем попробовал поковырять, падает только на сайтах где есть js на обычном html все отлично
Видимо та же проблема, что и у нас была. Только у нас решилась этими COMPUTED_GOTO.
Кажется без COMPUTED_GOTO проблема была в том что где-то 64-бит указатели урезались до 32 бит. Стоит обратить внимание на ворнинги, правда там их будет сложно искать в логе.
Ошибка такая: error #767: conversion from pointer to smaller integer
Хотя таки без -fpermissive это ошибка в С++, и ворнинг в С. Может и не быть вообще, если хитро сделано.
Интересное вот этот коммит https://abf.io/import/webkit4/commit/7e8e5825cb0028d90990ad081c7274f83731af89 убирает сегфолт из шапки поста Но странички так и валятся.
варнинга 767 нигде в логе нет.
попробую оптимизацию 01
JIT всё равно работать не может, потому что нет его реализации для Эльбруса. Возможно каким-то образом влияет на выставление других опций, хотя JIT будет отключен в любом случае. -DENABLE_JIT=OFF также не передаётся для e2k в Альте.
Попробуйте другие опции скопировать из спеки для Альта. (хотя я ничего различающегося не нашел)
Я вижу что версия в альте 2.36.7 это значит что собирают ее компилятором lcc-1.26.xx или выше может в этом дело, в моем случае ветка 1.25.23
ну и судя по всему эту версию в альте вообще не собирали, предполагаю версия в репе 2.34.x
Нет, всё еще используем lcc-1.25.23. Версия в sisyphus_e2k: 2.34.6-alt1