OpenBSD crashes - GWorkspace coredumps - mismatched C++ libraries

Riccardo Mottola <[email protected]> Fri, 21 May 2021 16:14:16 +0200
Newsgroups gmane.comp.lib.gnustep.devel
Message-ID <[email protected]>
Hi all,

On my latest updated openbsd 6.9 laptop, I get crashes. GWorkspace 
coredumps.

I get several of these warnings before:
GWorkspace:/usr/local/lib/libestdc++.so.19.0: /usr/lib/libc++abi.so.5.0 
: WARNING: symbol(_ZTVN10__cxxabiv120__si_class_type_infoE) size 
mismatch, relink your program


I think the issue comes from the fact that OpenBSD has a very basic 
system gcc 4.2 compiler (no Obj-C support, only C and C++) and then gcc8 
or clang can be installed as packages. On this system I have gcc. It is 
easily distinguished because it is named "egcc"

I suppose that PDFKit is the issue, the only mixed Obj-C and C++ module 
I know for GWorkpace.

so I did some checks. First, I found out there was a bug in GWorkspace 
build files were sub-projects could use the wrong compiler. Now it is fixed.
I double-checked that also PDFKit gets compiled with the correct 
compiler and it is.

ldd /Local/Library/Libraries/libPDFKit.so
/Local/Library/Libraries/libPDFKit.so:
         Start    End      Type  Open Ref GrpRef Name
         01d0b000 21e20000 dlib  2    0   0 
/Local/Library/Frameworks/PDFKit.framework/Versions/1/libPDFKit.so.1.2.0
         0c9dc000 2c9e1000 rlib  0    1   0 
/usr/X11R6/lib/libfreetype.so.30.0
         030ca000 230cc000 rlib  0    2   0      /usr/lib/libz.so.5.0
         0f88c000 2f96f000 rlib  0    1   0 
/usr/local/lib/libestdc++.so.19.0
         080b0000 280b2000 rlib  0    2   0 /usr/lib/libm.so.10.1
         012ba000 212bc000 rlib  0    1   0 /usr/lib/libpthread.so.26.1


FSNode of GWorkspace has this content:
ldd /System/Library/Libraries/libFSNode.so
/System/Library/Libraries/libFSNode.so:
         Start    End      Type  Open Ref GrpRef Name
         04b33000 24b97000 dlib  2    0   0 
/System/Library/Frameworks/FSNode.framework/Versions/0/libFSNode.so.0.1.0
         0c02e000 2c3f9000 rlib  0    1   0 
/System/Library/Libraries/libgnustep-gui.so.0.29
         0dcf4000 2e09c000 rlib  0    2   0 
/System/Library/Libraries/libgnustep-base.so.1.28
         060e5000 260f8000 rlib  0    3   0 /usr/local/lib/libobjc.so.8.0
         01bb0000 21bb2000 rlib  0    9   0 /usr/lib/libm.so.10.1
         08002000 28004000 rlib  0    12   0 /usr/lib/libpthread.so.26.1
         0202f000 2203a000 rlib  0    2   0 
/usr/local/lib/libicui18n.so.19.2
         0c400000 2c40c000 rlib  0    3   0 /usr/local/lib/libicuuc.so.19.2
         095d0000 295d1000 rlib  0    4   0 
/usr/local/lib/libicudata.so.19.2
         06863000 26865000 rlib  0    1   0 /usr/local/lib/libpng.so.18.0
         09788000 2978a000 rlib  0    1   0 /usr/local/lib/libgif.so.8.0
         08c7a000 28c7f000 rlib  0    1   0 /usr/local/lib/libtiff.so.40.5
         0eaed000 2eaef000 rlib  0    7   0      /usr/lib/libz.so.5.0
         0479f000 247a1000 rlib  0    2   0 /usr/local/lib/libjpeg.so.70.0
         044f5000 244f7000 rlib  0    3   0 /usr/local/lib/libgmp.so.11.0
         05a36000 25a43000 rlib  0    1   0 /usr/local/lib/libgnutls.so.46.6
         0a161000 2a163000 rlib  0    1   0 /usr/local/lib/libxslt.so.4.0
         07034000 2703b000 rlib  0    2   0 /usr/local/lib/libxml2.so.16.1
         02349000 2234b000 rlib  0    7   0 /usr/local/lib/libiconv.so.7.0
         01834000 21836000 rlib  0    3   0 /usr/local/lib/libffi.so.1.2
         0f58d000 2f590000 rlib  0    1   0 /usr/lib/libiberty.so.12.0
         0bc12000 2bc16000 rlib  0    1   0 /usr/local/lib/libcurl.so.26.9
         0e30e000 2e314000 rlib  0    2   0 /usr/lib/libc++.so.7.0
         02751000 22755000 rlib  0    3   0 /usr/lib/libc++abi.so.5.0
         0e1f0000 2e1f2000 rlib  0    1   0 /usr/local/lib/libzstd.so.5.0
         0ea20000 2ea22000 rlib  0    3   0 /usr/local/lib/liblzma.so.2.1
         0ea70000 2ea73000 rlib  0    1   0 /usr/local/lib/libintl.so.7.0
         00c37000 20c42000 rlib  0    1   0 /usr/local/lib/libp11-kit.so.3.0
         0035c000 2035e000 rlib  0    1   0 /usr/local/lib/libidn2.so.1.1
         007ce000 207d2000 rlib  0    2   0 
