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 namespace absl {
57 namespace debugging_internal {
58 
59 // Demangle `mangled`. On success, return true and write the
60 // demangled symbol name to `out`. Otherwise, return false.
61 // `out` is modified even if demangling is unsuccessful.
62 bool Demangle(const char *mangled, char *out, int out_size);
63 
64 } // namespace debugging_internal
65 } // namespace absl
66 
67 #endif // ABSL_DEBUGGING_INTERNAL_DEMANGLE_H_
bool Demangle(const char *mangled, char *out, int out_size)
Definition: demangle.cc:1870
Definition: algorithm.h:29
char int out_size
Definition: mutex.h:1013
char * out
Definition: mutex.h:1013


abseil_cpp
Author(s):
autogenerated on Mon Feb 28 2022 21:31:18