From 4dbfafccf0dd346e7a73cddf85c600aa7afa3644 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 1 Dec 2010 19:49:22 +0000 Subject: * dwarf_reader.h (class Sized_dwarf_line_info): Add track_relocs_type_ field. * dwarf_reader.cc (Sized_dwarf_line_info::Sized_dwarf_line_info): Set track_relocs_type_. (Sized_dwarf_line_info::process_one_opcode): Ignore the section contents when using RELA relocs. (Sized_dwarf_line_info::read_relocs): Add the reloc addend to reloc_map_. * reloc.cc (Track_relocs::next_addend): New function. * reloc.h (class Track_relocs): Declare next_addend. --- gold/reloc.cc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'gold/reloc.cc') diff --git a/gold/reloc.cc b/gold/reloc.cc index 9ffb693..51ced0f 100644 --- a/gold/reloc.cc +++ b/gold/reloc.cc @@ -1591,6 +1591,20 @@ Track_relocs::next_symndx() const return elfcpp::elf_r_sym(rel.get_r_info()); } +// Return the addend of the next reloc, or 0 if there isn't one. + +template +uint64_t +Track_relocs::next_addend() const +{ + if (this->pos_ >= this->len_) + return 0; + if (this->reloc_size_ == elfcpp::Elf_sizes::rel_size) + return 0; + elfcpp::Rela rela(this->prelocs_ + this->pos_); + return rela.get_r_addend(); +} + // Advance to the next reloc whose r_offset is greater than or equal // to OFFSET. Return the number of relocs we skip. -- cgit v1.1