Архив метки: gdb

Firefox segmentation fault

Третьего дня забарахлил Firefox – решительно отказывался запускаться, говоря в свое оправдание "Segmentation fault".
Ну ладно, бывает, мало ли что при обновлении недавнем отвалилось. Запустил revdep-rebuil – все нормально, ничего не отвалилось.
Тoгда отправил на пересборку четверку пакетов – nspr, nss, xulrunner и mozilla-firefox. Все равно – "Segmentation fault". 
Посомтрел все зависимости файрфокса через equery g mozilla-firefox. Пересобрал их все, все равно не помогло. Поставил Оперу, ибо через Lynx искать в инете как-то не того. Пока искал варианты решения, откатил Лису до 3.5.8 и соответственно xulrunner откатился до своей предыдущей версии. Опять то же самое. Поставил уже бинарную сборку фокса – firefox-bin – все равно валится в ошибку сегментации, сволочь. Далее попробовал удалить каталог .mozilla. Уже не надо говорить, что это не помогло? 🙂
Пришлось вооружиться strace и gdb. Вот что выдал strace в последних строках мучения файрфокса перед смертью:

gettimeofday({1272520195, 888810}, NULL) = 0
gettimeofday({1272520195, 888841}, NULL) = 0
_llseek(25, 0, [0], SEEK_SET) = 0
read(25, "\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\0\20\0\0\0\20\10\6\0\0\0\37\363\377"…, 4096) = 972
— SIGSEGV (Segmentation fault) @ 0 (0) —

Поиск по _llseek ничего особенного не дал, на Лоре обсуждалось подобное, но там была проблема в новом компиляторе gcc 4.4.3 нужно было откатиться на старую версию.

Берем в руки gdb и запускаем:
gdb firefox
GNU gdb (Gentoo 7.1 p1) 7.1
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu".
For bug reporting instructions, please see:
<http://bugs.gentoo.org/>…
Reading symbols from /usr/bin/firefox…(no debugging symbols found)…done.
(gdb) run
Starting program: /usr/bin/firefox
[Thread debugging using libthread_db enabled]
[New Thread 0xb66ffb70 (LWP 9129)]
[New Thread 0xb5efeb70 (LWP 9130)]
[New Thread 0xb54ffb70 (LWP 9131)]
[New Thread 0xb4a9fb70 (LWP 9134)]
[Thread 0xb4a9fb70 (LWP 9134) exited]
[New Thread 0xb4a9fb70 (LWP 9135)]

Program received signal SIGSEGV, Segmentation fault.
0x4aacbf71 in ?? () from /lib/libz.so.1
(gdb) bt
#0 0x4aacbf71 in ?? () from /lib/libz.so.1
Cannot access memory at address 0×17

И сразу же нашлась на форуме гентушников такая же проблема, метод решения – libz.so относится к sys-libs/zlib, пересобрал ее – файрфокс 3.5.8 запустился нормально. 
Пока писал этот пост, обратно обновил файрфокс и xulrunner за ним, включив USE-флаг custom-optimization и отключив wifi. 
Полет нормальный :)