お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2010-11-12 21:46:57

T.O
メンバ
登録日: 2008-06-09

gccのバグ?

こんばんわ
いつもお世話になっております。

ふとubuntu上でH8マイコンの開発環境を構築してみよう、とソースからコンパイル・ビルドを試みているところですが、
binutilsのコンパイルは通ったのですが、gccのコンパイル(make)時に、下記の通りエラーを吐き出し止まってしまいます。

なお、拾ってきたソースは以下の通りです:

binutils-2.16.1
gcc-(core-)3.4.6
newlib-1.18.0

あっと、使用中のubuntuのバージョンは10.04、gccのバージョンは4.4.3(Ubuntu 4.4.3-4ubuntu5)です。

・1つ目:

gcc   -O -fomit-frame-pointer -DIN_GCC -DCROSS_COMPILE  -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -pedantic -Wno-long-long    -DHAVE_CONFIG_H    -I. -I. -I../../gcc -I../../gcc/. -I../../gcc/../include   \
    -DTARGET_MACHINE=\"h8300-hms\" \
    -c ../../gcc/collect2.c -o collect2.o
In file included from /usr/include/fcntl.h:205,
                 from ../../gcc/system.h:214,
                 from ../../gcc/collect2.c:30:
In function ‘open’,
    inlined from ‘collect_execute’ at ../../gcc/collect2.c:1537:
