hns - 日記自動生成システム - Version 2.19.9

先月 2004年09月 来月
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Namazu for hns による簡易全文検索
詳しくは 詳細指定/ヘルプを参照して下さい
検索式:

2004年09月26日() 旧暦 [n年日記]

更新: "2004/09/27 23:57:57"

#1 [NetBSD][build.sh] SHLIB_LINK 問題

8/28 の覚え。

grep SHLIB_LINK t-[s,n]*:

ttyp4:makoto@st4200 17:12:58/040926(...checkout/src)> \
find gnu/dist/gcc -type f -name 't-[s,n]*' -exec grep -7 SHLIB_LINK /dev/null '{}' \;
と入力して表示されるものを見て考えてみた。

SHLIB_LINK= の行がない時 (TNF):

行がない時には、 gnu/dist/gcc/gcc/config/t-slibgcc-elf-ver にある次の定義が生きる。
SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
      -Wl,--soname=$(SHLIB_SONAME) \
      -Wl,--version-script=$(SHLIB_MAP) \
      -o $(SHLIB_NAME) @multilib_flags@ $(SHLIB_OBJS) $(SHLIB_LC) && \
      rm -f $(SHLIB_SOLINK) && \
      $(LN_S) $(SHLIB_NAME) $(SHLIB_SOLINK)
こちらは signal 11 (ただし見聞のみ)

SHLIB_LINK= の行がある時 (nandra):

SHLIB_LINK= の行がある時には、 この定義が空になり
# Disable SHLIB_LINK if shared libgcc not enabled.
という場合になる。そうして、_Unwind_GetIP 問題、つまり
libstdc++.so: undefined reference to `_Unwind_GetIP'
という問題になる。 関連記事: tech-pkg, 2004/02/29

例えば libgcc という名前は src/gnu/lib/libgcc3 の下の 次のところにある。

ttype:makoto@harry  18:10:13/040926(...lib/libgcc3)> find . -name libgcc\* -ls
  512 Sep 12 23:48 ./libgcc
53110 Sep 12 23:57 ./libgcc/obj/libgcc.a
59188 Sep 12 23:57 ./libgcc/obj/libgcc_p.a
54310 Sep 12 23:57 ./libgcc/obj/libgcc_pic.a
  512 Sep 12 23:48 ./libgcc_eh
38752 Sep 12 23:58 ./libgcc_eh/obj/libgcc_eh.a
41364 Sep 12 23:58 ./libgcc_eh/obj/libgcc_eh_p.a
33622 Sep 12 23:58 ./libgcc_eh/obj/libgcc_eh_pic.a
  512 Sep 12 23:48 ./libgcc_s
79194 Sep 12 23:58 ./libgcc_s/obj/libgcc_s_pic.a
43112 Sep 12 23:58 ./libgcc_s/obj/libgcc_s.so.1.0
 1148 Sep 12 23:58 ./libgcc_s/obj/libgcc.map
   15 Sep 12 23:58 ./libgcc_s/obj/libgcc_s.so.1 -> libgcc_s.so.1.0
   15 Sep 12 23:58 ./libgcc_s/obj/libgcc_s.so -> libgcc_s.so.1.0
この中で、件の定義は、次の中にある。
ttype:makoto@harry 18:12:19/040926(...lib/libgcc3)> nm libgcc_s/obj/libgcc_s.so.1.0 | grep -i unwind_getip
00003fe0 T _Unwind_GetIP
これは src/destdir.macppc/lib/ の下には写されていない。 src/gnu/lib/Makefile の中に次の文がある。
.if ${MKGCC} != "no"
. if ${HAVE_GCC3} == "no"
SUBDIR+= libg2c libgcc libobjc libstdc++
. else
SUBDIR+= libg2c3 libfrtbegin libgcc3 libobjc3 libsupc++ libstdc++-v3
. endif
.endif
この libgcc3 の行があるところに行くためには: MKGCC=no でなくて、HAVE_GCC3 == no でないこと。 つまり /etc/mk.conf に次のように書いておく
MKGCC=yes
HAVE_GCC3=yes
(いま読直すと、全然論理が合っていない...上の設定は初期値か..多分)
/usr/share/mk/bsd.own.mk に、次の行がある。
/usr/share/mk/bsd.own.mk:HAVE_GCC3?=    yes
つまり初期値。
libgcc_s.so.1.0 を使わずに _Unwind_GetIP 問題を解決する必要がある ..

./libgcc3/libgcc_eh/obj/libgcc_eh.a:

ttype:makoto@harry 18:56:19/040926(...gnu/lib)> nm ./libgcc3/libgcc_eh/obj/libgcc_eh.a | grep -i unwind_getip
U _Unwind_GetIP
0000239c T _Unwind_GetIP
これを使う。その方法は
  1. 二つを混ぜてしまう libgcc_eh + libgcc = libgcc
  2. gcc が二つを見るようにする
多分、本来は「最近の gcc なら二つを見るようになっている」のに、それを書戻している部分 があるのでは ? と思う。

gnu/dist/gcc/gcc/gcc.c にそれらしいコードが:

1561     /* Transform the extant libgcc_spec into one that uses the shared libgcc
1562        when given the proper command line arguments.  */
1563     while (*p)
1564       {
1565         if (in_sep && *p == '-' && strncmp (p, "-lgcc", 5) == 0)
1566           {
1567             init_gcc_specs (&obstack,
1568 #ifdef NO_SHARED_LIBGCC_MULTILIB
1569                             "-lgcc_s"
1570 #else
1571                             "-lgcc_s%M"
1572 #endif
1573                             ,
1574                             "-lgcc",
1575                             "-lgcc_eh"
1576 #ifdef USE_LIBUNWIND_EXCEPTIONS
1577                             " -lunwind"
1578 #endif
1579                             );
1580
1581             p += 5;
1582             in_sep = 0;
1583           }
1584         else if (in_sep && *p == 'l' && strncmp (p, "libgcc.a%s", 10) == 0)
1585           {
1586             /* Ug.  We don't know shared library extensions.  Hope that
1587                systems that use this form don't do shared libraries.  */
1588             init_gcc_specs (&obstack,
1589 #ifdef NO_SHARED_LIBGCC_MULTILIB
1590                             "-lgcc_s"
1591 #else
1592                             "-lgcc_s%M"
1593 #endif
1594                             ,
1595                             "libgcc.a%s",
1596                             "libgcc_eh.a%s"
1597 #ifdef USE_LIBUNWIND_EXCEPTIONS
1598                             "libunwind.a%s"
1599 #endif
1600                             );
1601             p += 10;
1602             in_sep = 0;
1603           }
-lgcc であれば、内部的に -lgcc_s や -lgcc_eh に書換えてくれる ? 1.7 (2/25/2004) で変更されている。... これを特に書戻したりはしていない ... 最初の問題を見直す:
# link grodvi/grodvi
/export/20040612/checkout/src/obj/tooldir.NetBSD-1.6ZI-powerpc/bin/powerpc--netbsd-c++ -Wl,-nostdlib -o grodvi -Wl,-rpath-link,/export/20040612/checkout/d/lib:/export/20040612/checkout/d/usr/lib -L/export/20040612/checkout/d/lib -B/export/20040612/checkout/d/usr/lib/ -B/export/20040612/checkout/d/usr/lib/ dvi.o /export/20040612/checkout/src/gnu/usr.bin/groff/src/libs/libdriver/obj/libdriver.a /export/20040612/checkout/src/gnu/usr.bin/groff/src/libs/libgroff/obj/libgroff.a -lm -L/export/20040612/checkout/d/usr/lib -L/export/20040612/checkout/d/usr/lib
/export/20040612/checkout/d/usr/lib/libstdc++.so: undefined reference to `_Unwind_GetIP'

