LINUX.ORG.RU

Gentoo, FireFox, illegal instruction


0

0

Здравствуйте.

Недавно ночью пересобрал операционку, отказался от -03 (раньше наивно думал, что производительность реально повышается, но как показала практика, улучшается она только на лабораторных крысах в роде тупорылых циклов и пр.), в пользу нескольких других флагов. Получил куда большую отзывчивость и честные 0% cpu при запущенном ничего не делающем kde4.

Но речь то о другом. Возникла проблема, ибо gcc (4.4.1) немного переоптимизировал где-то и теперь при запуске или прямо во время работы фаерфокс грохается с сообщением illegal instruction. Пробовал пересобирать его и xulrunner с единственным -O2, но не помогло.

Теперь пытаюсь определить, в какой именно библиотеке затесалась неверная инструкция. Valgrind просто говорит: "в коде нелегальная инструкция: либо код кривой, либо я уже старый совсем". Как узнать где именно ошибка? Все пересобирать не хочу - сейчас все работает идеально (за вышеозначенным исключением).

★★★★★

Да, читал что gcc4.4 иногда доводит фаерфокс до сегфолтов, пробовал собирать gcc4.3, ситуация та же.

staseg ★★★★★
() автор топика
Ответ на: комментарий от athost

Один ответ суровее другого:). Хотя про x86_64 думаю и давно, но время надо, не до того сейчас.

staseg ★★★★★
() автор топика
Ответ на: комментарий от anonymous

CFLAGS="-O2 -march=core2 -ftracer -mfpmath=sse -mmmx -msse2 -mssse3 -pipe -fomit-frame-pointer -fbranch-target-load-optimize -fbranch-target-load-optimize2 -fpeel-loops"

Как уже говорил, пробовал откатить (для фокса и ксулранера) на -O2, но ошибка видимо в какой-то либе,

/proc/cpuinfo:
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Intel(R) Core(TM)2 Duo CPU E6750 @ 2.66GHz
stepping : 11
cpu MHz : 2666.794
cache size : 4096 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm lahf_lm tpr_shadow vnmi flexpriority
bogomips : 5333.58
clflush size : 64
power management:

Проц 1 - аналогично.

gcc --help=target -Q -O2 -march=core2 mfpmath=sse -mmmx -mssse3 -msse2

Говорит, что msse3 (за -mssse3 тянется) включена, но проц ее видимо не поддерживает.

Пока что задача остается прежней: выискать кривособранную либу. Мучаюсь с gdb в надежде найти виновника, но я нем нифига не понимаю).

staseg ★★★★★
() автор топика
Ответ на: комментарий от staseg

msse3 = pni в флагах
все поддерживается

если только
-ftracer -fbranch-target-load-optimize -fbranch-target-load-optimize2 -fpeel-loops
чего не нагенерировали такого, в man лень смотреть что там оно делает

anonymous
()
Ответ на: комментарий от anonymous

-fpeel-loops
у вас там точно лишнее, оно работает только если используете 2 stage PGO


-fbranch-target-load-optimize -fbranch-target-load-optimize2
вот это вполне может и наделать проблем с регистрами

ну и фокс 32 битный таки не любит GCC 4.4

anonymous
()
Ответ на: комментарий от anonymous

Да, я все понимаю про флаги и фокс с гцц4.4. Мне бы узнать, что пересобрать по минимуму, без всего мира.

ЗЫ. Спасибо за -fpeel-loops, а PGO как раз собираюсь опробовать на ком-нибудь.

staseg ★★★★★
() автор топика
Ответ на: комментарий от staseg

опробуйте на самом GCC , работает на 5-7% быстрее, мечта гентушника )
либу ловите в core dump

ulimit -c unlimited
firefox

gdb <path to firefox-bin> <corefile>

bt

anonymous
()
Ответ на: комментарий от anonymous

Хм. Прошу прощения за наверное глупость и благодарю за вашу отзывчивость, но не получается.

Делаю

ulimit -c unlimited
/usr/lib/mozilla-firefox/firefox # пробовал и просто firefox

gdb /usr/lib/mozilla-firefox/firefox /home/staseg/dump.d
....
(no debugging symbols found)
"/home/staseg/dump.d" is not a core dump: File format not recognized
(gdb) bt
No stack

Debugging symbols мне по идее не нужны, нужно только название либы.

Еще пробовал так:
gdb
file /usr/lib/mozilla-firefox/firefox
run

Starting program: /usr/lib/mozilla-firefox/firefox
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
[Thread debugging using libthread_db enabled]
Error while reading shared library symbols:
find_new_threads_callback: cannot get thread info: generic error
(no debugging symbols found)
....
find_new_threads_callback: cannot get thread info: generic error
(gdb) bt
#0 0xb809bac1 in _dl_debug_state () from /lib/ld-linux.so.2
#1 0xb809073b in ?? () from /lib/ld-linux.so.2
#2 0xb80aa280 in _rtld_global () from /lib/ld-linux.so.2
#3 0xb80aa810 in ?? ()
#4 0x00000000 in ?? ()


Но тут, как я понимаю, до illegal instruction дело не дошло, раньше остановилось.

staseg ★★★★★
() автор топика

Была такая пробема с gcc 4.4.1 + glibc 2.10.1, вылечилось переходом на gcc из svn и glibc из git :)

Adjkru ★★★★★
()

Возьми себе за правило - даже сидя на ~x86, gcc, glibc и ядро оставлять стабильным.

Deleted
()

Мне почему-то всегда казалось, что ff собирают c -O1, а во всех остальных случаях он сильно глючит.

Demon37 ★★★★
()

Не помню ссылку. Но на лоре пробегал исходник модуля для эмуляции этой инструкции.

BeerSeller ★★★★
()
Ответ на: комментарий от BeerSeller

>http://www.linux.org.ru/view-message.jsp?msgid=3969734#comment-3969779

По ссылке исходника нет, а тему эту уже читал, решения то там так и не нашли вменяемого.

>Именно сегфолтится или SIGILL'ится?

illegal instruction. Вечером strace гляну, что там за сигнал...

staseg ★★★★★
() автор топика
Ответ на: комментарий от staseg

>Именно сегфолтится или SIGILL'ится?

SIGILL.

Сегодня еще помучаюсь с отладчиком, может разберусь.

staseg ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.