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


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

GCCについて part9



1 名前:デフォルトの名無しさん [2009/06/27(土) 08:34:50 ]
史上最強かもしれないツール、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について part8
pc12.2ch.net/test/read.cgi/tech/1192201659/l50

191 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 13:41:22 ]
質問!
Linux@i386(IA-32)のgccでC言語とアセンブラを組み合わせて使っています。
ebx, esi, ediは通常ならcallee-saveですが、
アセンブラ側の都合でcaller-saveとして扱わなければならない箇所があります。
今はmanを参考に-fcall-used-〜オプションを付け
プログラム全体でcaller-saveとして扱っています。
関数ごとにcallee-save, caller-saveを切り替えて速度を稼ぐことは可能ですか?
可能なら方法を教えてください。

192 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 14:57:42 ]
>>191
特殊な ABI を要求する部分だけ別モジュールにして、
そこだけ CFLAGS 切り替えればいいんじゃない?

昔組み込みでそんな感じにしてたけど。

193 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 15:19:44 ]
ああ、でも callee-save 環境から caller-save 環境を
どう呼び出かってのがあるね。どうやってたかな…。

194 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 15:22:57 ]
ttp://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Function-Attributes.html#Function-Attributes
この中になければないと思う

195 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 15:28:05 ]
ようわからんけど、attributeで指定するとか?

196 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 15:31:40 ]
すまん、ちょっとよく覚えてない。多分 hook を挟んで
どうにかしていたと思う。

ただ 個別に -fcall-used-REG を保守するのも段々面倒
になってきて、最後は「えいや」で setjmp ばりに保存
する hook にしちゃった気がする。

197 名前:191 mailto:sage [2009/12/06(日) 16:52:18 ]
>>192-196
ありがとうございます。
まず__attribute__((returns_twice))を調べてみます。

198 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 15:41:53 ]
教えてください

gccでjavaの練習をやろうと思うのですが、
gcc -vで
--enable-languagesにjavaが含まれていれば大丈夫でしょうか
gcj -vだとcommand not foundになります

199 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 16:54:23 ]
どうしても gcj を使わなければならないという理由がないのなら
Sun の JDK をインストールして勉強しれ。
# command not found に対処できない人が使えるようなものじゃないから…



200 名前:198 mailto:sage [2010/01/08(金) 19:20:48 ]
レストン

もう少しgccを触って駄目だったらJDK逝きます

201 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 09:12:51 ]
とっととJDKに逝け

202 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 07:23:45 ]
naked属性な値を返す関数でreturnがないって警告が出るんだけど
この警告だけ消す方法ないですか?
戻り値はインラインアセンブラ内で書いてる

203 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 10:03:10 ]
戻り値をインラインアセンブラで
int
hoge(void)
{
int ret;
asm ("hoge":"=r"(ret));
return ret;
}
みたいに書いてみたら

204 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 19:10:06 ]
gotoでぶっ飛ぶのかもよ。

205 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 19:16:31 ]
>>203
やっぱそれしかないですか
その方法だと余計なレジスタが増えるのがどうも
ありがとうございました

206 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 19:25:26 ]
余計なレジスタは増えんでしょ
-fomit-frame-pointer付きでコンパイルしてみたら

207 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 20:28:58 ]
register int ret asm(レジスタ);
にしたら指定のレジスタ使ってくれました
gccのバージョンで変わったりしないか不安ですけど

208 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 21:01:15 ]
ほうほう

209 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 07:17:49 ]
戻り値に使われるレジスタ以外を
asmで破壊されるレジスタに指定するという方法もあるのでは



210 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 09:52:26 ]
>>207
その仕様は今まで変わったことないから大丈夫でないかとは思うが。

>>209
clobberしすぎるとcc1が文句言ってくるので程々にしませう。

ということで妙なコードを書くときは、その関数を
__asm__(
"func:\n\t"
  :
"ret");
みたいに書かないとダメだと思う。


211 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 11:25:56 ]
peephole2って凄いね

212 名前:デフォルトの名無しさん [2010/01/19(火) 22:22:38 ]
Linux x86_64 な環境において、gcc version 4.3.4 (Target: x86_64-pc-linux-gnu) な GCC を使って
下記のような XXX.so の中の関数を dlopen、dlsym を使ってよびだせるようにコンパイル
すればどうすればいいのでしょうか?

XXX.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped


