view CbC/GCC.md @ 42:2f33bc3a5b9b

backup 2021-02-13
author autobackup
date Sat, 13 Feb 2021 00:10:03 +0900
parents e12992dca4a0
children
line wrap: on
line source

# CbC on GCC について

## 最近のmacOSの場合
[GCC9onMac](https://growi.cr.ie.u-ryukyu.ac.jp/CbC/GCC/GCC9onMac)を見よう

## インストール方法

- まずはMercurialリポジトリから GCC を取得

```
 % hg clone ssh://one@www.cr.ie.u-ryukyu.ac.jp/hg/CbC/CbC_gcc (保存先。指定しない場合./CbC_gccになる)
```

- 次にインストール先のディレクトリを作る。ついでにそこに移動。 (!! 必ずCbC_gccの外に作ってね! !!)
```
 % mkdir (いんすとーるするとこ)
 % cd (↑でつくったとこ)
```

- OSX Maverics以降の場合は GMP, MPFR, MPCが必要。configure実行前にインストールする必要がある。
  - gcc4.9.0ではGMP 4.2以上, MPFR 2.4.0以上 MPC 0.8.0以上が要求される。
  - homebrewでインストールする場合、それぞれのformula名はgmp,mpfr,libmpcです。

- configureを実行する。この時、インストール先のディレクトリに移動済みであることを確認すること。
```
 % (GCCとってきた場所)/configure CFLAGS="-g3 -O0" --prefix=$PWD \
     - -disable-nls --disable-bootstrap --enable-languages=c \
     - -enable-checking=tree,rtl,assert,types
```
- 各オプションについて
    - -g3  
gdbでのmacroの展開を可能にする。
    - -O0  
最適化のカット。
    - --prefix=dir  
インストール先のディレクトリ指定。
    - --disable-nls  
gettextのl10nをoffに。
    - --disable-bootstrap  
通常GCCは3回ビルドされるがこれを1回だけに限定。
    - --enable-languages
使用する言語の指定。
    - --enable-checking  
デバッグ用の指定。browse_tree,debug_rtx,assertがonになる。


- makeする
```
 % make && make install
```

- インストールされたかチェックする。
```
 % (インストールした場所)/bin/gcc --version
```
正しくインストールされていればバージョンが見れるはず。見れたら適当なコードで正しく動くか確認すること。

## gdbで動かす場合の手順
- まず動かすときの引数を得る

```
 % (CbC_GCC) (source file) -v |& grep cc1
```
これで実際に実行されるコマンドと引数が取れるので引数だけコピーする。

- gdbを動かす
```
 % gdb --args (さっきコピーしたものを貼る)
```
これでうごくはず。正しく動かない場合はmakeがちゃんとできているか、configureのオプションを間違えていないかなどを確認する。

## lldbで動かす場合の手順
実行時の引数は一緒なのでgdbで動かす場合のとこ見て。
- lldbを動かす
```
 % lldb (gccのパス)
```
- 実行
```
 (lldb) r (コピーしたやつ)
```

## gdbのちょっとしたテクニック
### 何度も引っかかるタイプのブレークポイントの最後の一回が見たいとき
- まずコンテニューかけまくる
```
 (gdb) c 9999
```
- おそらくは9999回もコンテニューせずに実行が終了する。ここでbreak pointの情報を見る
```
 (gdb) info b
```
見たいとこが何回止まったのかを確認する。already hit 〜 とかかかれているはず。
- 最後の一回で止まるように仕向ける
通常実行したらさっき見た数字分break pointを通過するということなので、その回数-1回分無視するようにする。
```
 (gdb) ignore (break pointの番号) (さっきの数字-1)
```
これで止まるはず。