powerpc64 system-clang-8 based context: x11-toolkits/qt5-declarative fails to build in poudriere: /usr/local/lib/qt5/bin/qlalr segmentation faults in std::type_info::~type_info() () from /usr/local/lib/gcc8/libstdc++.so.6

Mark Millard via freebsd-toolchain <[email protected]>
Newsgroups gmane.os.freebsd.devel.toolchain,gmane.os.freebsd.devel.ppc,gmane.os.freebsd.devel.ports
Message-ID <[email protected]>
[I adjusted the Subject line to give more context.]

[/usr/local/lib/qt5/bin/qlalr and /usr/local/lib/qt5/libQt5Core.so.5
overall use each of the following (somewhat indirectly) in my
system-clang-8-based powerpc64 context:
/usr/local/lib/gcc8/libstdc++.so.6
/usr/lib/libc++.so.1
/lib/libcxxrt.so.1
]


On 2019-May-23, at 21:09, Mark Millard <marklmi at yahoo.com> wrote:

[Merely adding the extra instruction was not the right idea
for what the problem is.]

On 2019-May-23, at 20:10, Mark Millard <marklmi at yahoo.com> wrote:

> [I tried rebuilding things based on a full-bootstrap
> build of lang/gcc8 instead. It made no difference.]
> 
> On 2019-May-23, at 14:17, Mark Millard <marklmi at yahoo.com> wrote:
> 
>> [It looks like code generation missed a level of indirection
>> to me.]
>> 
>>> On 2019-May-23, at 13:46, Mark Millard <marklmi at yahoo.com> wrote:
>>> 
>>> [I should have listed uname -apKU output and such.]
>>> 
>>> On 2019-May-23, at 13:21, Mark Millard <[email protected]> wrote:
>>> 
>>>> The poudriere bulk run that tried to build x11-toolkits/qt5-declarative
>>>> got:
>>>> 
>>>> --- qqmljsgrammar.cpp ---
>>>> /usr/local/lib/qt5/bin/qlalr --no-debug --qt parser/qqmljs.g
>>>> Segmentation fault (core dumped)
>>>> *** [qqmljsgrammar.cpp] Error code 139
>>>> 
>>>> make[3]: stopped in /wrkdirs/usr/ports/x11-toolkits/qt5-declarative/work/qtdeclarative-everywhere-src-5.12.2/src/qml
>>>> 1 error
>>>> 
>>>> Installing qt5-core and manually running under gdb from
>>>> an expansion of the bulk's tar of the failure, I was able
>>>> to get a backtrace:
>>>> 
>>>> (gdb) run --no-debug --qt parser/qqmljs.g
>>>> Starting program: /usr/local/bin/qlalr --no-debug --qt parser/qqmljs.g
>>>> process 26823 is executing new program: /usr/local/lib/qt5/bin/qlalr
>>>> . . . (text about  auto-loading has been declined and such) . . .
>>>> Program received signal SIGSEGV, Segmentation fault.
>>>> 0x0000000810a96be0 in std::type_info::~type_info() () from /usr/local/lib/gcc8/libstdc++.so.6
>>>> (gdb) bt
>>>> #0  0x0000000810a96be0 in std::type_info::~type_info() () from /usr/local/lib/gcc8/libstdc++.so.6
>>>> #1  0x000000081092152c in __cxxabiv1::__dynamic_cast (src_ptr=0x810ab57d0 <(anonymous namespace)::ctype_c>, src_type=0x810a8eaa0 <typeinfo for std::locale::facet>, 
>>>> dst_type=0x810a8fb18 <typeinfo for std::ctype<char>>, src2dst=0) at /wrkdirs/usr/ports/lang/gcc8/work/gcc-8.3.0/libstdc++-v3/libsupc++/dyncast.cc:71
>>>> #2  0x00000008109df908 in std::has_facet<std::ctype<char> > (__loc=...) at /wrkdirs/usr/ports/lang/gcc8/work/.build/powerpc64-portbld-freebsd13.0/libstdc++-v3/include/bits/locale_classes.tcc:104
>>>> #3  0x00000008109cb474 in std::basic_ios<char, std::char_traits<char> >::_M_cache_locale (this=0x810ab48c8 <std::cout+8>, __loc=...)
>>>> at /wrkdirs/usr/ports/lang/gcc8/work/.build/powerpc64-portbld-freebsd13.0/libstdc++-v3/include/bits/basic_ios.tcc:157
>>>> #4  0x00000008109cbad0 in std::basic_ios<char, std::char_traits<char> >::init (this=0x810ab48c8 <std::cout+8>, __sb=0x810ab36f8 <__gnu_internal::buf_cout_sync>)
>>>> at /wrkdirs/usr/ports/lang/gcc8/work/.build/powerpc64-portbld-freebsd13.0/libstdc++-v3/include/bits/basic_ios.tcc:126
>>>> #5  0x000000081093e644 in std::basic_ostream<char, std::char_traits<char> >::basic_ostream (__sb=<optimized out>, this=<optimized out>, __in_chrg=<optimized out>, __vtt_parm=<optimized out>)
>>>> at /wrkdirs/usr/ports/lang/gcc8/work/.build/powerpc64-portbld-freebsd13.0/libstdc++-v3/include/bits/basic_ios.h:460
>>>> #6  std::ios_base::Init::Init (this=<optimized out>) at /wrkdirs/usr/ports/lang/gcc8/work/gcc-8.3.0/libstdc++-v3/src/c++98/ios_init.cc:91
>>>> #7  std::ios_base::Init::Init (this=<optimized out>) at /wrkdirs/usr/ports/lang/gcc8/work/gcc-8.3.0/libstdc++-v3/src/c++98/ios_init.cc:78
>>>> #8  0x000000001000334c in __static_initialization_and_destruction_0 (__initialize_p=__initialize_p@entry=1, __priority=<optimized out>, __priority@entry=65535) at compress.cpp:273
>>>> #9  0x0000000010004c2c in _GLOBAL__sub_I_compress.cpp(void) () at compress.cpp:273
>>>> #10 0x000000081005dfa0 in objlist_call_init (list=<optimized out>, lockstate=<optimized out>) at /usr/src/libexec/rtld-elf/rtld.c:2728
>>>> #11 0x000000081005c830 in _rtld (sp=<optimized out>, exit_proc=<optimized out>, objp=<optimized out>) at /usr/src/libexec/rtld-elf/rtld.c:765
>>>> #12 0x000000081005a240 in ._rtld_start () at /usr/src/libexec/rtld-elf/powerpc64/rtld_start.S:83
>>>> Backtrace stopped: frame did not save the PC
>>>> 
>>>> 
>>>> 
>>>> NOTE: In order to have built devel/qt5-core I used a patch
>>>> to make sure that all the %%LOCALBASE%% strings were replaced
>>>> (otherwise in the powerpc64 system clang 8 based world the
>>>> devel/qt5-core build failed from -I%%LOCALBASE%%... use):
>>>> 
>>>> Index: /usr/ports/Mk/Uses/qt-dist.mk
>>>> ===================================================================
>>>> --- /usr/ports/Mk/Uses/qt-dist.mk	(revision 501994)
>>>> +++ /usr/ports/Mk/Uses/qt-dist.mk	(working copy)
>>>> @@ -251,7 +251,7 @@
>>>> .if ${_QT_VER:M5}
>>>> post-patch: gcc-post-patch
>>>> gcc-post-patch:
>>>> -	${REINPLACE_CMD} 's|%%LOCALBASE%%|${LOCALBASE}|' \
>>>> +	${REINPLACE_CMD} 's|%%LOCALBASE%%|${LOCALBASE}|g' \
>>>> 		${WRKSRC}/mkspecs/common/gcc-base.conf \
>>>> 		${WRKSRC}/mkspecs/freebsd-g++/qmake.conf
>>>> 	${REINPLACE_CMD} 's|%%GCC_DEFAULT%%|${GCC_DEFAULT}|g' \
>>>> @@ -298,7 +298,7 @@
>>>> # ports/194088.
>>>> post-patch: qtbase-post-patch
>>>> qtbase-post-patch:
>>>> -	${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \
>>>> +	${REINPLACE_CMD} 's|%%LOCALBASE%%|${LOCALBASE}|g' \
>>>> 		${WRKSRC}/mkspecs/common/bsd/bsd.conf \
>>>> 		${WRKSRC}/mkspecs/freebsd-clang/qmake.conf
>>>> 
>>>> 
>>>> (So having the missing g added but not having the optional -e
>>>> usage in the other %%LOCALBASE%% related command. The -e
>>>> status is optional here: only one command to sed sed command
>>>> in each sed command. The additional g is the important part.)
>>> 
>>> I should have listed:
>>> . . . (history omitted) . . .

Remembering that my context is system-clang-8 based
world on powerpc64, not gcc 4.2.1 . . .

/usr/ports/Mk/Uses/qt-dist.mk has:

.        if ${ARCH:Mmips*} || ${ARCH:Mpowerpc*} || ${ARCH} == sparc64
_EXTRA_PATCHES_QT5+=    ${PORTSDIR}/devel/${_QT_RELNAME}/files/extra-patch-mkspecs_common_g++-base.conf \
                        ${PORTSDIR}/devel/${_QT_RELNAME}/files/extra-patch-mkspecs_common_gcc-base.conf \
                        ${PORTSDIR}/devel/${_QT_RELNAME}/files/extrapatch-mkspecs_freebsd-g++_qmake.conf
USE_GCC=                yes
.    endif

That is no matter what the system compiler is for powerpc64.

This lead to the below mixing of libstdc++.so.6 and libc++/libcxxrt . . .

qlalr indicates use of both libstdc++ and libc++/libcxxrt :

# ldd /usr/local/lib/qt5/bin/qlalr
/usr/local/lib/qt5/bin/qlalr:
	libQt5Core.so.5 => /usr/local/lib/qt5/libQt5Core.so.5 (0x8100b1000)
	libstdc++.so.6 => /usr/local/lib/gcc8/libstdc++.so.6 (0x81085e000)
	libc.so.7 => /lib/libc.so.7 (0x810ab7000)
	libkvm.so.7 => /lib/libkvm.so.7 (0x810e1c000)
	libprocstat.so.1 => /usr/lib/libprocstat.so.1 (0x810e41000)
	libexecinfo.so.1 => /usr/lib/libexecinfo.so.1 (0x810e5e000)
	libz.so.6 => /lib/libz.so.6 (0x810e71000)
	libicui18n.so.64 => /usr/local/lib/libicui18n.so.64 (0x810e9d000)
	libicuuc.so.64 => /usr/local/lib/libicuuc.so.64 (0x8112ac000)
	libpcre2-16.so.0 => /usr/local/lib/libpcre2-16.so.0 (0x81151e000)
	libglib-2.0.so.0 => /usr/local/lib/libglib-2.0.so.0 (0x8115ce000)
	libm.so.5 => /lib/libm.so.5 (0x81172e000)
	libgcc_s.so.1 => /usr/local/lib/gcc8/libgcc_s.so.1 (0x811765000)
	libthr.so.3 => /lib/libthr.so.3 (0x81178e000)
	libelf.so.2 => /lib/libelf.so.2 (0x8117d7000)
	libutil.so.9 => /lib/libutil.so.9 (0x811804000)
	libicudata.so.64 => /usr/local/lib/libicudata.so.64 (0x81182e000)
	libc++.so.1 => /usr/lib/libc++.so.1 (0x81183f000)
	libcxxrt.so.1 => /lib/libcxxrt.so.1 (0x811958000)
	libiconv.so.2 => /usr/local/lib/libiconv.so.2 (0x81198a000)
	libpcre.so.1 => /usr/local/lib/libpcre.so.1 (0x811a9c000)
	libintl.so.8 => /usr/local/lib/libintl.so.8 (0x811b45000)

And so does libQt5Core.so.5 :

# ldd /usr/local/lib/qt5/libQt5Core.so.5
/usr/local/lib/qt5/libQt5Core.so.5:
	libkvm.so.7 => /lib/libkvm.so.7 (0x8113ad000)
	libprocstat.so.1 => /usr/lib/libprocstat.so.1 (0x8113d2000)
	libexecinfo.so.1 => /usr/lib/libexecinfo.so.1 (0x8113ef000)
	libz.so.6 => /lib/libz.so.6 (0x811402000)
	libicui18n.so.64 => /usr/local/lib/libicui18n.so.64 (0x81142e000)
	libicuuc.so.64 => /usr/local/lib/libicuuc.so.64 (0x81183d000)
	libpcre2-16.so.0 => /usr/local/lib/libpcre2-16.so.0 (0x811aaf000)
	libglib-2.0.so.0 => /usr/local/lib/libglib-2.0.so.0 (0x811b5f000)
	libstdc++.so.6 => /usr/local/lib/gcc8/libstdc++.so.6 (0x811cbf000)
	libm.so.5 => /lib/libm.so.5 (0x811f18000)
	libgcc_s.so.1 => /usr/local/lib/gcc8/libgcc_s.so.1 (0x811f4f000)
	libthr.so.3 => /lib/libthr.so.3 (0x811f78000)
	libc.so.7 => /lib/libc.so.7 (0x810071000)
	libelf.so.2 => /lib/libelf.so.2 (0x811fc1000)
	libutil.so.9 => /lib/libutil.so.9 (0x811fee000)
	libicudata.so.64 => /usr/local/lib/libicudata.so.64 (0x812018000)
	libc++.so.1 => /usr/lib/libc++.so.1 (0x812029000)
	libcxxrt.so.1 => /lib/libcxxrt.so.1 (0x812142000)
	libiconv.so.2 => /usr/local/lib/libiconv.so.2 (0x812174000)
	libpcre.so.1 => /usr/local/lib/libpcre.so.1 (0x812286000)
	libintl.so.8 => /usr/local/lib/libintl.so.8 (0x81232f000)

It appears that the libc++/libcxxrt use comes from:

# ldd /usr/local/lib/libicui18n.so.64
/usr/local/lib/libicui18n.so.64:
	libicuuc.so.64 => /usr/local/lib/libicuuc.so.64 (0x81100f000)
	libicudata.so.64 => /usr/local/lib/libicudata.so.64 (0x811281000)
	libthr.so.3 => /lib/libthr.so.3 (0x811292000)
	libm.so.5 => /lib/libm.so.5 (0x8112db000)
	libc++.so.1 => /usr/lib/libc++.so.1 (0x811312000)
	libcxxrt.so.1 => /lib/libcxxrt.so.1 (0x81142b000)
	libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x81145d000)
	libc.so.7 => /lib/libc.so.7 (0x810071000)

# ldd /usr/local/lib/libicuuc.so.64
/usr/local/lib/libicuuc.so.64:
	libicudata.so.64 => /usr/local/lib/libicudata.so.64 (0x810e72000)
	libthr.so.3 => /lib/libthr.so.3 (0x810e83000)
	libm.so.5 => /lib/libm.so.5 (0x810ecc000)
	libc++.so.1 => /usr/lib/libc++.so.1 (0x810f03000)
	libcxxrt.so.1 => /lib/libcxxrt.so.1 (0x81101c000)
	libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x81104e000)
	libc.so.7 => /lib/libc.so.7 (0x810071000)


===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.