// 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 <rafael.espindola@gmail.com>
// This file is part of gold.
unsigned int* symndx)
{
typedef Incremental_inputs_reader<size, big_endian> Inputs_reader;
+ static const unsigned int global_sym_entry_size =
+ Incremental_inputs_reader<size, big_endian>::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 =
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;
}
}
Incremental_inputs_reader<size, big_endian>
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());
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");
static_cast<long long>(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.
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<size, big_endian> sym(sym_p);
const char* symname;
printf(" %6d %6s %8s %8s %8s %8s %-5s %s\n",
output_symndx,
"", "", "", "", "",
- is_def ? "DEF" : "UNDEF",
+ is_copy ? "COPY" : (is_def ? "DEF" : "UNDEF"),
symname);
}
}
symname = "<unknown>";
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);
}
}
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;
}