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>