karky7のグズグズな日々 RSSフィード

2011-03-20 firefoxで「応答のないスクリプト」エラーを修理?

firefoxでjavascriptの実行エラーを修理してみた

最近、firefoxyoutubeを見てたらjsの実行エラーらしいダイアログBOXが出るようになって、まともに動画が見れなくなったので修理をしてみた。

f:id:cantimerny:20110320115008p:image

gdbで何が起こったのか調べてみた

cuomo@poke ~ $ gdb /usr/bin/firefox

GNU gdb (Gentoo 7.2 p1) 7.2

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 "x86_64-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 0x7fffe821b700 (LWP 27839)]

[New Thread 0x7fffe7816700 (LWP 27840)]

gdbを使ってfirefoxを起動しエラーが出るページへアクセスをするとgdbが以下のエラーを吐く

/usr/lib64/nspluginwrapper/i386/linux/npviewer.bin: error while loading shared libraries: libEGL.so.1: cannot open shared object file: No such file or directory

npviewer.binがlibEGL.so.1をロードできないらしいのでその辺を調べてみる

npviewer.binとlibEGL.so.1を調べてみた

エラーが出てるnpviewer.binはfileで調べて見たら32bit、でどのライブラリをリンクしているか調べてみる。

cuomo@poke ~ $ file /usr/lib64/nspluginwrapper/i386/linux/npviewer.bin

/usr/lib64/nspluginwrapper/i386/linux/npviewer.bin: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped

cuomo@poke ~ $ ldd -v /usr/lib64/nspluginwrapper/i386/linux/npviewer.bin

...

...

   libXfixes.so.3 => /usr/lib32/libXfixes.so.3 (0xf6e57000)

   libatk-1.0.so.0 => /usr/lib32/libatk-1.0.so.0 (0xf6e3a000)

   libcairo.so.2 => /usr/lib32/libcairo.so.2 (0xf6d4e000)

   libpixman-1.so.0 => /usr/lib32/libpixman-1.so.0 (0xf6ce2000)

   libEGL.so.1 => not found

   libXrender.so.1 => /usr/lib32/libXrender.so.1 (0xf6cd8000)

   libxcb.so.1 => /usr/lib32/libxcb.so.1 (0xf6cbd000)

   libXau.so.6 => /usr/lib32/libXau.so.6 (0xf6cb9000)

...

libEGL.so.1 => not foundでロードできてない様子。

とりあえず、/usr/lib32にあるlibEGL.so.1を読み込んでるらしいがどのパスから読み込んでるのかstraceで確認してみる。

straceでlibEGL.so.1の読み込み具合を確認

cuomo@poke ~ $ straceでどこのライブラリを読み込んでいるか確認してみる

strace /usr/lib64/nspluginwrapper/i386/linux/npviewer.bin

mprotect(0xf6d8b000, 4096, PROT_NONE) = 0

mmap2(0xf6d8c000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x67) = 0xfffffffff6d8c000

close(3) = 0

