brintos

brintos / linux-shallow public Read only

0
0
Text · 1.3 KiB · 85b7066 Raw
50 lines · cpp
1// SPDX-License-Identifier: GPL-2.02#include "demangle-cxx.h"3#include <stdlib.h>4#include <string.h>5#include <linux/compiler.h>6 7#ifdef HAVE_LIBBFD_SUPPORT8#define PACKAGE 'perf'9#include <bfd.h>10#endif11 12#ifdef HAVE_CXA_DEMANGLE_SUPPORT13#include <cxxabi.h>14#endif15 16#if defined(HAVE_LIBBFD_SUPPORT) || defined(HAVE_CPLUS_DEMANGLE_SUPPORT)17#ifndef DMGL_PARAMS18#define DMGL_PARAMS     (1 << 0)  /* Include function args */19#define DMGL_ANSI       (1 << 1)  /* Include const, volatile, etc */20#endif21#endif22 23/*24 * Demangle C++ function signature25 *26 * Note: caller is responsible for freeing demangled string27 */28extern "C"29char *cxx_demangle_sym(const char *str, bool params __maybe_unused,30                       bool modifiers __maybe_unused)31{32#ifdef HAVE_LIBBFD_SUPPORT33        int flags = (params ? DMGL_PARAMS : 0) | (modifiers ? DMGL_ANSI : 0);34 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);38 39        return cplus_demangle(str, flags);40#elif defined(HAVE_CXA_DEMANGLE_SUPPORT)41        char *output;42        int status;43 44        output = abi::__cxa_demangle(str, /*output_buffer=*/NULL, /*length=*/NULL, &status);45        return output;46#else47        return NULL;48#endif49}50