Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 15 Jul 2014 14:24:37 +0100
From:      David Chisnall <theraven@FreeBSD.org>
To:        "Ivan A. Kosarev" <ivan@ivan-labs.com>
Cc:        Current FreeBSD <freebsd-current@freebsd.org>, Kai Wang <kaiw@FreeBSD.org>
Subject:   Re: Demangling issues with libcxxrt.so.1 on v9.2
Message-ID:  <2540F968-444A-4D9C-86C9-45CEA093F34F@FreeBSD.org>
In-Reply-To: <53C52873.5050309@ivan-labs.com>
References:  <53C52873.5050309@ivan-labs.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi Ivan,

The demangler in libcxxrt is taken from the elftoolchain project.  Kai =
Wang (added to cc:) was interested in improving it, but I doubt any =
fixes will be merged to 9.x any time soon.

David

On 15 Jul 2014, at 14:11, Ivan A. Kosarev <ivan@ivan-labs.com> wrote:

> Hello everybody,
>=20
> It seems there are problems with demandling some kinds of names with =
libcxxrt.so.1 on FreeBSD 9.2 (I didn't test other versions yet).
>=20
> This program:
> ---
> #include <stdio.h>
> #include <stdlib.h>
>=20
> extern "C" char* __cxa_demangle(const char* mangled_name,
>                     char* buf, size_t* n, int* status);
>=20
> void test(const char *mangled) {
>  int status =3D 0;
>  char *DemangledName =3D __cxa_demangle(mangled, NULL, NULL, &status);
>  printf("%s: status %d", mangled, status);
>  if(status =3D=3D 0)
>    printf("; demangled: '%s'", DemangledName);
>  free(DemangledName);
>  printf("\n");
> }
>=20
> int main(void) {
>  test("_Z9NullDerefPi");
>  test("_ZL9NullDerefPi");
>  test("_ZN8DeepFreeILi0EE4freeEPc");
>  test("_ZN8DeepFreeILi13EE4freeEPc");
>  test("_ZN8DeepFreeILi36EE4freeEPc");
>  return 0;
> }
> ---
>=20
> outputs:
> ---
> _Z9NullDerefPi: status 0; demangled: 'NullDeref(int*)'
> _ZL9NullDerefPi: status -2
> _ZN8DeepFreeILi0EE4freeEPc: status 0; demangled: =
'DeepFree<0E>::free(char*)'
> _ZN8DeepFreeILi13EE4freeEPc: status 0; demangled: =
'DeepFree<13E>::free(char*)'
> _ZN8DeepFreeILi36EE4freeEPc: status 0; demangled: =
'DeepFree<36E>::free(char*)'
> ---
>=20
> Note that it fails to demangle the local name in the 2nd line and adds =
extra 'E' character in DeepFree<...E>s.
>=20
> The case with the local name is not critical, but the case with =
DeepFree<...E> prevents LLVM's address sanitizer tests from passing on =
FreeBSD so the question is: is there a chance the defect will be =
resolved any time soon or should I try to prepare a fix to speed up the =
process?
>=20
> Thanks a lot.
>=20
> --=20
>=20
> _______________________________________________
> freebsd-current@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to =
"freebsd-current-unsubscribe@freebsd.org"




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?2540F968-444A-4D9C-86C9-45CEA093F34F>