[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 18:27 / Filesize : 201 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

GCCについて part7



1 名前:デフォルトの名無しさん [2006/04/18(火) 19:57:04 ]
史上最強かもしれないツール、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


528 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 17:30:59 ]
4.1.2も3.4.6に比べて大分性能悪くなってた
4.0系は試してないから分からないけど

529 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 04:00:01 ]
-fwhole-compile --combine って C++ で使えない?
1クラスだけの簡単なサンプルでやってもメンバ関数が undefined reference に
なってしまうんだが。v4.1.2、ちなみに C なら問題ない。

仕方ないので、単体ファイル毎に -fprofile-generate/use して自分ツールビルド
してみたら 1% 速くなたw
まあこれでもいっか、と MinGW で同じようにやったら internal compiler error orz

530 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 04:13:03 ]
>>529
書き間違い済まぬ -fwhole-program っすね

531 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 04:15:13 ]
今試したらできなかった
-fwhole-compileじゃなくて-fwhole-programだったけど

532 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 22:35:57 ]
進歩した部分もあれば後退した部分もあるから gcc-4 はまだまだ主流になれそうにないね。

最適化パスが Tree SSA と RTL で重複し始めてるような気もするが?

533 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 16:08:15 ]
>>528
4.0はもっとひどかった。4.1になってちょっとマシになった。

534 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 03:37:49 ]
SPECの結果って最近どうなの?

535 名前:デフォルトの名無しさん [2007/02/26(月) 23:17:10 ]
2CPU構成で1CPUしか使ってくれないソフトをGCC4.1でOpenMPを有効にしてmakeすれば2CPU使ってくれるのでしょうか?
GCCマスターのお知恵をおかしください・・・

536 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 23:24:16 ]
>>535
そうはいかんざき。
OpenMP用にソースにちょっと手を入れないといけない。




537 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 23:41:18 ]
1位3.3系
2位3.4系
3位4.1系

538 名前:535 [2007/02/26(月) 23:42:09 ]
>>536
アホらしい質問すいません。
ありがとうございます。
SolarisやLinuxでnbenchというCPUの性能を測るものがあって、これを複数CPUで動かして計測したいのですが、1CPUでしか動いていませんでした。
オプションに-fopenmpをつけてmakeすれば複数CPU対応版になってくれれば良いな、と思った次第です。
世の中そんな甘くないのですね。
SolarisやLinuxで複数CPUに対応したCPUベンチマークソフトがあれば良いのですがね。

539 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 23:54:46 ]
横から失礼します。
-ftree-vectorizeで並列化した場合は、マルチCPUで効果があるのでしょうか。

540 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 01:22:01 ]
>>539
vectorizeはSSEを使った高速化じゃないの? だとすれば、一つのコアしか使わないと思われ。

>>538
プラグマで、OpenMPの対象とするforループを指定してやるとかすればいい。

541 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 04:33:48 ]
目的がよく分からないんだけど,元々1CPU用のベンチを自分で適当に弄って
意味あるの? 元の製作者がやるんだったらともかく

542 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 10:03:51 ]
>>538
そんなあなたに、Intel compiler。
-parallelオプションで、ある程度自動で並列化してくれる。
非商用目的なら無償で入手できます。

543 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 03:50:56 ]
>>539
ubench とか sysbench とか。
んでも、1 個のベンチマークツールだけに頼らない方が良いよ。
それと、なるべく自分が想定しているアプリに近い負荷で試した方が良い。
アプリに付属しているベンチマークツールを使うとかね。
マイクロベンチマークは落とし穴がいっぱいあるから、きちんと統計情報も
取得した方が良いよ。

544 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 07:21:59 ]
Mingwが3.4.6出す夢を見た。

545 名前:デフォルトの名無しさん [2007/03/11(日) 13:00:40 ]
gcc 4.2の正式リリース予定日はまだ決まっていないのでしょうか?

546 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 15:01:01 ]
3月中旬



547 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 14:12:52 ]
gcc-4.2って>>527の話があったけど、どうなったの?
3月中旬にリリースってことは、結局そのままリリースするのかな?

548 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 15:17:29 ]
その様だ
明日RC1が出る