/usr/local/lib/libunistring.so.0.1
         028fc000 228fe000 rlib  0    1   0 /usr/local/lib/libtasn1.so.4.2
         0efc2000 2efc4000 rlib  0    2   0 /usr/local/lib/libnettle.so.7.0
         0a556000 2a558000 rlib  0    1   0 /usr/local/lib/libhogweed.so.3.0
         0805e000 28061000 rlib  0    1   0 
/usr/local/lib/libnghttp2.so.0.17
         01c7e000 21c83000 rlib  0    1   0 /usr/lib/libssl.so.48.2
         0aba2000 2abb9000 rlib  0    2   0 /usr/lib/libcrypto.so.46.2


But even base has this:
/System/Library/Libraries/libgnustep-base.so:
         Start    End      Type  Open Ref GrpRef Name
         02c4d000 22ff5000 dlib  2    0   0 
/System/Library/Libraries/libgnustep-base.so.1.28.0
         0f507000 2f51a000 rlib  0    1   0 /usr/local/lib/libobjc.so.8.0
         079f7000 279f9000 rlib  0    3   0 /usr/local/lib/libgmp.so.11.0
         07d34000 27d41000 rlib  0    1   0 /usr/local/lib/libgnutls.so.46.6
         08e97000 28e99000 rlib  0    1   0 /usr/local/lib/libxslt.so.4.0
         01a04000 21a0b000 rlib  0    2   0 /usr/local/lib/libxml2.so.16.1
         0204a000 2204c000 rlib  0    7   0 /usr/local/lib/libiconv.so.7.0
         0e53c000 2e53e000 rlib  0    3   0 /usr/local/lib/libffi.so.1.2
         08f88000 28f8b000 rlib  0    1   0 /usr/lib/libiberty.so.12.0
         0f14f000 2f151000 rlib  0    9   0 /usr/lib/libpthread.so.26.1
         025e0000 225e2000 rlib  0    4   0      /usr/lib/libz.so.5.0
         09427000 29432000 rlib  0    1   0 
/usr/local/lib/libicui18n.so.19.2
         0925e000 2926a000 rlib  0    2   0 /usr/local/lib/libicuuc.so.19.2
         07be7000 27be8000 rlib  0    3   0 
/usr/local/lib/libicudata.so.19.2
         03760000 23764000 rlib  0    1   0 /usr/local/lib/libcurl.so.26.9
         0167f000 21681000 rlib  0    5   0 /usr/lib/libm.so.10.1
         0175c000 2175f000 rlib  0    1   0 /usr/local/lib/libintl.so.7.0
         0887f000 2888a000 rlib  0    1   0 /usr/local/lib/libp11-kit.so.3.0
         0c4ff000 2c501000 rlib  0    1   0 /usr/local/lib/libidn2.so.1.1
         031f9000 231fd000 rlib  0    2   0 
/usr/local/lib/libunistring.so.0.1
         0b679000 2b67b000 rlib  0    1   0 /usr/local/lib/libtasn1.so.4.2
         04762000 24764000 rlib  0    2   0 /usr/local/lib/libnettle.so.7.0
         0ef10000 2ef12000 rlib  0    1   0 /usr/local/lib/libhogweed.so.3.0
         01ccb000 21ccd000 rlib  0    2   0 /usr/local/lib/liblzma.so.2.1
         08fb7000 28fbd000 rlib  0    2   0 /usr/lib/libc++.so.7.0
         0ca18000 2ca1c000 rlib  0    3   0 /usr/lib/libc++abi.so.5.0
         0ac4c000 2ac4f000 rlib  0    1   0 
/usr/local/lib/libnghttp2.so.0.17
         0b84d000 2b852000 rlib  0    1   0 /usr/lib/libssl.so.48.2
         0bb08000 2bb1f000 rlib  0    2   0 /usr/lib/libcrypto.so.46.2


So indeed, once running, there is a mix of:

         0f88c000 2f96f000 rlib  0    1   0 
/usr/local/lib/libestdc++.so.19.0

vs:
         08fb7000 28fbd000 rlib  0    2   0 /usr/lib/libc++.so.7.0
         0ca18000 2ca1c000 rlib  0    3   0 /usr/lib/libc++abi.so.5.0


but why do base and FSNode link against this system library? Do we use 
C++ stuff? not that I know, explicitely. Only PDFKit has an explicit use 
of the C++ compiler.

I wonder how I can mitigate this

Riccardo