Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 25 Apr 2022 13:01:48 +0000
From:      jbo@insane.engineer
To:        FreeBSD Hackers <freebsd-hackers@freebsd.org>
Cc:        Mark Millard <marklmi@yahoo.com>, joerg@bec.de
Subject:   Re: llvm & RTTI over shared libraries
Message-ID:  <ovVAJ_I0kr_8S6cVa0jixF9EZsG5XKsEGllRx66SMNQMIQUVbO2eSxOpAH9VeYeJVWygWAb3wAivQGNfGMs66nVHwliCC-fUS5W_IlJ-VJs=@insane.engineer>
In-Reply-To: <3141FACD-5154-40CC-91CC-0A6C55B7220B@yahoo.com>
References:  <E22DA198-862B-4B99-8E0B-E63AEBDCCF35@yahoo.com> <3141FACD-5154-40CC-91CC-0A6C55B7220B@yahoo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.

--b1_6fZ6VCZszW1kBu5na9SCxToUWtvKMDShcGjVMVxszi0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Hello guys,

Thank you for your replies.

I've created a small minimal test case which reproduces the problem (attach=
ed).
The key points here are:
  - CMake based project consisting of:
    - The header-only interface for the plugin and the types (test-interfac=
e).
    - The main executable that loads the plugin (test-core).
    - A plugin implementation (plugin-one).
  - Compiles out-of-the-box on FreeBSD 13/stable with both lang/gcc11 and d=
evel/llvm14.
  - It uses the exact mechanism I use to load the plugins in my actual appl=
ication.

stdout output when compiling with lang/gcc11:

  t is type_int
  t is type_string
  done.


stdout output when compiling with lang/llvm14:

  could not cast t
  could not cast t
  done.


Unfortunately, I could not yet figure out which compiler/linker flags llvm =
requires to implement the same behavior as GCC does. I understand that even=
tually I'd be better of rewriting the necessary parts to eliminate that pro=
blem but this is not a quick job.

Could somebody lend me a hand in figuring out which compiler/linker flags a=
re necessary to get this to work with llvm?


Best regards,
~ Joel



------- Original Message -------
On Saturday, April 23rd, 2022 at 22:42, Mark Millard <marklmi@yahoo.com> wr=
ote:


>
>
>
> On 2022-Apr-23, at 15:33, Mark Millard marklmi@yahoo.com wrote:
>
> > =E2=80=A2 Joerg Sonnenberger <joerg_at_bec.de> wrote on
> > =E2=80=A2 Date: Sat, 23 Apr 2022 21:33:04 UTC :
> >
> > > Am Tue, Apr 19, 2022 at 11:03:33PM -0700 schrieb Mark Millard:
> > >
> > > > Joerg Sonnenberger <joerg_at_bec.de> wrote on
> > > > Tue, 19 Apr 2022 21:49:44 UTC :
> > > >
> > > > > Am Thu, Apr 14, 2022 at 04:36:24PM +0000 schrieb jbo@insane.engin=
eer:
> > > > >
> > > > > > > After some research I seem to understand that the way that RT=
TI is handled over shared library boundaries is different between GCC and L=
LVM.
> > > > >
> > > > > I think you are running into the old problem that GCC thinks comp=
aring
> > > > > types by name makes sense where as everyone else compares types b=
y type
> > > > > pointer identity.
> > > >
> > > > Seems out of date for the GCC information . . .
> > > >
> > > > https://gcc.gnu.org/faq.html#dso reports:
> > > >
> > > > QUOTE
> > > > The new C++ ABI in the GCC 3.0 series uses address comparisons, rat=
her than string compares, to determine type equality.
> > > > END QUOTE
> > >
> > > Compare that with the implementation in <typeinfo>.
> >
> > Looking at /usr/local/lib/gcc11/include/c++/typeinfo I see:
> > configurable, in part based on the intent for possible
> > handling RTLD_LOCAL (when weak symbol are available). I'll
> > quote the comments for reference . . .
> >
> > // Determine whether typeinfo names for the same type are merged (in wh=
ich
> > // case comparison can just compare pointers) or not (in which case str=
ings
> > // must be compared), and whether comparison is to be implemented inlin=
e or
> > // not. We used to do inline pointer comparison by default if weak symb=
ols
> > // are available, but even with weak symbols sometimes names are not me=
rged
> > // when objects are loaded with RTLD_LOCAL, so now we always use strcmp=
 by