GCC 4.2.0 RC1 Status
gcc.gnu.org/ml/gcc/2007-03/msg00348.html

549 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 15:37:34 ]
となると、4.2はスルーしたほうがよさげだなぁ

550 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 18:34:29 ]
>>547
ttp://d.hatena.ne.jp/c-yan/20070305/1173092465
3/4 に続行って出てた

551 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 19:50:02 ]
>>550
Thanks
ttp://gcc.gnu.org/ml/gcc/2007-03/msg00130.html のステータスレポートですな
んでヲレは当分は4.1のままでいることにしますだ

552 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 02:58:57 ]
現時点での最強のgccを教えてください

553 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 03:03:20 ]
gcc

554 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 09:37:39 ]
ecc

555 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 11:17:05 ]
.2.95.3
に決まってる

556 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 15:25:25 ]
あれはよかったのう…
どこで間違ったんですかねえ





557 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 19:38:12 ]
長い間バージョンが上がらなかった反動で
出来がいかに糞でもバージョンが上がればいいと思い込んでしまったところ。

558 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 21:31:36 ]
Makefileについてなんですが、現在以下のようなフォルダ構成でsrc以下
にソースファイルを置いています。

┬src
├obj
└run

Makefileはrunにおいていて、makeコマンドを実行したら.oはobjに置かれ、
実行ファイルだけrunにできて欲しいのです。

しかし、makeコマンドを実行した場所に一緒に.oができてしまい、イライラしています。

Makeファイルはrun以下に置いて、.oはobj以下に作成されるというような解決方法は
ないでしょうか?

559 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 22:58:01 ]
>>558
マニュアル読め。
そんなの質問するようなことか?

560 名前:558 mailto:sage [2007/03/15(木) 23:48:26 ]
MakefileでVPATHとOPTIONってどうやって両方とも有効にすればいいんでしょうか?

VPATH = ../src
OPTION= -D_NDEBUG

abc.o : a.c b.c c.c
#[tab]$(CC) $(OPTION) -c $@

こんな感じでやっても、OPTIONが有効になりません。
かといって、#を削っても今度はVPATHが有効になりません。
どなたか、お助けを。

561 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 00:22:31 ]
>>558
GNU make のパターンルールくらい嫁。基本じゃん
$(target): $(objects)
$(objects): ../obj/%.o: ../src/%.c


562 名前:389 mailto:sage [2007/03/16(金) 10:34:15 ]
>>558
gccの話をしれ

563 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 15:43:52 ]
質問

転職してVisualC++を使う開発からGCCを使う開発に変わるんだが
VC++のようなIDEって無いの?
GCCとViが基本?

564 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 15:50:19 ]
emacs


565 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 15:51:20 ]
>>563
eclipse+cdtとかkdevelopとか

566 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 15:52:44 ]
>>563
ttp://pc11.2ch.net/test/read.cgi/linux/1039282447/




567 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 16:19:25 ]
皆さんThx!


568 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 21:24:45 ]
いまさらですがMakefileの話題はこちらへ

make makes many problems
pc11.2ch.net/test/read.cgi/tech/1029599472/

569 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 02:50:56 ]
>>548の後、相次いでバグが発見されたために延ばし延ばしになっていたRC1がようやく出ました。

GCC 4.2.0 RC1
gcc.gnu.org/ml/gcc/2007-03/msg00636.html

ヤレヤレ…

570 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 06:35:48 ]
なにがヤレヤレ…なの?

571 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 13:01:22 ]
>>570
>>569 のメール読めばすぐ分かるだろ.
> we still have quite a number of GCC 4.2.0 P1s which concern me.

572 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 13:15:00 ]
バグの出方を考えると、どう考えてもリリース品質とはいえないシロモノなのに、
RCにしちゃっていいの? 4.1と比べて、あまり最適化周りの性能向上もしていない
ようだし。

573 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 13:24:45 ]
性能向上、どころか性能低下がかなり激しくて問題視されてる。
4.3は期待出来そうなんだが…
まぁこの経験を生かしてこれからはより良い開発プロセスを作ってほしいね。

574 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 20:12:54 ]
4.xと3.xの比較ではどんなにググっても3.xがいいという人しか見つかりませんが
4.xでしかコンパイルできないソースを書かない限りは3.xでFAなんかいな?

