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 marklmi at yahoo.com
Fri May 24 05:33:45 UTC 2019


[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 <marklmi at yahoo.com> 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 at entry=1, __priority=<optimized out>, __priority at 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)



More information about the freebsd-ports mailing list