summaryrefslogtreecommitdiff
path: root/gold
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@gmail.com>2020-12-15 14:37:22 -0800
committerCary Coutant <ccoutant@gmail.com>2020-12-15 14:37:22 -0800
commit2b2d74f4a135e69fa2e0b68dd273212a4db88f81 (patch)
tree7b43bfe833c9b37411c723ee671d7d910a8e6a65 /gold
parent8947abe6bfbf2615e1f4ea2420b3aad5cbac4d90 (diff)
downloadbinutils-gdb-2b2d74f4a135e69fa2e0b68dd273212a4db88f81.tar.gz
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.
Diffstat (limited to 'gold')
-rw-r--r--gold/ChangeLog9
-rw-r--r--gold/dwp.cc4
-rw-r--r--gold/incremental.cc4
-rw-r--r--gold/object.cc8
-rw-r--r--gold/object.h10
5 files changed, 21 insertions, 14 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 32decc69a43..77b1f886c30 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -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>
Implement -z unique / -z nounique options.
diff --git a/gold/dwp.cc b/gold/dwp.cc
index 7c4eef090d4..aae1fe212a2 100644
--- a/gold/dwp.cc
+++ b/gold/dwp.cc
@@ -1107,8 +1107,8 @@ Dwo_file::sized_make_object(const unsigned char* p, Input_file* input_file,
if (output_file != NULL)
output_file->record_target_info(
this->name_, ehdr.get_e_machine(), size, big_endian,
- ehdr.get_e_ident()[elfcpp::EI_OSABI],
- ehdr.get_e_ident()[elfcpp::EI_ABIVERSION]);
+ ehdr.get_ei_osabi(),
+ ehdr.get_ei_abiversion());
return obj;
}
diff --git a/gold/incremental.cc b/gold/incremental.cc
index 8d0df2d7bcc..1f2ae5b87b3 100644
--- a/gold/incremental.cc
+++ b/gold/incremental.cc
@@ -856,8 +856,8 @@ make_sized_incremental_binary(Output_file* file,
{
Target* target = select_target(NULL, 0, // XXX
ehdr.get_e_machine(), size, big_endian,
- ehdr.get_e_ident()[elfcpp::EI_OSABI],
- ehdr.get_e_ident()[elfcpp::EI_ABIVERSION]);
+ ehdr.get_ei_osabi(),
+ ehdr.get_ei_abiversion());
if (target == NULL)
{
explain_no_incremental(_("unsupported ELF machine number %d"),
diff --git a/gold/object.cc b/gold/object.cc
index 072563b5a6a..0edaf477db8 100644
--- a/gold/object.cc
+++ b/gold/object.cc
@@ -464,7 +464,8 @@ Sized_relobj_file<size, big_endian>::Sized_relobj_file(
const elfcpp::Ehdr<size, big_endian>& ehdr)
: Sized_relobj<size, big_endian>(name, input_file, offset),
elf_file_(this, ehdr),
- osabi_(ehdr),
+ osabi_(ehdr.get_ei_osabi()),
+ e_type_(ehdr.get_e_type()),
symtab_shndx_(-1U),
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_(),
output_views_(NULL)
{
- this->e_type_ = ehdr.get_e_type();
}
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,
ehdr.get_e_machine(), size, big_endian,
- ehdr.get_e_ident()[elfcpp::EI_OSABI],
- ehdr.get_e_ident()[elfcpp::EI_ABIVERSION]);
+ ehdr.get_ei_osabi(),
+ ehdr.get_ei_abiversion());
if (target == NULL)
gold_fatal(_("%s: unsupported ELF machine number %d"),
name.c_str(), ehdr.get_e_machine());
diff --git a/gold/object.h b/gold/object.h
index 4afee993e85..1ab98ced464 100644
--- a/gold/object.h
+++ b/gold/object.h
@@ -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.
-template <int size, bool big_endian>
class Osabi
{
public:
- Osabi(const elfcpp::Ehdr<size, big_endian>& ehdr)
- : ei_osabi_(static_cast<elfcpp::ELFOSABI>(
- ehdr.get_e_ident()[elfcpp::EI_OSABI]))
+ Osabi(unsigned char ei_osabi)
+ : ei_osabi_(static_cast<elfcpp::ELFOSABI>(ei_osabi))
{ }
bool
@@ -2249,7 +2247,7 @@ class Sized_relobj_file : public Sized_relobj<size, big_endian>
{ return this->e_type_; }
// Return the EI_OSABI.
- const Osabi<size, big_endian>&
+ const Osabi&
osabi() const
{ return this->osabi_; }
@@ -2894,7 +2892,7 @@ class Sized_relobj_file : public Sized_relobj<size, big_endian>
// General access to the ELF file.
elfcpp::Elf_file<size, big_endian, Object> elf_file_;
// 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
// as input files only for the --just-symbols option.
int e_type_;