1 名前:デフォルトの名無しさん mailto:sage [2011/09/03(土) 14:13:04.14 ] 史上最強かもしれなかったツール、GCC(GNU Compiler Collection)について語るスレ。 GNU本家のGCCページ gcc.gnu.org/ Binutils - Collection of binary utilities ←これも必要だぞ。 www.gnu.org/directory/GNU/binutils.html GNU Binutils sources.redhat.com/binutils/ GCC online documentation gcc.gnu.org/onlinedocs/ Installing GCC gcc.gnu.org/install/ GCC Timeline gcc.gnu.org/releases.html#timeline Calendar gcc.gnu.org/develop.html#timeline 前スレ GCCについて part9 hibari.2ch.net/test/read.cgi/tech/1246059290/ 関連スレ 【最速へ】LowLevelVirtualMachine【LLVM】 hibari.2ch.net/test/read.cgi/tech/1211547655/
331 名前:デフォルトの名無しさん mailto:sage [2013/05/22(水) 19:58:13.29 ] 使ってる*.oをnmして未定義シンボルをリストして、 シンボルがどの*.aで定義されてるかnmして調べて、 *.aをar xして*.oにしてnmして、 以下収束するまで繰り返し。 多分機械的に出来るんじゃないか? Cの場合、使われる*.aは引数で与える必要があって、 最初から全リストが分かってるわけだし。
332 名前:325 mailto:sage [2013/05/22(水) 20:31:03.39 ] >>330 誤解を招く文章ですいません、ld(binutils)を含めてgccと書いていました。 -why_live(https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/ld.1.html) はまさに欲しているものでしたが、使用しているld(GNU ld version2.15 arm-elf/cygwin のクロス環境)には実装されていないようでした。 * ld.info(manがなかったので) * arm-elf-ld --help * sourceware.org/binutils/docs-2.15/ld/Options.html#Options で、why/live/chain/refferenceなどのキーワードで探してみましたが、同等のものは 見つけられませんでした。 >>331 はい、その方法(それを行うツールの作成)は最後の手段として考えています・・・
333 名前:デフォルトの名無しさん mailto:sage [2013/05/22(水) 21:59:40.34 ] ld --help --cref 相互参照表を出力する -Wl,--cref
334 名前:325 mailto:sage [2013/05/23(木) 12:04:25.97 ] >>332 ありがとうございます。 --crefで目的を達せそうです。
335 名前:デフォルトの名無しさん mailto:sage [2013/06/01(土) 20:00:59.98 ] cygwinで gcc 4.8.1 コンパイルしたけど、エラーが2つでてインスコできんわ・・orz
336 名前:デフォルトの名無しさん mailto:sage [2013/06/02(日) 11:49:35.35 ] gcc -S -g で出力されるアセンブルコード中の.locの情報を 該当するCソースに置換するフィルタはどこかで公開してませんか?
337 名前:デフォルトの名無しさん mailto:sage [2013/06/02(日) 23:36:32.81 ] as --help -a[sub-option...] turn on listings Sub-options [default hls]: c omit false conditionals d omit debugging directives g include general info h include high-level source l include assembly m include macro expansions n omit forms processing s include symbols =FILE list to FILE (must be last sub-option) gcc -c -O2 hoge.c -Wa,-ahls=hoge.lst
338 名前:336 mailto:sage [2013/06/03(月) 10:32:13.74 ] >>337 ありがとう。それに-gつけたら出来ました。
339 名前:デフォルトの名無しさん mailto:sage [2013/06/13(木) 05:42:57.74 ] gcovの使い方の質問ここでしたらスレチですか?
340 名前:デフォルトの名無しさん mailto:sage [2013/06/13(木) 11:06:32.53 ] profとかcovはいいんじゃない?
341 名前:デフォルトの名無しさん mailto:sage [2013/06/14(金) 00:47:14.15 ] ではお言葉に甘えて。 カバレッジを調べるためgcovすると自分のソース以外の iostream.gcovとかも大量にできてしまいます。 これを指定のディレクトリ以外は生成しないようにできないものでしょうか? 今のところ-pをつけてファイルを生成し必要のないフォルダのものをrmで消してます。
342 名前:デフォルトの名無しさん mailto:sage [2013/06/14(金) 01:08:14.99 ] gcov --help -o, --object-directory DIR|FILE オブジェクトファイルを DIR 内または呼び出し用 FILE 内で検索する
343 名前:341 mailto:sage [2013/06/15(土) 01:10:38.28 ] >>342 使い方が間違っているのか期待した結果になりませんでした。 srcディレクトリに.h / .ccがあるので -o src と指定しましたがiostream.gcovは生成されました。 objディレクトリに .o があるので -o obj と指定すると obj/test.gcno:cannot open graph file といったエラーが表示されます。そこでobjにtest.gcnoをmvすると処理は通りますが 相変わらずiostream.gcovは生成されます。 ただlcovすると.gcovは消えるので気にしなければ済む問題かもしれません。
344 名前:デフォルトの名無しさん [2013/08/06(火) NY:AN:NY.AN ]
345 名前:デフォルトの名無しさん [2013/09/13(金) 23:40:52.15 ] プリプロセッサの話ってここで大丈夫?スレチだったら流して gccの-EオプションでCライクな言語のプリプロセスかけてるんだけど、そのマクロの記述で #define get_pi(data) (6'(data)<<3)って感じの記述してて、 これの ' の部分が文字データ記述の開始として扱われてdataが置き換わらないんだけど、対策ないですかね?
346 名前:デフォルトの名無しさん mailto:sage [2013/09/14(土) 00:07:31.67 ] SystemVerilogかね? #define s ' #define get_pi(data) (6 s (data)<<3) 空白が入るけど動くよ。警告も出るけど。 規格上問題ないか、どのGCCバージョンでも動くかは分からん。
347 名前:デフォルトの名無しさん mailto:sage [2013/09/14(土) 00:25:12.48 ] >>346 返信ありがとう御座います! 早速試したら出来ました。けどなぜ動くのかわからない… 因みに使ってるのNSLという言語です。ハードウェア記述言語なのは一緒ですかね
348 名前:デフォルトの名無しさん mailto:sage [2013/09/14(土) 00:39:13.04 ] >>347 dataが置換された後に再走査されてsが置換されるから動く。 だから#define s ' が動けば、問題なく動く。
349 名前:デフォルトの名無しさん mailto:sage [2013/09/14(土) 00:48:05.09 ] >>348 プリプロセッサってプロトタイプ宣言みたいに上から順に〜ってわけではないのか。一緒だと思ってました
350 名前:デフォルトの名無しさん mailto:sage [2013/09/14(土) 04:44:31.37 ] gcc4.9のtrunk版、3ヶ月くらいプラグマバグでビルド出来なかったんだけどようやく修正された
351 名前:デフォルトの名無しさん mailto:sage [2013/09/14(土) 10:36:33.97 ] >>349 いやいや、上から順で正しい。再走査はマクロ展開時の話だよ。 マクロ引数dataが展開された後に、その結果に対して再走査されて 普通の地の文と同じようにsがマクロ展開される。 最初のやつがうまく動かないのは、Cプリプロセッサは文字置き換えでなくて トークンを置きえるから。 (6'(data)<<3) は (, 6, '(data)<<3) という3つのトークンになってしまう。
352 名前:デフォルトの名無しさん mailto:sage [2013/09/14(土) 13:34:26.01 ] プリプロセッサなんて自作しちゃいなよ
353 名前:デフォルトの名無しさん mailto:sage [2013/09/17(火) 16:30:56.00 ] 正確に標準に従ったcppを作るのは案外大変だぞ?
354 名前:デフォルトの名無しさん mailto:sage [2013/09/24(火) 00:04:00.29 ] >>345
355 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 10:16:18.31 ] dev/nullを出力先に指定するとscanfなどで入力した内容が表示されなくなるという噂を聞きました どのように指定すると良いか教えてください
356 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 10:35:57.62 ] >>355 入力した内容なら、必要に応じて"/dev/stderr"(stderr)にでも出力すればいいじゃん。
357 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 19:25:05.12 ] >>355 scanf を実行する前に標準出力を /dev/null につけかえるのでは、pipe(), pipe2() とかで?
358 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 19:39:51.62 ] >>357 意味不明
359 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 21:46:42.94 ] >>357 はい、そのとおりです。
360 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 14:08:37.22 ] >>357 pipe2はlinux専用関数だがな
361 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 17:17:29.77 ] >>360 ウイーンドーズにも/dev/nullがあるんですか?
362 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 17:20:56.19 ] Windows だと NUL だろ。
363 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 21:07:31.14 ] 察するに、パスワード入力ではechoさせたくないとかそれ系の話だろ? 普通はtermiosやSetConsoleModeでやることで、標準出力を/dev/nullに付け替えるなんて教えた奴は凄いんだか意地悪なんだか
364 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 21:23:56.90 ] >>363 標準出力のリダイレクトでは、その望みを叶えられないのだが。 凄くも何ともない。
365 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 17:40:38.34 ] int f(int n) { while (--n) ; return n} がgcc -O2 (4.6.3)で int f(int ) { retunr 0; } のようにコンパイルされました。 この最適化がヒューリスティック(パターンデータベースのようなもの)を使っているのか 知りたいのですが、どのへんを調べればいいのでしょうか? (質問の意図は、自作の最適化器にもこの手の処理をいれたいのですが、 場当たり的に入れるしかないのか、一般的な方法があるのかを知りたいということです。)
366 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 18:35:36.33 ] ただの定数最適化に見える。 あなたのレベルを分かるようにしないと、ドラゴンブック読めとか言われちゃうよ。
367 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 18:37:40.20 ] >>366 なんか見当違いなレスだなぁ
368 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 20:37:34.22 ] すいません。ドラゴンブックは学生時代に買って眺めたことはあります。専攻はコンピュータ科学でした。 コンパイラ関係はあまり深く学ばなかったとの、なにぶん10年以上のブランクがあるので、 どの程度の難しさの問題なのかもわからないのです。 定数最適化、なんでしょうか? while文が終わるとすれば0しかありえないですが、while文の停止性まで最適化器が判断できるのか疑問だったのです。 追伸: int f(int n) { while (n=n-2) {} return n; } main() { f(-2); } とかだとnの偶奇(もっと一般のケースもいけるみたいです)で結果を変えるようです。 -O0 と -O2 で実行時間が全然違ってしまいますが速くなる分にはいいんですよね。
369 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 21:40:38.13 ] GCCはどうだか知りませんのでドラゴンブックレベルの一般論ですが、 ループ最適化は普通にやるので、条件式は判断します。 制約条件がそこではっきりするので最終的には通常の定数最適化 パスで消えてるんじゃないでしょうか。 ドラゴンブックに書いてなかったっけ? 停止性が判断できるかという疑問ですが、判断できなければ 最適化はやらないということになるはずです。 逆に聞きたいのですが、ヒューリスティックに何かできる んでしょうか? 実行時判断みたいなもの?
370 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 23:40:22.44 ] 前半はなんとなくわかりました。ドラゴンブックは多分実家にあるので参照できませんが、、、 後半ですが、誤用かもしれませんが経験則の意味で使いました。 停止性は当然一般には判断できないので、どんな経験則を使ってるのかな、ってぐらいで、 深い意味はなかったです。
371 名前:デフォルトの名無しさん [2014/01/04(土) 22:39:03.46 ] ドラゴンブックってなーに
372 名前:デフォルトの名無しさん mailto:sage [2014/01/04(土) 23:07:48.15 ] ぐぐれ
373 名前:デフォルトの名無しさん mailto:sage [2014/01/06(月) 14:56:20.27 ] 教科書的な最適化はやってないと思うよ
374 名前:デフォルトの名無しさん mailto:sage [2014/01/06(月) 23:57:03.34 ] >>365 ブロック内の変数に関数外の部分から影響を受けるかどうか(volatileやrestrictじゃないメモリ参照とか)のフラグを用意して、 外部の影響を受けない変数や定数から構成された条件式は停止時の条件が計算できる可能が高いので最適化を試みるとか。 似たような考え方でブロックが(大域変数などに)副作用を与えるかどうかを判断すれば簡略化やコードの削除ができるんじゃない?
375 名前:デフォルトの名無しさん mailto:sage [2014/01/09(木) 18:39:35.49 ] >>371 中学生が大好きな架空の生物が掲載された魔導書だよ 恐れおののきつつも憧れを抱き、本棚の奥で埃を被っている一冊 忘れた頃に自分の娘がドラゴンを召喚して世界を崩壊へ誘ったりするアレ
376 名前:デフォルトの名無しさん mailto:sage [2014/01/09(木) 19:05:21.73 ] >>365 l1: --n; if (n != 0) goto l1; return n; 不変式解析で、 l1: --n; if (n != 0) goto l1; return 0; nの非到達性で、 return 0;
377 名前:デフォルトの名無しさん mailto:sage [2014/01/09(木) 23:33:20.23 ] >>375 おもしろそうですね
378 名前:デフォルトの名無しさん mailto:sage [2014/01/22(水) 22:45:26.19 ] libdwarfがELFに依存してて泣ける… Windows(MinGW)だとPE+DWARFだから使えないのが残念 MinGWのobjdump.exeは自力で解析してるから、ソースを参考にすれば なんとかなりそうだけどDWARFの知識が必要になるし…
379 名前:デフォルトの名無しさん mailto:sage [2014/01/22(水) 23:18:17.02 ] libdwarfをPE対応にしてupstreamにパッチ投げれば 他の人も幸せになれるんでないの
380 名前:デフォルトの名無しさん mailto:sage [2014/01/22(水) 23:46:19.90 ] 正直libdwarf内で最低限のELFエミュレーションをしようと思ってソース 見たけどめげた…ごめんよ とりあえずobjdump.exeがやってるDWARF解析部分を解析してみるよ それでDWARFになじんだらまたトライしてみたい
381 名前:デフォルトの名無しさん [2014/02/13(木) 21:57:38.58 ] どうでもいいがCentOS最近入れたらデフォルトではインスコされてないんだな gccのないLinuxなんてLinuxじゃないやい
382 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 22:29:35.18 ] CentOSのGCCは糞古いから最初から入ってなくても問題無い ただ新しいのを入れるには色々手間は掛かる
383 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 22:46:51.56 ] 3回コンパイルすりゃいいだけだろ
384 名前:片山博文MZ無能 ◆T6xkBnTXz7B0 mailto:sage [2014/02/14(金) 19:50:03.01 ] gccとg++は最近不具合があるから、clangに乗り換えることにした。
385 名前:デフォルトの名無しさん mailto:sage [2014/02/14(金) 20:02:18.20 ] あそう
386 名前:デフォルトの名無しさん mailto:sage [2014/02/14(金) 21:13:38.73 ] あべ
387 名前:デフォルトの名無しさん mailto:sage [2014/02/14(金) 23:07:39.94 ] あべし
388 名前:デフォルトの名無しさん mailto:sage [2014/02/15(土) 01:10:07.47 ] ひでぶ
389 名前:デフォルトの名無しさん mailto:sage [2014/02/15(土) 04:20:34.58 ] たわば
390 名前:デフォルトの名無しさん mailto:sage [2014/02/15(土) 20:59:09.39 ] >>389 やぁ 先輩
391 名前:デフォルトの名無しさん mailto:sage [2014/02/15(土) 21:26:10.59 ] お こんなとこいたか まぁ上がれ
392 名前:デフォルトの名無しさん [2014/02/15(土) 22:58:41.46 ] おう、唐突なあ〜るスレやめろや
393 名前:デフォルトの名無しさん mailto:sage [2014/02/17(月) 15:17:28.49 ] うるさい! おまえなんかロボットだ
394 名前:デフォルトの名無しさん mailto:sage [2014/02/17(月) 16:03:52.41 ] 助けて あーりんロボ!ピンチなの!
395 名前:デフォルトの名無しさん mailto:sage [2014/02/17(月) 21:00:58.58 ] とほほ
396 名前:デフォルトの名無しさん mailto:sage [2014/02/18(火) 21:19:37.28 ] 埼玉県の地図さえあれば
397 名前:デフォルトの名無しさん mailto:sage [2014/02/18(火) 21:57:49.43 ] 山田うどんの場所がわかる
398 名前:デフォルトの名無しさん [2014/02/18(火) 22:39:44.23 ] いろんなレガシー言語の墓場になってて面白いよね
399 名前: ◆QZaw55cn4c mailto:sage [2014/03/17(月) 18:34:12.34 ID:rLCh2DtT] >>394 「ロボットじゃないよ,アンドロイドだよ」って応えないと
400 名前:デフォルトの名無しさん mailto:sage [2014/03/21(金) 17:27:54.35 ID:Qhdzl4hJ] 何を言ってる。 あれは立派なロボだ。設計図を知らんのか。
401 名前:デフォルトの名無しさん mailto:sage [2014/03/24(月) 14:20:24.04 ID:4BzhBi/8] >>381 Solarisにccがないとかいう話が昔なんとかかんとか > どうでもいいがCentOS最近入れたらデフォルトではインスコされてないんだな > gccのないLinuxなんてLinuxじゃないやい
402 名前:デフォルトの名無しさん mailto:sage [2014/03/24(月) 22:27:08.61 ID:SeS398JM] デフォってなによー の話だな
403 名前: ◆QZaw55cn4c mailto:sage [2014/03/25(火) 19:24:42.50 ID:I6L0W68I] え?Linux ですら clang に移行したの?
404 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 20:02:11.82 ID:AvCKhDY2] >>403 ちげーよ、標準インストールと開発インストールの違いもわかんねーコゾウだよ
405 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 20:57:10.65 ID:gYecV8lQ] 今日4.9をsvnからチェックアウトしてビルドしたんだけど、gfortranのopm_lib.modとかバイナリになった? 去年9月頃ははテキストだったけど仕様変わったのかなそれともビルド失敗したのかな
406 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 21:00:28.08 ID:gYecV8lQ] あ、opm有効にしてビルドしたら実行ファイルは動いてるから仕様変わったのね 履歴にはなんも書いてないっぽい 同じく昨日ビルドした4.8.3のスナップは未だにテキスト形式なんだけどなー
407 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 21:20:14.97 ID:gYecV8lQ] 更に勘違い。去年9月の4.9もバイナリだった、4.8はずーっとテキスト形式 あーんもう、ごめん!
408 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 23:27:56.52 ID:6NPXk5PR] MacOSとFreeBSDはclangだよな
409 名前:デフォルトの名無しさん [2014/03/26(水) 00:54:07.95 ID:+kV1DCY1] せやな MacOSは-stdlib=libc++をつけるのがめんどくさい
410 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 00:58:28.85 ID:JdSV9wAR] ツール使えよ
411 名前:デフォルトの名無しさん mailto:sage [2014/04/22(火) 17:35:18.77 ID:NoRZCfW9] trankのgccが4.10になってた セグメントエラー多すぎ
412 名前:デフォルトの名無しさん [2014/04/29(火) 09:38:50.75 ID:ysohpla1] GCC4.9ってOpenMP4.0フルサポートしてんの?
413 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 12:26:36.46 ID:RKEixZj5] 4.9.0 出てたんだ
414 名前:デフォルトの名無しさん mailto:sage [2014/05/06(火) 16:53:49.90 ID:D1oOHYCI] 次は4.10なのか 5になるためのネタがない?
415 名前:デフォルトの名無しさん mailto:sage [2014/05/30(金) 10:15:09.82 ID:A+ocbhhF] 415 のテスト