summaryrefslogtreecommitdiff
path: root/src/format/mangling/demangler.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2010-08-10 00:17:32 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2010-08-10 00:17:32 (GMT)
commit088a489002fd1c9a62d5cafe693dc73cc271ee18 (patch)
treea147acd77fab3b66d541326349d08dae29ec0e8c /src/format/mangling/demangler.c
parentbcfcb4ec8b4cf9a35b77e93d172e7dae81e8872a (diff)
Improved Itanium demangling.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@179 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/format/mangling/demangler.c')
-rw-r--r--src/format/mangling/demangler.c50
1 files changed, 47 insertions, 3 deletions
diff --git a/src/format/mangling/demangler.c b/src/format/mangling/demangler.c
index dec4cb5..786005d 100644
--- a/src/format/mangling/demangler.c
+++ b/src/format/mangling/demangler.c
@@ -95,8 +95,18 @@ GBinRoutine *try_to_demangle_routine(const char *desc)
GBinRoutine *result; /* Construction à remonter */
DemanglerType i; /* Boucle de parcours */
+ static int counter = 0;
+
result = NULL;
+ if (strcmp(desc, "_ZN21IUDFSettingsValidator15IdNotIllegalStdEN13UDFParameters12UDF_STANDARDES1_") == 0
+ || strcmp(desc, "_ZSt12partial_sortIN9__gnu_cxx17__normal_iteratorIP28CPR_MAI_ADPTY_SectorSequenceSt6vectorIS2_SaIS2_EEEEEvT_S8_S8_") == 0
+ || strcmp(desc, "_ZSt22__merge_without_bufferIN9__gnu_cxx17__normal_iteratorIP15CProfStringListSt6vectorIS2_SaIS2_EEEEiEvT_S8_S8_T0_S9_") == 0
+ || strcmp(desc, "_ZSt11__push_heapIN9__gnu_cxx17__normal_iteratorIP8DRIVE_IDSt6vectorIS2_SaIS2_EEEEiS2_EvT_T0_S9_T1_") == 0 // Intéressant
+ //|| strcmp(desc, "") == 0
+ )
+ goto exit;
+
for (i = 0; i < DGT_COUNT; i++)
{
if (demanglers[i].can_demangle == NULL)
@@ -105,7 +115,7 @@ GBinRoutine *try_to_demangle_routine(const char *desc)
if (!demanglers[i].can_demangle(desc))
continue;
- printf("++ routine :: %s\n", desc);
+ printf("++ [%d] routine :: %s\n", ++counter, desc);
fflush(NULL);
result = demangle_routine(i, desc);
@@ -114,14 +124,21 @@ GBinRoutine *try_to_demangle_routine(const char *desc)
if (result == NULL)
{
printf("++failed :: %s\n", desc);
- exit(-1);
+
+ if (strcmp(desc, "_ZN21IUDFSettingsValidator15IdNotIllegalStdEN13UDFParameters12UDF_STANDARDES1_") != 0
+ && strcmp(desc, "_ZSt12partial_sortIN9__gnu_cxx17__normal_iteratorIP28CPR_MAI_ADPTY_SectorSequenceSt6vectorIS2_SaIS2_EEEEEvT_S8_S8_") != 0
+ )
+ exit(-1);
+
}
- else printf(" -->> '%s'\n", g_binary_routine_get_name(result));
+ else printf(" -->> '%s'\n\n", g_binary_routine_get_name(result));
if (result != NULL) break;
}
+ exit:
+
if (result == NULL)
{
result = g_binary_routine_new();
@@ -253,6 +270,8 @@ void test_itanium_demangling(void)
} \
while (0)
+ //goto last;
+
/**
* Tests de :
* http://www.codesourcery.com/public/cxx-abi/abi-examples.html#mangling
@@ -290,6 +309,31 @@ void test_itanium_demangling(void)
//TEST_ITANIUM_MANGLING("", "");
+ /**
+ * Tests de :
+ * http://www.codesourcery.com/public/cxx-abi/abi.html#mangling
+ */
+
+ TEST_ITANIUM_MANGLING("_ZN1N1TIiiE2mfES0_IddE", "??? N::T<int, int>::mf(N::T<double, double>)");
+
+ /**
+ * Tests de :
+ * (nero.so).
+ */
+
+ TEST_ITANIUM_MANGLING("_ZNSt6vectorItSaItEE6insertEN9__gnu_cxx17__normal_iteratorIPtS1_EERKt", "??? std::vector<unsigned short, std::allocator<unsigned short>>::insert(__gnu_cxx::__normal_iterator<unsigned short *, std::vector<unsigned short, std::allocator<unsigned short>>>, const unsigned short &)");
+
+ TEST_ITANIUM_MANGLING("_ZSt26__uninitialized_fill_n_auxIP15CProfStringListiS0_ET_S2_T0_RKT1_12__false_type", "CProfStringList *std::__uninitialized_fill_n_aux<CProfStringList *, int, CProfStringList>(CProfStringList *, int, const CProfStringList &, __false_type)");
+
+ // TODO TEST_ITANIUM_MANGLING("_ZN21IUDFSettingsValidator15IdNotIllegalStdEN13UDFParameters12UDF_STANDARDES1_", "");
+
+ TEST_ITANIUM_MANGLING("_ZNSbI26NeroMediumFeatureSpecifierSt11char_traitsIS_ESaIS_EE4_Rep10_M_destroyERKS2_", "??? std::basic_string<NeroMediumFeatureSpecifier, std::char_traits<NeroMediumFeatureSpecifier>, std::allocator<NeroMediumFeatureSpecifier>>::_Rep::_M_destroy(const std::allocator<NeroMediumFeatureSpecifier> &)");
+
+ last:
+
+ /* 80 */
+ TEST_ITANIUM_MANGLING("_ZNSt6vectorIlSaIlEE6insertEN9__gnu_cxx17__normal_iteratorIPlS1_EERKl", "??? std::vector<long, std::allocator<long>>::insert(__gnu_cxx::__normal_iterator<long *, std::vector<long, std::allocator<long>>>, const long &)");
+
end_of_test:
;