Created attachment 17196 [details] Архив с логами Стенд: сизиф-регулярка с кде, в виртуальной машине qemu на архитектуре aarch64. После перевода kde-greeter на Qt6 появилась такая проблема. При загрузке системы вместо экрана приветствия и ввода пароля (LighDM) просто черный экран. Видно что графика инициализируется, но больше ничего. В параллельной консоли можно вполне себе запустить кеды, например через startx. Аппаратная часть работает - есть сеть, графика, звук. В итоге пришло включить автоматический вход в систему чтобы пропускать ошибку. Или можно использовать gtk-greeter, он работает. Либо можно вернуть предыдущую версии пакета 0.4.23 - она работает. Логи прилагаю. Пробовал вручную запустить его из терминала, отладчик останавливается где-то в дебрях Qt - возможно дело в них.
Created attachment 17197 [details] backtrace
Проверил на реальной машине (OrangePi Zero 2, ядро из пакета kernel-image-sunxi), поведение аналогичное - kde-greeter в LighDM не загружается. p.s. Хотя эта плата не годится для графических оболочек, но для эксперимента сгодилась.
А /usr/sbin/lightdm-kde-greeter запускается из графической сессии просто от пользователя?
(Ответ для Sergey V Turchin на комментарий #3) > А /usr/sbin/lightdm-kde-greeter запускается из графической сессии просто от > пользователя? Проверил в QEMU, запускал под LxQt, тоже происходит segmentation fault с очень похожим стектрейсом.
(Ответ для Sergey V Turchin на комментарий #3) > А /usr/sbin/lightdm-kde-greeter запускается из графической сессии просто от > пользователя? При запуске из графической оболочки (на x11) так же падает с ошибкой SEGFAULT, в том же месте.
Если пакет пересобрать с gcc13, то все работает. Проверено в ранее указанных виртуалке и железке.
Поотлаживал программу. Как видно из приведённого выше стектрейса, ошибка возникает при обращении к QVariant. Посмотрел в ассемблере, при создании этого QVariant, в конструкторе перемещения вписана инструкция, которая зануляет первую половину (из 32 байт) памяти, затирая полезные данные, и в дальнейшем происходит обращение к этому "битому" QVariant и как следствие ошибка сегментации. Некоторые подробности по ассемблеру: > Dump of assembler code for function _ZN16ConnectionsModel18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv: > ... > по адресу в x20 лежит "хороший" QVariant, 32 байта > <+2480>: stp xzr, xzr, [x20] <- затираем нулями первые 16 байт, но зачем? > <+2484>: add x1, sp, #0x2d8 > <+2488>: ldp q31, q30, [x20] <- копируем потёртый QVariant через q30 и q31 > <+2492>: add x2, sp, #0x220 > <+2496>: mov x0, #0x2 // #2 > <+2500>: str xzr, [sp, #744] > <+2504>: str x0, [sp, #752] > <+2508>: add x0, sp, #0x2b8 > <+2512>: ldr q29, [x1, #16] > <+2516>: stp xzr, xzr, [x2, #184] > <+2520>: stp q31, q30, [x0] <- кладём потёртый QVariant в "ответ" В коде объект создаётся здесь: https://gitlab.com/golubevan/lightdm-kde-greeter/-/blob/3d3a2dfb19292c2c93e2bf03a021abe0810a12ba/greeter/connectionsmodel.cpp#L596 Посмотрел глазами, да и запускал с санитайзером и под valgrind, похоже, тут нет UB. Пытался сделать минимальный воспроиводимый пример, безуспешно, видимо должно сойтись очень много факторов, чтоб проблема проявилась. Обратил внимание, что баг пропадает, если собирать без lto, начинаю сомневаться, а не баг ли это в gcc, который приводит к какому-то неправильному инлайну конструктора перемещения для QVariant в этом месте. Может быть, как временную меру, отключить lto при сборке на aarch64?
(Ответ для Anton Golubev на комментарий #7) > отключить lto при сборке на aarch64? Да, можно.
lightdm-kde-greeter-6.0.2-alt5 -> sisyphus: Mon Mar 24 2025 Anton Golubev <golubevan@altlinux> 6.0.2-alt5 - fix white font in the input field (Closes: 53565) - disable lto for aarch64 (Closes: 52076)