Bug 52076 - Не загружается на ARM64
Summary: Не загружается на ARM64
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: lightdm-kde-greeter (show other bugs)
Version: unstable
Hardware: aarch64 Linux
: P5 normal
Assignee: Anton Golubev
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2024-11-16 21:50 MSK by Max Pozdeev
Modified: 2025-03-24 16:11 MSK (History)
4 users (show)

See Also:


Attachments
Архив с логами (27.54 KB, application/zip)
2024-11-16 21:50 MSK, Max Pozdeev
no flags Details
backtrace (4.69 KB, text/x-log)
2024-11-16 21:50 MSK, Max Pozdeev
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Max Pozdeev 2024-11-16 21:50:00 MSK
Created attachment 17196 [details]
Архив с логами

Стенд: сизиф-регулярка с кде, в виртуальной машине qemu на архитектуре aarch64.

После перевода kde-greeter на Qt6 появилась такая проблема.
При загрузке системы вместо экрана приветствия и ввода пароля (LighDM) просто черный экран. Видно что графика инициализируется, но больше ничего.

В параллельной консоли можно вполне себе запустить кеды, например через startx. Аппаратная часть работает - есть сеть, графика, звук. 

В итоге пришло включить автоматический вход в систему чтобы пропускать ошибку. Или можно использовать gtk-greeter, он работает. Либо можно вернуть предыдущую версии пакета 0.4.23 - она работает.

Логи прилагаю. Пробовал вручную запустить его из терминала, отладчик останавливается где-то в дебрях Qt - возможно дело в них.
Comment 1 Max Pozdeev 2024-11-16 21:50:33 MSK
Created attachment 17197 [details]
backtrace
Comment 2 Max Pozdeev 2024-12-01 01:11:49 MSK
Проверил на реальной машине (OrangePi Zero 2, ядро из пакета kernel-image-sunxi), поведение аналогичное - kde-greeter в LighDM не загружается.

p.s. Хотя эта плата не годится для графических оболочек, но для эксперимента сгодилась.
Comment 3 Sergey V Turchin 2024-12-03 09:38:18 MSK
А /usr/sbin/lightdm-kde-greeter запускается из графической сессии просто от пользователя?
Comment 4 Anton Golubev 2024-12-03 12:33:36 MSK
(Ответ для Sergey V Turchin на комментарий #3)
> А /usr/sbin/lightdm-kde-greeter запускается из графической сессии просто от
> пользователя?

Проверил в QEMU, запускал под LxQt, тоже происходит segmentation fault с очень похожим стектрейсом.
Comment 5 Max Pozdeev 2024-12-03 12:37:37 MSK
(Ответ для Sergey V Turchin на комментарий #3)
> А /usr/sbin/lightdm-kde-greeter запускается из графической сессии просто от
> пользователя?

При запуске из графической оболочки (на x11) так же падает с ошибкой SEGFAULT, в том же месте.
Comment 6 Max Pozdeev 2024-12-04 23:05:19 MSK
Если пакет пересобрать с gcc13, то все работает. Проверено в ранее указанных виртуалке и железке.
Comment 7 Anton Golubev 2025-03-07 15:07:14 MSK
Поотлаживал программу. Как видно из приведённого выше стектрейса, ошибка возникает при обращении к 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?
Comment 8 Sergey V Turchin 2025-03-10 10:36:49 MSK
(Ответ для Anton Golubev на комментарий #7)
> отключить lto при сборке на aarch64?
Да, можно.
Comment 9 Repository Robot 2025-03-24 16:11:12 MSK
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)