Solaris 2.x への移行

第 15 章 コンパイラ、リンカ、デバッガ

この章では、コンパイラ、リンカ、デバッガについて説明します。この章の内容は次のとおりです。

コンパイラ

SunOS 4.x から Solaris 2.6 に移行する開発者にとって最も大きな変更点は、C コンパイラがバンドルされなくなったことです。コンパイラをバンドルしない理由の 1 つに、動的なカーネルがあります。動的なカーネルでは、必要に応じて自動的にデバイスが追加されるので、カーネルの再構築にコンパイラを使用する必要がありません。

ANCI C コンパイラは、アンバンドル製品の Sun WorkShopTMに含まれています。このコンパイラ製品は、Solaris 2.6 のオブジェクト形式である ELF 形式で実行可能ファイルを作成します。lintlint ライブラリもアンバンドルです。

Source Compatibility Guide』では、SunOS 4.x C コンパイラ (Sun C) によって実装された C 言語と『ANSI Programming Language C』(ANSI C) に定義されている C 言語の違いについて説明しています。これらの違いは、Sun C コンパイラ用のソースを ANSI C 準拠のコンパイラに移植するとき必要になります。

コンパイラオプションの相違

表 15-1 は、SunOS 4.x Sun C と ANSI C のコンパイラを Solaris 2.6 Sun WorkShop C++ 4.2 コンパイラと比較しています。これは単に情報を提供するための一覧で、デフォルトの Solaris 2.6 リリースで利用できる機能を説明するものではありません。


注 -

表 15-1 では、『American National Standard Information Systems - Programming Lnaguage XX3.159-1989, approved December 14, 1989』に基づく情報を示します。


次の点に注意してください。

表 15-1 C コンパイラオプションの比較

オプションまたはフラグ 

Sun C 

ANSI C 

Sun WorkShop C++ 4.2 

説明 

-A symbol

No 

Yes 

Yes 

cppassert を含む

-a

Yes 

Yes 

-xa

基本ブロックの実行回数を数える  

-align

Yes 

Yes 

No 

ページ揃え (ld)

-assertx

Yes 

Yes 

-z

リンク時の assert を指定する

-BX

Yes 

Yes 

Yes 

バインディングタイプを指定する (SunOS リリース 5.6 のライブラリに対してのみ) 

-bnzero

Yes 

Yes 

No 

非ゼロ AR を生成する

-C

Yes 

Yes 

No 

cpp のコメントを残す

-c

Yes 

Yes 

+Yes 

.o ファイルを生成

-cg87

Yes 

Yes 

No 

オプションを -cg87 に設定

-cg89

Yes 

Yes 

Yes 

オプションを -cg89 に設定

-dryrun

Yes 

Yes 

Yes 

ドライバによって構築されるコマンドを表示 

-Dx

Yes 

Yes 

+Yes 

cpp にシンボル x を定義

-d

Yes 

Yes 

No 

共通の定義の強制 (ld)

-dalign

Yes 

Yes 

Yes 

double はダブルワードで整列されると仮定する 

-dl

Yes 

Yes 

No 

長いデータセグメント参照を生成 

-d[y|n]

-BX-BX

Yes 

動的リンク [yes|no]  

-E

Yes 

Yes 

+Yes 

cpp によるソースの実行

-e

No 

No 

No 

ld のエントリポイント

-F

-O*

-O*

+No 

最適化指令  

-f

No 

No 

No 

浮動小数点サポート 

-fast

Yes 

Yes 

Yes 

最高性能のためのオプション  

-fsingle

Yes 

No 

No 

浮動小数点数は単精度 

-fsingle2

Yes 

No 

No 

倍精度でない浮動小数点数として浮動小数点数を渡す 

-fnonstd

Yes 

Yes 

Yes 

標準でない浮動小数点数オプション 

-fstore

Yes 

No 

Yes 

記憶時に書き込みの強制 

-G

No 

No 

Yes 

-dn オプションで利用できない共用ライブラリの作成

-g

Yes 

Yes 

+Yes 

dbx 用に情報を生成

-go

Yes 

No 

No 

adb 用に情報を生成

-H

Yes 

Yes 

Yes 

インクルードしたファイルのパスを出力 

-h name

No 

No 

Yes 

内部識別子としての名前を使用。 soname がリンカに渡される

-help

Yes 

Yes 

-flags

オプションの表示  

-Ix

Yes 

