mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-17 16:05:56 +08:00
Cosmetic improvements for OSABI access.
Add accessor methods to elfcpp::Ehdr class for EI_OSABI and EI_ABIVERSION; use those to simplify initialization of Osabi class and eliminate the need to template the class. elfcpp/ * elfcpp.h (class Ehdr): Add get_ei_osabi and get_ei_abiversion methods. gold/ * dwp.cc (class Dwo_file): Use new Ehdr::get_ei_osabi and get_ei_abiversion methods. * incremental.cc (make_sized_incremental_binary): Likewise. * object.cc (Sized_relobj_file::Sized_relobj_file): Likewise. (make_elf_sized_object): Likewise. * object.h (class Osabi): Make the class untemplated.
This commit is contained in:
@ -1,3 +1,7 @@
|
|||||||
|
2020-12-15 Cary Coutant <ccoutant@gmail.com>
|
||||||
|
|
||||||
|
* elfcpp.h (class Ehdr): Add get_ei_osabi and get_ei_abiversion methods.
|
||||||
|
|
||||||
2020-12-15 Vivek Das Mohapatra <vivek@collabora.com>
|
2020-12-15 Vivek Das Mohapatra <vivek@collabora.com>
|
||||||
|
|
||||||
* elfcpp.h (enum DT): New enum member DT_GNU_FLAGS_1.
|
* elfcpp.h (enum DT): New enum member DT_GNU_FLAGS_1.
|
||||||
|
@ -1100,6 +1100,14 @@ class Ehdr
|
|||||||
get_e_ident() const
|
get_e_ident() const
|
||||||
{ return this->p_->e_ident; }
|
{ return this->p_->e_ident; }
|
||||||
|
|
||||||
|
unsigned char
|
||||||
|
get_ei_osabi() const
|
||||||
|
{ return this->p_->e_ident[EI_OSABI]; }
|
||||||
|
|
||||||
|
unsigned char
|
||||||
|
get_ei_abiversion() const
|
||||||
|
{ return this->p_->e_ident[EI_ABIVERSION]; }
|
||||||
|
|
||||||
Elf_Half
|
Elf_Half
|
||||||
get_e_type() const
|
get_e_type() const
|
||||||
{ return Convert<16, big_endian>::convert_host(this->p_->e_type); }
|
{ return Convert<16, big_endian>::convert_host(this->p_->e_type); }
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
2020-12-15 Cary Coutant <ccoutant@gmail.com>
|
||||||
|
|
||||||
|
* dwp.cc (class Dwo_file): Use new Ehdr::get_ei_osabi and
|
||||||
|
get_ei_abiversion methods.
|
||||||
|
* incremental.cc (make_sized_incremental_binary): Likewise.
|
||||||
|
* object.cc (Sized_relobj_file::Sized_relobj_file): Likewise.
|
||||||
|
(make_elf_sized_object): Likewise.
|
||||||
|
* object.h (class Osabi): Make the class untemplated.
|
||||||
|
|
||||||
2020-12-15 Vivek Das Mohapatra <vivek@collabora.com>
|
2020-12-15 Vivek Das Mohapatra <vivek@collabora.com>
|
||||||
|
|
||||||
Implement -z unique / -z nounique options.
|
Implement -z unique / -z nounique options.
|
||||||
|
@ -1107,8 +1107,8 @@ Dwo_file::sized_make_object(const unsigned char* p, Input_file* input_file,
|
|||||||
if (output_file != NULL)
|
if (output_file != NULL)
|
||||||
output_file->record_target_info(
|
output_file->record_target_info(
|
||||||
this->name_, ehdr.get_e_machine(), size, big_endian,
|
this->name_, ehdr.get_e_machine(), size, big_endian,
|
||||||
ehdr.get_e_ident()[elfcpp::EI_OSABI],
|
ehdr.get_ei_osabi(),
|
||||||
ehdr.get_e_ident()[elfcpp::EI_ABIVERSION]);
|
ehdr.get_ei_abiversion());
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -856,8 +856,8 @@ make_sized_incremental_binary(Output_file* file,
|
|||||||
{
|
{
|
||||||
Target* target = select_target(NULL, 0, // XXX
|
Target* target = select_target(NULL, 0, // XXX
|
||||||
ehdr.get_e_machine(), size, big_endian,
|
ehdr.get_e_machine(), size, big_endian,
|
||||||
ehdr.get_e_ident()[elfcpp::EI_OSABI],
|
ehdr.get_ei_osabi(),
|
||||||
ehdr.get_e_ident()[elfcpp::EI_ABIVERSION]);
|
ehdr.get_ei_abiversion());
|
||||||
if (target == NULL)
|
if (target == NULL)
|
||||||
{
|
{
|
||||||
explain_no_incremental(_("unsupported ELF machine number %d"),
|
explain_no_incremental(_("unsupported ELF machine number %d"),
|
||||||
|
@ -464,7 +464,8 @@ Sized_relobj_file<size, big_endian>::Sized_relobj_file(
|
|||||||
const elfcpp::Ehdr<size, big_endian>& ehdr)
|
const elfcpp::Ehdr<size, big_endian>& ehdr)
|
||||||
: Sized_relobj<size, big_endian>(name, input_file, offset),
|
: Sized_relobj<size, big_endian>(name, input_file, offset),
|
||||||
elf_file_(this, ehdr),
|
elf_file_(this, ehdr),
|
||||||
osabi_(ehdr),
|
osabi_(ehdr.get_ei_osabi()),
|
||||||
|
e_type_(ehdr.get_e_type()),
|
||||||
symtab_shndx_(-1U),
|
symtab_shndx_(-1U),
|
||||||
local_symbol_count_(0),
|
local_symbol_count_(0),
|
||||||
output_local_symbol_count_(0),
|
output_local_symbol_count_(0),
|
||||||
@ -482,7 +483,6 @@ Sized_relobj_file<size, big_endian>::Sized_relobj_file(
|
|||||||
deferred_layout_relocs_(),
|
deferred_layout_relocs_(),
|
||||||
output_views_(NULL)
|
output_views_(NULL)
|
||||||
{
|
{
|
||||||
this->e_type_ = ehdr.get_e_type();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<int size, bool big_endian>
|
template<int size, bool big_endian>
|
||||||
@ -3387,8 +3387,8 @@ make_elf_sized_object(const std::string& name, Input_file* input_file,
|
|||||||
{
|
{
|
||||||
Target* target = select_target(input_file, offset,
|
Target* target = select_target(input_file, offset,
|
||||||
ehdr.get_e_machine(), size, big_endian,
|
ehdr.get_e_machine(), size, big_endian,
|
||||||
ehdr.get_e_ident()[elfcpp::EI_OSABI],
|
ehdr.get_ei_osabi(),
|
||||||
ehdr.get_e_ident()[elfcpp::EI_ABIVERSION]);
|
ehdr.get_ei_abiversion());
|
||||||
if (target == NULL)
|
if (target == NULL)
|
||||||
gold_fatal(_("%s: unsupported ELF machine number %d"),
|
gold_fatal(_("%s: unsupported ELF machine number %d"),
|
||||||
name.c_str(), ehdr.get_e_machine());
|
name.c_str(), ehdr.get_e_machine());
|
||||||
|
@ -386,13 +386,11 @@ build_compressed_section_map(const unsigned char* pshdrs, unsigned int shnum,
|
|||||||
|
|
||||||
// Osabi represents the EI_OSABI field from the ELF header.
|
// Osabi represents the EI_OSABI field from the ELF header.
|
||||||
|
|
||||||
template <int size, bool big_endian>
|
|
||||||
class Osabi
|
class Osabi
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Osabi(const elfcpp::Ehdr<size, big_endian>& ehdr)
|
Osabi(unsigned char ei_osabi)
|
||||||
: ei_osabi_(static_cast<elfcpp::ELFOSABI>(
|
: ei_osabi_(static_cast<elfcpp::ELFOSABI>(ei_osabi))
|
||||||
ehdr.get_e_ident()[elfcpp::EI_OSABI]))
|
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
bool
|
bool
|
||||||
@ -2249,7 +2247,7 @@ class Sized_relobj_file : public Sized_relobj<size, big_endian>
|
|||||||
{ return this->e_type_; }
|
{ return this->e_type_; }
|
||||||
|
|
||||||
// Return the EI_OSABI.
|
// Return the EI_OSABI.
|
||||||
const Osabi<size, big_endian>&
|
const Osabi&
|
||||||
osabi() const
|
osabi() const
|
||||||
{ return this->osabi_; }
|
{ return this->osabi_; }
|
||||||
|
|
||||||
@ -2894,7 +2892,7 @@ class Sized_relobj_file : public Sized_relobj<size, big_endian>
|
|||||||
// General access to the ELF file.
|
// General access to the ELF file.
|
||||||
elfcpp::Elf_file<size, big_endian, Object> elf_file_;
|
elfcpp::Elf_file<size, big_endian, Object> elf_file_;
|
||||||
// The EI_OSABI.
|
// The EI_OSABI.
|
||||||
const Osabi<size, big_endian> osabi_;
|
const Osabi osabi_;
|
||||||
// Type of ELF file (ET_REL or ET_EXEC). ET_EXEC files are allowed
|
// Type of ELF file (ET_REL or ET_EXEC). ET_EXEC files are allowed
|
||||||
// as input files only for the --just-symbols option.
|
// as input files only for the --just-symbols option.
|
||||||
int e_type_;
|
int e_type_;
|
||||||
|
Reference in New Issue
Block a user