HOME/ NetBSD/ OpenBlockS/ NetBSD/openblocks build.sh 020720
NetBSD-currentの2002-07-20のソースを取り出す。
# mkdir /usr/20020720 # cd /usr/20020720 # cvs -d /usr/cvsroot checkout -D "20020720-UTC" src
ftp://nandra.iri.co.jpから取得したファイルを展開する。
入れ換えるファイルは次のとおり。
# cd src/sys/arch # mv powerpc powerpc.org # mv macppc macppc.org # tar xvzf macppc-020720.tar.gz # mv powerpc powerpc.macppc.0720 # tar xvzf mpc860-020720.tar.gz # cd ../../lib/libc/arch # mv powerpc powerpc.org # tar xvzf libc-020720.tar.gz
DESTDIRを作る。
# mkdir -p /usr/DESTDIR/mpc860/20020731
ついでに${DESTDIR}/usr/include/mpc860をsys/arch/mpc860/include にシンボリックリンクを張る。
# mkdir -p /usr/DESTDIR/mpc860/20020731/usr/include # ln -s /usr/20020720/src/sys/arch/mpc860/include /usr/DESTDIR/mpc860/20020731/usr/include
includeファイルが足りないのでsys/arch/macppc, sys/arch/powerpc からシンボリックリンクでごまかす。 ごまかし用のshell scriptは次のとおり。
SRCROOT=/usr/20020720/src DESTDIR=/usr/DESTDIR/mpc860/20020731 MACPPC=${SRCROOT}/sys/arch/macppc/include POWERPC=${SRCROOT}/sys/arch/powerpc/include MPC860=${SRCROOT}/sys/arch/mpc860/include ln -s ${MACPPC}/adbsys.h ${MPC860} ln -s ${POWERPC}/bat.h ${MPC860} ln -s ${MACPPC}/grfioctl.h ${MPC860} ln -s ${POWERPC}/ipkdb.h ${MPC860} ln -s ${MACPPC}/keyboard.h ${MPC860} touch ${MPC860}/machine_type.h ln -s ${MACPPC}/z8530var.h ${MPC860} ln -s ${MPC860} ${DESTDIR}/usr/include/mpc860
次のようなエラーが出てコンパイルが通らないのでsys/lkm/Makefileのnetinet, vfsをコメントアウトする。
dependall ===> sys/lkm/netinet/if_ipl CC=/usr/20020714/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc /usr/20020714/src/tools/obj/tools.NetBSD-1.6D-i386/bin/nbmkdep -a -DIPFILTER_LOG -I/usr/20020714/src/sys/netinet -DUSE_INET6 -DIPFILTER_LKM -nostdinc -I. -I/usr/20020714/src/sys/lkm/netinet/if_ipl -isystem /usr/20020714/src/sys -isystem /usr/20020714/src/sys/arch -D_KERNEL -D_LKM /usr/20020714/src/sys/netinet/ip_fil.c /usr/20020714/src/sys/netinet/fil.c /usr/20020714/src/sys/lkm/netinet/if_ipl/mln_ipl.c /usr/20020714/src/sys/netinet/ip_nat.c /usr/20020714/src/sys/netinet/ip_frag.c /usr/20020714/src/sys/netinet/ip_state.c /usr/20020714/src/sys/netinet/ip_proxy.c /usr/20020714/src/sys/netinet/ip_auth.c /usr/20020714/src/sys/netinet/ip_log.c /usr/20020714/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O2 -ffreestanding -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -DIPFILTER_LOG -I/usr/20020714/src/sys/netinet -DUSE_INET6 -DIPFILTER_LKM -nostdinc -I. -I/usr/20020714/src/sys/lkm/netinet/if_ipl -isystem /usr/20020714/src/sys -isystem /usr/20020714/src/sys/arch -D_KERNEL -D_LKM -c /usr/20020714/src/sys/netinet/ip_fil.c cc1: warnings being treated as errors machine/pmap.h:246: warning: `pmap_update_pg' declared `static' but never defined machine/pmap.h:247: warning: `pmap_update_2pg' declared `static' but never defined *** Error code 1 Stop.
# cd /usr/20020720/src/sys/lkm/ # cp Makefile Makefile.org # vi Makefile
Makefileの修正はnetinet, vfsを削るだけ。
--- Makefile.org Wed Jul 31 23:08:32 2002 +++ Makefile Wed Jul 31 23:08:44 2002 @@ -1,5 +1,5 @@ # $NetBSD: Makefile,v 1.4 2000/12/08 23:06:34 jdolecek Exp $ -SUBDIR= arch compat exec misc netinet vfs syscall +SUBDIR= arch compat exec misc syscall .include
buildする。
# ./build.sh -D /usr/DESTDIR/mpc860/20020731 -a powerpc -m mpc860 > 20020731.mpc860.log 2>&1
kernelを作るまえに、sys/arch/mpc860/conf/MPC860にpatchをあてる。 やっていることは、カーネルのコピー先とgcc, ldを new toolchainで作ったものに変えているだけ。
--- MPC860.org Sun Jul 14 23:22:49 2002 +++ MPC860 Wed Jul 31 12:15:11 2002 @@ -4,9 +4,10 @@ maxusers 16 -makeoptions CC="gcc3" -makeoptions COPY_KERNEL="/export/openblocks" +makeoptions CC="/usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc" +makeoptions LD="/usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-ld" +makeoptions COPY_KERNEL="/usr/DESTDIR/mpc860" options openblocks # Standard system options
kernelを作る。
# config MPC860 # cd ../compile/MPC860 # /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/nbmake-mpc860 depend # /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/nbmake-mpc860 # cd /usr/DESTDIR/mpc860 # cp netbsd ./20020731
/etcを作る。etc.mpc860がないので、etc.macppcにシンボリックリンクを張る。
# cd /usr/20020720/src/etc # ln -s etc.macppc etc.mpc860 # /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/nbmake-mpc860 install-etc-files
/etcの設定を行う。rc.confでrc.configured=YESにして、fstabをtouchする。
# cd /usr/DESTDIR/mpc860/20020731/etc # touch fstab # vi rc.conf
devを作る。ftp://nandra.iri.co.jp/pub/NetBSD/mpc860/MAKEDEV.mpc860 を使う。
# cd /usr/DESTDIR/mpc860/20020731/dev # sh MAKEDEV.mpc860 all
bootpとNFSの設定をしたらブートする。
>> OpenBlockS Boot, Revision 1.1 >> (root@ppr.home.tokuda.net, Sat Apr 20 11:00:28 JST 2002) Using IP address: 192.168.100.60 root addr=192.168.100.36 path=/usr/DESTDIR/mpc860/20020731 1155028+135148 [89+72752+54234]=0x15a264 start=0x10000 ssym = 14afc0, esym = 173000 [ using 163904 bytes of netbsd ELF symbol table ] Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002 The NetBSD Foundation, Inc. All rights reserved. Copyright (c) 1982, 1986, 1989, 1991, 1993 The Regents of the University of California. All rights reserved. NetBSD 1.6D (MPC860) #0: Thu Aug 1 03:06:27 JST 2002 tokuda@r1:/usr/20020720/src/sys/arch/mpc860.0720/compile/MPC860 total memory = 16384 KB avail memory = 13516 KB using 230 buffers containing 920 KB of memory mainbus0 (root) cpu0 at mainbus0: 860 (Revision 0) pbus0 at mainbus0 scc0 at pbus0: vec 9 (console) fec0 at pbus0: vec 7 address 00:80:6d:47:29:d5 tqphy0 at fec0 phy 1: 78Q2120 10/100 media interface, rev. 11 tqphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto sce0 at pbus0: vec 9 address 00:80:6d:47:29:d6 wdc0 at pbus0: vec 8 wd0 at wdc0 channel 0 drive 0:wd0: drive supports 16-sector PIO transfers, LBA addressing wd0: 777 MB, 1580 cyl, 16 head, 63 sec, 512 bytes/sect x 1592728 sectors wd0: drive supports PIO mode 4, DMA mode 2 boot device: fec0 root on fec0 nfs_boot: trying DHCP/BOOTP nfs_boot: BOOTP next-server: 192.168.100.36 nfs_boot: my_name=obs.home.tokuda.net nfs_boot: my_addr=192.168.100.60 nfs_boot: my_mask=255.255.255.0 root on r1:/usr/DESTDIR/mpc860/20020731 root file system type: nfs Wed Jul 31 14:16:27 UTC 2002 Starting file system checks: mount: /: unknown special file or file system. Setting tty flags. ttyflags: open /dev/ttyE0: No such file or directory Setting sysctl variables: Starting network. Hostname: obs.home.tokuda.net Configuring network interfaces: fec0. add net default: gateway 192.168.100.1 Adding interface aliases: Building databases... Segmentation fault - core dumped Segmentation fault - core dumped Segmentation fault - core dumped Starting syslogd. Segmentation fault - core dumped Checking for core dump... savecore: no core dump (no dumpdev) Mounting all filesystems... Clearing /tmp. Segmentation fault - core dumped Checking quotas:Segmentation fault - core dumped done. Segmentation fault - core dumped Setting securelevel: kern.securelevel: 0 -> 1 Segmentation fault - core dumped Starting virecover. starting local daemons:. Updating motd. Segmentation fault - core dumped Segmentation fault - core dumped Starting inetd. Segmentation fault - core dumped Starting cron. Segmentation fault - core dumped Wed Jul 31 14:17:04 UTC 2002 Jul 31 14:17:06 init: getty repeating too quickly on port /dev/tty00, sleeping Jul 31 14:17:07 init: getty repeating too quickly on port /dev/ttyE0, sleeping
ここまでが2002-07-31の結果。
ここからが2002-08-01の結果。
つばいさんからのメール で動いているlibc.so.12.85, cmpを試してみてねというメールをもらったので試してみる。
ファイルは次のものを使用した (ディレクトリ名が tmpなのでしばらくすると消えているかも)。
展開したファイルを配置する。XXXX.orgは元のファイル。 cmpもlibc.soもサイズは結構違う。
tokuda@r1{114}> ls -l /usr/DESTDIR/mpc860/20020731/usr/lib/libc.* -r--r--r-- 1 root wheel 1617890 Aug 1 00:29 /usr/DESTDIR/mpc860/20020731/usr/lib/libc.a lrwxr-xr-x 1 root wheel 13 Aug 1 00:29 /usr/DESTDIR/mpc860/20020731/usr/lib/libc.so@ -> libc.so.12.85 lrwxr-xr-x 1 root wheel 13 Aug 1 00:29 /usr/DESTDIR/mpc860/20020731/usr/lib/libc.so.12@ -> libc.so.12.85 -r--r--r-- 1 root wheel 844353 Aug 2 07:36 /usr/DESTDIR/mpc860/20020731/usr/lib/libc.so.12.85 -r--r--r-- 1 root wheel 863477 Aug 2 07:33 /usr/DESTDIR/mpc860/20020731/usr/lib/libc.so.12.85.org tokuda@r1{115}> ls -l /usr/DESTDIR/mpc860/20020731/usr/bin/cmp* -r-xr-xr-x 1 root wheel 12343 Aug 2 07:35 /usr/DESTDIR/mpc860/20020731/usr/bin/cmp* -r-xr-xr-x 1 root wheel 9624 Aug 2 07:33 /usr/DESTDIR/mpc860/20020731/usr/bin/cmp.org* tokuda@r1{116}>
ブートしてみるとやっぱりSegmentation fault。
coreの様子はこんな感じ。
tokuda@r1{107}> ls -l total 1072 -rw------- 1 root wheel 69632 Aug 2 11:00 cmp.core -rw------- 1 root wheel 94208 Aug 2 11:00 cron.core -rw------- 1 root wheel 69632 Aug 2 11:00 dev_mkdb.core -rw------- 1 root wheel 86016 Aug 2 11:00 getty.core -rw------- 1 root wheel 90112 Aug 2 11:00 grep.core -rw------- 1 root wheel 94208 Aug 2 11:00 inetd.core -rw------- 1 root wheel 86016 Aug 2 11:00 install.core -rw------- 1 root wheel 77824 Aug 2 11:00 kvm_mkdb.core -rw------- 1 root wheel 159744 Aug 2 11:00 quotacheck.core -rw------- 1 root wheel 73728 Aug 2 11:00 quotaon.core -rw------- 1 root wheel 94208 Aug 2 11:00 sed.core -rw------- 1 root wheel 90112 Aug 2 11:00 syslogd.core tokuda@r1{108}>
libc.so.12.85, cmpが元のやつは次のとおり。
tokuda@r1{110}> ls -l total 1076 -rw------- 1 root wheel 73728 Aug 2 11:04 cmp.org.core -rw------- 1 root wheel 94208 Aug 2 11:04 cron.core -rw------- 1 root wheel 69632 Aug 2 11:04 dev_mkdb.core -rw------- 1 root wheel 86016 Aug 2 11:04 getty.core -rw------- 1 root wheel 90112 Aug 2 11:04 grep.core -rw------- 1 root wheel 94208 Aug 2 11:04 inetd.core -rw------- 1 root wheel 86016 Aug 2 11:04 install.core -rw------- 1 root wheel 77824 Aug 2 11:04 kvm_mkdb.core -rw------- 1 root wheel 159744 Aug 2 11:04 quotacheck.core -rw------- 1 root wheel 73728 Aug 2 11:04 quotaon.core -rw------- 1 root wheel 94208 Aug 2 11:04 sed.core -rw------- 1 root wheel 90112 Aug 2 11:04 syslogd.core tokuda@r1{111}>
cmpに関してはcoreのサイズが違う。
藤原さんも同様のSegmentation faultが出ているらしい。 coreのサイズを比べると同じものもあるし、そうでないものもある。なぜだろう?
あとはコンパイラのバージョンとか最適化の関係などだろうか。 powerpc用のgcc-3を作るというのは大変かなぁ。
ここまでが2002-08-01の結果。
ここからが2002-08-02の結果。
つばいさんから再び情報が。kernelとld.elf_soを試してみてね、 というメールを頂く。
kernel, libc.so, ld.elf_soのパターンの組合せを何通りか試してみた。 全部試そうかと思ったんだけど、なんとなく傾向がつかめたので。
番号 | kernel | libc.so | ld.elf_so | 結果 |
---|---|---|---|---|
0 | オリジナル | オリジナル | オリジナル | Segmentation fault嵐 |
1 | 椿井版 | オリジナル | オリジナル | Segmentation fault嵐 |
2 | オリジナル | 椿井版 | オリジナル | Segmentation fault嵐 |
3 | オリジナル | オリジナル | 椿井版 | 大成功 (Segmentation faultなし) |
4 | 椿井版 | オリジナル | 椿井版 | 大成功 (Segmentation faultなし) |
5 | 椿井版 | 椿井版 | 椿井版 | 大成功 (Segmentation faultなし) |
この結果からld.elf_soが重要ということに思える。
では、なぜld.elf_soがうまく作れないのかという原因がわかれば良いのかな。 ld.elf_soってなにするもの?
boot時のメッセージ。
>> OpenBlockS Boot, Revision 1.1 >> (root@ppr.home.tokuda.net, Sat Apr 20 11:00:28 JST 2002) Using IP address: 192.168.100.60 root addr=192.168.100.36 path=/usr/DESTDIR/mpc860/20020731 1124536+135144 [89+68864+53981]=0x151b18 start=0x10000 ssym = 1438a0, esym = 16a000 [ using 157536 bytes of netbsd ELF symbol table ] Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002 The NetBSD Foundation, Inc. All rights reserved. Copyright (c) 1982, 1986, 1989, 1991, 1993 The Regents of the University of California. All rights reserved. NetBSD 1.6D (MPC860) #0: Fri Aug 2 04:11:31 JST 2002 tsubai@erika:/a/0720/src/sys/arch/mpc860/compile/MPC860 total memory = 16384 KB avail memory = 13552 KB using 230 buffers containing 920 KB of memory mainbus0 (root) cpu0 at mainbus0: 860 (Revision 0) pbus0 at mainbus0 scc0 at pbus0: vec 9 (console) fec0 at pbus0: vec 7 address 00:80:6d:47:29:d5 tqphy0 at fec0 phy 1: 78Q2120 10/100 media interface, rev. 11 tqphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto sce0 at pbus0: vec 9 address 00:80:6d:47:29:d6 wdc0 at pbus0: vec 8 wd0 at wdc0 channel 0 drive 0:wd0: drive supports 16-sector PIO transfers, LBA addressing wd0: 777 MB, 1580 cyl, 16 head, 63 sec, 512 bytes/sect x 1592728 sectors wd0: drive supports PIO mode 4, DMA mode 2 boot device: fec0 root on fec0 nfs_boot: trying DHCP/BOOTP nfs_boot: BOOTP next-server: 192.168.100.36 nfs_boot: my_name=obs.home.tokuda.net nfs_boot: my_addr=192.168.100.60 nfs_boot: my_mask=255.255.255.0 root on r1:/usr/DESTDIR/mpc860/20020731 root file system type: nfs Fri Aug 2 18:02:46 UTC 2002 Starting file system checks: mount: /: unknown special file or file system. Setting tty flags. ttyflags: open /dev/ttyE0: No such file or directory Setting sysctl variables: Starting network. Hostname: obs.home.tokuda.net Configuring network interfaces: fec0. add net default: gateway 192.168.100.1 Adding interface aliases: Building databases... kvm_mkdb: machdep.booted_kernel: the value is not available: No such file or directory Starting syslogd. Checking for core dump... savecore: no core dump (no dumpdev) Mounting all filesystems... Clearing /tmp. Checking quotas: done. Setting securelevel: kern.securelevel: 0 -> 1 /etc/rc: WARNING: No swap space configured! Starting virecover. starting local daemons:. Updating motd. Starting inetd. Starting cron. Fri Aug 2 18:03:20 UTC 2002 Aug 2 18:03:23 obs getty[164]: /dev/ttyE0: No such file or directory NetBSD/mpc860 (obs.home.tokuda.net) (tty00) login:
ここまでが2002-08-02の結果。
ここからが2002-08-03の結果。
ld.elf_soについて椿井さんからメールを頂く。dynamic link なファイルを実行するために必須なものなんだそう。 dynamic linkなファイルを実行する前にはかならずld.elf_soと 実行されるファイルがメモリにロードされ、ld.elf_soが実行され、 必要な仕事をしてから本来の実行ファイルを実行するそうです。
詳しくは、man ld.elf_soする、と言っても英語です...
で、根源的な問題としてld.elf_soが変なのはなぜかという話。 関係ないだろうけどgccのオプションが違うんじゃないかということで、 椿井さんの-fpic -Oというオプションを真似てみようかと思う。
自分で実行したbuild.shのlogを見ると、 たしかにld.elf_soのコンパイル時には-O2オプションとなっている。
dependall ===> libexec/ld.elf_so CC=/usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/nbmkdep -a -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -traditional-cpp /usr/20020720/src/libexec/ld.elf_so/arch/powerpc/rtld_start.S CC=/usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/nbmkdep -a -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include /usr/20020720/src/libexec/ld.elf_so/arch/powerpc/ppc_reloc.c /usr/20020720/src/libexec/ld.elf_so/rtld.c /usr/20020720/src/libexec/ld.elf_so/reloc.c /usr/20020720/src/libexec/ld.elf_so/symbol.c /usr/20020720/src/libexec/ld.elf_so/malloc.c /usr/20020720/src/libexec/ld.elf_so/xmalloc.c /usr/20020720/src/libexec/ld.elf_so/xprintf.c /usr/20020720/src/libexec/ld.elf_so/debug.c /usr/20020720/src/libexec/ld.elf_so/map_object.c /usr/20020720/src/libexec/ld.elf_so/load.c /usr/20020720/src/libexec/ld.elf_so/search.c /usr/20020720/src/libexec/ld.elf_so/headers.c /usr/20020720/src/libexec/ld.elf_so/paths.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c -traditional-cpp /usr/20020720/src/libexec/ld.elf_so/arch/powerpc/rtld_start.S /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O2 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/arch/powerpc/ppc_reloc.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O2 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/rtld.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O2 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/reloc.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O2 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/symbol.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O2 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/malloc.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O2 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/xmalloc.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O2 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/xprintf.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O2 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/debug.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O2 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/map_object.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O2 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/load.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O2 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/search.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O2 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/headers.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O2 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/paths.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-ld -Bshareable -Bsymbolic -e .rtld_start --script /usr/20020720/src/libexec/ld.elf_so/arch/powerpc/ld.so.script -o ld.elf_so rtld_start.o ppc_reloc.o rtld.o reloc.o symbol.o malloc.o xmalloc.o xprintf.o debug.o map_object.o load.o search.o headers.o paths.o -L/usr/20020720/src/lib/libc/obj -L/usr/DESTDIR/mpc860/20020731/usr/lib -non_shared -lc_pic PATH=/usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/lib/groff:${PATH} /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/nbgroff -Tascii -mtty-char -mandoc /usr/20020720/src/libexec/ld.elf_so/ld.elf_so.1 > ld.elf_so.cat1.tmp && mv ld.elf_so.cat1.tmp ld.elf_so.cat1
で、-O2を-Oにするにはlibexec/ld.elf_so/Makefile, share/mk/sys.mk をみるとDBGというのが-O2と記述しているようなので、 libexec/ld.elf_so/Makefileをいじる。
--- ./libexec/ld.elf_so/Makefile.org Sun Aug 4 21:55:56 2002 +++ ./libexec/ld.elf_so/Makefile Sun Aug 4 21:56:08 2002 @@ -40,7 +40,7 @@ CPPFLAGS+= -D_RTLD_SOURCE #CPPFLAGS+= -DRTLD_DEBUG #CPPFLAGS+= -DRTLD_DEBUG_RELOC -#DBG= -g +DBG= -O .if ${SHLIBDIR} != ${LIBDIR} CPPFLAGS+= -DRTLD_DEFAULT_LIBRARY_PATH=\"${SHLIBDIR}:${LIBDIR}\"
実行すると確かに-Oになってcompileされている模様。 -fpicは最初からついていたのでとくに指定はしなかった。
r1# cd /usr/20020720/src/libexec/ld.elf_so/ r1# ls obj .depend ld.elf_so.cat1 map_object.o rtld.o xmalloc.o debug.o ld.elf_so.org paths.o rtld_start.o xprintf.o headers.o load.o ppc_reloc.o search.o ld.elf_so malloc.o reloc.o symbol.o r1# mv obj/ld.elf_so ld.elf_so.org r1# /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/nbmake-mpc860 clean rm -f rtld_start.o ppc_reloc.o rtld.o reloc.o symbol.o malloc.o xmalloc.o xprintf.o debug.o map_object.o load.o search.o headers.o paths.o ppc_reloc.ln rtld.ln reloc.ln symbol.ln malloc.ln xmalloc.ln xprintf.ln debug.ln map_object.ln load.ln search.ln headers.ln paths.ln rm -f a.out [Ee]rrs mklog core *.core ld.elf_so r1# /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/nbmake-mpc860 /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c -traditional-cpp /usr/20020720/src/libexec/ld.elf_so/arch/powerpc/rtld_start.S /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/arch/powerpc/ppc_reloc.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/rtld.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/reloc.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/symbol.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/malloc.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/xmalloc.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/xprintf.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/debug.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/map_object.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/load.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/search.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/headers.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-gcc -O -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Werror -fpic -msoft-float -DELFSIZE=32 -DVARPSZ -I/usr/20020720/src/libexec/ld.elf_so -DLIBDIR=\"/usr/lib\" -D_PATH_RTLD=\"/usr/libexec/ld.elf_so\" -I/usr/20020720/src/libexec/ld.elf_so -DDEBUG -DRTLD_LOADER -D_RTLD_SOURCE -nostdinc -isystem /usr/DESTDIR/mpc860/20020731/usr/include -c /usr/20020720/src/libexec/ld.elf_so/paths.c /usr/20020720/src/tools/obj/tools.NetBSD-1.6D-i386/bin/powerpc--netbsd-ld -Bshareable -Bsymbolic -e .rtld_start --script /usr/20020720/src/libexec/ld.elf_so/arch/powerpc/ld.so.script -o ld.elf_so rtld_start.o ppc_reloc.o rtld.o reloc.o symbol.o malloc.o xmalloc.o xprintf.o debug.o map_object.o load.o search.o headers.o paths.o -L/usr/20020720/src/lib/libc/obj -L/usr/DESTDIR/mpc860/20020731/usr/lib -non_shared -lc_pic r1# ls -l obj/ld.elf_so* -rwxr-xr-x 1 root wheel 63180 Aug 5 00:56 obj/ld.elf_so -rw-r--r-- 1 root wheel 6829 Aug 1 01:02 obj/ld.elf_so.cat1 -rwxr-xr-x 1 root wheel 63057 Aug 1 01:02 obj/ld.elf_so.org r1#
たしかにサイズの違うbinaryが生成されている。 このファイルをlibexecにcopyする。
このld.elf_soで動かしてみるが、Segmentation fault嵐。 椿井さんのkernelでもオリジナルのkernelでもSegmentation fault。 うーん、どうやったら動くld.elf_soが作れるんだー。
$Lastupdate: Mon Aug 5 10:53:00 2002 $