/usr/include/bits/fcntl2.h:51: error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT in second argument needs 3 arguments
make[1]: *** [collect2.o] エラー 1
make[1]: ディレクトリ `/home/toru/gcc-3.4.6/build/gcc' から出ます
make: *** [all-gcc] エラー 2

このエラーは以下のサイトにて回避することが出来ました:

http://www.saturn.dti.ne.jp/~hsakai/kozos/osbook_03.html

問題はこの後、こうなってしまいます。

・2つ目:

h8300-hms-ar  rc ./libgcc.a libgcc/./_cmpsi2.o libgcc/./_ucmpsi2.o libgcc/./_divhi3.o libgcc/./_divsi3.o libgcc/./_mulhi3.o libgcc/./_mulsi3.o libgcc/./_fixunssfsi_asm.o libgcc/./_muldi3.o libgcc/./_negdi2.o libgcc/./_lshrdi3.o libgcc/./_ashldi3.o libgcc/./_ashrdi3.o libgcc/./_cmpdi2.o libgcc/./_ucmpdi2.o libgcc/./_floatdidf.o libgcc/./_floatdisf.o libgcc/./_fixunsdfsi.o libgcc/./_fixunssfsi.o libgcc/./_fixunsdfdi.o libgcc/./_fixdfdi.o libgcc/./_fixunssfdi.o libgcc/./_fixsfdi.o libgcc/./_fixxfdi.o libgcc/./_fixunsxfdi.o libgcc/./_floatdixf.o libgcc/./_fixunsxfsi.o libgcc/./_fixtfdi.o libgcc/./_fixunstfdi.o libgcc/./_floatditf.o libgcc/./_clear_cache.o libgcc/./_enable_execute_stack.o libgcc/./_trampoline.o libgcc/./__main.o libgcc/./_absvsi2.o libgcc/./_absvdi2.o libgcc/./_addvsi3.o libgcc/./_addvdi3.o libgcc/./_subvsi3.o libgcc/./_subvdi3.o libgcc/./_mulvsi3.o libgcc/./_mulvdi3.o libgcc/./_negvsi2.o libgcc/./_negvdi2.o libgcc/./_ctors.o libgcc/./_ffssi2.o libgcc/./_ffsdi2.o libgcc/./_clz.o libgcc/./_clzsi2.o libgcc/./_clzdi2.o libgcc/./_ctzsi2.o libgcc/./_ctzdi2.o libgcc/./_popcount_tab.o libgcc/./_popcountsi2.o libgcc/./_popcountdi2.o libgcc/./_paritysi2.o libgcc/./_paritydi2.o libgcc/./_divdi3.o libgcc/./_moddi3.o libgcc/./_udivdi3.o libgcc/./_umoddi3.o libgcc/./_udiv_w_sdiv.o libgcc/./_udivmoddi4.o libgcc/./_pack_sf.o libgcc/./_unpack_sf.o libgcc/./_addsub_sf.o libgcc/./_mul_sf.o libgcc/./_div_sf.o libgcc/./_fpcmp_parts_sf.o libgcc/./_compare_sf.o libgcc/./_eq_sf.o libgcc/./_ne_sf.o libgcc/./_gt_sf.o libgcc/./_ge_sf.o libgcc/./_lt_sf.o libgcc/./_le_sf.o libgcc/./_unord_sf.o libgcc/./_si_to_sf.o libgcc/./_sf_to_si.o libgcc/./_negate_sf.o libgcc/./_make_sf.o libgcc/./_sf_to_df.o libgcc/./_sf_to_tf.o libgcc/./_thenan_sf.o libgcc/./_sf_to_usi.o libgcc/./_usi_to_sf.o libgcc/./clzhi2.o libgcc/./ctzhi2.o libgcc/./parityhi2.o libgcc/./popcounthi2.o libgcc/./fixunssfsi.o libgcc/./unwind-dw2.o libgcc/./unwind-dw2-fde.o libgcc/./unwind-sjlj.o libgcc/./gthr-gnat.o libgcc/./unwind-c.o libgcc/./_eprintf.o libgcc/./__gcc_bcmp.o
*** buffer overflow detected ***: h8300-hms-ar terminated
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x50)[0x40112390]
/lib/tls/i686/cmov/libc.so.6(+0xe12ca)[0x401112ca]
/lib/tls/i686/cmov/libc.so.6(+0xe0a08)[0x40110a08]
/lib/tls/i686/cmov/libc.so.6(_IO_default_xsputn+0x9e)[0x40099afe]
/lib/tls/i686/cmov/libc.so.6(_IO_padn+0xd8)[0x4008d5f8]
/lib/tls/i686/cmov/libc.so.6(_IO_vfprintf+0x2aee)[0x4006f6fe]
/lib/tls/i686/cmov/libc.so.6(__vsprintf_chk+0xad)[0x40110abd]
/lib/tls/i686/cmov/libc.so.6(__sprintf_chk+0x2d)[0x401109fd]
h8300-hms-ar[0x80501ff]
h8300-hms-ar[0x804e69b]
h8300-hms-ar[0x8050e20]
h8300-hms-ar[0x8053b88]
h8300-hms-ar[0x804b7e1]
h8300-hms-ar[0x804c38a]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x40046bd6]
h8300-hms-ar[0x8049841]
======= Memory map: ========
08048000-08075000 r-xp 00000000 08:01 8193413    /usr/local/bin/h8300-hms-ar
08075000-08076000 r--p 0002c000 08:01 8193413    /usr/local/bin/h8300-hms-ar
08076000-08077000 rw-p 0002d000 08:01 8193413    /usr/local/bin/h8300-hms-ar
09f11000-0a3e1000 rw-p 00000000 00:00 0          [heap]
40000000-4001b000 r-xp 00000000 08:01 6832134    /lib/ld-2.11.1.so
4001b000-4001c000 r--p 0001a000 08:01 6832134    /lib/ld-2.11.1.so
4001c000-4001d000 rw-p 0001b000 08:01 6832134    /lib/ld-2.11.1.so
4001d000-4001e000 r-xp 00000000 00:00 0          [vdso]
4001e000-40020000 rw-p 00000000 00:00 0
40020000-40021000 r--p 00000000 08:01 8153308    /usr/lib/locale/ja_JP.utf8/LC_MESSAGES/SYS_LC_MESSAGES
40021000-40028000 r--s 00000000 08:01 8110862    /usr/lib/gconv/gconv-modules.cache
40028000-40030000 rw-p 00000000 00:00 0
40030000-40183000 r-xp 00000000 08:01 6856821    /lib/tls/i686/cmov/libc-2.11.1.so
40183000-40184000 ---p 00153000 08:01 6856821    /lib/tls/i686/cmov/libc-2.11.1.so
40184000-40186000 r--p 00153000 08:01 6856821    /lib/tls/i686/cmov/libc-2.11.1.so
40186000-40187000 rw-p 00155000 08:01 6856821    /lib/tls/i686/cmov/libc-2.11.1.so
40187000-4018b000 rw-p 00000000 00:00 0
4018b000-4020c000 r--p 00000000 08:01 8153304    /usr/lib/locale/ja_JP.utf8/LC_CTYPE
4020c000-4020e000 rw-p 00000000 00:00 0
4021e000-4023b000 r-xp 00000000 08:01 6832179    /lib/libgcc_s.so.1
4023b000-4023c000 r--p 0001c000 08:01 6832179    /lib/libgcc_s.so.1
4023c000-4023d000 rw-p 0001d000 08:01 6832179    /lib/libgcc_s.so.1
bfa37000-bfa4e000 rw-p 00000000 00:00 0          [stack]
make[2]: *** [libgcc.a] Aborted
make[2]: *** ファイル `libgcc.a' を削除します
make[2]: ディレクトリ `/home/toru/gcc-3.4.6/build/gcc' から出ます
make[1]: *** [stmp-multilib] エラー 2
make[1]: ディレクトリ `/home/toru/gcc-3.4.6/build/gcc' から出ます
make: *** [all-gcc] エラー 2