調べて、-m32 -ldl をオプションに指定するようにしてみましたが segmentation fault になってしまいます。
アドバイスいただけないでしょうか?

213 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 22:42:40 ]
基本的に無理

214 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 01:30:21 ]
どうしてもということになれば、nspluginwrapperみたいな物を
作って何とかするしか。



215 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 10:29:14 ]
gcc -m32 hoge.c でいいんじゃないか?

216 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 06:11:12 ]
4.4.3

217 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 12:28:56 ]
GCC開発者らがGoogleの「Go言語」をサポートする方針を発表
sourceforge.jp/magazine/10/01/29/0250228

218 名前:デフォルトの名無しさん [2010/02/02(火) 19:20:20 ]
>>217
ブランチ、既にできてるよ。> gccgo

219 名前:デフォルトの名無しさん [2010/02/02(火) 19:21:42 ]




220 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 20:11:27 ]
goってgccに入れるほどのもんなの?

221 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 20:12:43 ]
政治的な圧力はあったかもね。

222 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 20:22:23 ]
単にぐぐるがメンテナを出しただけだろ?

223 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 23:11:44 ]
llvmじゃなくてgcc、というのが面白い。
ライセンス的にllvmの方が好まれると思ったんだが

224 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 23:26:35 ]
adaとか使ってる人いるの?
金さえ出せばなんでも入れてもらえるんじゃない?

225 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:01:39 ]
Google勤務のgccコミッターが何人もいたはず。


226 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:12:26 ]
>>223
llvmはgccのbackendに出来るし。

227 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:54:01 ]
>>224
カネじゃダメだろ
人とコードを出さないと

228 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:55:22 ]
逆に言えば、人とコードの切れ目が縁の切れ目

229 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 01:10:11 ]
C#とかは、金と人は出せるが、コードが出せないMSだからか。納得。



230 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 01:23:58 ]
MS は自前で開発環境用意して囲い込みしたいからだろ。
と、マジレス

231 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 23:09:07 ]
arm用gcc遅いなんとかしろ

232 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 10:16:35 ]
arm社に文句言え

233 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 10:45:29 ]
ARM社に言ってもしょうがないだろ
IARとか、RVDSはもっと速いのかな?

234 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 15:55:30 ]
なぜgccにはstricmpが無いんだ?アホなのか?

235 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 15:57:47 ]
コンパイラの問題じゃないだろ

236 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 19:55:21 ]
strcasecmpがあるから

237 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 20:15:07 ]
strcmpiじゃなかったっけ
まあ今となっては良い思い出

238 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 21:40:15 ]
>>234,236,237
コンパイラとライブラリは切れば切れる関係。

例えば同じ Windows 上の gcc でも、Cygwin と MinGW で使える関数が
違うでしょ。



239 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 23:17:07 ]
ところでnewlibって何なの?
こういうネーミングはやめてほしいんだが
このセンスはさすがに引く
古くなったらどうすんだよ



240 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 11:09:27 ]
最近は年末にリリースされてるから

241 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 17:00:11 ]
それならclibだと。

242 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 17:56:29 ]
clubt.jp/product/92651_3621255.html

243 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 02:55:25 ]
>>234
STRing Ignore Compareってw
センスの悪い命名…

244 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 14:11:16 ]
i は Ignore なのか?
case Insensitive の i だと思った
悪い命名なのは疑いようがないけど

245 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 23:46:25 ]
sprintfおせーぞ
gccだけおせーんじゃ
なんとかしろ

246 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 23:53:27 ]
文句言う前に、自分で早いsprintfを書けばいいのに

247 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 00:29:39 ]
std::sprintfとかsprintfと紛らわしい
関数作るんじゃねーよ

248 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 03:13:31 ]
>>231=>>234=>>245=>>247だとすると、
何のプラットフォームでどんなものを作ってるのか、大体予想つくな

249 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 21:20:29 ]
>>248
こういう発言ってついったの方が楽しいのにね



250 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 07:09:00 ]
笑われてるだけでしょ

251 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 14:34:01 ]
>>250
笑うなよ

252 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 18:55:54 ]
gccスレでぐっちてる時点で...

253 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 16:26:44 ]
>233
ARM固有の最適化部分のメインコミッターのほとんどはARM社からお金もらっている人々だよ
最適化で、いつまでたってもARM純正に勝てないのはARM社がコントロールしてるから

ARMのプラットホーム使わないといけない人のほとんどは、gccの中身なんて弄ってる余裕が無いよ
ARMを使ったPCが普及すれば、変わると思うけど