nbmake: stopped in /export/20040612/checkout/src/gnu/usr.bin/groff/src/devices/grodvi
strings して見ると、この c++ には eh が出て来ない。-lgcc も指定していない ?
このようなものはいかがだろうか ?
cvs diff -u gnu/dist/gcc/gcc/cp/g++spec.c
Index: gnu/dist/gcc/gcc/cp/g++spec.c
===================================================================
 RCS file: /export/20040820/Repository/src/gnu/dist/gcc/gcc/cp/g++spec.c,v
retrieving revision 1.1.1.1
diff -u -u -r1.1.1.1 g++spec.c
--- gnu/dist/gcc/gcc/cp/g++spec.c       26 Sep 2004 07:18:49 -0000      1.1.1.1
+++ gnu/dist/gcc/gcc/cp/g++spec.c       26 Sep 2004 12:52:24 -0000
@@ -37,10 +37,10 @@
 #endif
 
 #ifndef LIBSTDCXX
-#define LIBSTDCXX "-lstdc++"
+#define LIBSTDCXX "-lstdc++ -lgcc -lgcc_eh"
 #endif
 #ifndef LIBSTDCXX_PROFILE
-#define LIBSTDCXX_PROFILE "-lstdc++"
+#define LIBSTDCXX_PROFILE "-lstdc++ -lgcc -lgcc_eh"
 #endif
 
 void
ttyp5:makoto@st4200  22:01:09/040926(...checkout/src)> 

cannot find -lstdc++ -lgcc:

/export/20040820/checkout/src/obj/tooldir.NetBSD-2.0G-powerpc/lib/gcc-lib/powerpc--netbsd/3.3.3/ ../../../../powerpc--netbsd/bin/ld: cannot find -lstdc++ -lgcc -lgcc_eh
collect2: ld returned 1 exit status



最近の日記
2024年03月10日
停電 (瞬電)
2024年03月03日
the second try on bare-metal
useradd
2024年02月29日
opendkim and senmail
2024年01月24日
chat/iam 0.0.8
2024年01月21日
uselocale vs setlocale (textproc/R-readxl)
以上、1 日分です。
タイトル一覧
カテゴリ分類
Powered by hns-2.19.9, HyperNikkiSystem Project

Count.cgi (since 2000/02/05)