Yes 

+Yes 

x を追加してパスを組み込む  

-J

sun3 

No 

No 

switch|case 用にロングオフセットを生成 

-KPIC

-PIC

-PIC

Yes 

ポジションに依存しないコード 

-Kpic

-pic

-pic

Yes 

ショートオフセットによる PIC

-Kminabi

No 

No 

No 

ABI 準拠コード 

-libmil

Yes 

Yes 

-xlibmil

-fast の一部として libm.il を渡す

-lx

Yes 

Yes 

Yes 

オブジェクトライブラリの読み込み (ld 用)

-Lx

Yes 

Yes 

Yes 

ld ライブラリパスに x を追加

-M

Yes 

Yes 

No 

依存事項の収集 

-M mapfile

Yes 

No 

No 

リンカに mapfile を渡す

-misalign

Yes 

Yes 

Yes 

整列されていない Sun-4 データを処理 

-N

Yes 

No 

No 

共有にしない 

-n

Yes 

No 

No 

共有にする 

-native

Yes 

Yes 

Yes 

適切な -cg オプションの使用

-noc2

Yes 

Yes 

No 

peephole (のぞき穴) を最適化しない 

-nolibmil

Yes 

Yes 

-xnolibmil

-fastlibm.il を渡さない

-o file

Yes 

Yes 

+Yes 

出力ファイルの名前の設定 

-O[1,2,3,4]

Yes 

Yes 

-x0[1,2,3,4]

最適化されたコードの生成 

-O

Yes 

Yes 

+Yes 

最適化されたコードの生成  

-P

Yes 

Yes 

+Yes 

cppを使用してソースを実行し .i に出力

-PIC

Yes 

No 

-KPIC

ロングオフセットで pic コードを生成

-p

Yes 

Yes 

+Yes 

prof のデータを収集

-pg

Yes 

Yes 

-xpg

gprof のデータを収集

-pic

Yes 

Yes 

-Kpic

ショートオフセットの pic コード

-pipe

Yes 

No 

No 

一時ファイルのかわりにパイプを使用 

-purecross

Yes 

No 

No 

VROOT にスラッシュを入れない  

-Qdir x

Yes 

Yes 

-Y*

x からコンパイラパスを探す 

-Qpath x

Yes 

Yes 

-Y*

-Qdir と同じ

-Qn

No 

No 

Yes 

バージョンスタンプ情報を追加しない 

-Qy

No 

No 

Yes 

バージョンスタンプ情報を追加する  

-qdirx

Yes 

Yes 

No 

x からコンパイラパスを探す  

-ql

No 

No 

No 

lprof 用にデータを収集

-qp

-p

-p

-p

prof 用にデータを収集

-qpath x

Yes 

Yes 

No 

-Qdir と同じ

-Qoption cpp x

Yes 

Yes 

Yes 

プログラム cpp にオプション x を渡す

-Qoption iropt x

Yes 

Yes 

Yes 

プログラム iropt にオプション x を渡す

-Qoption cg x

Yes 

Yes 

Yes 

プログラム cg にオプション x を渡す

-Qoption inline x

Yes 

Yes 

No 

プログラム inline にオプション x を渡す

-Qoption as x

Yes 

Yes 

No 

プログラム as にオプション x を渡す

-Qoption asS x

Yes 

Yes 

No 

プログラム asS にオプション x を渡す

-Qoption ld x

Yes 

Yes 

Yes 

プログラム ld にオプション x を渡す

-qoption cpp x

Yes 

Yes 

No 

プログラム cpp にオプション x を渡す

-qoption ccom x

Yes 

Yes 

No 

プログラム ccom にオプション x を渡す

-qoption lintl x

Yes 

Yes 

No 

プログラム lint1 にオプション x を渡す

-qoption iropt x

Yes 

Yes 

Yes 

プログラム iropt にオプション x を渡す

-qoption cg x

Yes 

Yes 

Yes 

プログラム cg にオプション x を渡

-qoption inline x

Yes 

Yes 

No 

プログラム inline にオプション x を渡す

-qoption cat x

Yes 

Yes 

No 

プログラム cat にオプション x を渡す

-qoption c2 x

Yes 

Yes 

No 

プログラム c2 にオプション x を渡す

-qoption as x

Yes 

Yes 

No 

プログラム as にオプション x を渡す

-qoption asS x

Yes 

Yes 

No 

プログラム asS にオプション x を渡す

