Bug 105601 - spidermonkey-91 fails to compile with: ../12.1.0/include/g++-v12/typeinfo:115: undefined reference to `std::type_info::operator==(std::type_info const&) const'
Summary: spidermonkey-91 fails to compile with: ../12.1.0/include/g++-v12/typeinfo:115...
Status: UNCONFIRMED
Alias: None
Product: gcc
Classification: Unclassified
Component: target (show other bugs)
Version: 12.1.0
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL: https://bugzilla.mozilla.org/show_bug...
Keywords: link-failure
Depends on:
Blocks:
 
Reported: 2022-05-14 09:12 UTC by tt_1
Modified: 2022-09-20 07:00 UTC (History)
1 user (show)

See Also:
Host:
Target: armv7a-unknown-linux-gnueabihf
Build:
Known to work:
Known to fail:
Last reconfirmed:


Attachments
verbose output with -v (2.12 KB, text/plain)
2022-05-14 10:20 UTC, tt_1
Details
verbose output without -Wl, as-needed (2.10 KB, text/plain)
2022-05-14 11:02 UTC, tt_1
Details
verbose output without -Wl, Bsymbolic-functions (2.09 KB, text/plain)
2022-05-14 11:02 UTC, tt_1
Details
compressed output of nm for cross-compilers libstdc++ (106.58 KB, application/gzip)
2022-05-14 11:39 UTC, tt_1
Details
verbose output with -v and binutils-2.38 (2.12 KB, text/plain)
2022-05-15 07:19 UTC, tt_1
Details

Note You need to log in before you can comment on or make changes to this bug.
Description tt_1 2022-05-14 09:12:55 UTC
hey there, 

I really hope I'm not misstaken here - tried to cross compile spidermonkey-91 from an amd64 host to an armv7a target to me it seems that there is possibly a bug somehwere in libstdc++-v3?


/usr/bin/armv7a-unknown-linux-gnueabihf-g++ --sysroot /usr/armv7a-unknown-linux-gnueabihf -fstack-protector-strong -Wall -Wempty-body -Wignored-qualifiers -Wpointer-arith -Wsign-compare -Wtype-limits -Wunreachable-code -Wno-invalid-offsetof -Wc++2a-compat -Wduplicated-cond -Wimplicit-fallthrough -Wno-error=maybe-uninitialized -Wno-error=deprecated-declarations -Wno-error=array-bounds -Wno-error=coverage-mismatch -Wno-error=free-nonheap-object -Wno-multistatement-macros -Wno-error=class-memaccess -Wno-error=deprecated-copy -Wno-error=unused-but-set-variable -Wformat -Wformat-security -Wformat-overflow=2 -Wno-psabi -fno-sized-deallocation -fno-aligned-new -O2 -pipe -fomit-frame-pointer -fno-tree-loop-vectorize -mthumb -mno-thumb-interwork -mfpu=neon -fPIC -fno-rtti -ffunction-sections -fdata-sections -fno-exceptions -fno-math-errno -pthread -pipe -g -fno-omit-frame-pointer -funwind-tables  -shared -Wl,-z,defs -Wl,--gc-sections -Wl,-h,libmozjs-91.so -o libmozjs-91.so /usr/armv7a-unknown-linux-gnueabihf/tmp/portage/dev-lang/spidermonkey-91.9.0/work/build/js/src/build/libmozjs-91_so.list   -lpthread -Wl,-O1 -Wl,--as-needed -mthumb -Wl,-z,noexecstack -Wl,-z,text -Wl,-z,relro -Wl,-z,nocopyreloc -Wl,-Bsymbolic-functions -fstack-protector-strong -Wl,-rpath-link,/usr/armv7a-unknown-linux-gnueabihf/tmp/portage/dev-lang/spidermonkey-91.9.0/work/build/dist/bin -Wl,-rpath-link,/usr/lib  /usr/armv7a-unknown-linux-gnueabihf/tmp/portage/dev-lang/spidermonkey-91.9.0/work/build/thumbv7neon-unknown-linux-gnueabihf/release/libjsrust.a  -Wl,--version-script,symverscript -Wl,-soname,libmozjs-91.so.0  -lm  -L/usr/armv7a-unknown-linux-gnueabihf/usr/lib -lplds4 -lplc4 -lnspr4 -lz -lm -ldl
/usr/libexec/gcc/armv7a-unknown-linux-gnueabihf/ld: /usr/armv7a-unknown-linux-gnueabihf/tmp/portage/dev-lang/spidermonkey-91.9.0/work/build/js/src/build/../../../config/external/icu/common/rbbi.o: in function `std::type_info::operator!=(std::type_info const&) const':
/usr/lib/gcc/armv7a-unknown-linux-gnueabihf/12.1.0/include/g++-v12/typeinfo:115: undefined reference to `std::type_info::operator==(std::type_info const&) const'
/usr/libexec/gcc/armv7a-unknown-linux-gnueabihf/ld: /usr/armv7a-unknown-linux-gnueabihf/tmp/portage/dev-lang/spidermonkey-91.9.0/work/build/js/src/build/../../../config/external/icu/common/schriter.o: in function `std::type_info::operator!=(std::type_info const&) const':
/usr/lib/gcc/armv7a-unknown-linux-gnueabihf/12.1.0/include/g++-v12/typeinfo:115: undefined reference to `std::type_info::operator==(std::type_info const&) const'
/usr/libexec/gcc/armv7a-unknown-linux-gnueabihf/ld: /usr/armv7a-unknown-linux-gnueabihf/tmp/portage/dev-lang/spidermonkey-91.9.0/work/build/js/src/build/../../../config/external/icu/common/stringtriebuilder.o: in function `icu_69::StringTrieBuilder::Node::operator==(icu_69::StringTrieBuilder::Node const&) const':
/usr/armv7a-unknown-linux-gnueabihf/tmp/portage/dev-lang/spidermonkey-91.9.0/work/firefox-91.9.0/intl/icu/source/common/stringtriebuilder.cpp:388: undefined reference to `std::type_info::operator==(std::type_info const&) const'
/usr/libexec/gcc/armv7a-unknown-linux-gnueabihf/ld: /usr/armv7a-unknown-linux-gnueabihf/tmp/portage/dev-lang/spidermonkey-91.9.0/work/firefox-91.9.0/intl/icu/source/common/stringtriebuilder.cpp:388: undefined reference to `std::type_info::operator==(std::type_info const&) const'
/usr/libexec/gcc/armv7a-unknown-linux-gnueabihf/ld: /usr/armv7a-unknown-linux-gnueabihf/tmp/portage/dev-lang/spidermonkey-91.9.0/work/firefox-91.9.0/intl/icu/source/common/stringtriebuilder.cpp:388: undefined reference to `std::type_info::operator==(std::type_info const&) const'
/usr/libexec/gcc/armv7a-unknown-linux-gnueabihf/ld: /usr/armv7a-unknown-linux-gnueabihf/tmp/portage/dev-lang/spidermonkey-91.9.0/work/build/js/src/build/../../../config/external/icu/common/stringtriebuilder.o:/usr/armv7a-unknown-linux-gnueabihf/tmp/portage/dev-lang/spidermonkey-91.9.0/work/firefox-91.9.0/intl/icu/source/common/stringtriebuilder.cpp:388: more undefined references to `std::type_info::operator==(std::type_info const&) const' follow
collect2: error: ld returned 1 exit status


