return true;
}
+ /// Test if a given DIE originates from a program written in the C
+ /// language.
+ ///
+ /// @param die the DIE to consider.
+ ///
+ /// @return true iff @p die originates from a program in the C
+ /// language.
+ bool
+ die_is_in_c(const Dwarf_Die *die) const
+ {
+ translation_unit::language l = translation_unit::LANG_UNKNOWN;
+ if (!get_die_language(die, l))
+ return false;
+ return is_c_language(l);
+ }
+
+ /// Test if a given DIE originates from a program written either in
+ /// C or C++.
+ ///
+ /// @param die the DIE to consider.
+ ///
+ /// @return true iff @p die originates from a program written either in
+ /// C or C++.
+ bool
+ die_is_in_c_or_cplusplus(const Dwarf_Die *die) const
+ {
+ translation_unit::language l = translation_unit::LANG_UNKNOWN;
+ if (!get_die_language(die, l))
+ return false;
+ return (is_cplus_plus_language(l) || is_c_language(l));
+ }
+
/// Check if we can assume the One Definition Rule[1] to be relevant
/// for the current translation unit.
///
return l_size == r_size;
}
+/// Test if two DIEs representing function declarations have the same
+/// linkage name, and thus are considered equal if they are C or C++,
+/// because the two DIEs represent functions in the same binary.
+///
+/// If the DIEs don't have a linkage name, the function compares their
+/// name. But in that case, the caller of the function must know that
+/// in C++ for instance, that doesn't imply that the two functions are
+/// equal.
+///
+/// @param ctxt the @ref read_context to consider.
+///
+/// @param l the first function DIE to consider.
+///
+/// @param r the second function DIE to consider.
+///
+/// @return true iff the function represented by @p l have the same
+/// linkage name as the function represented by @p r.
+static bool
+fn_die_equal_by_linkage_name(const read_context &ctxt,
+ const Dwarf_Die *l,
+ const Dwarf_Die *r)
+{
+ if (!!l != !!r)
+ return false;
+
+ if (!l)
+ return false;
+
+ int tag = dwarf_tag(const_cast<Dwarf_Die*>(l));
+ ABG_ASSERT(tag == DW_TAG_subprogram);
+ tag = dwarf_tag(const_cast<Dwarf_Die*>(r));
+ ABG_ASSERT(tag == DW_TAG_subprogram);
+
+ string lname = die_name(l), rname = die_name(r);
+ string llinkage_name = die_linkage_name(l),
+ rlinkage_name = die_linkage_name(r);
+
+ if (ctxt.die_is_in_c_or_cplusplus(l)
+ && ctxt.die_is_in_c_or_cplusplus(r))
+ {
+ if (!llinkage_name.empty() && !rlinkage_name.empty())
+ return llinkage_name == rlinkage_name;
+ else if (!!llinkage_name.empty() != !!rlinkage_name.empty())
+ return false;
+ else
+ return lname == rname;
+ }
+
+ return (!llinkage_name.empty()
+ && !rlinkage_name.empty()
+ && llinkage_name == rlinkage_name);
+}
+
/// Compare two DIEs emitted by a C compiler.
///
/// @param ctxt the read context used to load the DWARF information.
&& from_the_same_tu)
result = true;
}
- else
- {
- aggregates_being_compared.insert(ln);
- aggregates_being_compared.insert(rn);
-
- Dwarf_Die l_return_type, r_return_type;
- bool l_return_type_is_void = !die_die_attribute(l, DW_AT_type,
- l_return_type);
- bool r_return_type_is_void = !die_die_attribute(r, DW_AT_type,
- r_return_type);
- if (l_return_type_is_void != r_return_type_is_void
- || (!l_return_type_is_void
- && !compare_dies(ctxt,
- &l_return_type, &r_return_type,
- aggregates_being_compared,
- update_canonical_dies_on_the_fly)))
+ else
+ {
+ if (!fn_die_equal_by_linkage_name(ctxt, l, r))
+ {
result = false;
- else
- {
- Dwarf_Die l_child, r_child;
- bool found_l_child, found_r_child;
- for (found_l_child = dwarf_child(const_cast<Dwarf_Die*>(l),
- &l_child) == 0,
- found_r_child = dwarf_child(const_cast<Dwarf_Die*>(r),
- &r_child) == 0;
- found_l_child && found_r_child;
- found_l_child = dwarf_siblingof(&l_child,
- &l_child) == 0,
- found_r_child = dwarf_siblingof(&r_child,
- &r_child)==0)
- {
- int l_child_tag = dwarf_tag(&l_child);
- int r_child_tag = dwarf_tag(&r_child);
- if (l_child_tag != r_child_tag
- || (l_child_tag == DW_TAG_formal_parameter
- && !compare_dies(ctxt, &l_child, &r_child,
- aggregates_being_compared,
- update_canonical_dies_on_the_fly)))
- {
- result = false;
- break;
- }
- }
- if (found_l_child != found_r_child)
- result = false;
- }
+ break;
+ }
- aggregates_being_compared.erase(ln);
- aggregates_being_compared.erase(rn);
- }
+ if (!ctxt.die_is_in_c(l) && !ctxt.die_is_in_c(r))
+ {
+ // In C, we cannot have two different functions with the
+ // same linkage name in a given binary. But here we are
+ // looking at DIEs that don't originate from C. So we
+ // need to compare return types and parameter types.
+ Dwarf_Die l_return_type, r_return_type;
+ bool l_return_type_is_void = !die_die_attribute(l, DW_AT_type,
+ l_return_type);
+ bool r_return_type_is_void = !die_die_attribute(r, DW_AT_type,
+ r_return_type);
+ if (l_return_type_is_void != r_return_type_is_void
+ || (!l_return_type_is_void
+ && !compare_dies(ctxt,
+ &l_return_type, &r_return_type,
+ aggregates_being_compared,
+ update_canonical_dies_on_the_fly)))
+ result = false;
+ else
+ {
+ Dwarf_Die l_child, r_child;
+ bool found_l_child, found_r_child;
+ for (found_l_child = dwarf_child(const_cast<Dwarf_Die*>(l),
+ &l_child) == 0,
+ found_r_child = dwarf_child(const_cast<Dwarf_Die*>(r),
+ &r_child) == 0;
+ found_l_child && found_r_child;
+ found_l_child = dwarf_siblingof(&l_child,
+ &l_child) == 0,
+ found_r_child = dwarf_siblingof(&r_child,
+ &r_child)==0)
+ {
+ int l_child_tag = dwarf_tag(&l_child);
+ int r_child_tag = dwarf_tag(&r_child);
+ if (l_child_tag != r_child_tag
+ || (l_child_tag == DW_TAG_formal_parameter
+ && !compare_dies(ctxt, &l_child, &r_child,
+ aggregates_being_compared,
+ update_canonical_dies_on_the_fly)))
+ {
+ result = false;
+ break;
+ }
+ }
+ if (found_l_child != found_r_child)
+ result = false;
+ }
+ }
+
+ aggregates_being_compared.erase(ln);
+ aggregates_being_compared.erase(rn);
+ }
}
break;
<!-- backtrace_vector* -->
<pointer-type-def type-id='type-id-1727' size-in-bits='64' id='type-id-1728'/>
<!-- void* __asan_backtrace_vector_grow(backtrace_state*, size_t, backtrace_error_callback, void*, backtrace_vector*) -->
- <function-decl name='__asan_backtrace_vector_grow' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='235' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <function-decl name='__asan_backtrace_vector_grow' mangled-name='__asan_backtrace_vector_grow' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='235' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_backtrace_vector_grow'>
<!-- parameter of type 'backtrace_state*' -->
<parameter type-id='type-id-1718'/>
<!-- parameter of type 'typedef size_t' -->
<return type-id='type-id-13'/>
</function-decl>
<!-- void __asan_backtrace_free(backtrace_state*, void*, size_t, backtrace_error_callback, void*) -->
- <function-decl name='__asan_backtrace_free' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='212' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <function-decl name='__asan_backtrace_free' mangled-name='__asan_backtrace_free' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='212' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_backtrace_free'>
<!-- parameter of type 'backtrace_state*' -->
<parameter type-id='type-id-1718'/>
<!-- parameter of type 'void*' -->
<return type-id='type-id-13'/>
</function-decl>
<!-- void* __asan_backtrace_alloc(backtrace_state*, size_t, backtrace_error_callback, void*) -->
- <function-decl name='__asan_backtrace_alloc' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='206' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <function-decl name='__asan_backtrace_alloc' mangled-name='__asan_backtrace_alloc' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='206' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_backtrace_alloc'>
<!-- parameter of type 'backtrace_state*' -->
<parameter type-id='type-id-1718'/>
<!-- parameter of type 'typedef size_t' -->
<return type-id='type-id-3'/>
</function-decl>
<!-- void __asan_backtrace_qsort(void*, size_t, size_t, int (void*, void*)*) -->
- <function-decl name='__asan_backtrace_qsort' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='201' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <function-decl name='__asan_backtrace_qsort' mangled-name='__asan_backtrace_qsort' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='201' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_backtrace_qsort'>
<!-- parameter of type 'void*' -->
<parameter type-id='type-id-3'/>
<!-- parameter of type 'typedef size_t' -->
<return type-id='type-id-6'/>
</function-decl>
<!-- int __asan_backtrace_vector_release(backtrace_state*, backtrace_vector*, backtrace_error_callback, void*) -->
- <function-decl name='__asan_backtrace_vector_release' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='253' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <function-decl name='__asan_backtrace_vector_release' mangled-name='__asan_backtrace_vector_release' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='253' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_backtrace_vector_release'>
<!-- parameter of type 'backtrace_state*' -->
<parameter type-id='type-id-1718'/>
<!-- parameter of type 'backtrace_vector*' -->
</abi-instr>
<abi-instr version='1.0' address-size='64' path='../../.././libsanitizer/libbacktrace/../../libbacktrace/fileline.c' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-ImG4Cf/gcc-4.9.2/x86_64-unknown-linux-gnu/libsanitizer/libbacktrace' language='LANG_C89'>
<!-- int __asan_backtrace_open(const char*, backtrace_error_callback, void*, int*) -->
- <function-decl name='__asan_backtrace_open' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='159' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <function-decl name='__asan_backtrace_open' mangled-name='__asan_backtrace_open' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='159' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_backtrace_open'>
<!-- parameter of type 'const char*' -->
<parameter type-id='type-id-32'/>
<!-- parameter of type 'typedef backtrace_error_callback' -->
<return type-id='type-id-13'/>
</function-decl>
<!-- int __asan_backtrace_initialize(backtrace_state*, int, backtrace_error_callback, void*, fileline*) -->
- <function-decl name='__asan_backtrace_initialize' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='268' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <function-decl name='__asan_backtrace_initialize' mangled-name='__asan_backtrace_initialize' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='268' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_backtrace_initialize'>
<!-- parameter of type 'backtrace_state*' -->
<parameter type-id='type-id-1718'/>
<!-- parameter of type 'int' -->
<return type-id='type-id-13'/>
</function-decl>
</abi-instr>
- <abi-instr version='1.0' address-size='64' path='../../.././libsanitizer/libbacktrace/../../libbacktrace/sort.c' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-ImG4Cf/gcc-4.9.2/x86_64-unknown-linux-gnu/libsanitizer/libbacktrace' language='LANG_C89'>
- </abi-instr>
<abi-instr version='1.0' address-size='64' path='../../.././libsanitizer/libbacktrace/../../libbacktrace/state.c' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-ImG4Cf/gcc-4.9.2/x86_64-unknown-linux-gnu/libsanitizer/libbacktrace' language='LANG_C89'>
</abi-instr>
<abi-instr version='1.0' address-size='64' path='../../.././libsanitizer/libbacktrace/../../libiberty/cp-demangle.c' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-ImG4Cf/gcc-4.9.2/x86_64-unknown-linux-gnu/libsanitizer/libbacktrace' language='LANG_C89'>
<return type-id='type-id-3'/>
</function-decl>
<!-- char* cplus_demangle_v3(const char*, int) -->
- <function-decl name='cplus_demangle_v3' filepath='../.././libiberty/../include/demangle.h' line='160' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <function-decl name='cplus_demangle_v3' mangled-name='cplus_demangle_v3' filepath='../.././libiberty/../include/demangle.h' line='160' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cplus_demangle_v3'>
<!-- parameter of type 'const char*' -->
<parameter type-id='type-id-8'/>
<!-- parameter of type 'int' -->
<return type-id='type-id-9'/>
</function-decl>
<!-- char* java_demangle_v3(const char*) -->
- <function-decl name='java_demangle_v3' filepath='../.././libiberty/../include/demangle.h' line='167' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <function-decl name='java_demangle_v3' mangled-name='java_demangle_v3' filepath='../.././libiberty/../include/demangle.h' line='167' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='java_demangle_v3'>
<!-- parameter of type 'const char*' -->
<parameter type-id='type-id-8'/>
<!-- char* -->
<!-- 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*' -->
<return type-id='type-id-21'/>
</function-decl>
<!-- void xexit(int) -->
- <function-decl name='xexit' filepath='../.././libiberty/../include/libiberty.h' line='288' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <function-decl name='xexit' mangled-name='xexit' filepath='../.././libiberty/../include/libiberty.h' line='288' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xexit'>
<!-- parameter of type 'int' -->
<parameter type-id='type-id-3'/>
<!-- void -->
</abi-instr>
<abi-instr version='1.0' address-size='64' path='../.././libiberty/xmemdup.c' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/host-x86_64-unknown-linux-gnu/libiberty' language='LANG_C89'>
</abi-instr>
- <abi-instr version='1.0' address-size='64' path='../.././libiberty/xstrdup.c' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/host-x86_64-unknown-linux-gnu/libiberty' language='LANG_C89'>
- </abi-instr>
- <abi-instr version='1.0' address-size='64' path='../.././libiberty/xstrerror.c' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/host-x86_64-unknown-linux-gnu/libiberty' language='LANG_C89'>
- </abi-instr>
</abi-corpus>
</data-member>
</class-decl>
<pointer-type-def type-id='type-id-1727' size-in-bits='64' id='type-id-1728'/>
- <function-decl name='__asan_backtrace_vector_grow' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='235' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <function-decl name='__asan_backtrace_vector_grow' mangled-name='__asan_backtrace_vector_grow' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='235' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_backtrace_vector_grow'>
<parameter type-id='type-id-1718'/>
<parameter type-id='type-id-1541'/>
<parameter type-id='type-id-1706'/>
<parameter is-variadic='yes'/>
<return type-id='type-id-13'/>
</function-decl>
- <function-decl name='__asan_backtrace_free' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='212' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <function-decl name='__asan_backtrace_free' mangled-name='__asan_backtrace_free' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='212' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_backtrace_free'>
<parameter type-id='type-id-1718'/>
<parameter type-id='type-id-3'/>
<parameter type-id='type-id-1541'/>
<parameter type-id='type-id-32'/>
<return type-id='type-id-13'/>
</function-decl>
- <function-decl name='__asan_backtrace_alloc' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='206' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <function-decl name='__asan_backtrace_alloc' mangled-name='__asan_backtrace_alloc' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='206' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_backtrace_alloc'>
<parameter type-id='type-id-1718'/>
<parameter type-id='type-id-1541'/>
<parameter type-id='type-id-1706'/>
<parameter type-id='type-id-3'/>
<return type-id='type-id-3'/>
</function-decl>
- <function-decl name='__asan_backtrace_qsort' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='201' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <function-decl name='__asan_backtrace_qsort' mangled-name='__asan_backtrace_qsort' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='201' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_backtrace_qsort'>
<parameter type-id='type-id-3'/>
<parameter type-id='type-id-1541'/>
<parameter type-id='type-id-1541'/>
<parameter type-id='type-id-1091'/>
<return type-id='type-id-6'/>
</function-decl>
- <function-decl name='__asan_backtrace_vector_release' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='253' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <function-decl name='__asan_backtrace_vector_release' mangled-name='__asan_backtrace_vector_release' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='253' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_backtrace_vector_release'>
<parameter type-id='type-id-1718'/>
<parameter type-id='type-id-1728'/>
<parameter type-id='type-id-1706'/>
</function-type>
</abi-instr>
<abi-instr version='1.0' address-size='64' path='../../.././libsanitizer/libbacktrace/../../libbacktrace/fileline.c' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-ImG4Cf/gcc-4.9.2/x86_64-unknown-linux-gnu/libsanitizer/libbacktrace' language='LANG_C89'>
- <function-decl name='__asan_backtrace_open' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='159' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <function-decl name='__asan_backtrace_open' mangled-name='__asan_backtrace_open' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='159' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_backtrace_open'>
<parameter type-id='type-id-32'/>
<parameter type-id='type-id-1706'/>
<parameter type-id='type-id-3'/>
<parameter type-id='type-id-471'/>
<return type-id='type-id-13'/>
</function-decl>
- <function-decl name='__asan_backtrace_initialize' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='268' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <function-decl name='__asan_backtrace_initialize' mangled-name='__asan_backtrace_initialize' filepath='../../.././libsanitizer/libbacktrace/../../libbacktrace/internal.h' line='268' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__asan_backtrace_initialize'>
<parameter type-id='type-id-1718'/>
<parameter type-id='type-id-13'/>
<parameter type-id='type-id-1706'/>
<return type-id='type-id-13'/>
</function-decl>
</abi-instr>
- <abi-instr version='1.0' address-size='64' path='../../.././libsanitizer/libbacktrace/../../libbacktrace/sort.c' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-ImG4Cf/gcc-4.9.2/x86_64-unknown-linux-gnu/libsanitizer/libbacktrace' language='LANG_C89'>
- </abi-instr>
<abi-instr version='1.0' address-size='64' path='../../.././libsanitizer/libbacktrace/../../libbacktrace/state.c' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-ImG4Cf/gcc-4.9.2/x86_64-unknown-linux-gnu/libsanitizer/libbacktrace' language='LANG_C89'>
</abi-instr>
<abi-instr version='1.0' address-size='64' path='../../.././libsanitizer/libbacktrace/../../libiberty/cp-demangle.c' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-ImG4Cf/gcc-4.9.2/x86_64-unknown-linux-gnu/libsanitizer/libbacktrace' language='LANG_C89'>
<parameter type-id='type-id-8'/>
<return type-id='type-id-3'/>
</function-decl>
- <function-decl name='cplus_demangle_v3' filepath='../.././libiberty/../include/demangle.h' line='160' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <function-decl name='cplus_demangle_v3' mangled-name='cplus_demangle_v3' filepath='../.././libiberty/../include/demangle.h' line='160' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cplus_demangle_v3'>
<parameter type-id='type-id-8'/>
<parameter type-id='type-id-3'/>
<return type-id='type-id-9'/>
</function-decl>
- <function-decl name='java_demangle_v3' filepath='../.././libiberty/../include/demangle.h' line='167' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <function-decl name='java_demangle_v3' mangled-name='java_demangle_v3' filepath='../.././libiberty/../include/demangle.h' line='167' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='java_demangle_v3'>
<parameter type-id='type-id-8'/>
<return type-id='type-id-9'/>
</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'/>
<parameter type-id='type-id-27'/>
<return type-id='type-id-21'/>
</function-decl>
- <function-decl name='xexit' filepath='../.././libiberty/../include/libiberty.h' line='288' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <function-decl name='xexit' mangled-name='xexit' filepath='../.././libiberty/../include/libiberty.h' line='288' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xexit'>
<parameter type-id='type-id-3'/>
<return type-id='type-id-1'/>
</function-decl>
</abi-instr>
<abi-instr version='1.0' address-size='64' path='../.././libiberty/xmemdup.c' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/host-x86_64-unknown-linux-gnu/libiberty' language='LANG_C89'>
</abi-instr>
- <abi-instr version='1.0' address-size='64' path='../.././libiberty/xstrdup.c' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/host-x86_64-unknown-linux-gnu/libiberty' language='LANG_C89'>
- </abi-instr>
- <abi-instr version='1.0' address-size='64' path='../.././libiberty/xstrerror.c' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-wfh0ig/gcc-4.7.4/host-x86_64-unknown-linux-gnu/libiberty' language='LANG_C89'>
- </abi-instr>
</abi-corpus>