> > // default. For ABI compatibility, we do the strcmp inline if weak symb=
ols
> > // are available, and out-of-line if not. Out-of-line pointer compariso=
n
> > // is used where the object files are to be portable to multiple system=
s,
> > // some of which may not be able to use pointer comparison, but the
> > // particular system for which libstdc++ is being built can use pointer
> > // comparison; in particular for most ARM EABI systems, where the ABI
> > // specifies out-of-line comparison. The compiler's target configuratio=
n
> > // can override the defaults by defining __GXX_TYPEINFO_EQUALITY_INLINE=
 to
> > // 1 or 0 to indicate whether or not comparison is inline, and
> > // __GXX_MERGED_TYPEINFO_NAMES to 1 or 0 to indicate whether or not poi=
nter
> > // comparison can be used.
> >
> > So, to some extent, the details are choices in the likes of lang/gcc11
> > instead of an always-the-same rule for handling. Below gives some
> > more idea of what __GXX_TYPEINFO_EQUALITY_INLINE and
> > __GXX_MERGED_TYPEINFO_NAMES do for configuration. Is there a combinatio=
n
> > that matches FreeBSD's system clang++ related behavior? If yes, should
> > the likes of lang/gcc11 be using that combination?
>
>
> I should have quoted a little bit more that describes the
> defaults used:
>
> #ifndef __GXX_MERGED_TYPEINFO_NAMES
> // By default, typeinfo names are not merged.
> #define __GXX_MERGED_TYPEINFO_NAMES 0
> #endif
>
> // By default follow the old inline rules to avoid ABI changes.
> #ifndef __GXX_TYPEINFO_EQUALITY_INLINE
> #if !GXX_WEAK
> #define __GXX_TYPEINFO_EQUALITY_INLINE 0
> #else
> #define __GXX_TYPEINFO_EQUALITY_INLINE 1
> #endif
> #endif
>
> . . .
>
> > #if !__GXX_TYPEINFO_EQUALITY_INLINE
> > // In old abi, or when weak symbols are not supported, there can
> > // be multiple instances of a type_info object for one
> > // type. Uniqueness must use the _name value, not object address.
> > . . .
> > #else
> > #if !__GXX_MERGED_TYPEINFO_NAMES
> > . . .
> > // Even with the new abi, on systems that support dlopen
> > // we can run into cases where type_info names aren't merged,
> > // so we still need to do string comparison.
> > . . .
> > #else
> > // On some targets we can rely on type_info's NTBS being unique,
> > // and therefore address comparisons are sufficient.
> > . . .
> > #endif
> > #endif
>
>
>
> =3D=3D=3D
> Mark Millard
> marklmi at yahoo.com
--b1_6fZ6VCZszW1kBu5na9SCxToUWtvKMDShcGjVMVxszi0
Content-Type: application/zip; name=clang_test.zip
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=clang_test.zip

