aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/cxxsupp/libcxxrt/patches/typeinfo.patch
blob: 413938e3e07cea5be8e107838fadd51e82f899f5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
--- /typeinfo.cc
+++ /typeinfo.cc
@@ -68,57 +68,3 @@ ABI_NAMESPACE::__vmi_class_type_info::~__vmi_class_type_info() {}
 ABI_NAMESPACE::__pbase_type_info::~__pbase_type_info() {}
 ABI_NAMESPACE::__pointer_type_info::~__pointer_type_info() {}
 ABI_NAMESPACE::__pointer_to_member_type_info::~__pointer_to_member_type_info() {}
-
-// From libelftc
-extern "C" char    *__cxa_demangle_gnu3(const char *);
-
-extern "C" char* __cxa_demangle(const char* mangled_name,
-                                char* buf,
-                                size_t* n,
-                                int* status)
-{
-	// TODO: We should probably just be linking against libelf-tc, rather than
-	// copying their code.  This requires them to do an actual release,
-	// however, and for our changes to be pushed upstream.  We also need to
-	// call a different demangling function here depending on the ABI (e.g.
-	// ARM).
-	char *demangled = __cxa_demangle_gnu3(mangled_name);
-	if (NULL != demangled)
-	{
-		size_t len = strlen(demangled);
-		if (!buf || (*n < len+1))
-		{
-			buf = static_cast<char*>(realloc(buf, len+1));
-		}
-		if (0 != buf)
-		{
-			memcpy(buf, demangled, len);
-			buf[len] = 0;
-			if (n)
-			{
-				*n = len;
-			}
-			if (status)
-			{
-				*status = 0;
-			}
-		}
-		else
-		{
-			if (status)
-			{
-				*status = -1;
-			}
-		}
-		free(demangled);
-	}
-	else
-	{
-		if (status)
-		{
-			*status = -2;
-		}
-		return NULL;
-	}
-	return buf;
-}