alpha journey

August 11, 2011

Сегодня решил проверить, не починили ли сборку на ghc альфе. Патч Саймона окончательно всё исправил, и теперь у нас есть надежда на ghc-7.2 с полным составом поддерживаемых архитектур.

На радостях я решил посмотреть, как там жизнь на alpha и увидел, что демон nrpe засирает dmesg невыровненным доступом:

$ dmesg
...
do_entUnaUser: 2 callbacks suppressed
nrpe(1185): unaligned trap at 000002000011ab94: 00000001200401ec 2d 31
nrpe(1185): unaligned trap at 000002000011ab94: 00000001200401f4 2d 31
nrpe(1185): unaligned trap at 000002000011ab94: 00000001200401fc 2d 31
nrpe(1185): unaligned trap at 000002000011ab94: 0000000120040204 2d 31
nrpe(1185): unaligned trap at 000002000011ab94: 000000012004020c 2d 31

Решил попробовать исправить. Здесь прочитал про хак с включением SIGBUG на unaligned access через очень странный недокументированный и неэкспортируемый glibc системный вызов osf_setsysinfo.

Естественно, программа не работала :] Результат - патч в ядро. Не знаю, помогает или нет (ядро грузнуть гнегде :]), но найти ошибку заняло минут 20 таращенья в git log. mattst88 подсказал, что для поиска таких штук еще есть prctl (и я дописал упоминание о нем в док).

На arm я unaligned access искал с помощью обычных breakpoints в gdb:

$ gdb -p $pid
break *(0x${pc-of-faulty-insn})
continue

Тут это не сработало из-за того, что nrpe довольно корявый, постоянно форкающийся, снижающий привилегии маложивущий демон. Пришлось немного повозиться, чтобы вычислить, что ошибка в openssl. Правда, я ее еще не до конца отследил.

Зато нашел баг в strace. Патч в апстриме.

UPDATE:

Баг таки выловил и их там оказалось даже 2! Даже патч послал, но апстрим оказался быстрее.