[Bug 250702] c++filt crashes on a particular symbol

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Sun Nov 1 12:29:26 UTC 2020


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=250702

--- Comment #7 from Dimitry Andric <dim at FreeBSD.org> ---
It's pretty interesting, when I use this simple little demangle.cpp program:

#include <cxxabi.h>
#include <stdio.h>
#include <stdlib.h>

static char *demangle_buf;
static size_t demangle_size = 2 * 1024;

static void demangle(const char *mangled_name)
{
  int status;
  char *demangled_name = abi::__cxa_demangle(mangled_name, demangle_buf,
&demangle_size, &status);
  switch (status) {
  case 0:
    printf("%s -> %s\n", mangled_name, demangled_name);
    break;
  case -1:
    printf("error: memory allocation failure while demangling %s\n",
mangled_name);
    break;
  case -2:
    printf("error: %s is not a valid C++ mangled name\n", mangled_name);
    break;
  case -3:
    printf("error: invalid argument(s) while demangling %s\n", mangled_name);
    break;
  default:
    printf("error: unknown status %d while demangling %s\n", status,
mangled_name);
    break;
  }
}

int main(int argc, char *argv[])
{
  if (argc <= 1) {
    printf("Usage: %s mangled_name ...\n", argv[0]);
    return 1;
  }
  if ((demangle_buf = (char *)malloc(demangle_size)) == NULL) {
    printf("Unable to allocate memory for demangle buffer\n");
    return 1;
  }
  for (int i = 1; i < argc; ++i) {
    demangle(argv[i]);
  }
  free(demangle_buf);
  return 0;
}

it works just fine on the identifier:

% ./demangle '_ZZ5func1vENK3$_0clEv'
_ZZ5func1vENK3$_0clEv -> func1(void)::$_0::operator()(void) const

However, it uses the *older* copy of elftoolchain's libelftc_dem_gnu3.c in
contrib/libcxxrt!

E.g. something has been broken in this area in more recent releases of
elftoolchain...

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the freebsd-toolchain mailing list