  The Linux GCC HOWTO
  Daniel Barlow <daniel.barlow@linux.org>
  v1.17, 28 February 1996
  앐Y <nakano@apm.seikei.ac.jp>
  v1.17j2, 29 January 1997

  ̕ł linux ̉ GNU C RpCƃRpCɕKvȃCu
  ݒ肷@ɂċLĂ܂B܂̊pvO
  ̃RpCANAsуfobOɂĂTvqׂ܂B
  ̓̕ȇ Mitch D'Souza  GCC-FAQ 瓾̂łA
   GCC-FAQ ̑ƂȂ̂łB܂ ELF-HOWTO ̑
  ̗pĂA̕ ELF-HOWTO ̑啔û
  m󒍁FDaniel  ELF-HOWTO ̒҂ł܂Bn̔ł͌
  [XƂĂ͍ŏ̂̂ɂȂ܂io[Wԍ͂͌Ȃ
  ܂񂪁A RCS IɂĂ̂ȂłjB
  z҂Ă܂B

  : ͂̕ȂȑOɏꂽ̂Ȃ̂ŁA܂ǂ Linux 
  ɂ͂Ă͂܂Ȃӏ܂B (JF Project)

  1.  ͂߂

  1.1.  ELF  a.out

   Linux ɂvOJ͂ǂǂωĂ܂B Linux
  ŎsłoCiɂ͓ނ̌`݂AVXe̐ݒɂĂ
  g邱Ƃo܂B HOWTO ǂޑOɁAǎ҂̃VXe
  ͂ǂgĂ邩𒲂ׂĂƗǂł傤B

  āAǂ΂킩ł傤H `file' R}hgAł
  ifile /bin/bash ̂悤ɂ܂jBELF ̎st@CȂuELFv Ƃ
  񂪃bZ[Wɂ܂A a.out ̎st@CȂ
  uLinux/i386vƂ܂ޕ\o܂B

  ELF  a.out ̈ႢɂĂ͂̌̕قǂ̕ŏڍׂɉ
  B ELF ̕VtH[}bgłAʂɂ͂ǂ̂Ƃ
  ܂B

  1.2.  ̕ɂ

  쌠Ȃǂ̖@IȌɊւẮA̍̕ŌɎĂ܂B܂
  Usenet ŊԔȎAoOłȂƂoOƕ񍐂 C 
  ɂĂ̖m炵AK݂Ȃ܂肷邱ƂɊ
  @IȌxĂ܂B

  󒍁FłÂ̕͏kł :-)B

  1.3.  tHgɂ

  ̕ PosstscriptAdviAhtml ̂ǂꂩłǂ݂́̕AeLXgł
  ǂł菭X̃tHg邱ƂɂȂ܂Bt@CAR
  }hAR}hóA\[XR[hȂǂ̈p typewriter tH
  gŁȂׂ̋e emphasized tHgŎ܂B

  ֗ȍpӂ܂B dvi  Postscript ł index ̐͏͂
  ̔ԍłBHTML ł͐͒PɏoĂԂłANbNɂĂ
  ̓eɔԂƂo܂BeLXgłł͖{ɁuPȂvԂɂȂ
  ܂܂B̌`ŌĉI
  ɂ Bourne VFpĂ܂B C VFǵ̕A

       $ FOO=bar; export FOO

  ƂȂĂƂ

       % setenv FOO bar

  ƓǂݕςĉB

  vvg $ łȂ # pĂƂł́ÃR}h root 
  sKv邱ƂĂ܂B񂱂̕ł̗s
  ʂɂӔC͎͂Ƃ܂BK^ :-)

  2.  

  2.1.  ̕

  ̕ Linux HOWTO V[Ÿł̂ŁA Linux HOWTO u
  ƂiႦ <http://sunsite.unc.edu/pub/linux/docs/HOWTO/> j
  ΂ǂɂł͂łB HTML Łi炭͑VŁj]
  ł <http://ftp.linux.org.uk/~barlow/howto/gcc-howto.html> ǂ
  B

  2.2.  ̕

  gcc Ɋւȕ͔zz\[Xiqj texinfo ` *.info
  t@CƂēĂ܂BCD-ROM A[ȃlbg[N
  płi邢͐hj͔zzpbP[Wɓ untar
  AKXKvȂ̂ /usr/info ɃRs[邾łBȏ̂s
  \ȕ́A tsx-11 <ftp://tsx-11.mit.edu:/pub/linux/packages/GCC/> 
  ̕ł܂B͏ɍŐVłłƂ͌܂
  B

  libc Ɋւ񌹂͓܂B GNU libc ɂ info t@Ct
  ĂAɂ Linux  libc ̓eistdio ājrIm
  ɋLqĂ܂B܂ man y[W
  <ftp://sunsite.unc.edu/pub/Linux/docs/> ̃A[JCu Linux ɏ
  ꂽ̂ŁAVXeR[iZNV 2j libc ̊֐iZNV
  3jɊւLq񂠂܂B

  2.3.  GCC

  ̑I܂B

  1. Linux p GCC zzłɃoCi`iRpCς݁j
     <ftp://tsx-11.mit.edu:/pub/linux/packages/GCC/> ɒuĂ܂B
     ̕Ă鎞_ł̍ŐVł 2.7.2 ŁA
     gcc-2.7.2.bin.tar.gz Ƃt@CłB

     󒍁F|󎞂ł 2.7.2.1 ŐVłłB

  2. Free Software Foundation  GCC \[X̍ŐVzzł GNU
     archives <ftp://prep.ai.mit.edu/pub/gnu/> ɂ܂B̃o[
     W͏ɃoCizẑ̂ƓłƂ͌܂񂪁A݂
     Ƃ͓ 2.7.2 łB Linux GCC eiXĂĂl
     X́AŐVo[W̃RpCeՂɂ邽߂̍ƂĂ
     A configure XNvgłׂĂ̐ݒ肪܂B tsx-11
     <ftp://tsx-11.mit.edu:/pub/linux/packages/GCC/> ɂLpȃpb`
     uĂ邱Ƃ܂̂ŁA`FbNĂ܂傤B

  IȃR[hȊORpCɂ͈ȉ̂悤Ȃ̂KvɂȂ
  ܂i͂قƂǂ̏IȃR[hɂKvłjB

  2.4.  C Cuƃwb_t@C

  ŕKvɂȂ̂́AVXe ELF  a.out ̂ǂpĂ
  A邢͓ǎ҂ǂpɂĕς܂B libc 4  5
  ɃAbvf[gƂ ELF-HOWTO ǂł悤ɂĉB
  肵̂ƓƂɂ͂łB

  ȉɎ̂܂łƓ tsx-11
  <ftp://tsx-11.mit.edu:/pub/linux/packages/GCC/> ɂ܂B

     libc-5.2.18.bin.tar.gz
        ELF LCuƐÓINCuACN[ht@C
        B C Cu math CuĂ܂B

     libc-5.2.18.tar.gz
        L̃\[XłBwb_t@C肷ɂ .bin ̃pbP[W
        KvłB C CuŃRpC邩oCig
        ŔYނ܂񂪁AقƂǂ̏ꍇ̓oCiĝ
        łB NYS  shadow password 𗘗pꍇ͎ŃC
        uKv邩܂B

     libc-4.7.5.bin.tar.gz
        a.out `̋LCuƐÓINp̃CułB o[
        W 4.7.5  C ъ֘ÃCuƂȂĂ܂B̃pb
        P[W͏L̃o[W 5 CuƋł悤ɂȂĂ
        ܂Aa.out `̃vO̍쐬◘pȂ͂̃pb
        P[W͕Kv܂B

  2.5.  ֘Ac[ias, ld, ar, strings j

  ܂ł̂̂ƓA tsx-11
  <ftp://tsx-11.mit.edu:/pub/linux/packages/GCC/> 肵܂B݂
  o[W binutils-2.6.0.2.bin.tar.gz łB

  󒍁F|󎞂̍ŐVł 2.7.0.3 łB

   binutils  ELF Ή̂̂܂B܂ŐVł libc 
  ELF ł̂ŁA a.out  libc  ELF  libc ƈꏏɎgKv
  傤B݂ł C CůJ͂قƂ ELF x[XɂȂĂĂ
  ܂A a.out ɂ闝RȂ ELF p悤ɂ
  傤B

  3.  GCC ̃CXg[Ɛݒ

  3.1.  GCC ̃o[W

  ݗpĂ GCC ̃o[W̓VFvvg gcc -v Ɠ
  邱Ƃł킩܂B܂̃R}hɂČ݂̃ZbgAbv ELF
   a.out 킩܂B̃VXeł͈ȉ̂悤ɂȂ܂B

       $ gcc -v
       Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.7.2/specs
       gcc version 2.7.2

  o͂̂ӂׂL[[h͈ȉ̂悤Ȃ̂łB

     i486
         gcc  486 vZbTɃrhꂽƂĂ܂B
        ǎ҂̃VXeł 386  586 \邩܂B
        ̃VXêǂꂩŃRpCꂽoCi͑̂ǂ̃`bvł
        s邱Ƃo܂B 486 gcc ŃRpCꂽvO
        ł́A 486 `bvōɓ삷悤ȃR[hɖߍ
        ܂Ă܂B̂Ƃɂ 386 ł̎s̐\ɗLQȉe
        o邱Ƃ͂܂񂪁AoCĩTCY͏X傫Ȃ
        B

     box
        ͂܂dvł͂܂ŁÂ̂ɒuςĂ
        islackware debian ȂǁjƂA܂Ȃ
        ܂i܂Ŝ i486-linux ̂悤ɂȂ܂jB
        g gcc rhꍇɂ́ADȒlZbgĊiDǂ
        邱Ƃł܂i͂Ă܂ :-)jB

     linux
         linuxelf  linuxaout ƂȂ邱ƂAXɖʓ|ȂƂ
         gcc ̃o[WɂĂ̈ӖςĂ܂B

        o  linux  2.7.0 ȍ~̃o[WȂ ELFȂȌꍇ a.out
           Ӗ܂B

        o  linuxaout  a.out ΉłB̃Gg linux ̓e
           2.7.0 ȍ~ a.out  ELF ɕύXꂽƂɂ蓱
           B 2.7.0 Õo[Wł͂̃Gg
           邱Ƃ͂܂B

        o  linuxelf Ƃ̂͌ÂłBꂪ̂͂قƂǂ̏
            ELF oCio͂悤ɐݒ肳ꂽ 2.6.3  gcc łB
           Ƃ gcc 2.6.3  ELF R[h쐬ɂăoO
           邱ƂmĂ܂BĂ̕\ꂽꍇ̓Ab
           vO[hE߂܂B

     2.7.2
        o[WԍłB

  Ď ELF R[ho͂ 2.7.2 ł gcc gĂ邱Ƃ
  Ȃ܂B̂I

  3.2.  CXg[̃fBNg

  gcc ̃CXg[̎ɂ悻ĂꍇAoCipbP[Ẅ
  Ƃ gcc CXg[ꍇAt@CVXêǂT
  gcc ̂m肽Ƃ邩܂BȉdvȂ̂
  ܂B

  o  /usr/lib/gcc-lib/target/version/ Ƃ̃TufBNgɂ̓RpC
     {̂̑啔uĂ܂BRpC{̂̃vOƃo[
     WɓL̃CuACN[ht@C܂B

  o  /usr/bin/gcc ̓RpC̃hCołBR}hC͂ꂪ
     s܂B̃o[W̃RpCL̂悤ȃfBNg
     ɕʁXɃCXg[ĂꍇÃvOŃo[W
     g邱Ƃo܂BftHg̃o[W\ɂ gcc
     -v Ƃ܂B̃o[Wpꍇɂ gcc -V version Ƃ
     Bȉɗ܂B

       # gcc -v
       Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.7.2/specs
       gcc version 2.7.2
       # gcc -V 2.6.3 -v
       Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.6.3/specs
       gcc driver version 2.7.2 executing gcc version 2.6.3

  o  /usr/target/(bin|lib|include)/B̃^[QbgVXeiႦ
     a.out  ELFA邢͊ẽNXRpCȂǁjɉ gcc 
     CXg[ꍇALinux ȊÕCu binutils
     iasA ld ȂǁjAwb_t@CȂǂ͂̃fBNgɒu
     Bނ gcc CXg[ĂꍇłA܂vɂ
     ֘At@Cu킯łBɂȂꍇ
     /usr/(bin|lib|include) ɂ܂B

  o  /lib  /usr/lib Ȃǂ native ȃVXê߂̃Cuu
     fBNgłBRpCȊÕAvP[V̒ɂ́A
      /lib/cpp u邱Ƃz肵Ă̂܂i X ł
     g܂jBȂꍇ /usr/lib/gcc-lib/target/version/ R
     s[Ă邩V{bNN𒣂܂傤B

  3.3.  wb_t@C̍ݏ

  pҊe /usr/local/include ɃCXg[̂ƁA Linux
  Ŏɗpwb_t@C͈ȉ 3 ɂȂ܂B

  o  /usr/include/ Ƃ̃TufBNgɂwb_t@ĈقƂ
      H. J. Lu 񋟂Ă libc oCipbP[Ŵ̂łBu
     ƂǁvƏ̂́AɂɃwb_t@CupbP[W
     邩łBႦ curses  dbm ȂǂłBÂ libc pb
     P[W curses  dbm ɂȂĂ܂AŐV̂̂ł
     ʃpbP[WɂȂĂ܂B

  o  /usr/include/linux  /usr/include/asm fBNg̃t@Ci
      <linux/*.h>A <asm/*.h> ̂悤ɃCN[h܂jB
     ̃fBNg̓J[l\[Xc[̂ linux/include/linux
     fBNg linux/include/asm ւ̃V{bNNƂȂ
     ܂BXGȃvOJꍇ̓CXg[ĂK
     v܂B̓J[l̃RpĈ߂̂̂ł͂Ȃ
     ̂łB

     J[l\[XWJ邾ł͂߂ŁA make config sKv
     ܂B̃R}hɂĂ͂߂č쐬 <autoconf.h> 
     ̃t@CɂĎQƂĂ܂AJ[l̃o[W
     Ă asm fBNgV{bNNɂȂĂāA make
     config ̂Ƃɂ̂݃N쐬悤ɂȂĂ܂B

     ăJ[l\[X /usr/src/linux ȉɓWJ̍Ƃ
     ̂悤ɂȂ܂B

       $ cd /usr/src/linux
       $ su
       # make config
       [ɓ܂B̌ɑăJ[l̂łȂ
       ł̓CɂKv͂܂肠܂B]
       # cd /usr/include
       # ln -s ../src/linux/include/linux .
       # ln -s ../src/linux/include/asm .

  o  <float.h>  <limits.h>A <varargs.h>A <stdarg.h>A <stddef.h> 
     t@C̓RpC̃o[WɂēeςĂ
     BĂ /usr/lib/gcc-lib/i486-box-
     linux/2.7.2/include/ A邢͎悤ȖȌꏊɒuĂ
     B

  3.4.  NXRpC̍쐬

  3.4.1.  Linux ŎsoCi𑼂̃zXgŃRpC

  gcc ̃\[XR[h΂̒ INSTALL t@C̎wɏ]
  ł͂łBRpCsRs[^̎ނ XXX ł
  configure --target=i486-linux --host=XXX Ƃ make ΁Aׂ
  Ă͂łBۂ̃RpCɂ Linux L̃wb_
  t@CAJ[l̃wb_t@CKvɂȂ܂ANXAZu
  ANXJ̃\[X
  <ftp://tsx-11.mit.edu/pub/linux/packages/GCC/> 肵Ăꂼr
  hKv܂B

  3.4.2.  MSDOS ̎soCi Linux ŃRpC

  [B "emx" pbP[WƂ "go" GNXe_ȂǂgƉ\ɂȂ
  łB <ftp://sunsite.unc.edu/pub/Linux/devel/msdos> Ă݂ĉ
  B

  ͂ƂȂ̂ŁA\ɂĕۏ؂邱Ƃ͂ł܂
  B

  4.  ڐAƃRpC

  4.1.  `V{

  茳 gcc łǂȃV{`Ă邩𒲂ׂɂ -v X
  Cb` gcc s܂B̏ꍇ͈ȉ̂悤ɂȂ܂B

       $ echo 'main(){printf("hello world\n");}' | gcc -E -v -
       Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.7.2/specs
       gcc version 2.7.2
        /usr/lib/gcc-lib/i486-box-linux/2.7.2/cpp -lang-c -v -undef
       -D__GNUC__=2 -D__GNUC_MINOR__=7 -D__ELF__ -Dunix -Di386 -Dlinux
       -D__ELF__ -D__unix__ -D__i386__ -D__linux__ -D__unix -D__i386
       -D__linux -Asystem(unix) -Asystem(posix) -Acpu(i386)
       -Amachine(i386) -D__i486__ -

  Linux L̋@\ɈˑR[hĂꍇ͂̕ȉ̂悤
  Ɉ͂ĂƗǂł傤B

       #ifdef __linux__
       /* ... funky stuff ... */
       #endif /* linux */

  ̖ړIɂ __linux__ p܂B linux ͗pׂł͂܂B
  ҂ POSIX ł͂ȂłB

  4.2.  RpCւ̎w

  RpC̃XCb`Ɋւ镶 gcc  info ɏĂ܂B
  iEmacs  C-h i Ƃ `gcc' IvVIт܂jBCXg[
  ɗpoCizzpbP[WɂĂ͂ꂪĂȂÂ
  肷邱Ƃ܂B̏ꍇ gcc ̃\[XA[JCu
  <ftp://prep.ai.mit.edu/pub/gnu> ~[TCg肵A̒
  info Rs[Ďg܂傤B

  gcc  man y[W gcc.1 ́AꌾŌĂ܂ƓeÂłB
  man y[Ŵ̂̒łxĂ܂B

  4.2.1.  RpC̃tO

  gcc ̃R}hC -On Əo͂R[hœK邱
  ł܂B n ͐łiȗ 1 Ƃ݂Ȃ܂jBӖ̂ n
  ̒lƂꂼ̒lɑ΂IȌʂ̓RpC̃o[Wɂ
  ς܂Aʏ 0 iœKȂj 2ij邢 3i
  Ăj܂łӖ܂B

  gcc ł͂̒l -f  -m IvVQɓWJ܂B -O Iv
  V̂ꂼ̃xɂǂ̂悤ȃIvVΉĂ邩𒲂ׂ
  ߂ɂ gcc  -v  -Q IvVĎs܂i҂̃IvV
  ̓}jAɂ͍ڂĂ܂jBႦΎ̏ꍇ -O2 ɑ΂Ă͈ȉ
  ̂悤ɂȂ܂B

       enabled: -fdefer-pop -fcse-follow-jumps -fcse-skip-blocks
       -fexpensive-optimizations
                -fthread-jumps -fpeephole -fforce-mem -ffunction-cse -finline
                -fcaller-saves -fpcc-struct-return -frerun-cse-after-loop
                -fcommon -fgnu-linker -m80387 -mhard-float -mno-soft-float
                -mno-386 -m486 -mieee-fp -mfp-ret-in-387

  gĂRpCł̍łœKxlw肵
  iႦ -O6 Ȃǁj̓́Aōx̍œKw肵̂Ɠ
  Ȃ܂BzzR[hɂ̂悤ȂōœKw肷̂
  ǂACfBAƂ͌܂B[XRpCōXȂ
  œKꂽꍇAR[h܂ȂȂ\邩
  B

  gcc 2.7.0  2.7.2 ̃[ÚA̔ł -O2 ɂ̓oO邱
  ɋCĉB̓Iɂ strength reduction 삵Ȃ̂łB
  gcc ăRpCꍇ̓pb`𓖂Ă邱ƂɂĂ̖͉
  ܂BȂꍇ̓RpC̍ۂɏ -fno-strength-reduce w
  肷悤ɂĉB

  4.2.1.1.  vZbTŗL̃tO

  -O IvV̂ǂ̃xłw͂܂񂪁A -m ͗LpȃtOQ
  łB̍ł̂ -m386  -m486 ŁAꂼ 386  486 ɗL
  R[ho͂悤Ɏw肵܂B̃IvVw肵ăRpC
  R[h́Aꂼꑼ̃`bvł삵܂B 486 ̃R[h͑傫
  Ȃ܂A386 ̏łxȂ邱Ƃ͂܂B

  ݂͂܂ -mpentium 邢 -m586 ƂIvV݂͑܂B
  Linus ɂ -m486 -malign-loops=2 -malign-jumps=2 -malign-
  functions=2 gƃACĝ߂̑傫ȃMbv邱ƂȂ
  486 ̃R[hœKł邻łiPentium ł͂ACg
  KvƂ܂jB Cygnus  Michael Meissner ͂Ă܂B

       lIɂ -mno-strength-reduce  x86 ̃R[hɎw肷
       x͌シƎvistrength reduction ̃oÔƂ
       Ă킯ł͂ȂƂɒӂꂽB͂܂ʂ̘bł
       jB x86 CPU ł̓WX^s₷߁A gcc ŗp
       @iWX^Q spill WX^ƂȊOփO[v
       jƑłB strength reduction ł͏Z
       ZŒuۂɂ葽̃WX^gpB
       -fcaller-saves lɐ\ቺ̌ɂȂƍlB

       B -fomit-frame-pointer ͗Lɓꍇs
       ɓꍇƎvB̃IvV͑̃WX^蓖
       ĉ\ɂB x86 ߃Zbg߂l
       āAX^bN΃AhX̓t[΃AhX傫ȃX
       y[XKvƂBăvOŗpł I
       LbVȂȂĂ܂Bl -fomit-frame-pointer
       w肷ƃRpC̓X^bN|C^𖽗߃R[̂т
       Ĕzu邪At[ꍇ̓X^bNAL[^
       ߂ŎgĂ܂ƂɂȂB

  ̘b̍Ō͍Ă Linus ̌tŒ߂܂傤B

       ō̐\𓾂ɂ͎MႢ܂BeXgĉ
       B gcc RpCɂ͂̃IvV݂Ȃg
       ̂̈ȂɂƂẴxXgȍœKƂȂ͂
       B

  4.2.2.  Internal compiler error: cc1 got fatal signal 11

  VOi 11  SIGSEGV ܂́uZOgᔽvӖ܂Bʏ킱
  ̓vOŃ|C^AvOŊǗĂȂ̈
  ɏ݂sƂʂłBĂ gcc ̃oOł
  \܂B

   gcc îقƂǂ̕j͍ו܂ŃeXgꂽMׂ\tg
  EFAƌ܂B gcc ł͐̕Gȃf[^\△̃|C
  ^pĂ܂B܂ʏɓ钆ōłDG RAM ̃eX^[ł
  Ƃ̂łBoOČȂ΁iRpCĂэsȂ
  ƂɓƂŎ~܂̂łȂ΁j͑ԈႢȂgĂ
  n[hEFAiCPUAA}U[{[h܂̓LbVj̏QłB
  VXed̃`FbNpX邩ƂāA邢 Windows
  ŖȂ삷邩ƂĂ̏QoOƌĂ͂܂B
  ́weXgx͈ʂɉlƂ݂ȂĂ邩łiȔf
  ܂IjB܂J[l̃RpC `make zImage' ̓r
  ~邩ƂāAoOƌĂȂł --- 
  mɃoO܂񂯂ǂˁB `make zImage' ͂炭 200 ȏ
  t@CRpC܂BXm肽̂͂Ȕ͈͂Ȃ̂
  B

  oOČłA܂i]ނ炭́joONZv
  OA̖ɊւoO|[g FSF  linux-gcc [
  OXgɑ܂傤B gcc ̕ǂǂŁAނ炪KvƂ
  ɊւėĂɂ܂傤B

  4.3.  ڐA

  ŋ߂ł́w Linux ɈڐAĂȂvOƂA
  ͂ڐAׂl̂xƂĂ܂B :-)

  ^ʖڂɁBʂ Linux  100% POSIX 𖞂ɂ
  \[XXύX邾ŗǂ͂łBsȂύX̓vǑ
  ҂ɃtB[hobNƗǂł傤Bȍ~ `make' Ŏst@C
  ł悤ɂĂ炦邩܂B

  4.3.1.  BSD ni bsd_ioctl A daemon   <sgtty.h> j

  vO -I/usr/include/bsd ΃RpCłA܂ -lbsd
  ΃Nł܂i܂ Makefile  CFLAGS 
  -I/usr/include/bsd A LDFLAGS  -lbsd 킯łjB BSD
  `̃VOi̐U镑p邽߂ -D__USE_BSD_SIGNAL Kv
  ͂܂B -I/usr/include/bsd  <signal.h> CN[
  hΎIɑI܂B

  4.3.2.  uꂽvVOii SIGBUS , SIGEMT , SIGIOT , SIGTRAP ,
  SIGSYS  Ȃ j

  Linux  POSIX ɏĂ܂B POSIX Œ`ĂVOi
  ł͂܂B ISO/IEC 9945-1:1990 (IEEE Std 1003.1-1990) 
  B.3.3.1.1 p܂B

       uSIGBUSA SIGEMTA SIGIOTA SIGTRAPA SIGSYS ̊eVOi
       POSIX.1 폜܂B̃VOi̐U͎
       ĈقȂĂAKȕނłȂłB POSIX 
       ̎ł̃VOi𔭍s邱Ƃ͋Ă܂
       As󋵂͕Ȃ΂Ȃ܂񂵁AVO
       i̔sɊւ邠鐧LqĂKv
       Bv

  ȕ@͂̃VOi SIGUNUSED ƂčĒ`
  邱ƂłB@͂ĂR[hK #ifdef ̑g
  ͂ƂłB

  #ifdef SIGSYS
  /* ... non-posix SIGSYS code here .... */
  #endif

  4.3.3.  K & R ̃R[h

  GCC  ANSI ̃RpCłBݑ݂ C ̃R[h͂قƂ
   ANSI ł͂܂B K & R ̃R[hɊւ GCC ł邱Ƃ
  RpC̃tO -traditional t邱Ƃ炢łB
  ȃRg[邱Ƃ\łAG~[ĝ͊e
  ̓ɂ̎ɂȂł傤Bڂ gcc  info QƂĉB

  -traditional  gcc ̕@ς邾łȂAp𐶂邱Ƃɒ
  ĉBႦ -traditional ɂ -fwritable-string Lɂ
  ܂B̃XCb`ɂ蕶萔̓f[^̈ɏ܂܂iX
  Cb`ȂƃvOɂύXsȂeLXg̈ɏ܂
  ܂jBɂAvÕgpʂ܂B

  4.3.4.  vvZbT̃V{R[h̃vg^CvƏՓ˂

  肪Ȃ̂́Aėp̊֐ Linux ̃wb_t@Cł}NƂĒ
  `Ă邽߁AvvZbTR[h̓lȃvg^Cv錾F
  ߂ȂȂƂłBǂ̂ atoi()  atol() łB

  4.3.5.  sprintf()

  i SunOS ڐAۂɁjCȂ΂ȂȂ̂́A
  sprintf(string, fmt, ...) ̖߂l͑ Unix ł string ւ̃|C
  ^ł̂ɑ΂āA Linux ł́iANSI ɏ]j֏܂ꂽ
  ɂȂĂ邱ƂłB

  4.3.6.  fcntl  ȂǁB FD_*  ̒`͂ǂɂ́H

  <sys/time.h> Œ`Ă܂B fcntl pꍇ <unistd.h> 
  ɃCN[hKvł傤Bۂ̃vg^Cv͂Œ`
  Ă܂B

  ʂɁA֐ɕKv #include  man y[W SYNOPSIS ZNVɋL
  qĂ܂B

  4.3.7.  select()  x^CAEgƃvOEFCgȂ
  

  ̂ select()  timeout ͕ύX܂łBł}
  jAɂ͈ȉ̂悤ɏĂ܂B

       select() ͗^ꂽ timeout i΁jc
       Atime ̒lu邱ƂɂĕԂׂłB̓V
       Xȅ̃o[WŃCvgł傤B]
        timeout ̃|C^ select() ̌ĂяoɂĕύX
       ȂƂ肵R[ĥ͗ǂ܂B

  ̏킯łAȂƂł́B select() ߂ƂA
  timeout ɂ͑҂Ԃ̎c肪Zbg܂Bf[^Ō܂œ
  Ȃ timeout  0 ɂȂ܂̂ŁA timeout \̂̂܂܂ɂ
  x select() ĂԂƁAɐ䂪ԂėĂ܂Ƃ킯
  B

  ̖Cɂ select() ĂԓxɃ^CAEg̒l timeout
  \̂ɑĂΗǂ̂łB܂ł̃R[hȉ̂悤Ȃ̂
  A

             struct timeval timeout;
             timeout.tv_sec = 1; timeout.tv_usec = 0;
             while (some_condition)
                   select(n,readfds,writefds,exceptfds,&timeout);

  ̂悤ɕςĉB

             struct timeval timeout;
             while (some_condition) {
                   timeout.tv_sec = 1; timeout.tv_usec = 0;
                   select(n,readfds,writefds,exceptfds,&timeout);
             }

  Mosaic ̂o[Wł̖͂肪cĂƂ܂B]
  ñAj[VAlbg[N瓞f[^̑xƔ
  Ⴕŉ]̂łI

  4.3.8.  VXeR[荞܂

  4.3.8.1.  Ǐ

  vO Ctrl-Z Œ~ĂĊJi邢̓VOi𔭐
  鑼̏: Ctrl-C ɂ钆fqvZX̏IȂǁjƁAvO
   "interruputed system call"  "write: unknown error" ƌ悤
  bZ[Wo܂B
  4.3.8.2.  _

  POSIX ̃VXeł͌Â UNIX VOi`FbNǖʂ
  ȂĂ܂B Linux ͈ȉ̂悤ȃVOinhs܂B

  o  񓯊ȃ`FbNi^C}荞݂̍ہj

  o  VXeR[̖߂莞

  o  ȉ̃VXeR[̎s:

     o  ^[~iA\PbgApCv /proc ̃t@Cɑ΂
        select()A pause()A connect()A accept()A read()B

     o  ^[~iA\PbgApCvуCv^ւ write()B

     o  FIFOA PTY уVAC open()B

     o  ^[~iւ ioctl()B

     o  fcntl() ւ F_SETLKE R}hB

     o  wait4()A syslog()A ̑SĂ TCP  NFS B

   OS ł͈ȉ̂悤ȃVXeR[ΏۂɂȂꍇ܂B
  creat()A close()A getmsg()A putmsg()A msgrcv()A msgsnd()A
  recv()A send()A wait()A waitpid()A wait3()A tcdrain()A
  sigpause()A semop()B

  vOnhĂVOiVXeR[̓rŔ
  ƁÃVOinhĂяo܂Bnh̐䂪
  iVXeR[Ɂj߂ƁAVXeR[͎ɑ΂銄荞݂m
  A -1 ԂƂƂ errno = EINTR Zbg܂BvO
  ͂̂悤ȂƂNƂ͎vĂ܂񂩂AُI܂B

  Ώ@͓܂B

  (1) VOinhƂ SA_RESTART  sigaction tOɒ
  ܂BႦ

         signal (sig_nr, my_signal_handler);

  ̂悤Ȃ̂ȉ̂悤ɏ܂B

         signal (sig_nr, my_signal_handler);
         { struct sigaction sa;
           sigaction (sig_nr, (struct sigaction *)0, &sa);
       #ifdef SA_RESTART
           sa.sa_flags |= SA_RESTART;
       #endif
       #ifdef SA_INTERRUPT
           sa.sa_flags &= ~ SA_INTERRUPT;
       #endif
           sigaction (sig_nr, &sa, (struct sigaction *)0);
         }

  ͂قƂǂ̃VXeR[ɓKpł܂A read()A write()A
  ioctl()A select()A pauseA connect() ̊eVXeR[ɑ΂Ă
  EINTR ̃`FbNvOōsȂKv܂BȉQlɂ
  B

  (2) EINTR vOŖIɃ`FbNB

  read()  ioctl() ɑ΂̗܂B

  ܂ read() ̏ꍇłB

       int result;
       while (len > 0) {
         result = read(fd,buffer,len);
         if (result < 0) break;
         buffer += result; len -= result;
       }

  ̂悤ȃR[hȉ̂悤ɏ܂B

       int result;
       while (len > 0) {
         result = read(fd,buffer,len);
         if (result < 0) { if (errno != EINTR) break; }
         else { buffer += result; len -= result; }
       }

   ioctl() ̗łB

       int result;
       result = ioctl(fd,cmd,addr);

  ȉ̂悤ɏ܂B

       int result;
       do { result = ioctl(fd,cmd,addr); }
       while ((result == -1) && (errno == EINTR));

  BSD Unix ̃o[WɂẮAftHgŃVXeR[蒼
  ƂɂȂĂ邱Ƃ܂B̏ꍇVXeR[𒆒fɂ́A
  SV_INTERRUPUT  SA_INTERRUPT tOpKv܂B

  4.3.9.  ݉\ȕivO_ɒ~j

  GCC ̓[UMĂA萔͂܂Œ萔ƂĈ
  Ƃ݂ȂĂ܂B] GCC ł͕萔̓eLXgiR[hj̈
  ێ܂B̓vÕfBXNC[WɃy[WO܂
  iXbv̈ take up ɁĵŁA̕萔
  悤ƂƃZOgᔽƂȂ܂B͎dlłI

  ÂvȌꍇł͂ꂪɂȂ邱Ƃ܂BႦ
  mktemp() 𕶎萔ɂČĂяoꍇȂǂłB mktemp() ͈
  悤Ƃ邽߂łB

  Cɂ͓̕@܂B (a) -fwritable-string tăR
  pC gcc ɒ萔f[^̈ɕێ悤`B (b) ƂȂ
  萔łȂ strcpy āApB

  4.3.10.  execl()  s

  ԈĂяoĂ邩łB execl ̍ŏ͎̈s
  vOłBQԖڈȍ~̈͌ĂяovO argv zɂȂ
  ܂B argv[0] ̓vÕpX̂̂ł邱Ƃɒӂĉ
  B]execl ̌Ăяo͈ȉ̂悤ɏKv܂B

       execl("/bin/ls","ls",NULL);

  PɈȉ̂悤ɏ̂͊ԈႢłB

       execl("/bin/ls", NULL);

  ȂƂ a.out ̏ꍇ́ASZbgɃvOs
  ƁAˑĂ_Ci~bNCu\悤ɂȂĂ܂B
  ELF ł͂܂ƂȂ܂B

  ̃Cȕ񂪕KvłAƊȒPȃC^[tF[X
  ܂B_Ci~bN[h̐߂ ldd  man y[WĉB

  5.  fobOƃvt@CO

  5.1.  \hIeiXilintj

  Linux ł͍LpĂ lint ͂܂BقƂǂ̐l gcc 
  o warning ɖĂ邩łB炭 -Wall XCb`Ƃ
  ɂł傤B `Warnings, all' ̈ӖłB̃XCb
  `́Aǂ炩ƂƓ@tȂ́iwalljAz
  łˁB

  pubNhC lint 
  <ftp://larch.lcs.mit.edu/pub/Larch/lclint> ł܂Bǂ̂
  ǂɂĂ͎͒m܂B

  5.2.  fobO

  5.2.1.  vOɃfobO𖄂ߍނɂ

  RpCƃN̑SĂ̒iKɂ -g XCb`tA -fomit-
  frame-pointer XCb`͕tȂKv܂Bۂɂ͑SĂ̕
  RpCKv͂ȂAfobÔ݂ OK łB

  a.out ̋LCu -fomit-frame-pointer tăRpC
  Aɑ΂ gdb p邱Ƃ͂ł܂B -g IvV
  N̂Ƃɕt static NɂȂĂ܂̂͂R
  B

  ulibg.a ȂvƂbZ[WoăJȂꍇ
  ́A /usr/lib/libg.a Ȃ̂łB̓fobO\ɂȂĂ
   C CułB libc ̃oCipbP[WɓĂ邩A
  ́iŋ߂̔ł C Cuł́j libc ̃\[XR[hɓĎ
  ŃrhKv܂Bۂɂ͕͂KvȂAقƂǂ
  ꍇ /usr/lib/libc.a ɑ΂V{bNN𒣂΁AKvȏ
  ͓͂łB

  5.2.1.1.  ߍ܂ꂽfobOɂ

  GNU ̃\tgEFȂ -g tOԂŃRpCAN
  Ă܂B̂ߎst@C͋i΂ static Nj
  ȂĂ܂B͂܂肠肪ȂłˁB

  vO autoconf ō configure XNvgtĂꍇ
  ́A./configure CFLAGS= ܂ ./configure CFLAGS=-O2 Ƃ邱ƂŃf
  obOp̃R[htȂ悤ɂł܂B̑̏ꍇ Makefile 
  邱ƂɂȂł傤B ELF gĂꍇ̓vO
   -g ̗LɊւ炸_Ci~bNNƂȂĂ܂ strip 
  ΗǂłB

  5.2.2.  ɗ\tg

  gdb łLgĂ܂B\[X GNU archive sites
  <ftp://prep.ai.mit.edu/pub/gnu> AoCi tsx-11
  <ftp://tsx-11.mit.edu/pub/linux/packages/GCC> ł܂B xxgdb
   X p̃tgGhŁiĐ gdb CXg[ĂK
  v܂) A\[X <ftp://ftp.x.org/contrib/xxgdb-1.08.tar.gz>
  ɂ܂B

  UPS fobK Rick Sladkey ɂĈڐAĂ܂B X œ
  ܂A xxgdb Ƃ͈ĒPȂeLXgx[XfobK̃tgG
  hł͂܂B֗̕ȋ@\܂̂ŁAfobOƂsl
  ̓`FbNĂ݂Ɨǂł傤B Linux p̃RpCς݃oCi
  ƁAIWi UPS ̃\[XR[hւ̃pb`Ƃ
  <ftp://sunsite.unc.edu/pub/Linux/devel/debuggers/> ɂ܂BIW
  ĩ\[X <ftp://ftp.x.org/contrib/ups-2.45.2.tar.Z>.  łB

  fobOɕ֗ȃc[Љ܂傤B strace ̓vO
  sVXeR[\Ă܂B܂RpCς݂̃oCi
  ĂяopX\Ă̂ŁA\[XȂĂǂ̃t@C
  gĂ邩m邱Ƃł܂AvON
  ԁirace conditionj̃|[gĂȂǁA낢֗Ɏg
  ł܂BvOǂ̂悤ɓ삵Ă邩̊wKɂKĂ
  B strace ̍ŐVo[Wi 3.0.8j
  <ftp://ftp.std.com/pub/jrs/> ɂ܂B

  󒍁F݂ 3.1.0.1 ̂悤łB

  5.2.3.  obNOEhif[jvO

  T^Iȃf[vOł fork() sAevZXI
  BƃfobÕZbVƂԂɏIĂ܂܂B

  ԊȒPȕ@ fork Ƀu[N|CgZbgAv
  O~Ƃ 0 Ԃ悤ɋ邱ƂłB

       (gdb) list
       1       #include <stdio.h>
       2
       3       main()
       4       {
       5         if(fork()==0) printf("child\n");
       6         else printf("parent\n");
       7       }
       (gdb) break fork
       Breakpoint 1 at 0x80003b8
       (gdb) run
       Starting program: /home/dan/src/hello/./fork
       Breakpoint 1 at 0x400177c4

       Breakpoint 1, 0x400177c4 in fork ()
       (gdb) return 0
       Make selected stack frame return now? (y or n) y
       #0  0x80004a8 in main ()
           at fork.c:5
       5         if(fork()==0) printf("child\n");
       (gdb) next
       Single stepping until exit from function fork,
       which has no line number information.
       child
       7       }

  5.2.4.  core t@C

  Linux ̓u[g̐ݒł core t@CȂݒɂȂĂ܂B
  ݒɂꍇ́AVF̑gݍ݃R}hgčĐݒ肵Ă
  B C VFnitcsh Ȃǁjł

       % limit core unlimited

  Ƃ܂B Bourne VFnishAbashAzshApdkshjł͎̂悤ɂ
  B

       $ ulimit -c unlimited

  core t@C̖@ƕ֗ɂꍇiႦ΂ꎩg
  悤ȃfobKő̃vOf core t@CfobO
  ƂȂǁj́AJ[lXύXΉ\łB fs/binfmt_aout.c
   fs/binfmt_elf.c ̃R[h̒ɁAȉ̂悤ȕ͂łiV
  J[l̏ꍇłBÂJ[lł͏X grep Ă܂Kv
  ܂jB

               memcpy(corefile,"core.",5);
       #if 0
               memcpy(corefile+5,current->comm,sizeof(current->comm));
       #else
               corefile[4] = '\0';
       #endif

   0  1 ɕς memcpy(corefile+5.. ̍s̕LɂĂ
  B

  5.3.  vt@CO

  vt@COƂ̓vÔǂ̕łĂ΂Ał
  HĂ̂𒲂ׂ邱ƂłBʂȎԂgĂR[hœK
  ̂ɗǂ@łBvt@Csɂ̓^C~O񂪕KvȃIu
  WFNgt@C -p ăRpC܂Bo͂ꂽt@C
  𓾂ɂ gprof KvɂȂ܂ibinutils ̃pbP[WɓĂ
  ܂jBڍׂ gprof  man y[WĂB

  6.  N

  炩߂f肵Ă܂Ȁ͂̍\͕GɂȂĂ܂B݊
  ̂ȂoCǐ`邱ƁA static ȃNƋLCu
  gꍇ邱ƁAuNvƂtuRpČɍs
  ƁvƁuRpCꂽvOĂяoꂽƂɍs邱Ɓv
  ̈Ӗŗp邱Ɓiu[h(load)vƂtg
  BẗӖ) ȂǂłBłȂǂ񂾂΂̕
  育ႲႵĂ镔͏Ȃ͂łAقǐSzȂł
  B

  ȂƂȂ邽߂ɁAsɍs邱Ƃ́uI[
  hvƌĂԂƂɂāA̓ȅ͎͂ɏ܂BeuI
  NvƏĂ镶܂A̕ł́uINv͗p܂
  BvɁȀ͂ł̓RpC̍ŏIiKƂčsNɂĂ
  ݂܂B

  6.1.  LCu static ȃCu

  vO쐬̍ŏIiḰuNvƌĂ΂܂BSĂ̕i
  āAȂ̂ȂǂׂƂłBut@CJvƂ
  悤ȗނ̍Ƃ́ÃvOōs܂BĂ̂悤
  @\uiv̓Cǔ`Œ񋟂Ă܂Bʂ Linux V
  Xeł́ACu /lib  /usr/lib ɂ܂ȉꏊɂ邱
  Ƃ܂܂܂jB

  static ȃCupꍇ́AJ̓vOKvƂ镔i
  TAo͂st@Cɂ̕iRs[܂BLCu
  ꍇ͈Ƃs܂BJ͏o̓t@CɁũvO
  sƂɂ́A܂ꂱ̃Cu[hĂȂƂ
  ܂vƂbZ[W𖄂ߍ݂܂BĖ炩ɋLC
  upst@C̃TCY͏Ȃ܂B܂郁
  fBXNeʂȂ܂B Linux ɂ̃ftHg̐U
  ł́ALCu΂pAȂ static ȃN
  s܂Bst@CLCu`ɂ̂ static ɂȂ
  Ă܂ꍇ́AʒuɋLCũt@Cāia.out
  ł *.saA ELF ł *.so łjA炪ǂݍ݉\ɂȂĂ邩
  `FbNĂB

  Linux ł static ȃCu libname.a Ƃ悤ȖO
  ALCu libname.so.x.y.z ƂȂĂ܂B x.y.z ̓o[
  Wԍ܂BLCuɂ̓N邱ƂA
  ͏dvȋ@\Ă܂B܂ a.out 𗘗pݒł .sa Ƃ
  gqt@C͂łBWCu͋L`̂̂
  static Ȍ`̗܂܂Ă܂B

  vOǂ̂悤ȋLCuKvƂ邩𒲂ׂɂ ldd
  R}hiList Dynamic Dependenciesjp܂B

       $ ldd /usr/bin/lynx
               libncurses.so.1 => /usr/lib/libncurses.so.1.9.6
               libc.so.5 => /lib/libc.so.5.2.18

   WWW uEŨvO lynx  libc.so.5 iC Cuj
  libncurses.so.1 i[䃉Cu) pĂ邱ƂĂ܂B
  p鋤LCuȂ΁A ldd ̕\́ustatically
  linkednustatically linked (ELF)vƂȂ܂B

  6.2.  Cuɐq˂i sin()  ͂ǂɂ́Hj

  nm libraryname Ƃ libraryname QƂĂV{̃Xg\
  ܂B static ȃCuɂLCuɂLłBႦ
  tcgetattr() `Ă郉Cum肽ꍇƂ܂傤B
  ꍇ͂܂ȉs܂B

       $ nm libncurses.so.1 |grep tcget
                U tcgetattr

  U ́u`ĂȂiundefinedjvƂӖ܂B
  ncurses Cuł tcgetattr pĂ܂A`͂ĂȂ
  ƂɂƂɂȂ܂BĈȉ̂悤Ɏs܂B

       $ nm libc.so.5 | grep tcget
       00010fe8 T __tcgetattr
       00010fe8 W tcgetattr
       00068718 T tcgetpgrp

  W ́uア`iweak) vł邱Ƃ܂BȂ킿̃V{͒
  `Ă͂܂ÃCu̒`ɂď㏑邱Ƃ
  Ă̂łBʏ̒` T Ŏ܂itcgetpgrp łjB

  Ƃł̐߂̃^Cgɑ΂𓚂 libm(so|a) łB <math.h> Œ
  `Ă֐̖{̂͑S math Cuɂ܂BĂ
  悤Ȋ֐pɂ́AN̍ۂ -lm KvɂȂ킯łB

  6.3.  t@CT

  ld: Output file requires shared library `libfoo.so.1`

  ld Ȃǂ̃vOɂt@C̕@̓o[WɂĈق
  ܂BSẴo[WɂāA/usr/lib ͌ΏۂɓĂ
  ܂BȊÕfBNgCȗΏۂɂ΁A
  gcc  ld Ȃǂ -L IvVpĂB

  ŌȂ΁At@C̃fBNgɂ邩mF
  ĂB a.out ł -lfoo w肵ăNƁA ld ͂܂
  libfoo.sa iLCujTAs libfoo.a istatic C
  uj܂B ELF ̏ꍇ libfoo.soA libfoo.a ̏ɒT
  B libfoo.so ͒ʏ libfoo.so.x ւ̃V{bNNƂȂĂ
  B

  6.4.  ̃Cu

  6.4.1.  o[WǗ

  vOƓlACuɂoO͂̂ŁAԂƂƂɏC
  Ă܂B܂Vȋ@\ǉꂽA֐̎dlύXꂽÂ
  ̂폜ꂽ܂B̓CugpvOɂ͖
  łBÂdlɊÂĂꍇ͂ǂΗǂ̂ł傤H

  ăCuɂ̓o[WǗp܂BCuɑ΂
  sύXuiminor) v̂Ɓu傫imajorjv̂ɕ
  B minor ȂȕύXł́ÃCupvOƓ
  Ƃۏ؂邱Ƃɂ܂BCũo[W̓t@Cł킩
  悤ɂ܂Bi{̎Ƃ ELF ɂ͓Ă͂܂܂B
  R͌qBj libfoo.so.1.2  major o[W 1 ŁA minor o[W
   2 ł邱Ƃ܂B minor o[W͏X\
  Ƃ܂B libc ł́upb`xv minor o[WɒǉA
  Cu̖O libc.so.5.2.18 ̂悤ɂĂ܂B ASCII [ŕ\
  \ȕȂApł _ łĂ܂܂B

  ELF  a.out ̑傫ȈႢ̈́ALCu̍ɂ܂B
  ܂ȒP ELF ̂ق猩邱Ƃɂ܂傤B

  6.4.2.  ELF ČǂȂɁH

  ELF iExecutable and Linking Formatj͂Ƃ USLiUNIX System
  LaboratoriesjŊJꂽoCi`ŁA݂ł Solaris  System V
  Release 4 ŗpĂ܂B ELF ͈ȑO Linux ŗpĂ a.out
  `_ɕxł̂ŁA GCC  C CůJ҂͍
  N ELF  Linux ̕WoCi`ƂĂ̗p邱ƂɌ߂܂B

  6.4.2.1.  Ȃ񂾂āH

  ̐߂ `/news-archives/comp.sys.sun.misc' ɂ镶甲
  łB

       ELFiExecutable Linking Formatj SVR4 ɓꂽui
       ŐV́vIuWFNgt@C`łB ELF ̓[Uɂ
       g\łA straight COFF Ƌ͂łB ELF
       ł́AIuWFNgt@CCӂ̒ZNV
       Ȃ̂܂i܂TCY̗vfȂzƂ݂͂Ȃ
       ܂jB̃ZNV́iCOFF Ƃ͈قȂ) ܂
       ɒuKvȂA܂ԂCӂłB[UIuWFNg
       t@CɐVȃf[^𓱓΁AVZNV
       邾ŗǂ̂łB ELF ɂ͂܂ł̂̂肸Ƌ
       ͂ȃfobOxp̌`Ă܂B DWARF
       iDebugging With Attibute Record FormatjƌĂ΂Ă܂B
       ݂̂Ƃ linux ł͂̋@\͊Sɂ̓T|[gĂ
       iƂ͒XƌpłjB DWARF DIEiDebugging
       Information Entriesj̃NXg ELF oCi̒
       .debug ƂZNVɎ߂Ă܂BATCY
       Œ肳ꂽfobOƈقȂADWARF DIE ͂ꂼCӂ̒
       ̕GȑAXR[vɈˑc[`̃vO
       f[^ƂċLqĂ܂B DIE  COFF  .debug ZN
       Vł͕s\ł悤ȁAȏiC++ ̌p֌W
       XgȂǁjۗL邱Ƃł̂łB

       ELF t@C SVR4 iSolaris 2.0 ?j ELF ANZXCu
       ʂăANZX܂B̃Cu ELF Ŏ舵
       ɂȂĂ镔ɑ΂āAȒPōȃC^[tF[X
       񋟂Ă܂B̃Cup΁A ELF t@C
       ̂̂̂ȂĂς݂܂B Elf t@CƂăANZ
       Xꂽ UNIX ̃t@ĆAŏ elf_open() R[s
       ΁A͂̒g elf_foobar() R[ŃANZX邱Ƃ
       ł܂B܂ COFF [UĂ悤ɁAۂ
       fBXN̈ʒu߂Ă܂悤Kv͂̂łB

  ELF ̗L^sȓ_A a.out ̃VXe ELF VXeɃAbvO
  [hۂɕKvȓe ELF-HOWTO ɋLqĂ܂BɃJbg
  & y[Xg͂܂B ELF-HOWTO ́A̕ƓƂ
  ɂ͂łB

  6.4.2.2.  ELF LCu

  libfoo.so ̂悤ȋLCu쐬邽߂̊{IȎ菇͈ȉ̂
  ɂȂ܂B

       $ gcc -fPIC -c *.c
       $ gcc -shared -Wl,-soname,libfoo.so.1 -o libfoo.so.1.0 *.o
       $ ln -s libfoo.so.1.0 libfoo.so.1
       $ ln -s libfoo.so.1 libfoo.so
       $ LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH ; export LD_LIBRARY_PATH

  ɂ libfoo.so.1.0 ƂŐLCułAld ̂
  ̃Nilibfoo.sojƃ_Ci~bN[_̂߂̃Nilibfoo.so.1j
  쐬܂BeXgɂ̓JgfBNg LD_LIBRARY_PATH
  ɒǉ܂B

  CuƓAړKv܂B
  /usr/local/lib 肪Kł傤Bō悤ȃNꂼ
  蒼Kv܂B libfoo.so.1  libfoo.so.1.0 ̃N
  ldconfig ɂďɍŐV̂̂ɍXV܂Bʏ ldconfig ̓u[g
  vZẌꕔŎsĂ͂łB libfoo.so ̃N̓}jA
  ōXVKv܂B{ʂȕ̓CȗSāiwb_t@C
  Ȃǂ܂ށj𓯎ɃAbvf[gȂł傤Ȁꍇ
  libfoo.so -> libfoo.so.1 ƂN𒣂ĂA ldconfig ҂
  ɍאSɂĂ悤ɂĂ̂łȒPł傤BȂl
  ́Aɂނ̕svcȌۂɌ邱ƂɂȂł傤B
  ŁuĂȂvȂČȂ悤ɁI

       $ su
       # cp libfoo.so.1.0 /usr/local/lib
       # /sbin/ldconfig
       # ( cd /usr/local/lib ; ln -s libfoo.so.1 libfoo.so )

  6.4.2.3.  o[W̔ԍt sonameAV{bNN

  eX̃Cu soname ƂĂ܂BJCu
  ۂɂ soname ƁAsoCiɂ̓Cu
  t@Cł͂Ȃ soname ߍ܂܂BƃvO̎s
  ɁAI[_̓Nɗpꂽt@Cł͂Ȃ soname Ŏw肳
  t@CT܂BႦ libfoo.so ƂCu libbar.so
  Ƃ soname Ƃ\ŁA libfoo.so ɃNꂽv
  O͎s libbar.so ̕܂B

  Ӗ̖@\Ǝv܂H͓Cu̕o[WVX
  eɋ邽߂̌ƂȂ@\Ȃ̂łB Linux ɂ郉Cu
  @̃ft@NgEX^_[h libfoo.so.1.2 Ƃ悤Ȃ
  ŁAɑ΂ soname  libfoo.so.1 ƂȂ܂B̃CuW
  ̃CufBNgiႦ /usr/libjɒuƁA ldconfig
   libfoo.so.1 -> libfoo.so.1.2 ƂV{bNNAs
  ɓKȃt@Cp悤ɂ܂B܂ libfoo.so ->
  libfoo.so.1 ƂNKvŁAɂ ld ̓Nɗpׂ
   soname 邱Ƃł悤ɂȂ܂B

  CũoOCV@\ǉi܂ł̃vOɉe^
  Ȃ͈͂Łj肵Ƃɂ́A soname ͂̂܂܂ɂăt@C
  ύX̂łBCȕʌ݊ȂȂƂɂ soname ̔
  ₵܂B̏ꍇVo[W̃Cu̓t@C
  libfoo.so.2.0A soname  libfoo.so.2 ƂȂ܂B libfoo.so ̃N
  Vo[W֒Ȃ΃Cu̍XVɔ葱ׂĊ
  ƂɂȂ܂B

  ΂ɂ̋KŃCu̖sȂ΂ȂȂ킯ł͂܂
  񂪁AǂKł̂ŗpǂƎv܂B ELF ł̓Cu
  ̖ɊւĂ_܂Al񂴂肷قǕGȖ
  [gƂĂł܂Aۂɂ邩ǂ͂܂ʂ̘b
  ˁB

  s@܂Ƃ߂܂B`ɏ] major ȃAbvO[h͌݊
  ꂽƂA minor ȃAbvO[h͂łȂƂƂƂɂ܂
  B̏ꍇ͈ȉ̂悤ɃNĂB

       gcc -shared -Wl,-soname,libfoo.so.major -o libfoo.so.major.minor

  ł܂͂łB

  6.4.3.  a.outAÂ`

  Cu ELF ֈڍsȗŔALCuȒPɍ
  _ɂ܂B a.out ł쐬s\Ȃ킯ł͂܂
  B
  <ftp://tsx-11.mit.edu/pub/linux/packages/GCC/src/tools-2.17.tar.gz> 
  肵āApbP[W̒ɂ 20 y[W̃hLgǂ݂܂傤B
  ͈̓}hɕ΂͂܂񂪁Ał܂ŏĂ͂ŁA
   a.out g肪Ƃ͖炩ł傤 :-)

  6.4.3.1.  ZMAGIC  QMAGIC

  Â a.out ̎soCi ZMAGIC ƌĂ΂܂B QMAGIC  ZMAGIC 
  Ă܂Aŏ̃y[W}bvȂ_Ă܂B 0
  `4096 Ԓnǂɂ}bsOĂȂ߁ANULL |C^ϐ
  QƂƂԈႢ₷ȂĂ܂i0 ԒnANZX
  ƁAgbv킯łjB܂ʂ̗_ƂăoCiXi1K 
  炢jȂ܂B

  ɌÂJł ZMAGIC ݂̂ɁAÂ̂͗ɁAŋ߂̂̂
  QMAGIC ݂̂ɑΉĂ܂BJ[l͗̃tH[}bgs
  Ƃł܂̂ŁAۂɂ͋CɂKv͂܂B

  vO QMAGIC ǂ́A`file' R}hs邱Ƃɂ
  \܂B

  6.4.3.2.  t@C̔zu

  a.out ̋LCu͓̃t@Cƈ̃V{bNN\
  ܂B̕ł܂ŎgĂufoovCuɂƂ
  ƁA libfoo.sa  libfoo.so.1.2 ۂ̃t@CA libfoo.so.1 
  libfoo.so.1.2 ւ̃V{bNNłB̖͂ǂȂ̂
  傤H

  RpC̍ۂɁA ld  libfoo.sa T܂B̃t@C̓Cu
  ́ustubvt@CƌĂ΂AOQƂłf[^ƎsNɕK
  vȊ֐ւ̃|C^ƂێĂ܂B
  sɂ́A_Ci~bN[_ libfoo.so.1 T܂B͎
  t@Cł͂ȂV{bNNɂȂĂāAoOtBbNXȂǂɂ
  Abvf[g̍ۂɁÃCugĂvOɖ肪
  Ȃ悤ɂĂ܂BVo[W̃Cuilibfoo.so.1.3 
  ǁj΁A ldconfig s邱ƂɂăNύXłA
  CupĂvOɂ͉e^ȂĂ݂܂B

  DLL Cuig[gW[ƂƂ͏mĂ܂ :-pj
  static ȃCuɔׂđ傫ȂꍇłB DLL Cu
  ͏̊gɔāAuholevƂ`̗̈悪mۂĂ܂B
  hole ̈悪ۂɂ̓fBXNȂ悤ɂ邱Ƃł܂BP
  cp 邩A邢 makehole R}hp܂Bia.out ł́jAh
  X͌Œ肳Ă̂ŁACu\z strip 邱Ƃł܂B
  Ȃ ELF Cu strip Ă͂܂I

  6.4.3.3.  ulibc-litevƂ́H

  libc-lite  libc CǔyʔłłBtbs[ł̗pɓKA
  UNIX ̊{Iȃ^XN̂قƂǂJo[Ă܂B libc-lite ɂ
  cursesA dgmA termcap Ȃǂ̃R[h͓Ă܂Bg̃VX
  e /lib/libc.so.4  lite łւ̃NłA full TCY
  łɒuǂł傤B

  6.4.4.  NF悭

  N̍ۂɏQN玄ɋĂI菕ł邱Ƃ
  ܂薳܂񂪁Â񂫂炱ɍڂ邱Ƃ͂
  ܂...

     L`ŃN̂ static ɂȂĂ܂

        ld LCuł悤AꂼꃊNƒ
        Ă邩mFĂB ELF ̏ꍇ̓V{bNN
        libfoo.so A a.out ł libfoo.sa t@C֒ĂȂ
        ΂Ȃ܂B̖ ELF binutils  2.5  2.6 ɍXV
        Ƃɔɑ񍐂܂BȑÕo[Wł̓Cu
        ̌uvsĂASẴNȂĂ삷邱Ƃ
        ܂BVo[Wł͑̃A[LeN`Ƃ̐
        邽߂ɁA̋@\폜܂B܂ƁA[Ȗ
        N\邱Ƃ폜ꂽR̈łB

      DLL ̃c[ `mkimage  libgcc ̌Ɏs܂

        libc.so.4.5.x ȏł́A libgcc ͋LCuł͂ȂȂ܂
        BĖ肪śu-lgccv́u`gcc
        -print-libgcc-file-name`vɒuĂBobNNH[g
        u`vYȂB

        ܂ /usr/lib/libgcc* ͑Sč폜ĂBdvłB

      __NEEDS_SHRLIB_libc_4 multiply defined ƂbZ[Wo
        ͏Ɠ̖łB

      DLL č\zƂ ``Assersion failure'' ƂbZ[W
        
        ̓̃bZ[ẂA炭Wve[u slot ̂̈
        I[o[t[Ă܂ƂӖĂ܂BIWi
        jump.vars t@Cɗ\񂵂̈悪Ƃƍl
        ܂B̌ getsize ɂēł܂igetsize 
        tools-2.17.tar.gz pbP[Wɂ܂jB̏ꍇcOȂA
        Cu major o[WグAʌ݊߂邱Ƃ
        B̉@ƂȂł傤B

     ld: output file needs shared library libc.so.4
         libc ȊÕCuiX ֌W̃CuȂǁjpĂ
        A -g  -static ĂȂꍇɐ܂B

        LCuɑΉ stub t@Ci*.sajɂ́Aʏ
        _NEEDS_SHRLIB_libc_4 Ƃ`̃V{܂܂Ă܂B
         libc.sa stub ɂĉĂ܂B -g w肳Ă
         libg.a ܂ libc.a Ƃ̃Ns܂AƂ낪
        ̃Cuł͏̃V{͉ĂȂ̂łB
        \̃G[ƂȂ܂B

         -g ăRpCƂ -static ǉ邩A
        ̓N̍ۂ -g pȂA𓚂łBN̍ۂ -g 
        pȂĂAeX̃\[X -g ŃRpCĂ΁AقƂ
        ̏ꍇ͏[ȃfobO񂪓܂B

  7.  _Ci~bN[hiDynamic Loadingj

  ͍̏͂̂Ƃ܂ZłB ELF HOWTO ̓eɘA
  A񂾂gĂł傤B

  7.1.  TO

  Ȍ͑SCɓǂ񂾐l͂O܂񂪁A Linux 
  LCu𗘗pĂ܂BuOĒuvƂ
  ANsɐ摗肳悤ɂȂ̂łB

  7.2.  G[bZ[W

  NG[N瑗ĂI͂łȂ܂
  Aɂ܂Ƃ߂Ǝv܂...

      can't load library: /lib/libxxx.so, Incompatible version
        ia.out ̂݁j xxx Cu major o[WĂ
        ȂłBV{bNNႤo[W̃Cu
        ɒł͂߂łiȂƂ segfault 炢ō
        񂾂K^Ƃ̂łjBVo[W肵ĂB
        ELF ̏ꍇA悤ȏ󋵂ł͈ȉ̂悤ȃbZ[WƂȂ܂B

          ftp: can't load library 'libreadline.so.2'

      warning using incompatible library version xxx
        ia.out ̂݁j̃bZ[WfvORpCl
         minor o[WÂCugĂꍇɏo
        BvO͂ƓƎv܂BłAbvO[h
        ǂł傤ˁB

  7.3.  _Ci~bN[_̓Rg[

  _Ci~bN[_QƂϐ͑ɓnĂ܂B̂ق
  ǂ ldd ĝȂ̂ŁA ldd ɑΉXCb`Ďs
  ֗܂B

  o  LD_BIND_NOW ʏ탉Ců֐́AĂяo܂ŃANZX
     ܂B̃tOݒ肵ĂƁACu[hꂽƂ
     SĂ̊֐mF܂( ĎԂ܂jB̃Iv
     V̓vOeXgƂɁASĂƃNĂ
     邩mFƂɖɗ܂B

  o  LD_PRELOAD gƊ֐`u㏑vt@Cwł܂B
     Ⴆ΃蓖Ċ֐āA `malloc' ƒu
     ꍇɂ́A̎ malloc.o ɃRpCĈȉ̂悤ɂ܂B

       $ LD_PRELOAD=malloc.o; export LD_PRELOAD
       $ some_test_program

  LD_ELF_PRELOAD  LD_AOUT_PRELOAD 悤ȋ@\܂Aꂼ
  ̃oCi`ɑ΂Ă̂ݗLɂȂ܂B LD_something_PRELOAD 
  LD_PRELOAD ɒ`Ăꍇ́A͈͂̋w̕Lɂ
  ܂B

  o  LD_LIBRARY_PATH ̓Rŋ؂ꂽXgŁALCu
     fBNgw肵܂B̎w͎ŝ݂ɗpA ld
     ɂ͉e܂B܂ setuid  setgid ꂽvOɂ͖
     Bɂ LD_ELF_LIBRARY_PATH  LD_AOUT_LIBRARY_PATH Ao
     Ci`ɂĈقȂ錟Xgwł܂Bʏ
     LD_LIBRARY_PATH ͕KvȂł傤BfBNg /etc/ld.so.conf
     ɉ ldconfig sȂ߂܂B

  o  LD_NOWARN  a.out ݂̂ɓKp܂Bݒ肳ĂƁi܂
     LD_NOWARN=true; export LD_NOWARNjA[_͒vIłȂxb
     Z[Wiminor o[WĂȂȂǁjo͂ȂȂ܂B

  o  LD_WARN  ELF ɂ̂ݓKp܂Bݒ肳Ăƒʏ͒vIG
     [ł ``Can't find library'' [jOɕς܂Bʏ͂
     ܂藘p邱Ƃ͂Ȃł傤A ldd ɂ͏dvȐݒłB

  o  LD_TRACE_LOADER_OBJECTS  ELF ɂ̂ݓKp܂Bw肷ƁA
     ̎svÓA ldd ̉ŎsĂ̂ƍl
     悤ɂȂ܂B

       $ LD_TRACE_LOADED_OBJECTS=true /usr/bin/lynx
               libncurses.so.1 => /usr/lib/libncurses.so.1.9.6
               libc.so.5 => /lib/libc.so.5.2.18

  7.4.  _Ci~bN[hpvO

  Solaris 2.x ł̃_Ci~bN[h@\ƔɎĂ܂iƂĂ
  Solaris [Uɂ킩܂ˁjB̓Iȓe H. J. Lu  ELF
  programming document  dlopen(3)  man y[WŏڏqĂ
  B҂ ld.so ̃pbP[WɓĂ܂BȉɂƂ
  ܂B -ldl ăNĂB

       #include <dlfcn.h>
       #include <stdio.h>

       main()
       {
         void *libc;
         void (*printf_call)();

         if(libc=dlopen("/lib/libc.so.5",RTLD_LAZY))
         {
           printf_call=dlsym(libc,"printf");
           (*printf_call)("hello, world\n");
         }

       }

  8.  J҂ɘAɂ

  8.1.  oO|[g𑗂

  ܂i荞łB Linux ɓL̖肩ÃVXe
  gcc łN邩HJ[l̃o[WɌŗL̖肩HCũo[
  ẂHN static ɂΉ邩HNvO
  ZfXg[Vłɐ؂߂邱Ƃł邩HȂǂłB

  ꂪς񂾂Aǂ̃vOɃoO邩͂肷Ǝv܂B
  GCC ̏ꍇ́AoO|[g̎葱 info t@CŐĂ܂B
  ld.so  C CuA math Cȕꍇ linux-
  gcc@vger.rutgers.edu Ƀ[𑗂ĂB\ȂΒZAoO
  ݂͂ƎvOYtÃvOőz肵Ă
  Ǝۂ̓ɂĂ̐ĂB

  8.2.  JɎQ

  GCC  C CůJɎQꍇ́A܂[OXg
  linux-gcc@vger.rutgers.edu ɎQĂBǂȂƂc_
  邩m肽Ȃ΁AXg̃A[JCu
  <http://homer.ncm.com/linux-gcc/> ɂ܂B̎ɂȂׂƂ͂
  ȂłI

  9.  ̑

  9.1.  ӎ

       uXvƌtgƂł̂́A哝̂ƕҏWҁA
       đ̓ɃTi_ĂlX݂̂ł

  (Mark Twain)

   HOWTO  Mitchum DSouza  GCC-FAQ ɑ̑ނĂ
  ܂B GCC-FAQ ̑啔́i{ɑ啔́j́A̕ɂ̂܂
  ̌`œĂ܂B HOWTO ͒̕Aĺiuvjw
  ͉̂X̂ǂ̏ꍇ肦܂Bu͂Ă܂B
  ƂɂĂȂ̃fBXNVXe≜񂪏ĂĂ܂
  Ă̂ɂȂłvƂéAɎw肪ΉX
  ̗ɓĂ͂܂܂B

  ̕ɏ͂lXłit@[Xgl[ ASCII łjB
  Andrew Tefft, Axel Boldt, Bill Metzenthen, Bruce Evans, Bruno Haible,
  Daniel Barlow, Daniel Quinlan, David Engel, Dirk Hohndel, Eric
  Youngdale, Fergus Henderson, H.J. Lu, Jens Schweikhardt, Kai Petzke,
  Michael Meissner, Mitchum DSouza, Olaf Flebbe, Paul Gortmaker, Rik
  Faith, Steven S. Dick, Tuomas J Lukka, Ă Linus TorvaldsB
  ނȂ΂̕Ɋ֘ASĂ͈̊ӖȂłA
  sȂł傤 :-)

  ̕iHOWTO ɂł FAQ ɂłj͂ŁAXg
  RĂႢ܂Aǂm点܂悤
  ܂BɃ[ĂΏC܂B

  󒍁F{ɓẮAA܂AVAx]A
  AR肳AɓA͂߂Ƃ JF [OXg̊F
  ɗLvȂwE𒸂܂B

  9.2.  |ɂ

  _ł̖͂̕|ł͂܂B|󂵂Ă݂悤ƎvAǂ
  肢܂Błɒm点ĂI|̌tb\
  ́icOȂƂɁj100  1 ȉł傤A͂Ƃ͊ł
  `łB

  9.3.  tB[hobN

  }܂B̃AhX daniel.barlow@linux.org Ƀ[Ă
  B PGP JiID 5F263625j web y[W
  <http://ftp.linux.org.uk/~barlow/> ɂ܂BʐM̔閧KvƂ
  ͗pĂB

  󒍁Fł̃[AhX dan@detached.demon.co.uk ƂȂĂ܂
  A daniel.barlow@linux.org ̕ANZXǂłB

  9.4.  @I

  󒍁F̐߂͌܂B

  All trademarks used in this document are acknowledged as being owned
  by their respective owners.

  This document is copyright (C) 1996 Daniel Barlow
  <dan@detached.demon.co.uk> It may be reproduced and distributed in
  whole or in part, in any medium physical or electronic, as long as
  this copyright notice is retained on all copies. Commercial
  redistribution is allowed and encouraged; however, the author would
  like to be notified of any such distributions.

  All translations, derivative works, or aggregate works incorporating
  any Linux HOWTO documents must be covered under this copyright notice.
  That is, you may not produce a derivative work from a HOWTO and impose
  additional restrictions on its distribution. Exceptions to these rules
  may be granted under certain conditions; please contact the Linux
  HOWTO coordinator at the address given below.

  In short, we wish to promote dissemination of this information through
  as many channels as possible. However, we do wish to retain copyright
  on the HOWTO documents, and would like to be notified of any plans to
  redistribute the HOWTOs.

  If you have questions, please contact Greg Hankins, the Linux HOWTO
  coordinator, at gregh@sunsite.unc.edu via email.

  m{n

  ̕ňpĂ鏤W͂ꂼۗ̕L҂ɋÂłB

  ̒̕쌠 (C) 1996 Daniel Barlow <dan@detached.demon.co.uk>
  ۗLĂ܂B̑̕Ŝ邢͈ꕔ́AIdqI킸A
  郁fBAɎRɕʂ邱Ƃł܂B̍ۂɂ͂̒
  錾SẴRs[ɕtKv܂BƓIȔzzA
  サ܂B̍ۂɂ͒҂ɂm点悤肢܂B

  Linux HOWTO ̕܂񂾖|ACѕҏWƂ̐ʂ́ASĂ̒
  쌠ɏ]Kv܂BȂ킿 HOWTO CɁAzz
  ɒǉ邱Ƃ͂ł܂BAKƔF߂ꂽꍇ͗O
  邱Ƃł܂B Linux HOWTO ̊Ǘ҂ɘAĂBAhX
  ͈ȉɎ܂B

  vɉX͂̏\Ȍ̕@ōL߂ƎvĂ̂
  BX HOWTO Ɋւ钘쌠ێ邱Ƃ]ł
  ܂AHOWTO ĔzzvɂĒm点Ă炤Ƃ]ł
  B

  ^_ALinux HOWTO Ǘ҂ Greg Hankins ɘAĂ
  Bdq[̃AhX gregh@sunsite.unc.edu łB

  10.  

  At@xbgȊO̕ł͂܂錾t ASCII z̏ɕׂĂ
  B

  o  -fwritable-strings ``39'' ``56''

  o  /lib/cpp ``16''

  o  a.out ``1''

  o  ar ``10''

  o  as ``8''

  o  <asm/*.h> ``19''

  o  atoi() ``40''

  o  atol() ``41''

  o  binaries too big ``63'' ``65'' ``77''

  o  chewing gum ``3''

  o  cos() ``68''

  o  debugging ``59''

  o  dlopen() ``82''

  o  dlsym() ``83''

  o  documentation ``4''

  o  EINTR ``52''

  o  elf ``0'' ``71''

  o  execl() ``57''

  o  fcntl ``47''

  o  FD_CLR ``44''

  o  FD_ISSET ``45''

  o  FD_SET ``43''

  o  FD_ZERO ``46''

  o  file ``2''

  o  <float.h> ``20''

  o  gcc ``6''

  o  gcc -fomit-frame-pointer ``61''

  o  gcc -g ``60''

  o  gcc -v ``14''

  o  gcc, bugs ``15'' ``28'' ``29'' ``84''

  o  gcc, flags ``13'' ``25'' ``26''

  o  gdb ``64''

  o  header files ``17''

  o  interrupted system calls ``51''

  o  ld ``9''

  o  LD_* environment variables ``80''

  o  ldd ``81''

  o  libc ``7''

  o  libg.a ``62''

  o  libgcc ``79''

  o  <limits.h> ``21''

  o  lint ``58''

  o  <linux/*.h> ``18''

  o  manual pages ``5''

  o  <math.h> ``70''

  o  maths ``69''

  o  mktemp() ``55''

  o  optimisation ``27''

  o  QMAGIC ``76''

  o  segmentation fault ``30'' ``54''

  o  segmentation fault, in GCC ``33''

  o  select() ``50''

  o  SIGBUS ``34''

  o  SIGEMT ``35''

  o  SIGIOT ``36''

  o  SIGSEGV ``31'' ``53''

  o  SIGSEGV, in gcc ``32''

  o  SIGSYS ``38''

  o  SIGTRAP ``37''

  o  sin() ``67''

  o  soname ``73''

  o  sprintf() ``42''

  o  statically linked binaries, unexpected ``66'' ``78''

  o  <stdarg.h> ``23''

  o  <stddef.h> ``24''

  o  strings ``11''

  o  <sys/time.h> ``48''

  o  <unistd.h> ``49''

  o  <varargs.h> ``22''

  o  version numbers ``12'' ``74''

  o  weird things ``72''

  o  ZMAGIC ``75''

