1 // SPDX-License-Identifier: GPL-2.0
2 #include "demangle-cxx.h"
5 #include <linux/compiler.h>
7 #ifdef HAVE_LIBBFD_SUPPORT
12 #ifdef HAVE_CXA_DEMANGLE_SUPPORT
16 #if defined(HAVE_LIBBFD_SUPPORT) || defined(HAVE_CPLUS_DEMANGLE_SUPPORT)
18 #define DMGL_PARAMS (1 << 0) /* Include function args */
19 #define DMGL_ANSI (1 << 1) /* Include const, volatile, etc */
24 * Demangle C++ function signature
26 * Note: caller is responsible for freeing demangled string
29 char *cxx_demangle_sym(const char *str
, bool params __maybe_unused
,
30 bool modifiers __maybe_unused
)
32 #ifdef HAVE_LIBBFD_SUPPORT
33 int flags
= (params
? DMGL_PARAMS
: 0) | (modifiers
? DMGL_ANSI
: 0);
35 return bfd_demangle(NULL
, str
, flags
);
36 #elif defined(HAVE_CPLUS_DEMANGLE_SUPPORT)
37 int flags
= (params
? DMGL_PARAMS
: 0) | (modifiers
? DMGL_ANSI
: 0);
39 return cplus_demangle(str
, flags
);
40 #elif defined(HAVE_CXA_DEMANGLE_SUPPORT)
44 output
= abi::__cxa_demangle(str
, /*output_buffer=*/NULL
, /*length=*/NULL
, &status
);