575 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 01:05:34 ]
3.4以降が4.xになったんじゃないの。
どうせ最高性能は2.95なんだから、最新がほしけりゃ4シリーズを使うべき
だと思うけどね〜。まあ、lvalue assignmentの問題とか致命的な人には
致命的なんだろうけどさ。

576 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 01:55:31 ]
C言語しか使わない人は2.95でもいいかもしれないけど、
C++ 使う人には思い出したくない過去な気が



577 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 01:56:12 ]
Linuxのメジャーどころのディストリビューションが3.x以降に移行し、
FreeBSDも5以降は3.xに移行してから結構時間が経ってしまっている現状、
2.95.xではmakeが通らないアプリも結構あるからなぁ。

ってことで、Solarisで長いこと付属のcompanion CDに入っていた2.95.3を
使ってきたけど、SunFreewareの3.4.6に入れ替えた。

にしても、4.2がリリースされたら、4.1から入れ替えちゃって4.1がつかえなくなる
ディストリビューションがありそう。Debianの場合、パッケージが用意されているのは
2.95、3.3、3.4、4.1なので、4.2がリリースされても大丈夫だろうし、FreeBSDのportsも
そんな感じだから、ヲレ的には無問題なんだけど。

578 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 03:35:37 ]
>>577
Solaris 10 以降だったら /usr/sfw/bin の下に GCC 入ってるよ。
バージョンが幾つだったか忘れたけど。

579 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 12:02:31 ]
>>576
C++はそうだね。3.x以降で劇的に変わっているし。
あと、amd64などの新しいアーキテクチャへの対応もあるし。

にしても、>>575のいう最高性能が2.95っていう理由がよくわからんのだけど。
まさかコンパイル速度だけを見ているわけじゃないよね?

580 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 16:05:58 ]
見ているわけだろ。

581 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 15:55:40 ]
コンパイル速度しか見ていないヤシ、以前UNIX板のgccスレにも湧いていたな

582 名前:389 mailto:sage [2007/03/20(火) 17:11:47 ]
コンパイル速度とコードサイズの小ささは2.95のがよかったな。
実行速度は比べたことないんでしらんけど。
まぁ C99 や C++ や他のフロントエンドを考えると今更戻る気はしないな

583 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 17:57:44 ]
実行速度は自分が使うやつでは3.3が一番速かった
4.1は姫野ベンチってやつでは-O2以上にすると何故か3.4に比べて2倍くらい遅くなってた
-O1とかでもそれまでと比べて遅くなってるけど

584 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 09:43:40 ]
姫野ベンチのソースコードは公開されてるの?

585 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 10:57:09 ]
されてるよ。ググればトップに出て来るけど。

586 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 14:45:25 ]
fortranがベースなのか?



587 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 17:59:33 ]
ご自分でどうぞ。

588 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 20:22:54 ]
>>586
Fortranベースじゃないかな。トップページに、Cの配列宣言をFortranに合わせた、って記述が。
言語の特性上、だいたいベンチ系はFortranベースのものが多いし。

589 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 15:52:02 ]
下のページを試しているのですがgcc時にエラーが出てしまいます
ttp://www.hellohiro.com/native.htm
jni.hがないと言われるのですが、lsで確認したところ存在します。
どこがまずいのでしょうか・・助けてください。

bash$ gcc -shared -l/usr/java/jdk1.6.0/include/ -l/usr/java/jdk1.6.0/include/linux/ HelloWorldJNI.cpp -o libHelloWorldJNI.so
HelloWorldJNI.cpp:1 から include されたファイル中:
HelloWorldJNI.h:2:17: error: jni.h: そのようなファイルやディレクトリはありません
HelloWorldJNI.h:15: error: ‘JNIEXPORT’ does not name a type
HelloWorldJNI.cpp:2: error: ‘JNIEXPORT’ does not name a type
bash$ ls -l /usr/java/jdk1.6.0/include/jni.h
-rw-r--r-- 1 root root 67831 11月 29 18:49 /usr/java/jdk1.6.0/include/jni.h

590 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 17:07:14 ]
l じゃなくて I だよ
lは -lpthreadみたいにライブラリに対して使う