いろいろ調べてみると、得に英文のサイトにて「gccのバグ」などと多数見受けられる他、英文のwikiにて:

https://wiki.ubuntu.com/CompilerFlags

内の「CompilerFlags」→「-D_FORTIFY_SOURCE=2」の項にて何やら記述がありますが、私の英語力が乏しく、
結局どこのソースファイルだかコマンドのオプション指定だか、どこをどうすればよいのかいまいちよくわかりませんでした。
これはそもそも本当にgccのバグなんでしょうか?
(他のディストリで試してみたいところですが如何せんハードウェアが足りない・・・)
ひょっとして何か典型的な回避方法があって、私が調べきれていないだけかもしれません。
どなたか何かご存知でしたらご助言頂けますと助かります。

※gccのエラー集みたいな本だかサイトってどこかにあるんでしょうか?
 ありそうで意外とない・・・?

以上よろしくお願い申し上げます。

オフライン

 

#2 2010-11-13 11:41:17

hmatsue
アドバイザ
登録日: 2009-03-10

Re: gccのバグ?

詳しくはわかりませんが、ソースの入手方法、ビルドの手順(あればconfigureのオプションとかmakeのオプションとか)を詳しく書いた方がフォローがつきやすくなるかと思います。

エラーを単純に見た感触ではgcc-3.4.6側のバグでビルドが中止されているように見えますが、
http://packages.ubuntu.com/ja/source/lucid/gcc-h8300-hms
あたりのものを使っての結果でしょうか。
もし、上記以外のものをビルドしようとしているのであれば、上記のものを試すとPatchがあたっていてビルドが通ったりということはないでしょうか。
# ごめんなさい。試してはいません。

オフライン

 

#3 2010-11-13 13:55:16

einundzwanzighundertsechs
メンバ
登録日: 2008-12-28

Re: gccのバグ?

*** buffer overflow detected ***: h8300-hms-ar terminated

いえ,エラーメッセージではクロスツールの ar がバッファオーバーフローで落ちてますから,binutils のバグです.

かつては実行時チェックが甘かったので,バグのためスタックでオーバーフローを起こしても,
壊れたのがクリティカルなデータでなければクラッシュせず,誰も気づかなかったのが,
最近のディストリビューションでは実行時チェックが厳しくなり,それまでは見落としていたバグが時折発見されます.

今回のバッファオーバフローも既に発見・報告されていて,より新しいバージョンでは fix されている可能性も有ります.

T.O さん による投稿:

binutilsのコンパイルは通ったのですが、gccのコンパイル(make)時に、下記の通りエラーを吐き出し止まってしまいます。

なお、拾ってきたソースは以下の通りです:

binutils-2.16.1
gcc-(core-)3.4.6
newlib-1.18.0

自前でコンパイルするなら,もっと新しいバージョンを使っては如何でしょう.

オフライン

 

#4 2010-12-01 19:18:13

T.O
メンバ
登録日: 2008-06-09

Re: gccのバグ?

こんばんわ
いろいろ試してるうちに返答が延び延びになってしまいました。
申し訳ございません。

で、

https://wiki.ubuntu.com/CompilerFlags

を改めて読んでみたところ(とはいえまだ全然完全にわかってはいないのですが)
gccをビルド(コンパイル)する前の、binutilsをビルド(コンパイル)する時に

CFLAGS="-D_FORTIFY_SOURCE=0"
または
"-U_FORTIFY_SOURCE"

とオプションをつけることにより、その後のgccのビルドも通るようになりました。

敢えて今後の自分への宿題とすれば、

・上記英文サイトの更なる熟読
・他のディストリでのビルドのトライ

いつになるのかわかりませんが、もう少し勉強してみます。

※ご回答頂いた方々、ありがとうございました。

オフライン

 

#5 2010-12-03 18:16:55

einundzwanzighundertsechs
メンバ
登録日: 2008-12-28

Re: gccのバグ?

T.O さん による投稿:

gccをビルド(コンパイル)する前の、binutilsをビルド(コンパイル)する時に

CFLAGS="-D_FORTIFY_SOURCE=0"
または
"-U_FORTIFY_SOURCE"

とオプションをつけることにより、その後のgccのビルドも通るようになりました。

ちょっと時間が開いてしまいましたが,これを読んだ人が同じようにするのはどうかと思うので…

_FORTIFY_SOURCE を無効にするということは,バッファオーバーフローの実行時チェックを甘くし,
binutils-2.16.1 のセキュリティ上の弱点を晒したまま運用することに他なりません.

上記引用部分はなるたけ真似をしないようにしましょう.

オフライン

 

Board footer

Powered by FluxBB