UEsDBAoAAAAAAMClk1QAAAAAAAAAAAAAAAAQABwAY2xhbmdfdGVzdF9kaXN0L1VUCQADiB9fYuMd
X2J1eAsAAQTpAwAABOkDAABQSwMEFAAAAAgA4KSTVIZ8FyuFAAAAsAAAAB4AHABjbGFuZ190ZXN0
X2Rpc3QvQ01ha2VMaXN0cy50eHRVVAkAA+MdX2LjHV9idXgLAAEE6QMAAATpAwAAbYy9DsIgFEZ3
nqIjLA71CUzLQIzQ2Mb1BuHaoAUqP4NvL7su33DOyWe8fiF4F5yvHhK+q0to6Y1fZ6Fkdzz0PSN7
ik80hZpNhxUK5sIIyVjocDmdOUxqFkurQciRT7yNXGBQI++UbKG2FnK923ZsSkwfamJC9otdKJge
2vxz+1ZXFzIjX1BLAwQKAAAAAADgpJNUAAAAAAAAAAAAAAAAGAAcAGNsYW5nX3Rlc3RfZGlzdC9w
bHVnaW5zL1VUCQAD4x1fYuMdX2J1eAsAAQTpAwAABOkDAABQSwMECgAAAAAA4KSTVKSNxmYdAAAA
HQAAACYAHABjbGFuZ190ZXN0X2Rpc3QvcGx1Z2lucy9DTWFrZUxpc3RzLnR4dFVUCQAD4x1fYuMd
X2J1eAsAAQTpAwAABOkDAABhZGRfc3ViZGlyZWN0b3J5KHBsdWdpbl9vbmUpClBLAwQKAAAAAADg
pJNUAAAAAAAAAAAAAAAAIwAcAGNsYW5nX3Rlc3RfZGlzdC9wbHVnaW5zL3BsdWdpbl9vbmUvVVQJ
AAPjHV9i4x1fYnV4CwABBOkDAAAE6QMAAFBLAwQUAAAACADgpJNUef00AmkBAACPAwAALQAcAGNs
YW5nX3Rlc3RfZGlzdC9wbHVnaW5zL3BsdWdpbl9vbmUvcGx1Z2luLmNwcFVUCQAD4x1fYuMdX2J1
eAsAAQTpAwAABOkDAACVUttuwjAMfc9XeEWa2j3Q98J44RP2AVVIXIiWJVHjsCHUfftCsnIRjG1W
VSX28fFxeybKCB0kQjGd1vFRhrDvuMDa6bBWZrpxrmBsMsLmynrqkb8tGBOaew8ZBw2DGC6stBJw
ZGmaXGZ7lkvfsJQsK3gGiR0PmmYp/3ks2C32vYoDzxAJsrVKgrStp9B1pbDGE3iSTeM3vEfZOurn
Z+Np57BdcY+LR6AKMn4kT4T79D5EXcMLN4p2IDYoXo951UH5EJtPyEOkocIGgvkcCgLlwQSt4/zi
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
VEmMUh/6W7nAC1BLAwQUAAAACADgpJNUivbHKXsAAAChAAAAKAAcAGNsYW5nX3Rlc3RfZGlzdC9p
bnRlcmZhY2UvQ01ha2VMaXN0cy50eHRVVAkAA+MdX2LjHV9idXgLAAEE6QMAAATpAwAAK04t0Qhx
DHJ3DVEoSS0u0c3MK0ktSktMTtXk4kpMSYnPyUwqSiyq1FCphqiqVfD0C3ENcnN0dlXw9A3wDwpx
dVFw9/F3cvQB6ihJLEpPLYkvzi8tSk4t1uBSAAK4TjAPrhvMA4GCnNL0zDy9jIICuFBJZUFqMVhE
kwsAUEsDBBQAAAAIAOCkk1SU7eLpvwAAAD0BAAAkABwAY2xhbmdfdGVzdF9kaXN0L2ludGVyZmFj
ZS9wbHVnaW4uaHBwVVQJAAPjHV9i4x1fYnV4CwABBOkDAAAE6QMAAG2PwQrCMAyG732K4EA2D+J5
br7KiG06C1tb2lQYMp/dzskQNIcQki9//hQ+YD8iOCtJiMJYOSRFsOPJUzzevN99dZuRRhemixAW
R4oeJYGxTEHnSjyEgByRQ5IMfki9se/O452XWFQV6c/wADIQMnVcVucf5u6MAkVZzk2Z+KxkcCPv
JnDCAZ7rrKygzQsa08B/qFXPdZGT1qV0NnL2quo63jCQ6jyHZnumrhcb3RUjXfbAFax8C6fV6JwP
zOIFUEsBAh4DCgAAAAAAwKWTVAAAAAAAAAAAAAAAABAAGAAAAAAAAAAQAO1BAAAAAGNsYW5nX3Rl
c3RfZGlzdC9VVAUAA4gfX2J1eAsAAQTpAwAABOkDAABQSwECHgMUAAAACADgpJNUhnwXK4UAAACw
AAAAHgAYAAAAAAABAAAApIFKAAAAY2xhbmdfdGVzdF9kaXN0L0NNYWtlTGlzdHMudHh0VVQFAAPj
HV9idXgLAAEE6QMAAATpAwAAUEsBAh4DCgAAAAAA4KSTVAAAAAAAAAAAAAAAABgAGAAAAAAAAAAQ
AO1BJwEAAGNsYW5nX3Rlc3RfZGlzdC9wbHVnaW5zL1VUBQAD4x1fYnV4CwABBOkDAAAE6QMAAFBL
AQIeAwoAAAAAAOCkk1SkjcZmHQAAAB0AAAAmABgAAAAAAAEAAACkgXkBAABjbGFuZ190ZXN0X2Rp
c3QvcGx1Z2lucy9DTWFrZUxpc3RzLnR4dFVUBQAD4x1fYnV4CwABBOkDAAAE6QMAAFBLAQIeAwoA
AAAAAOCkk1QAAAAAAAAAAAAAAAAjABgAAAAAAAAAEADtQfYBAABjbGFuZ190ZXN0X2Rpc3QvcGx1
Z2lucy9wbHVnaW5fb25lL1VUBQAD4x1fYnV4CwABBOkDAAAE6QMAAFBLAQIeAxQAAAAIAOCkk1R5
/TQCaQEAAI8DAAAtABgAAAAAAAEAAACkgVMCAABjbGFuZ190ZXN0X2Rpc3QvcGx1Z2lucy9wbHVn
aW5fb25lL3BsdWdpbi5jcHBVVAUAA+MdX2J1eAsAAQTpAwAABOkDAABQSwECHgMUAAAACADgpJNU
ohptd3oAAAC+AAAAMQAYAAAAAAABAAAApIEjBAAAY2xhbmdfdGVzdF9kaXN0L3BsdWdpbnMvcGx1
Z2luX29uZS9DTWFrZUxpc3RzLnR4dFVUBQAD4x1fYnV4CwABBOkDAAAE6QMAAFBLAQIeAwoAAAAA
AOCkk1QAAAAAAAAAAAAAAAAVABgAAAAAAAAAEADtQQgFAABjbGFuZ190ZXN0X2Rpc3QvY29yZS9V
VAUAA+MdX2J1eAsAAQTpAwAABOkDAABQSwECHgMUAAAACADgpJNUgiUUWv4BAADMBAAAHQAYAAAA
AAABAAAApIFXBQAAY2xhbmdfdGVzdF9kaXN0L2NvcmUvbWFpbi5jcHBVVAUAA+MdX2J1eAsAAQTp
AwAABOkDAABQSwECHgMUAAAACADgpJNUZF3xYgAEAAAiDAAAIAAYAAAAAAABAAAApIGsBwAAY2xh
bmdfdGVzdF9kaXN0L2NvcmUvZGxjbGFzcy5ocHBVVAUAA+MdX2J1eAsAAQTpAwAABOkDAABQSwEC
HgMUAAAACADgpJNU9jicX64AAABTAQAAIwAYAAAAAAABAAAApIEGDAAAY2xhbmdfdGVzdF9kaXN0
L2NvcmUvQ01ha2VMaXN0cy50eHRVVAUAA+MdX2J1eAsAAQTpAwAABOkDAABQSwECHgMKAAAAAADg
pJNUAAAAAAAAAAAAAAAAGgAYAAAAAAAAABAA7UERDQAAY2xhbmdfdGVzdF9kaXN0L2ludGVyZmFj
ZS9VVAUAA+MdX2J1eAsAAQTpAwAABOkDAABQSwECHgMUAAAACADgpJNULk3iLogAAAAgAQAAIwAY
AAAAAAABAAAApIFlDQAAY2xhbmdfdGVzdF9kaXN0L2ludGVyZmFjZS90eXBlcy5ocHBVVAUAA+Md
X2J1eAsAAQTpAwAABOkDAABQSwECHgMUAAAACADgpJNUivbHKXsAAAChAAAAKAAYAAAAAAABAAAA
pIFKDgAAY2xhbmdfdGVzdF9kaXN0L2ludGVyZmFjZS9DTWFrZUxpc3RzLnR4dFVUBQAD4x1fYnV4
CwABBOkDAAAE6QMAAFBLAQIeAxQAAAAIAOCkk1SU7eLpvwAAAD0BAAAkABgAAAAAAAEAAACkgScP
AABjbGFuZ190ZXN0X2Rpc3QvaW50ZXJmYWNlL3BsdWdpbi5ocHBVVAUAA+MdX2J1eAsAAQTpAwAA
BOkDAABQSwUGAAAAAA8ADwAFBgAARBAAAAAA

--b1_6fZ6VCZszW1kBu5na9SCxToUWtvKMDShcGjVMVxszi0--




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?ovVAJ_I0kr_8S6cVa0jixF9EZsG5XKsEGllRx66SMNQMIQUVbO2eSxOpAH9VeYeJVWygWAb3wAivQGNfGMs66nVHwliCC-fUS5W_IlJ-VJs=>