grpc
third_party
bloaty
third_party
abseil-cpp
absl
debugging
internal
bloaty/third_party/abseil-cpp/absl/debugging/internal/demangle.h
Go to the documentation of this file.
1
// Copyright 2018 The Abseil Authors.
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
// https://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14
15
// An async-signal-safe and thread-safe demangler for Itanium C++ ABI
16
// (aka G++ V3 ABI).
17
//
18
// The demangler is implemented to be used in async signal handlers to
19
// symbolize stack traces. We cannot use libstdc++'s
20
// abi::__cxa_demangle() in such signal handlers since it's not async
21
// signal safe (it uses malloc() internally).
22
//
23
// Note that this demangler doesn't support full demangling. More
24
// specifically, it doesn't print types of function parameters and
25
// types of template arguments. It just skips them. However, it's
26
// still very useful to extract basic information such as class,
27
// function, constructor, destructor, and operator names.
28
//
29
// See the implementation note in demangle.cc if you are interested.
30
//
31
// Example:
32
//
33
// | Mangled Name | The Demangler | abi::__cxa_demangle()
34
// |---------------|---------------|-----------------------
35
// | _Z1fv | f() | f()
36
// | _Z1fi | f() | f(int)
37
// | _Z3foo3bar | foo() | foo(bar)
38
// | _Z1fIiEvi | f<>() | void f<int>(int)
39
// | _ZN1N1fE | N::f | N::f
40
// | _ZN3Foo3BarEv | Foo::Bar() | Foo::Bar()
41
// | _Zrm1XS_" | operator%() | operator%(X, X)
42
// | _ZN3FooC1Ev | Foo::Foo() | Foo::Foo()
43
// | _Z1fSs | f() | f(std::basic_string<char,
44
// | | | std::char_traits<char>,
45
// | | | std::allocator<char> >)
46
//
47
// See the unit test for more examples.
48
//
49
// Note: we might want to write demanglers for ABIs other than Itanium
50
// C++ ABI in the future.
51
//
52
53
#ifndef ABSL_DEBUGGING_INTERNAL_DEMANGLE_H_
54
#define ABSL_DEBUGGING_INTERNAL_DEMANGLE_H_
55
56
#include "absl/base/config.h"
57
58
namespace
absl
{
59
ABSL_NAMESPACE_BEGIN
60
namespace
debugging_internal {
61
62
// Demangle `mangled`. On success, return true and write the
63
// demangled symbol name to `out`. Otherwise, return false.
64
// `out` is modified even if demangling is unsuccessful.
65
bool
Demangle
(
const
char
*mangled,
char
*
out
,
int
out_size
);
66
67
}
// namespace debugging_internal
68
ABSL_NAMESPACE_END
69
}
// namespace absl
70
71
#endif // ABSL_DEBUGGING_INTERNAL_DEMANGLE_H_
ABSL_NAMESPACE_END
#define ABSL_NAMESPACE_END
Definition:
third_party/abseil-cpp/absl/base/config.h:171
ABSL_NAMESPACE_BEGIN
#define ABSL_NAMESPACE_BEGIN
Definition:
third_party/abseil-cpp/absl/base/config.h:170
absl::out_size
char int out_size
Definition:
abseil-cpp/absl/synchronization/mutex.h:1048
absl::debugging_internal::Demangle
bool Demangle(const char *mangled, char *out, int out_size)
Definition:
abseil-cpp/absl/debugging/internal/demangle.cc:1950
absl
Definition:
abseil-cpp/absl/algorithm/algorithm.h:31
absl::out
char * out
Definition:
abseil-cpp/absl/synchronization/mutex.h:1048
grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:09