gccのソースはどこ(その4)

続いてtoplev.cを読んでいきます。
まず確認したいのは、インクルードヘッダでしょうか。

takk@deb9:~/gcc/gcc-6-6.3.0/gcc-6.3.0/gcc$ grep ^#include toplev.c
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "backend.h"
#include "target.h"
#include "rtl.h"
#include "tree.h"
#include "gimple.h"
#include "alloc-pool.h"
#include "timevar.h"
#include "tm_p.h"
#include "optabs-libfuncs.h"
#include "insn-config.h"
#include "ira.h"
#include "recog.h"
#include "cgraph.h"
#include "coverage.h"
#include "diagnostic.h"
#include "varasm.h"
#include "tree-inline.h"
#include "realmpfr.h"   /* For GMP/MPFR/MPC versions, in print_version.  */
#include "version.h"
#include "flags.h"
#include "insn-attr.h"
#include "output.h"
#include "toplev.h"
#include "expr.h"
#include "intl.h"
#include "tree-diagnostic.h"
#include "params.h"
#include "reload.h"
#include "lra.h"
#include "dwarf2asm.h"
#include "debug.h"
#include "common/common-target.h"
#include "langhooks.h"
#include "cfgloop.h" /* for init_set_costs */
#include "hosthooks.h"
#include "opts.h"
#include "opts-diagnostic.h"
#include "asan.h"
#include "tsan.h"
#include "plugin.h"
#include "context.h"
#include "pass_manager.h"
#include "auto-profile.h"
#include "dwarf2out.h"
#include "ipa-reference.h"
#include "symbol-summary.h"
#include "ipa-prop.h"
#include "gcse.h"
#include "tree-chkp.h"
#include "omp-low.h"
#include "hsa.h"
#include "dbxout.h"
#include "sdbout.h"
#include "xcoffout.h"           /* Needed for external data declarations. */
takk@deb9:~/gcc/gcc-6-6.3.0/gcc-6.3.0/gcc$

たくさんありますが、これ全部gccのヘッダなんでしょうか。

適当にヘッダを選んでエディタで開いてみると、

takk@deb9:~/gcc/gcc-6-6.3.0/gcc-6.3.0/gcc$ head backend.h
~省略~

This file is part of GCC.

~省略~

GCCの一部です、の一文あります。

toplev.cからインクルードしている全部のヘッダにこの文が書かれているか確認してみましょう。

#includeの””の間の文字列を引っこ抜いて一覧にして、grepします。

takk@deb9:~/gcc/gcc-6-6.3.0/gcc-6.3.0/gcc$ perl -ne'if(/#include..(.*)\".*/){print"$1\n"}' toplev.c | xargs grep -l 'This.file.is.part.of.GCC'
grep: config.h: そのようなファイルやディレクトリはありません
system.h
coretypes.h
backend.h
rtl.h
tree.h
gimple.h
alloc-pool.h
timevar.h
grep: tm_p.h: そのようなファイルやディレクトリはありません
optabs-libfuncs.h
grep: insn-config.h: そのようなファイルやディレクトリはありません
ira.h
recog.h
cgraph.h
coverage.h
diagnostic.h
varasm.h
tree-inline.h
realmpfr.h
flags.h
grep: insn-attr.h: そのようなファイルやディレクトリはありません
output.h
toplev.h
expr.h
tree-diagnostic.h
params.h
reload.h
lra.h
dwarf2asm.h
langhooks.h
cfgloop.h
hosthooks.h
opts.h
opts-diagnostic.h
asan.h
tsan.h
plugin.h
context.h
pass_manager.h
auto-profile.h
dwarf2out.h
ipa-reference.h
symbol-summary.h
ipa-prop.h
gcse.h
tree-chkp.h
omp-low.h
hsa.h
dbxout.h
sdbout.h
xcoffout.h
takk@deb9:~/gcc/gcc-6-6.3.0/gcc-6.3.0/gcc$

あるものを探しても見づらいだけですね。ヒットしないファイルの一覧にします。

grepでヒットしないファイルの一覧を得るには、-Lを使います。

takk@deb9:~/gcc/gcc-6-6.3.0/gcc-6.3.0/gcc$ perl -ne'if(/#include..(.*)\".*/){print"$1\n"}' toplev.c | xargs grep -L 'This.file.is.part.of.GCC'
grep: config.h: そのようなファイルやディレクトリはありません
target.h
grep: tm_p.h: そのようなファイルやディレクトリはありません
grep: insn-config.h: そのようなファイルやディレクトリはありません
version.h
grep: insn-attr.h: そのようなファイルやディレクトリはありません
intl.h
debug.h
common/common-target.h
takk@deb9:~/gcc/gcc-6-6.3.0/gcc-6.3.0/gcc$

config.h等見つからなかったファイルは分かりませんが、各ファイル、This file is~と書いてないだけで、gccのソースっぽかったです。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA