Dwarf_Die *fn_die,
size_t where_offset)
{
+
+ translation_unit::language lang;
+ bool has_lang = false;
+ if ((has_lang = ctxt.get_die_language(fn_die, lang)))
+ {
+ // In a binary originating from the C language, it's OK to use
+ // the linkage name of the function as a key for the map which
+ // is meant to reduce the number of DIE comparisons involved
+ // during DIE canonicalization computation.
+ if (is_c_language(lang))
+ {
+ string fn_name = die_linkage_name(fn_die);
+ if (fn_name.empty())
+ fn_name = die_name(fn_die);
+ return fn_name;
+ }
+ }
+
+ // TODO: When we can structurally compare DIEs originating from C++
+ // as well, we can use the linkage name of functions in C++ too, to
+ // reduce the number of comparisons involved during DIE
+ // canonicalization.
+
+ string return_type_name;
+ Dwarf_Die ret_type_die;
+ if (die_die_attribute(fn_die, DW_AT_type, ret_type_die))
+ return_type_name = ctxt.get_die_qualified_type_name(&ret_type_die,
+ where_offset);
+
+ if (return_type_name.empty())
+ return_type_name = "void";
+
Dwarf_Die scope_die;
string scope_name;
if (get_scope_die(ctxt, fn_die, where_offset, scope_die))
if (!scope_name.empty())
fn_name = scope_name + "::" + fn_name;
- string return_type_name;
string class_name;
vector<string> parm_names;
bool is_const = false;
<return type-id='type-id-6'/>
</function-decl>
<!-- void* __asan_internal_memset(void*, int, size_t) -->
- <function-decl name='__asan_internal_memset' mangled-name='__asan_internal_memset' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='41' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_internal_memset'>
+ <function-decl name='__asan_internal_memset' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='41' column='1' visibility='default' binding='global' size-in-bits='64'>
<!-- parameter of type 'void*' -->
<parameter type-id='type-id-3'/>
<!-- parameter of type 'int' -->
<return type-id='type-id-3'/>
</function-decl>
<!-- size_t __asan_internal_strnlen(const char*, size_t) -->
- <function-decl name='__asan_internal_strnlen' mangled-name='__asan_internal_strnlen' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='46' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_internal_strnlen'>
+ <function-decl name='__asan_internal_strnlen' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='46' column='1' visibility='default' binding='global' size-in-bits='64'>
<!-- parameter of type 'const char*' -->
<parameter type-id='type-id-30'/>
<!-- parameter of type 'typedef size_t' -->
<return type-id='type-id-1512'/>
</function-decl>
<!-- int __asan_internal_strcmp(const char*, const char*) -->
- <function-decl name='__asan_internal_strcmp' mangled-name='__asan_internal_strcmp' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='43' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_internal_strcmp'>
+ <function-decl name='__asan_internal_strcmp' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='43' column='1' visibility='default' binding='global' size-in-bits='64'>
<!-- parameter of type 'const char*' -->
<parameter type-id='type-id-30'/>
<!-- parameter of type 'const char*' -->
<return type-id='type-id-3'/>
</function-decl>
<!-- void* __asan_internal_memcpy(void*, void*, size_t) -->
- <function-decl name='__asan_internal_memcpy' mangled-name='__asan_internal_memcpy' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='40' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_internal_memcpy'>
+ <function-decl name='__asan_internal_memcpy' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='40' column='1' visibility='default' binding='global' size-in-bits='64'>
<!-- parameter of type 'void*' -->
<parameter type-id='type-id-3'/>
<!-- parameter of type 'void*' -->
<return type-id='type-id-3'/>
</function-decl>
<!-- size_t __asan_internal_strlen(const char*) -->
- <function-decl name='__asan_internal_strlen' mangled-name='__asan_internal_strlen' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='45' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_internal_strlen'>
+ <function-decl name='__asan_internal_strlen' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='45' column='1' visibility='default' binding='global' size-in-bits='64'>
<!-- parameter of type 'const char*' -->
<parameter type-id='type-id-30'/>
<!-- typedef size_t -->
<return type-id='type-id-13'/>
</function-decl>
<!-- int __asan_internal_strncmp(const char*, const char*, size_t) -->
- <function-decl name='__asan_internal_strncmp' mangled-name='__asan_internal_strncmp' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='44' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_internal_strncmp'>
+ <function-decl name='__asan_internal_strncmp' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='44' column='1' visibility='default' binding='global' size-in-bits='64'>
<!-- parameter of type 'const char*' -->
<parameter type-id='type-id-30'/>
<!-- parameter of type 'const char*' -->
<return type-id='type-id-13'/>
</function-decl>
<!-- int __asan_internal_memcmp(void*, void*, size_t) -->
- <function-decl name='__asan_internal_memcmp' mangled-name='__asan_internal_memcmp' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_internal_memcmp'>
+ <function-decl name='__asan_internal_memcmp' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='42' column='1' visibility='default' binding='global' size-in-bits='64'>
<!-- parameter of type 'void*' -->
<parameter type-id='type-id-3'/>
<!-- parameter of type 'void*' -->
<return type-id='type-id-1'/>
</function-decl>
<!-- size_t htab_elements(htab_t) -->
- <function-decl name='htab_elements' mangled-name='htab_elements' filepath='../.././libcpp/../include/hashtab.h' line='188' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='htab_elements'>
+ <function-decl name='htab_elements' filepath='../.././libcpp/../include/hashtab.h' line='188' column='1' visibility='default' binding='global' size-in-bits='64'>
<!-- parameter of type 'typedef htab_t' -->
<parameter type-id='type-id-183'/>
<!-- typedef size_t -->
<!-- char* -->
<return type-id='type-id-9'/>
</function-decl>
- <!-- char* __builtin_strcpy(char*, const char*) -->
- <function-decl name='__builtin_strcpy' mangled-name='strcpy' visibility='default' binding='global' size-in-bits='64'>
- <!-- parameter of type 'char*' -->
- <parameter type-id='type-id-9'/>
- <!-- parameter of type 'const char*' -->
- <parameter type-id='type-id-8'/>
- <!-- char* -->
- <return type-id='type-id-9'/>
- </function-decl>
<!-- unsigned long int __builtin_strlen(const char*) -->
<function-decl name='__builtin_strlen' mangled-name='strlen' visibility='default' binding='global' size-in-bits='64'>
<!-- parameter of type 'const char*' -->
<parameter type-id='type-id-3'/>
<return type-id='type-id-6'/>
</function-decl>
- <function-decl name='__asan_internal_memset' mangled-name='__asan_internal_memset' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='41' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_internal_memset'>
+ <function-decl name='__asan_internal_memset' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='41' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-3'/>
<parameter type-id='type-id-13'/>
<parameter type-id='type-id-1512'/>
<parameter type-id='type-id-1695'/>
<return type-id='type-id-3'/>
</function-decl>
- <function-decl name='__asan_internal_strnlen' mangled-name='__asan_internal_strnlen' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='46' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_internal_strnlen'>
+ <function-decl name='__asan_internal_strnlen' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='46' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-30'/>
<parameter type-id='type-id-1512'/>
<return type-id='type-id-1512'/>
</function-decl>
- <function-decl name='__asan_internal_strcmp' mangled-name='__asan_internal_strcmp' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='43' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_internal_strcmp'>
+ <function-decl name='__asan_internal_strcmp' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='43' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-30'/>
<parameter type-id='type-id-30'/>
<return type-id='type-id-13'/>
<parameter type-id='type-id-1512'/>
<return type-id='type-id-3'/>
</function-decl>
- <function-decl name='__asan_internal_memcpy' mangled-name='__asan_internal_memcpy' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='40' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_internal_memcpy'>
+ <function-decl name='__asan_internal_memcpy' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='40' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-3'/>
<parameter type-id='type-id-3'/>
<parameter type-id='type-id-1512'/>
<return type-id='type-id-3'/>
</function-decl>
- <function-decl name='__asan_internal_strlen' mangled-name='__asan_internal_strlen' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='45' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_internal_strlen'>
+ <function-decl name='__asan_internal_strlen' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='45' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-30'/>
<return type-id='type-id-1512'/>
</function-decl>
<parameter is-variadic='yes'/>
<return type-id='type-id-13'/>
</function-decl>
- <function-decl name='__asan_internal_strncmp' mangled-name='__asan_internal_strncmp' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='44' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_internal_strncmp'>
+ <function-decl name='__asan_internal_strncmp' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='44' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-30'/>
<parameter type-id='type-id-30'/>
<parameter type-id='type-id-1512'/>
<return type-id='type-id-13'/>
</function-decl>
- <function-decl name='__asan_internal_memcmp' mangled-name='__asan_internal_memcmp' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_internal_memcmp'>
+ <function-decl name='__asan_internal_memcmp' filepath='../../.././libsanitizer/libbacktrace/backtrace-rename.h' line='42' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-3'/>
<parameter type-id='type-id-3'/>
<parameter type-id='type-id-1512'/>
<parameter type-id='type-id-386'/>
<return type-id='type-id-1'/>
</function-decl>
- <function-decl name='htab_elements' mangled-name='htab_elements' filepath='../.././libcpp/../include/hashtab.h' line='188' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='htab_elements'>
+ <function-decl name='htab_elements' filepath='../.././libcpp/../include/hashtab.h' line='188' column='1' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-183'/>
<return type-id='type-id-5'/>
</function-decl>
<parameter type-id='type-id-8'/>
<return type-id='type-id-9'/>
</function-decl>
- <function-decl name='__builtin_strcpy' mangled-name='strcpy' visibility='default' binding='global' size-in-bits='64'>
- <parameter type-id='type-id-9'/>
- <parameter type-id='type-id-8'/>
- <return type-id='type-id-9'/>
- </function-decl>
<function-decl name='__builtin_strlen' mangled-name='strlen' visibility='default' binding='global' size-in-bits='64'>
<parameter type-id='type-id-8'/>
<return type-id='type-id-4'/>