-qoption ld x

Yes 

Yes 

Yes 

プログラム ld にオプション x を渡す

-Qproduce .o

Yes 

Yes 

Yes 

形式 .o ファイルの生成 (オブジェクトファイル)

-Qproduce .s

Yes 

Yes 

Yes 

形式 .s ファイルの生成 (アセンブラソース)

-Qproduce .c

Yes 

Yes 

No 

形式 .c ファイルの生成 (C ソース)

-Qproduce .i

Yes 

Yes 

Yes 

形式 .i ファイルの生成 (cpp 後の C ソース)

-qproduce .o

Yes 

Yes 

Yes 

形式 .o ファイルの生成 (オブジェクトファイル)

-qproduce .s

Yes 

Yes 

Yes 

形式 .s ファイルの生成 (アセンブラソース)

-qproduce .c

Yes 

Yes 

No 

形式 .c ファイルの生成 (C ソース)

-qproduce .i

Yes 

Yes 

Yes 

形式 .i ファイルの生成 (cpp 後の C ソース)

-r

Yes 

Yes 

No 

再配置可能にしてリンカに渡す 

-R

Yes 

Yes 

No 

テキストセグメントにデータをマージする  

-R

No 

No 

Yes 

実行時リンカに対する検索ディレクトリの指定 

-S

Yes 

Yes 

+Yes 

.s ファイルのみを生成

-s

Yes 

Yes 

Yes 

Strip (4.1)。リンカに渡す

-sb

Yes 

Yes 

-xsb

コードブラウザのための情報の収集 

-strconst

No 

Yes 

No 

文字列リテラルを読み出し専用データセグメントに置く 

-sun2

Yes 

No 

No 

Sun-2TM システム用のコードの生成

-sun3x

Yes 

No 

No 

Sun-3x システム用のコードの生成  

-sun386

Yes 

No 

No 

Sun386iTM システム用のコードの生成

-sun3

Yes 

No 

No 

Sun-3TM システム用のコードの生成

-sun4c

Yes 

No 

No 

Sun-4cTM システム用のコードの生成

-sun4

Yes 

No 

No 

Sun-4TM システム用のコードの生成

-target

Yes 

No 

-xtarget

ターゲットアーキテクチャを x に設定 

-temp=dir

Yes 

Yes 

Yes 

temps のディレクトリを dir に設定

-time

Yes 

Yes 

Yes 

実行回数を報告 

-u

Yes 

Yes 

No 

シンボル引数を undef(ld) として入力

-Ux

Yes 

Yes 

+Yes 

cpp シンボル x の定義解除

-v

Yes 

Yes 

Yes 

詳細モード 

-v

No 

No 

Yes 

厳密なセマンティクスチェック 

-V

Yes 

Yes 

+Yes 

プログラムのバージョンの報告  

-W

No 

No 

No 

他のコンポーネントへの引数 

-w

Yes 

Yes 

Yes 

警告を出力しない  

-X[t,a,c,s]

No 

Yes 

No 

互換性オプション  

-Y

No 

No 

No 

パス名を構成要素に変更  

-yx

Yes 

No 

No 

シンボルの追跡  

-z

-assert

-assert

No 

リンカで assert をオンにする

-#

-v

-v

No 

詳細モード 

-EOF

No 

No 

No 

ファイル引数 

C コンパイラには 表 15-2 に示すような形式のファイル名引数を使用できます。

表 15-2 C コンパイラによって使用されるファイル名拡張子

接尾辞 

ファイル形式 

.a

オブジェクトライブラリ 

.il

インライン展開ファイル 

.o

オブジェクトファイル  

.so

共有オブジェクト  

.s

アセンブラソース  

.S

cpp 用のアセンブラソース

.c

C ソース 

.i

cpp 後の C ソース

「file.X=.Y」はファイル 「file.X」を読み込みますが、接尾辞「Y」があるかのようにそのファイルを扱います。

リンカ

Solaris 2.6 ではリンクエディタ ld(1) に対していくつかの変更があります。最も重要な変更は新しい ELF のファイルフォーマットを処理する機能です。


注 -

ライブラリと実行可能プログラムを構築するには、リンカを直接起動することよりもコンパイラドライバによる方法をお勧めします。コンパイラは、リンカが必要とする多数のファイルを自動的に供給します。


リンクエディタオプションの相違

