Line 1910... |
Line 1910... |
|
|
const Sized_relobj_file<size, big_endian>*
|
const Sized_relobj_file<size, big_endian>*
|
sized_relobj() const
|
sized_relobj() const
|
{ return this; }
|
{ return this; }
|
|
|
|
// Return the ELF file type.
|
|
int
|
|
e_type() const
|
|
{ return this->e_type_; }
|
|
|
// Return the number of symbols. This is only valid after
|
// Return the number of symbols. This is only valid after
|
// Object::add_symbols has been called.
|
// Object::add_symbols has been called.
|
unsigned int
|
unsigned int
|
symbol_count() const
|
symbol_count() const
|
{ return this->local_symbol_count_ + this->symbols_.size(); }
|
{ return this->local_symbol_count_ + this->symbols_.size(); }
|
Line 2218... |
Line 2223... |
typename elfcpp::Elf_types<size>::Elf_Addr address;
|
typename elfcpp::Elf_types<size>::Elf_Addr address;
|
off_t offset;
|
off_t offset;
|
section_size_type view_size;
|
section_size_type view_size;
|
bool is_input_output_view;
|
bool is_input_output_view;
|
bool is_postprocessing_view;
|
bool is_postprocessing_view;
|
|
bool is_ctors_reverse_view;
|
};
|
};
|
|
|
typedef std::vector<View_size> Views;
|
typedef std::vector<View_size> Views;
|
|
|
// This may be overriden by a child class.
|
// This may be overriden by a child class.
|
Line 2303... |
Line 2309... |
const elfcpp::Shdr<size, big_endian>&);
|
const elfcpp::Shdr<size, big_endian>&);
|
|
|
// Layout an input section.
|
// Layout an input section.
|
void
|
void
|
layout_section(Layout* layout, unsigned int shndx, const char* name,
|
layout_section(Layout* layout, unsigned int shndx, const char* name,
|
typename This::Shdr& shdr, unsigned int reloc_shndx,
|
const typename This::Shdr& shdr, unsigned int reloc_shndx,
|
unsigned int reloc_type);
|
unsigned int reloc_type);
|
|
|
|
// Layout an input .eh_frame section.
|
|
void
|
|
layout_eh_frame_section(Layout* layout, const unsigned char* symbols_data,
|
|
section_size_type symbols_size,
|
|
const unsigned char* symbol_names_data,
|
|
section_size_type symbol_names_size,
|
|
unsigned int shndx, const typename This::Shdr&,
|
|
unsigned int reloc_shndx, unsigned int reloc_type);
|
|
|
// Write section data to the output file. Record the views and
|
// Write section data to the output file. Record the views and
|
// sizes in VIEWS for use when relocating.
|
// sizes in VIEWS for use when relocating.
|
void
|
void
|
write_sections(const unsigned char* pshdrs, Output_file*, Views*);
|
write_sections(const Layout*, const unsigned char* pshdrs, Output_file*,
|
|
Views*);
|
|
|
// Relocate the sections in the output file.
|
// Relocate the sections in the output file.
|
void
|
void
|
relocate_sections(const Symbol_table* symtab, const Layout* layout,
|
relocate_sections(const Symbol_table* symtab, const Layout* layout,
|
const unsigned char* pshdrs, Output_file* of,
|
const unsigned char* pshdrs, Output_file* of,
|
Views* pviews)
|
Views* pviews)
|
{ this->do_relocate_sections(symtab, layout, pshdrs, of, pviews); }
|
{ this->do_relocate_sections(symtab, layout, pshdrs, of, pviews); }
|
|
|
|
// Reverse the words in a section. Used for .ctors sections mapped
|
|
// to .init_array sections.
|
|
void
|
|
reverse_words(unsigned char*, section_size_type);
|
|
|
// Scan the input relocations for --emit-relocs.
|
// Scan the input relocations for --emit-relocs.
|
void
|
void
|
emit_relocs_scan(Symbol_table*, Layout*, const unsigned char* plocal_syms,
|
emit_relocs_scan(Symbol_table*, Layout*, const unsigned char* plocal_syms,
|
const Read_relocs_data::Relocs_list::iterator&);
|
const Read_relocs_data::Relocs_list::iterator&);
|
|
|
Line 2486... |
Line 2507... |
unsigned char shdr_data_[shdr_size];
|
unsigned char shdr_data_[shdr_size];
|
};
|
};
|
|
|
// 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_;
|
|
// 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_;
|
// Index of SHT_SYMTAB section.
|
// Index of SHT_SYMTAB section.
|
unsigned int symtab_shndx_;
|
unsigned int symtab_shndx_;
|
// The number of local symbols.
|
// The number of local symbols.
|
unsigned int local_symbol_count_;
|
unsigned int local_symbol_count_;
|
// The number of local symbols which go into the output file.
|
// The number of local symbols which go into the output file.
|