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
This could be a binutils issue. Can you add -v to the command line and provide the output?
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?
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.
(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?
(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 .
Created attachment 52976 [details] verbose output without -Wl, as-needed
Created attachment 52977 [details] verbose output without -Wl, Bsymbolic-functions
Can you do nm on libstdc++.so in the sysroot?
Created attachment 52978 [details] compressed output of nm for cross-compilers libstdc++ this is the output of nm for the cross-compilers libstdc++.so
00082930 T _ZNKSt9type_infoeqERKS_ As expected. I still suspect a binutils issue. Is there a way to go back to 2.33.x?
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?
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)
Created attachment 52979 [details] verbose output with -v and binutils-2.38 don't see any difference with binutils-2.38?
any objections to reporting this to binutils bugzilla at sourceware?