新しいリンカでリネームされたオプションもあれば同じものもあり、また不要になったオプションもあります。表 15-3 では SunOS 4.x の ld を Solaris 2.6 の ld コマンドと比較します。

表 15-3 に続く節で、リンク作業がオプションの相違によってどのように影響を受けるかについて説明します。

表 15-3 ld オプションの比較

SunOS 4.x のオプション 

Solaris 2.6 での変更 

注 

-align datum

-M mapfile

mapfile と異なるセクションの使用

-assert definitions

デフォルト 

 

-assert nodefinitions

-znodefs

警告ではなく致命的エラーを発行 

-assert nosymbolic

-zdefs

警告ではなく致命的エラーを発行 

-assert pure-text

-ztext

警告ではなく致命的エラーを発行 

-A name

変更なし 

dlopen(3X)dlclose(3X) はこの動作に接近可能

-Bdynamic

-Bdynamic

共用ライブラリの取り込みにのみ適用される。動的にリンクされた実行可能プログラムを構築するには -dy (デフォルト) を使用。「実行可能ファイルの作成」を参照。

-Bnosymbolic

-zdefs

 

-Bstatic

-dn & -Bstatic

動的なリンカを完全に除去するには、-dn オプションを指定しなければならない。アーカイブライブラリを取り込むために動的モードで -Bstatic を使用 (トグルとして使用。「実行可能ファイルの作成」を参照)。

-Bsymbolic

-Bsymbolic

このオプションを付けて-assert nosymbolic も取得する。

-d -dc -dp

デフォルト 

オフに設定するには、SVR4 で -b オプションを使用しなければならない。

-D hex

-M mapfile

mapfile には、希望する結果を達成するためにいろいろなメカニズムが含まれる。

-e entry

-e entry

 

no -e

-G

共有オブジェクトを作成する。 

-lx[.v]

-lx

共用ライブラリのメジャー番号が示すバージョンだけが現在サポートされている。 

-Ldir

-Ldir

dir は実行可能プログラムに記録されない。かわりに、-R オプションを使用。

-M

-m

 

-n

デフォルト 

SVR4 の実行可能プログラムのフォーマットは、ディスクイメージを -n として圧縮

-N

変更なし  

 

-o name

-o name

 

-p

デフォルト 

-M mapfile で取り消し可能。

-r

-r

 

-S

変更なし 

 

-s

-s

 

-t

変更なし  

 

-T hex

-M mapfile

mapfile には、希望する結果を達成するためにいろいろなメカニズムが含まれる。

-Tdata hex

-M mapfile

mapfile には、希望する結果を達成するためにいろいろなメカニズムが含まれる。

-u name

-u name

 

-x

変更なし  

 

-X

変更なし  

 

-y sym

変更なし 

 

-z

デフォルト 

-z としての SVR4 実行可能プログラムフォーマットのデマンドページ

共用ライブラリの作成

Solaris 2.6 で共用ライブラリを作成するには、-G オプションを指定する必要があります。SunOS 4.x では、-e オプションなしで共用ライブラリを作成することをリンカが自分で判断しますが、Solaris 2.6 では共用ライブラリがエントリポイントを持つ可能性があるため、このオプションは使用できなくなりました。

実行可能ファイルの作成

-Bdynamic-Bstatic オプションはまだ利用できますが、その動作はかなり異なります。現在では、これらのオプションは実行可能バインディングではなくライブラリのインクルードを指します。実行可能バインディングは、Solaris 2.6 で新しい -dy-dn オプションでのみ排他的に設定されます。-dy オプションがデフォルトです。これは、動的にリンクされた実行可能ファイルを作成するために必要です。-dn オプションは、静的にリンクされた実行可能ファイルを作成するために必要です。

-Bdynamic-Bstatic オプションは、-dy オプションを使用したときだけ適用されます。 -Bdynamic はリンクエディタに共用ライブラリを含めるように指示し、-Bstatic はアーカイブライブラリを含めるように指示します。これらのオプションは、次の -Bdynamic または -Bstatic オプション指定が現れるまで、-l 引数を管理する切り替え (トグル) として機能します。

次の例に、同様の実行可能プログラムを作成するのに使用できる SunOS 4.x と Solaris 2.6 コマンドを示します。

ライブラリ検索パスの指定