591 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 17:59:14 ]
>>590
ありがとうございます
できました
本当に助かりました

592 名前:デフォルトの名無しさん [2007/03/31(土) 20:35:04 ]
4系ってコンパイルを正常に終わらせられるソフトウェアはまだ多くないと聞いたんだけど
それと、Debianは2.95からパッケージに置いてあるのに
Fedoraは3.3より先は切り捨てられているのはどうかと思うが

593 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 20:37:45 ]
debianってそういうディストロだし
fedoraってそういうディストロだし

594 名前:デフォルトの名無しさん [2007/03/31(土) 20:39:14 ]
>>593
で、4系ってどうなのよ
アレな出来なのか?

595 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 20:46:50 ]
4.0 まぁ許容範囲
4.1 ギリギリ許容範囲
4.2 …だめぽ
4.3 期待の新星

javaとfortranについては順調に進歩してる。
が、肝心のcが…
コンパイル時間は増える、バイナリはでかくなる&遅くなる、
でいい事あんまなし。

596 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 20:54:41 ]
>>595
ありがとう
まだ3系のほうがいいのね・・・



597 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 22:15:44 ]
4.0 転換期。まぁ少しの性能の低下はしかたない。
4.1 すこし性能が回復。まだ3.6に及ばず。
4.2 なにそれうまい?
4.3 memcpy! memcpy!

598 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 22:42:26 ]
何と引き換えに性能が劣化してるの?

599 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 22:47:07 ]
>>598
www.jp.redhat.com/magazine/NO5/

600 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 04:48:19 ]
IA32への対応はそろそろ限界なのでは?

601 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 09:48:20 ]
案の定、4.2で多くのパッケージをコンパイルしたアホなLinuxのディストロが出てきたねぇ。

602 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 10:11:17 ]
俺は使わないが、問題の炙り出しになるので大歓迎。

603 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 10:40:42 ]
問題の炙り出しっつーても…
これ、どうせ廃棄ものだぜ?
2.96や3.3みたいに残しておく価値ないし
4.2で握るんなら4.3cvsで握ってくれた方がうれしいよ…
たとえ爆死してもまだ納得できる

604 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 17:28:52 ]
>>601
Momonga 4なら4.2は捨てて4.1で行くことにしたらしいぞ。
ttp://developer.momonga-linux.org/wiki/?Momonga+Linux+4
ttp://developer.momonga-linux.org/wiki/?gcc-4.2

605 名前:デフォルトの名無しさん mailto:sage [2007/04/03(火) 00:22:24 ]
そんな日本ローカルな鳥なんてどうでもいい。

606 名前:デフォルトの名無しさん mailto:sage [2007/04/03(火) 02:06:59 ]
あー momonnga ってまだあったんだー



607 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 11:14:29 ]
gcc(ていうかGNU ld?)で、未使用な関数とかを自動的に除去して
サイズ縮小したいんですが、そもそもそんな機能ありますか?

608 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 12:24:40 ]
>>607
gcc -ffunction-sections -Wl,--gc-sections 以下略
ttp://www.radiumsoftware.com/0401.html#040126


609 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 12:53:16 ]
結果的に未使用な関数の除去は出来るけど、
-ffunction-sectionsは性能の低下を引き起こすので使用には注意。

結局、その手の機能はまだ実装されてないんだね…

610 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 12:56:30 ]
>>608
アリガトン!でも除去してくれなかったよorz。



611 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 13:22:17 ]
>>610
ソースを一つに纏めて、全ての関数にstaticをつけると未使用関数は消えてなくなるんじゃね?w

612 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 15:49:11 ]
>>611
その辺を-fwhole-programが面倒見てくれるのかと思っていた時期もありました・・・


613 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 16:09:56 ]
MacOSXでg++の4系列を使い始めたのですが,
以下のコードでコピーコンストラクタがないと起こられます.
#include <iostream>
using namespace std;
class A {
A (const A &p);
A &operator = (const A &p);
public:
A () {}
friend ostream &operator << (ostream &p_os, const A &p_a) {return p_os;}
};
int main ()
{
cout << A () << endl;
return 0;
}
エラーメッセージは
test.cpp:4: error: 'A::A(const A&)' is private
test.cpp:12: error: within this context
です.g++-3.3では起こられないのですが,これってg++-3.3の方が正しいですよね?

