diff --git a/gold/ChangeLog b/gold/ChangeLog index 320f8326cc..ce00f17eca 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,13 @@ +2012-09-06 Cary Coutant + + * dwarf_reader.cc (Dwarf_die::read_attributes): Add + DW_FORM_GNU_addr_index and DW_FORM_GNU_str_index. + (Dwarf_die::skip_attributes): Likewise. + * object.cc (Read_symbols_data::~Read_symbols_data): Update comment. + * testsuite/gdb_index_test.cc (inline_func_1): New function. + (main): Call it. + * testsuite/gdb_index_test_comm.sh: Check index for inline function. + 2012-09-05 H.J. Lu * testsuite/script_test_3.t: Add .got.plt output section diff --git a/gold/dwarf_reader.cc b/gold/dwarf_reader.cc index ac87f4b843..00347032a0 100644 --- a/gold/dwarf_reader.cc +++ b/gold/dwarf_reader.cc @@ -745,6 +745,8 @@ Dwarf_die::read_attributes() pattr += len; break; case elfcpp::DW_FORM_udata: + case elfcpp::DW_FORM_GNU_addr_index: + case elfcpp::DW_FORM_GNU_str_index: attr_value.val.uintval = read_unsigned_LEB_128(pattr, &len); pattr += len; break; @@ -895,6 +897,8 @@ Dwarf_die::skip_attributes() break; case elfcpp::DW_FORM_ref_udata: case elfcpp::DW_FORM_udata: + case elfcpp::DW_FORM_GNU_addr_index: + case elfcpp::DW_FORM_GNU_str_index: read_unsigned_LEB_128(pattr, &len); pattr += len; break; diff --git a/gold/object.cc b/gold/object.cc index 6c0c187726..6ee10f522d 100644 --- a/gold/object.cc +++ b/gold/object.cc @@ -48,7 +48,8 @@ namespace gold // Struct Read_symbols_data. -// Destroy any remaining File_view objects. +// Destroy any remaining File_view objects and buffers of decompressed +// sections. Read_symbols_data::~Read_symbols_data() { diff --git a/gold/testsuite/gdb_index_test.cc b/gold/testsuite/gdb_index_test.cc index 342d47c504..d5ac2f19de 100644 --- a/gold/testsuite/gdb_index_test.cc +++ b/gold/testsuite/gdb_index_test.cc @@ -123,6 +123,16 @@ struct anonymous_union_container { anonymous_union_container anonymous_union_var; +#ifdef __GNUC__ +#define ALWAYS_INLINE __attribute__((always_inline)) +#else +#define ALWAYS_INLINE +#endif + +static inline ALWAYS_INLINE int +inline_func_1(int i) +{ return i * 17; } + int main() { @@ -134,5 +144,6 @@ main() check(&two::c2v1); check(&two::c2v2); check(&two::c2v3); + anonymous_union_var.u.b = inline_func_1(3) - 51; return anonymous_union_var.u.b; } diff --git a/gold/testsuite/gdb_index_test_comm.sh b/gold/testsuite/gdb_index_test_comm.sh index 71003293b2..4ab07b3c3a 100755 --- a/gold/testsuite/gdb_index_test_comm.sh +++ b/gold/testsuite/gdb_index_test_comm.sh @@ -80,5 +80,6 @@ check $STDOUT "^\[ *[0-9]*\] two::c2:" check $STDOUT "^\[ *[0-9]*\] two::c2v1:" check $STDOUT "^\[ *[0-9]*\] two::c2v2:" check $STDOUT "^\[ *[0-9]*\] anonymous_union_var:" +check $STDOUT "^\[ *[0-9]*\] inline_func_1:" exit 0