This is the mail archive of the
mailing list for the GCC project.
Re: Unreviewed C++ patch for PA (HP assembler)
- From: "John David Anglin" <dave at hiauly1 dot hia dot nrc dot ca>
- To: jason at redhat dot com (Jason Merrill)
- Cc: gcc-patches at gcc dot gnu dot org, mark at codesourcery dot com
- Date: Mon, 3 Dec 2001 11:24:43 -0500 (EST)
- Subject: Re: Unreviewed C++ patch for PA (HP assembler)
> This seems like the wrong fix; there's nothing special about the type_info
> classes that would merit this kind of treatment. Why doesn't it work for
> them to be internal?
It doesn't work because no implementation is generated for these classes
when they are "internal". The type_info classes are implemented with global
linkage in libstdc++. Thus, either the type_info classes need to have
external linkage or a local implementation needs to be provided in each
object. In the latter case, the type_info classes probably shouldn't have
global scope in libstdc++.
There are definitely more issues like this. The GNU assembler treats
undefined references as external whereas this is an error with the HP
assembler. I haven't done any sort of complete investigation on this
matter but I do know that many of the additional failures observed in
the testsuite with HP assembler are due to undefined symbols.
Here is a run with the HP assembler:
Here is one with the GNU assembler:
This is problably a separate issue but the most serious issue with
libstdc++ on systems without weak support is some templates are not
properly being instantiated:
Executing on host: /xxx/gnu/gcc-3.1/objdir/gcc/g++ -B/xxx/gnu/gcc-3.1/objdir/gcc/ -nostdinc++ -L/xxx/gnu/gcc-3.1/objdir/hppa2.0w-hp-hpux11.11/libstdc++-v3/src -L/xxx/gnu/gcc-3.1/objdir/hppa2.0w-hp-hpux11.11/libstdc++-v3/src/.libs -B/opt/gnu/hppa2.0w-hp-hpux11.11/bin/ -B/opt/gnu/hppa2.0w-hp-hpux11.11/lib/ -isystem /opt/gnu/hppa2.0w-hp-hpux11.11/include -g -DDEBUG_ASSERT -DLOCALEDIR="/xxx/gnu/gcc-3.1/objdir/hppa2.0w-hp-hpux11.11/libstdc++-v3/po/share/locale" -nostdinc++ -I/xxx/gnu/gcc-3.1/objdir/hppa2.0w-hp-hpux11.11/libstdc++-v3/include/hppa2.0w-hp-hpux11.11 -I/xxx/gnu/gcc-3.1/objdir/hppa2.0w-hp-hpux11.11/libstdc++-v3/include -I/xxx/gnu/gcc-3.1/libstdc++-v3/libsupc++ -I/xxx/gnu/gcc-3.1/libstdc++-v3/libio -I/xxx/gnu/gcc-3.1/libstdc++-v3/include/backward -I/xxx/gnu/gcc-3.1/libstdc++-v3/testsuite /xxx/gnu/gcc-3.1/libstdc++-v3/testsuite/22_locale/collate.cc -DDEBUG_ASSERT -lm -o ./collate (timeout = 300)
/usr/ccs/bin/ld: Unsatisfied symbols:
std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> >::_Rep::_S_max_size(data)
std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> >::_Rep::_S_terminal(data)
collect2: ld returned 1 exit status
I mention this because it again involves undefined symbols.
J. David Anglin email@example.com
National Research Council of Canada (613) 990-0752 (FAX: 952-6605)