SunOS 4.x では、-L オプションを付けて指定したディレクトリはリンク時に検索され、その情報は実行時に使用するために保持されていました。この動作は現在では、 -L-R オプションに分けられています。 -L オプションはリンク時に検索するディレクトリを指定し、-R オプションはリンカに対して、実行時に使用するために保持する検索パスを指示します。詳細については、「検索パスの規則」を参照してください。

-Bdynamic-Bstatic オプションと同様に、 -L オプションの位置には意味があります。これは、それに続く -l オプションにだけに適用されます。

検索パスの規則

動的リンカと実行時リンカが SunOS 4.x リンカによって使用されたのとは異なるアルゴリズムを使って検索パスを決定します。

以下の例では、SunOS 4.x と Solaris 2.6 の動的リンカおよび実行時リンカの検索パスを比較します。Solaris 2.6 では、リンクエディタと実行時リンカの検索パスは LD_LIBRARY_PATH 設定値の影響を受けることに注意してください。

SunOS 4.x リンカ検索パス

LD_LIBRARY_PATH=dirlist1 がある Solaris 2.6 リンカ検索パス

LD_LIBRARY_PATH=dirlist1, dirlist2) がある Solaris 2.6 リンカ検索パス

バージョン番号

SunOS 4.x は、共用ライブラリに対してメジャーとマイナーの両方のバージョン番号をサポートしていました。Solaris 2.6 は、メジャーバージョン番号だけをサポートします。バイナリ互換性のサポートについては、メジャーおよびマイナーバージョン番号は SunOS 4.x 共用ライブラリで認識されます。これらのライブラリは、SunOS 4.x ソフトウェアにあったのと同じメジャーおよびマイナーバージョン番号を保持するために必要となります。

表 15-4 は、SunOS 4.x および Solaris 2.6 の共用ライブラリのバージョンを示します。

表 15-4 共用ライブラリの例

SunOS 4.x 

Solaris 2.6 

libc.so.1.7

libc.so.1

libdl.so.1.0

libdl.so.1

SunOS 4.x システムソフトウェアにおいては、 -l オプションを指定した場合、build environment linker はメジャーおよびマイナー番号をともに持つライブラリを検索しました。たとえば、-ldl を指定した場合、ライブラリ、libdl.so.1.0 がリンクされます。Solaris 2.6 環境では、メジャー番号はサポートされていますが、デフォルトのリンクエディタはバージョン番号を無視します。前の例では、build envrionment linker は現在では libdl.so と特定のバージョンのファイルを指すシンボリックリンクを検索します。

リンカによって参照された時、デフォルトでは、動的に実行可能なオブジェクトまたは共有オブジェクト中の dependency レコードは関連する共有オブジェクトのファイル名です。依存性の指定をより一貫した方法にするために、共有オブジェクトは実行時に参照されるべきファイル名をそれ自身に記録することができます。これはライブラリファイルをリンクする時に -h オプションによって指定します。

Solaris 2.6 では、シンボリックリンクはほとんどのライブラリに対して作成されています。メジャー番号をつけて新しい共用ライブラリを構築し、それから最もよく使用するライブラリのバージョンを指すシンボリックリンクを作成してください。

新しいユーティリティの dump(1) (「ファイルのバックアップと復元」を参照) により、オブジェクトファイルのデバッグ、または静的および動的リンクのチェックが容易になります。dump -L オプションは、実行可能プログラムに含まれる実行時リンカに必要な情報を表示します。この情報は、ELF ファイルの動的セクションに含まれます。 RPATH エントリは、ld. の -R オプションにより指定された検索パスを表示します。

例を以下に示します。

examples% cc -G -o libx.so.1 -h libx.so.1 libx.o

examples% cp libx.so.1 /mylibs
examples% ln -s /mylibs/libx.so.1 /mylibs/libx.so
examples% dump -Lv libx.so.1

libx.so.1:

  **** DYNAMIC SECTION INFORMATION ****
.dynamic :
[INDEX] Tag      Value
[1]     INIT     0x3b8
[2]     FINI     0x3f4
[3]     SONAME   libx.so.1
[4]     HASH     0x94
[5]     STRTAB   0x33c
[6]     SYMTAB   0x14c
[7]     STRSZ    0x62
[8]     SYMENT   0x10
[9]     PLTGOT   0x10404
[10]    PLTSZ    0xc
[11]    PLTREL   0x7
[12]    JMPREL   0x3ac
[13]    RELA     0x3a0
[14]    RELASZ   0x18
[15]    RELAENT  0xc

