X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gold%2Fincremental-dump.cc;h=1b561ae9680ffd62fdf7efd61010e17aaf254129;hb=abb78b78c4184d2ac968362229adae268385a21c;hp=eecf8a876dc7e4ad9e133390346cea3731349c8e;hpb=4829d394dedd7953e0ee0cf540ffccc01936499d;p=deliverable%2Fbinutils-gdb.git diff --git a/gold/incremental-dump.cc b/gold/incremental-dump.cc index eecf8a876d..1b561ae968 100644 --- a/gold/incremental-dump.cc +++ b/gold/incremental-dump.cc @@ -1,6 +1,6 @@ // incremental.cc -- incremental linking test/debug tool -// Copyright 2009, 2010 Free Software Foundation, Inc. +// Copyright (C) 2009-2020 Free Software Foundation, Inc. // Written by Rafael Avila de Espindola // This file is part of gold. @@ -52,6 +52,9 @@ find_input_containing_global( unsigned int* symndx) { typedef Incremental_inputs_reader Inputs_reader; + static const unsigned int global_sym_entry_size = + Incremental_inputs_reader::global_sym_entry_size; + for (unsigned int i = 0; i < incremental_inputs.input_file_count(); ++i) { typename Inputs_reader::Incremental_input_entry_reader input_file = @@ -63,7 +66,8 @@ find_input_containing_global( if (offset >= input_file.get_symbol_offset(0) && offset < input_file.get_symbol_offset(nsyms)) { - *symndx = (offset - input_file.get_symbol_offset(0)) / 20; + *symndx = ((offset - input_file.get_symbol_offset(0)) + / global_sym_entry_size); return input_file; } } @@ -92,7 +96,7 @@ dump_incremental_inputs(const char* argv0, const char* filename, Incremental_inputs_reader incremental_inputs(inc->inputs_reader()); - if (incremental_inputs.version() != 1) + if (incremental_inputs.version() != 2) { fprintf(stderr, "%s: %s: unknown incremental version %d\n", argv0, filename, incremental_inputs.version()); @@ -149,6 +153,12 @@ dump_incremental_inputs(const char* argv0, const char* filename, input_file.get_local_symbol_offset()); printf(" Local symbol count: %d\n", input_file.get_local_symbol_count()); + printf(" First dynamic reloc: %d\n", + input_file.get_first_dyn_reloc()); + printf(" Dynamic reloc count: %d\n", + input_file.get_dyn_reloc_count()); + printf(" COMDAT group count: %d\n", + input_file.get_comdat_group_count()); break; case INCREMENTAL_INPUT_ARCHIVE: printf("Archive\n"); @@ -158,6 +168,10 @@ dump_incremental_inputs(const char* argv0, const char* filename, break; case INCREMENTAL_INPUT_SHARED_LIBRARY: printf("Shared library\n"); + printf(" As needed: %s\n", + input_file.as_needed() ? "true" : "false"); + printf(" soname: %s\n", + input_file.get_soname()); printf(" Symbol count: %d\n", input_file.get_global_symbol_count()); break; @@ -204,6 +218,11 @@ dump_incremental_inputs(const char* argv0, const char* filename, static_cast(info.sh_size), info.name); } + + unsigned int ncomdat = input_file.get_comdat_group_count(); + for (unsigned int i = 0; i < ncomdat; ++i) + printf(" Comdat group: %s\n", + input_file.get_comdat_group_signature(i)); } // Get a view of the .symtab section. @@ -278,8 +297,9 @@ dump_incremental_inputs(const char* argv0, const char* filename, for (unsigned int symndx = 0; symndx < nsyms; ++symndx) { bool is_def; + bool is_copy; unsigned int output_symndx = - input_file.get_output_symbol_index(symndx, &is_def); + input_file.get_output_symbol_index(symndx, &is_def, &is_copy); sym_p = symtab_view.data() + output_symndx * sym_size; elfcpp::Sym sym(sym_p); const char* symname; @@ -288,7 +308,7 @@ dump_incremental_inputs(const char* argv0, const char* filename, printf(" %6d %6s %8s %8s %8s %8s %-5s %s\n", output_symndx, "", "", "", "", "", - is_def ? "DEF" : "UNDEF", + is_copy ? "COPY" : (is_def ? "DEF" : "UNDEF"), symname); } } @@ -306,12 +326,14 @@ dump_incremental_inputs(const char* argv0, const char* filename, symname = ""; printf(" %6d %6d %8d %8d %8d %8d %-5s %s\n", output_symndx, - info.shndx(), + info.shndx() == -1U ? -1 : info.shndx(), input_file.get_symbol_offset(symndx), info.next_offset(), info.reloc_count(), info.reloc_offset(), - info.shndx() != elfcpp::SHN_UNDEF ? "DEF" : "UNDEF", + (info.shndx() == -1U + ? "BASE" + : info.shndx() == 0 ? "UNDEF" : "DEF"), symname); } } @@ -368,24 +390,26 @@ dump_incremental_inputs(const char* argv0, const char* filename, for (unsigned int i = 0; i < ngot; ++i) { unsigned int got_type = igot_plt.get_got_type(i); - unsigned int got_desc = igot_plt.get_got_desc(i); + unsigned int got_symndx = igot_plt.get_got_symndx(i); + unsigned int got_input_index = igot_plt.get_got_input_index(i); printf("[%d] type %02x, ", i, got_type & 0x7f); if ((got_type & 0x7f) == 0x7f) printf("reserved"); else if (got_type & 0x80) { - Entry_reader input_file = incremental_inputs.input_file(got_desc); + Entry_reader input_file = + incremental_inputs.input_file(got_input_index); const char* objname = input_file.filename(); - printf("local: %s (%d)", objname, got_desc); + printf("local: %s (%d)", objname, got_symndx); } else { - sym_p = symtab_view.data() + got_desc * sym_size; + sym_p = symtab_view.data() + got_symndx * sym_size; elfcpp::Sym sym(sym_p); const char* symname; if (!strtab.get_c_string(sym.get_st_name(), &symname)) symname = ""; - printf("global %s (%d)", symname, got_desc); + printf("global %s (%d)", symname, got_symndx); } printf("\n"); } @@ -439,10 +463,10 @@ main(int argc, char** argv) Output_file* file = new Output_file(filename); - bool t = file->open_for_modification(); + bool t = file->open_base_file(NULL, false); if (!t) { - fprintf(stderr, "%s: open_for_modification(%s): %s\n", argv[0], filename, + fprintf(stderr, "%s: open_base_file(%s): %s\n", argv[0], filename, strerror(errno)); return 1; }