I will attach the full and compressed build log

toolchain is: 

gcc-12.1.0, binutils-2.37_p1-r2, glibc-2.34-r13 and rust 1.59.0; on a gentoo-amd64 machine
Comment 1 Andrew Pinski 2022-05-14 09:23:58 UTC
This could be a binutils issue.

Can you add -v to the command line and provide the output?
Comment 2 tt_1 2022-05-14 10:20:44 UTC
Created attachment 52975 [details]
verbose output with -v

thank you for your answer, I'm uncertain as the error is from linking but points to gcc-12 headers?
Comment 3 tt_1 2022-05-14 10:39:53 UTC
maybe something went wrong with this patch:  

https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=3633cc54284450433b81f0340483e15df1a49a3c

its arm specific, and merges different implementations into one. 

But I'm not close to being an expert here.
Comment 4 Andrew Pinski 2022-05-14 10:52:40 UTC
(In reply to tt_1 from comment #3)
> maybe something went wrong with this patch:  
> 
> https://gcc.gnu.org/git/?p=gcc.git;a=commit;
> h=3633cc54284450433b81f0340483e15df1a49a3c
> 
> its arm specific, and merges different implementations into one. 
> 
> But I'm not close to being an expert here.

Right and I am still thinking there is a linker issue.

Can you remove -Wl,--as-needed option from the command line and try again?
Comment 5 Andrew Pinski 2022-05-14 10:54:10 UTC
(In reply to Andrew Pinski from comment #4)
> (In reply to tt_1 from comment #3)
> > maybe something went wrong with this patch:  
> > 
> > https://gcc.gnu.org/git/?p=gcc.git;a=commit;
> > h=3633cc54284450433b81f0340483e15df1a49a3c
> > 
> > its arm specific, and merges different implementations into one. 
> > 
> > But I'm not close to being an expert here.
> 
> Right and I am still thinking there is a linker issue.
> 
> Can you remove -Wl,--as-needed option from the command line and try again?

The other one to try to remove is -Wl,-Bsymbolic-functions .
Comment 6 tt_1 2022-05-14 11:02:01 UTC
Created attachment 52976 [details]
verbose output without -Wl, as-needed
Comment 7 tt_1 2022-05-14 11:02:28 UTC
Created attachment 52977 [details]
verbose output without -Wl, Bsymbolic-functions
Comment 8 Andrew Pinski 2022-05-14 11:21:48 UTC
Can you do nm on libstdc++.so in the sysroot?
Comment 9 tt_1 2022-05-14 11:39:31 UTC
Created attachment 52978 [details]
compressed output of nm for cross-compilers libstdc++

this is the output of nm for the cross-compilers libstdc++.so
Comment 10 Andrew Pinski 2022-05-14 11:47:32 UTC
00082930 T _ZNKSt9type_infoeqERKS_

As expected.
I still suspect a binutils issue.

Is there a way to go back to 2.33.x?
Comment 11 tt_1 2022-05-14 12:06:45 UTC
well, my systems toolchain is gcc-12.1.0, glibc-2.34-r13 and binutils-2.37_p1-r2 - on gentoo, binutils is slotted so I can downgrade rather easily.

but I guess you would like me to try another binutils to bootstrap the cross-compiler toolchain, right? removing the cross-compiler-toolchain and rebootstraping the whole cross-compiler is in fact very easy and I'm happy to try any sensible combination.

available binutils for cross are: 2.32-r2, 2.33.1-r1, 2.34-r2, 2.35.2, 2.36.1-r2, 2.37_p1-r2, 2.38-r2

or did you in fact ask me to downgrade glibc, from 2.34 to 2.33?
Comment 12 tt_1 2022-05-15 05:07:24 UTC
with gcc-12.1.0, glibc-2.34-r13 and old binutils-2.33.1-r1: 

/usr/bin/armv7a-unknown-linux-gnueabihf-g++ --sysroot /usr/armv7a-unknown-linux-gnueabihf -fstack-protector-strong -Wall -Wempty-body -Wignored-qualifiers -Wpointer-arith -Wsign-compare -Wtype-limits -Wunreachable-code -Wno-invalid-offsetof -Wc++2a-compat -Wduplicated-cond -Wimplicit-fallthrough -Wno-error=maybe-uninitialized -Wno-error=deprecated-declarations -Wno-error=array-bounds -Wno-error=coverage-mismatch -Wno-error=free-nonheap-object -Wno-multistatement-macros -Wno-error=class-memaccess -Wno-error=deprecated-copy -Wno-error=unused-but-set-variable -Wformat -Wformat-security -Wformat-overflow=2 -Wno-psabi -fno-sized-deallocation -fno-aligned-new -O2 -pipe -fomit-frame-pointer -fno-tree-loop-vectorize -mthumb -mno-thumb-interwork -mfpu=neon -fPIC -fno-rtti -ffunction-sections -fdata-sections -fno-exceptions -fno-math-errno -pthread -pipe -g -fno-omit-frame-pointer -funwind-tables  -shared -Wl,-z,defs -Wl,--gc-sections -Wl,-h,libmozjs-91.so -o libmozjs-91.so /usr/armv7a-unknown-linux-gnueabihf/tmp/portage/dev-lang/spidermonkey-91.9.0/work/build/js/src/build/libmozjs-91_so.list   -lpthread -Wl,-O1 -Wl,--as-needed -mthumb -Wl,-z,noexecstack -Wl,-z,text -Wl,-z,relro -Wl,-z,nocopyreloc -Wl,-Bsymbolic-functions -fstack-protector-strong -Wl,-rpath-link,/usr/armv7a-unknown-linux-gnueabihf/tmp/portage/dev-lang/spidermonkey-91.9.0/work/build/dist/bin -Wl,-rpath-link,/usr/lib  /usr/armv7a-unknown-linux-gnueabihf/tmp/portage/dev-lang/spidermonkey-91.9.0/work/build/thumbv7neon-unknown-linux-gnueabihf/release/libjsrust.a  -Wl,--version-script,symverscript -Wl,-soname,libmozjs-91.so.0  -lm  -L/usr/armv7a-unknown-linux-gnueabihf/usr/lib -lplds4 -lplc4 -lnspr4 -lz -lm -ldl
/usr/libexec/gcc/armv7a-unknown-linux-gnueabihf/ld: /usr/libexec/gcc/armv7a-unknown-linux-gnueabihf/ld: DWARF error: can't find .debug_ranges section.
../../../config/external/icu/common/rbbi.o: in function `icu_69::RuleBasedBreakIterator::operator==(icu_69::BreakIterator const&) const':
rbbi.cpp:(.text._ZNK6icu_6922RuleBasedBreakIteratoreqERKNS_13BreakIteratorE+0x14): undefined reference to `std::type_info::operator==(std::type_info const&) const'
/usr/libexec/gcc/armv7a-unknown-linux-gnueabihf/ld: /usr/libexec/gcc/armv7a-unknown-linux-gnueabihf/ld: DWARF error: can't find .debug_ranges section.
../../../config/external/icu/common/schriter.o: in function `icu_69::StringCharacterIterator::operator==(icu_69::ForwardCharacterIterator const&) const':
schriter.cpp:(.text._ZNK6icu_6923StringCharacterIteratoreqERKNS_24ForwardCharacterIteratorE+0x18): undefined reference to `std::type_info::operator==(std::type_info const&) const'
/usr/libexec/gcc/armv7a-unknown-linux-gnueabihf/ld: /usr/libexec/gcc/armv7a-unknown-linux-gnueabihf/ld: DWARF error: can't find .debug_ranges section.
../../../config/external/icu/common/stringtriebuilder.o: in function `icu_69::StringTrieBuilder::Node::operator==(icu_69::StringTrieBuilder::Node const&) const':
stringtriebuilder.cpp:(.text._ZNK6icu_6917StringTrieBuilder4NodeeqERKS1_+0x18): undefined reference to `std::type_info::operator==(std::type_info const&) const'
/usr/libexec/gcc/armv7a-unknown-linux-gnueabihf/ld: ../../../config/external/icu/common/stringtriebuilder.o: in function `icu_69::StringTrieBuilder::FinalValueNode::operator==(icu_69::StringTrieBuilder::Node const&) const':
stringtriebuilder.cpp:(.text._ZNK6icu_6917StringTrieBuilder14FinalValueNodeeqERKNS0_4NodeE+0x18): undefined reference to `std::type_info::operator==(std::type_info const&) const'
/usr/libexec/gcc/armv7a-unknown-linux-gnueabihf/ld: ../../../config/external/icu/common/stringtriebuilder.o: in function `icu_69::StringTrieBuilder::SplitBranchNode::operator==(icu_69::StringTrieBuilder::Node const&) const':
stringtriebuilder.cpp:(.text._ZNK6icu_6917StringTrieBuilder15SplitBranchNodeeqERKNS0_4NodeE+0x18): undefined reference to `std::type_info::operator==(std::type_info const&) const'
/usr/libexec/gcc/armv7a-unknown-linux-gnueabihf/ld: ../../../config/external/icu/common/stringtriebuilder.o:stringtriebuilder.cpp:(.text._ZNK6icu_6917StringTrieBuilder14ListBranchNodeeqERKNS0_4NodeE+0x18): more undefined references to `std::type_info::operator==(std::type_info const&) const' follow
collect2: error: ld returned 1 exit status


looks identical to me 

(the additional dwarf bug has been fixed in binutils since)
Comment 13 tt_1 2022-05-15 07:19:55 UTC
Created attachment 52979 [details]
verbose output with -v and binutils-2.38

don't see any difference with binutils-2.38?
Comment 14 tt_1 2022-05-15 14:48:22 UTC
any objections to reporting this to binutils bugzilla at sourceware?