open("/usr/lib32/libEGL.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)

open("/lib32/tls/i686/sse2/libEGL.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)

..

..

open("/usr/lib32/sse2/libEGL.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)

stat64("/usr/lib32/sse2", 0xffff5b0c) = -1 ENOENT (No such file or directory)

open("/usr/lib32/libEGL.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)

stat64("/usr/lib32", {st_mode=S_IFDIR|0755, st_size=36864, ...}) = 0

writev(2, [{"/usr/lib64/nspluginwrapper/i386/"..., 50}, {": ", 2}, {"error while loading shared libra"..., 36}, {": ", 2}, {"libEGL.so.1", 11}, {": ", 2}, {"cannot open shared object file", 30}, {": ", 2}, {"No such file or directory", 25}, {"\n", 1}], 10/usr/lib64/nspluginwrapper/i386/linux/npviewer.bin: error while loading shared libraries: libEGL.so.1: cannot open shared object file: No such file or directory

) = 161

exit_group(127) = ?


いろいろ読み込んだ挙句に無いと文句を言って終了してしまう。

open("/usr/lib32/libEGL.so.1", O_RDONLY) = -1 を読み込もうとしている。


ところでlibEGL.so.1ってなに?

libEGL.so.1の共有ライブラリのパッケージは何か調べてみると

poke ~ # equery b /usr/lib64/libEGL.so.1.0

[ Searching for file(s) /usr/lib64/libEGL.so.1.0 in *... ]

media-libs/mesa-7.9.1 (/usr/lib64/libEGL.so.1.0)

mesaパッケージに含まれているので/usr/lib32にシンボリックリンクを張ってみた

poke ~ # ls -l /usr/lib32 | grep libEGL

lrwxrwxrwx 1 root root 11 Mar 20 10:30 libEGL.so -> libEGL.so.1

lrwxrwxrwx 1 root root 13 Mar 20 10:29 libEGL.so.1 -> libEGL.so.1.0


でもう一回straceで確認

cuomo@poke ~ $ ldd -v /usr/lib64/nspluginwrapper/i386/linux/npviewer.bin

open("/usr/lib32/libEGL.so.1", O_RDONLY) = 3

read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\2401\0\0\0\0\0\0"..., 512) = 512

close(3) = 0

stat64("/usr/lib32", {st_mode=S_IFDIR|0755, st_size=36864, ...}) = 0

writev(2, [{"/usr/lib64/nspluginwrapper/i386/"..., 50}, {": ", 2}, {"error while loading shared libra"..., 36}, {": ", 2}, {"libEGL.so.1", 11}, {": ", 2}, {"wrong ELF class: ELFCLASS64", 27}, {"", 0}, {"", 0}, {"\n", 1}], 10/usr/lib64/nspluginwrapper/i386/linux/npviewer.bin: error while loading shared libraries: libEGL.so.1: wrong ELF class: ELFCLASS64

) = 131

exit_group(127) = ?


ライブラリは読み込んだものの今度は、libEGL.so.1が64bitなのでダメだという

poke ~ # file /usr/lib64/libEGL.so.1.0

/usr/lib64/libEGL.so.1.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped


media-libs/mesaのインストールでは/usr/lib64/libEGL.so.1.0の64bit版がインストールされてるみたいなので、32bitをとりあえず別の32bitのGentooなPCから持ってきて置いてみた。

poke lib32 # cd /usr/lib32/

poke lib32 # rm libEGL.so.1.0 <--- 64bit/usr/lib64/libEGL.so.1.0へのシンボリックリンクを削除

poke lib32 # ls -l | grep libEGL.so

lrwxrwxrwx 1 root root 11 Mar 20 10:30 libEGL.so -> libEGL.so.1

lrwxrwxrwx 1 root root 13 Mar 20 10:29 libEGL.so.1 -> libEGL.so.1.0

rwxr-xr-x 1 root root 62972 Mar 20 10:29 libEGL.so.1.0 <-- 新しく設置した32bit版のlibEGL.so.1.0

poke lib32 # file /usr/lib32/libEGL.so.1.0

/usr/lib32/libEGL.so.1.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped


もう一度、/usr/lib64/nspluginwrapper/i386/linux/npviewer.binを実行してみる

cuomo@poke ~ $ /usr/lib64/nspluginwrapper/i386/linux/npviewer.bin

npviewer, NPAPI plugin viewer. Version 1.3.0

usage: /usr/lib64/nspluginwrapper/i386/linux/npviewer.bin [GTK flags] [flags]

  -h --help print this message

  -t --test check plugin is compatible

  -i --info print plugin information

  -p --plugin set plugin path

  -c --connection set connection path


動いたっぽいのでfirefoxでエラーの出たページを表示してみると治っているっぽい。

こんなのでいいのか?

とりあえず直してみたが、問題はmesaパッケージにあるのか分からない。

GentooのbugzillaにもBug 354943であったが、どうやって修理すればいいのか?

とりあえず動いたからそのまま放置、時間が無いのであとで調べよう。

誰か、分かったら教えてください、よろしく。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/cantimerny/20110320/p1