ライブラリが他の動的ライブラリを必要とするときは、次の例に示すように、RPATH と共に動的ライブラリを指定するようにします。

次の例では prog.c をコンパイルし、(前の例で構築された) libx.so を動的にリンクし、バイナリが実行のためカレントディレクトリ情報を保持するように指定します。この例は、コンパイル済みプログラムの prog.c についての dump 出力を示します。ここで、前の例の SONAME フィールドに格納された情報は、prog により NEEDED として示されます。prog が実行されると、libx.so.1 は、libx.so でも、異なるバージョンにリンクされます。

examples% cc -o prog prog.c -L/mylibs -R/mylibs -lx
example% dump -Lv prog

prog:

  **** DYNAMIC SECTION INFORMATION ****
.dynamic :
[INDEX]   Tag   Value
[1]  NEEDED   libx.so.1
[2]  NEEDED   libc.so.1
[3]  INIT     0x1b1ac
[4]  FINI     0x1b248
[5]  RPATH    /mylibs
[6]  HASH     0x100e8
[7]  STRTAB   0x17f90
[8]  SYMTAB   0x12be0
[9]  STRSZ    0x31e1
[10] SYMENT   0x10
[11] DEBUG    0x0
[12] PLTGOT   0x2b25c
[13] PLTSZ    0x30
[14] PLTREL   0x7
[15] JMPREL   0x1b180
[16] RELA     0x1b174
[17] RELASZ   0x3c
[18] RELAENT  0xc

デバッガ

この節ではデバッグツールの変更について説明します。

dbxdbxtool

dbxdbxtool は、デフォルトのシステムソフトウェアには含まれません。アンバンドル製品の Sun WorkShop には、これらの改良版が含まれています。

adbkadb

adbkadb は、Solaris 2.6 オペレーティングシステムにバンドルされていて、SunOS 4.x のツールと同じ機能を提供します。kadb はマルチプロセッサで使用できるよう改良されました。kadb のプロンプトにはプロセッサ ID が表示されます。以下の例では、プロセッサ ID が 0 になっています。

Solaris 2.6 環境で容易にカーネルのデバッグを行うには、次のようにします。

kadb マクロ

以下の kadb マクロは、マルチスレッドカーネルといっしょに使用すると特に有効です。

現在のスレッドを表示します。現在のスレッドポインタは、SPARC グローバルレジスタ g7 です。

kadb[0]: <g7$<thread

threadlist は、システム内のすべてのカーネルスレッドのスタックトレースを表示します。このリストは非常に長くなることがあります。

kadb[0]: $<threadlist

mutex は、所有スレッドのアドレスを表示します。この例では、グローバルで危険なドライバ mutex を使用しています。

kadb[0]: unsafe_driver$<mutex

kadb[0]: moddebug/W 0x80000000

moddebug は、モジュールのロードを監視できるようにします。デバッグ専用に使用する moddebugの有効な値については、<sys/modctl.h> の最後を参照してください。

動作中のカーネルのデバッグ

稼働中のカーネルをデバッグするには、次のコマンドを使用します。

# adb -k /dev/ksyms /dev/mem

/dev/ksyms は、稼働中のカーネルの完全な名前を含む擬似デバイスです。

truss コマンド

truss は、実行したシステムコール、受信シグナル、ハードウェア障害などを追跡するために開発された新しいユーティリティです。truss には、SunOS 4.x の trace(1) コマンドにはなかった、フォークされたプロセスの追跡機能やマルチスレッドプロセスの処理機能を含む重要な機能がいくつか追加されています。

次の例は、date コマンドの追跡結果を要約したものです。-c オプションを指定すると、truss は行単位の追跡を表示せず、システムコール、シグナル、フォルトの回数をカウントして、その合計を表示します。

example% truss -c date
Fri Sep 18 14:31:30 PDT 1992
syscall      seconds   calls  errors
_exit            .00       1
read             .00       7
write            .00       1
open             .03      12
close            .00      12
time             .00       1
brk              .01       4
lseek            .00       1
fstat            .00       4
ioctl            .00       1
execve           .00       1
mmap             .01      17
munmap           .00       8
                ----     ---    ---
sys totals:      .05      70      0
usr time:        .03
elapsed:         .28

truss オプションの詳細については、truss(1) のマニュアル・ページを参照してください。Solaris 2.6 ではこの他に pmap(1) のような proc(4) を基本としたデバッグツールが数多く用意されています。