254 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 22:12:55 ]
昔、玄箱スレでgccはARMよりPPCのが効率よいコード吐くって話があったけど、
状況変わらず?
ARMの命令セットがやや特殊なせいなのかな

255 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 22:21:04 ]
>>254
自社のコンパイラより効率的なバイナリを
生成するコンパイラは、排除するって明言しているから
どうにもならないよ。



256 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 07:57:43 ]
gccの文字列処理おせーんだよ

なんでgcc3.4でSSE4.2に対応してねーんだよバカ

257 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 08:01:10 ]
おそい書き方したお前が悪い

258 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 12:45:50 ]
>>256
gcc4使えばいいじゃん。

259 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 02:57:51 ]
pc1:
2.95.3
3.3.6

pc2:
4.3.4
4.4.3

二つずつ入れてて計4つ

>>256
使い分けりゃいいじゃん。



260 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 14:06:45 ]
gccの文字列処理ってどこを指すの?

261 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 16:41:37 ]
さあ、ビルトイン関数のことかも

262 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 10:12:29 ]
>>260
printfの警告とか。

263 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 13:27:36 ]
ストリーミング命令使ったstr系関数の変態最適化ってやってるんだっけ

264 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 00:17:34 ]
gccは
char buf[256] = {0};って記述しても
0に初期化されることはない

腐ってやがる

265 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 00:31:09 ]
>264
バージョンはいくつですか

266 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 03:05:21 ]
>>264 んなこたーない

267 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 04:30:31 ]
起動時にbssをクリアしてないとか

268 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 18:19:47 ]
>>264
いつの時代のgcc?

269 名前:デフォルトの名無しさん [2010/03/10(水) 18:20:46 ]
char buf[256] = {0};
で、後ろの255バイトも自動的にゼロクリアされるのは
Cの仕様?それともgccのやさしさ?



270 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 19:20:51 ]
>>269
Cの仕様

271 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 22:41:05 ]
>>269
{1}のケースもどうなるか理解しといた方がいいよ。

> the remainder of the aggregate shall be initialized implicitly
> the same as objects that have static storage duration.


272 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 05:07:16 ]
binutils 2.20.1

273 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 07:47:11 ]
binutils-2.16.1

274 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 13:40:41 ]
mallocだと0フィルされる保証はない?

275 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 13:53:06 ]
普通、確保されるだけじゃないの?
callocなら0フィルされると思うけど

276 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 13:53:09 ]
今時gcc使ってるやつは莫迦

277 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:21:50 ]
>276
は、何を使ってるのよ


278 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 00:00:29 ]
sourceforge.jp/projects/freshmeat_ack/
かな?

279 名前:デフォルトの名無しさん [2010/03/15(月) 00:17:30 ]
codesourceryのg++ってdo_global_ctorsとかstartup関連がないみたいなんですけど、
自分で実装するとき、.init_arrのグローバルコンストラクタを呼び出す以外にやることありますかね?

あと、libc(newlib)の初期化とかもやらないといけなさそうですが、方法がわからない。

codesourceryでstl使ったプログラムかけた人いたら教えてください。



280 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 10:56:04 ]
>>274
無い。
セキュリティホールになるってんでゼロ梅してた時期もあったけど。

281 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 11:08:15 ]
セキュリティホールってより、暴走の原因とか

282 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 11:37:41 ]
>>281
それはない。
それはただのバグだ。

283 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 18:31:56 ]
不定値前提で安定したプログラム作れないほうがよっぽど

284 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 18:48:52 ]
0クリアするくらいならdeadbeefで埋めたほうがまし

285 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:00:57 ]
新規割り当てメモリを初期化しない場合のセキュリティーホールというのは
上位権限のプロセスが開放したメモリにある情報を読めるかもしれないとい問題

286 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:01:25 ]
フフフフフフフフフフフフフフフ

287 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:06:26 ]
oppai

288 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:09:27 ]
>>285
そりゃライブラリ側の仕事でなくOSの仕事だろう

289 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:14:24 ]
malloc(3)の話だから、OSの仕事も含むのは普通。



290 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 00:23:13 ]
char buf[256] = {0};
ってやるとgccだとmemset関数を呼び出す
糞実装になってるw

アホだろw


291 名前:デフォルトの名無しさん [2010/03/17(水) 00:24:54 ]
そこでmemsetを呼び出さない処理系を教えてくれ






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

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

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