X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gold%2Freduced_debug_output.cc;h=30c475666f31c5dda2bb1758d41c5fbdcae73564;hb=aa989b27d0bad451455416953c0e5026e229863a;hp=5bc8053f978c21152c64832e41aae8f1bbb594d2;hpb=2ea97941102380c28117882600265c1187c6fc8b;p=deliverable%2Fbinutils-gdb.git diff --git a/gold/reduced_debug_output.cc b/gold/reduced_debug_output.cc index 5bc8053f97..30c475666f 100644 --- a/gold/reduced_debug_output.cc +++ b/gold/reduced_debug_output.cc @@ -1,6 +1,6 @@ // reduced_debug_output.cc -- output reduced debugging information to save space -// Copyright 2008 Free Software Foundation, Inc. +// Copyright (C) 2008-2019 Free Software Foundation, Inc. // Written by Caleb Howe . // This file is part of gold. @@ -60,9 +60,10 @@ Output_reduced_debug_info_section::get_die_end( return false; switch(form) { - case elfcpp::DW_FORM_null: + case elfcpp::DW_FORM_flag_present: break; case elfcpp::DW_FORM_strp: + case elfcpp::DW_FORM_sec_offset: die += is64 ? 8 : 4; break; case elfcpp::DW_FORM_addr: @@ -88,6 +89,7 @@ Output_reduced_debug_info_section::get_die_end( break; } case elfcpp::DW_FORM_block: + case elfcpp::DW_FORM_exprloc: LEB_decoded = read_unsigned_LEB_128(die, &LEB_size); die += (LEB_decoded + LEB_size); break; @@ -106,6 +108,7 @@ Output_reduced_debug_info_section::get_die_end( break; case elfcpp::DW_FORM_data8: case elfcpp::DW_FORM_ref8: + case elfcpp::DW_FORM_ref_sig8: die += 8; break; case elfcpp::DW_FORM_ref_udata: @@ -113,14 +116,20 @@ Output_reduced_debug_info_section::get_die_end( read_unsigned_LEB_128(die, &LEB_size); die += LEB_size; break; + case elfcpp::DW_FORM_sdata: + read_signed_LEB_128(die, &LEB_size); + die += LEB_size; + break; case elfcpp::DW_FORM_string: { size_t length = strlen(reinterpret_cast(die)); die += length + 1; break; } - case elfcpp::DW_FORM_sdata: case elfcpp::DW_FORM_indirect: + case elfcpp::DW_FORM_GNU_addr_index: + case elfcpp::DW_FORM_GNU_str_index: + default: return false; } } @@ -154,20 +163,20 @@ Output_reduced_debug_abbrev_section::set_final_data_size() abbrev_data += LEB_size; // Together with the abbreviation number these fields make up - // the header for each abbreviation + // the header for each abbreviation. uint64_t abbrev_type = read_unsigned_LEB_128(abbrev_data, &LEB_size); abbrev_data += LEB_size; // This would ordinarily be the has_children field of the - // abbreviation. But it's going to be false after reducting the - // information, so there's no point in storing it + // abbreviation. But it's going to be false after reducing the + // information, so there's no point in storing it. abbrev_data++; - // Read to the end of the current abbreviation + // Read to the end of the current abbreviation. // This is indicated by two zero unsigned LEBs in a row. We don't // need to parse the data yet, so we just scan through the data // looking for two consecutive 0 bytes indicating the end of the - // abbreviation + // abbreviation. unsigned char* current_abbrev; for (current_abbrev = abbrev_data; current_abbrev[0] || current_abbrev[1];