powerpc-apple-darwin8-g++-4.0.1 (GCC) 4.0.1
g++-3.3 (GCC) 3.3 20030304


614 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 18:54:17 ]
C++相談室で聞くことにします


615 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 22:24:49 ]
つ ttp://lists.apple.com/archives/xcode-users/2007/Mar/msg00193.html
この辺の話じゃね?

616 名前:デフォルトの名無しさん mailto:sega [2007/04/15(日) 07:47:47 ]
a==1;
これについて、Warningを吐いてくれるオプションってある?

-Wall とか以外で。



617 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 10:11:39 ]
warningを個別に禁止・許可することができるようになりましたか?

618 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 10:56:35 ]
なんで道具に頼るんですか?

619 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 15:29:58 ]
チェックを人間の目に頼るのは小学生まで

620 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 17:13:21 ]
幼稚園児?保育園児?

621 名前:デフォルトの名無しさん [2007/04/15(日) 20:45:08 ]
>>617
2000年問題とかは個別に禁止・許可できるよ

622 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 20:53:26 ]
まだできないようですね。やれやれ。

623 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 22:09:08 ]
できました。ありがとうございました。

624 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 00:19:47 ]
ちょっと.code16モードで生成されるコードに疑問があるので質問させてください。

__asm__(".text\n.code16\n.global _start\n_start:\njmp boot_main\n");

void asm_putc_ng(char c) { __asm__("int $0x10" :: "a"(0x0e00|c), "b"(0x7)); }
void asm_putc_ok(char c) {
 __asm__(
   "mov 6(%ebp), %eax\n\t" // ココ。gccは8(%ebp)を生成するが・・・
   "or $0x0e00, %ax\n\t"
   "mov $0x07, %bx\n\t"
   "int $0x10\n\t");
}
void boot_main(void) { asm_putc_ok('D'); asm_putc_ng('D'); }

BIOSコールで文字を出力するサンプルですが、.code16モードだと
引数のスタック上位置の計算がおかしく、引数が正常に渡りません。
こんなコードが生成されます:

 asm_putc_ok: ! asm_putc_ng でも同様のプリアンブルを生成
  pushl %ebp
  movl %esp, %ebp
  subl $4, %esp    !char c用にスタック領域を取る
  movl 8(%ebp), %eax !第一引数をEAXに入れようとしてるがオフセットおかしくない?
  movb %al, -4(%ebp) !charなんでALだけ領域に書けば十分

リターンアドレスは16bitなので、ここは8(%ebp)でなく、6(%ebp)が
正しくないでしょうか?実際、それだと指定の文字を正しく出力します。

しかし、超メジャーなx86 gccでバグがあるとも思えないので、私が
単に16bitコード生成のための何かをしていないのではと悩んでます。
どうすれば正しいコードを生成させられるでしょうか?

625 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 00:41:38 ]
>>624
それはそういう仕様
16bitモードで使いたいなら素直にnasmでも使っとけ
いや、絶対その方が不可解なところで悩まなくていいから。


626 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 01:20:06 ]
MJD?でもサンクスコ。しかし説明だけ読んでる限りだと

 .code16  - 16bit-based instruction, 32bit data
 .code16gcc - 16bit-based instruction (partly 32bit), 32bit data
 .code32  - full 32bit instruction/data

となると思ってしまうよなー。実際には16bitモードなアセンブラを埋めるために
使うことだけ想定してて、16bit C compilerとして使うことは想定してないのね。



627 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 15:09:24 ]
ttp://gcc.gnu.org/ml/gcc/2007-04/msg00509.html
さてさて、4.2はどうなることやら。

628 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 17:00:31 ]
ttp://journal.mycom.co.jp/news/2007/04/10/019/index.html
ってことで、FreeBSD 7はgcc-4.1にしようと作業中で、
アプリとコンパイラの両方でのバグ出しも進んでいるみたいですな。

4.2系と違って4.1系はsnapshotもきちんと1週間毎に出てきているし、
4.1.3は結構よさげなリリースになる予感。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<201KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef