Line 1... |
Line 1... |
// target.cc
|
// target.cc -- target support for gold.
|
|
|
// Copyright 2009, 2010 Free Software Foundation, Inc.
|
// Copyright 2009, 2010, 2011 Free Software Foundation, Inc.
|
// Written by Doug Kwan <dougkwan@google.com>.
|
// Written by Doug Kwan <dougkwan@google.com>.
|
|
|
// This file is part of gold.
|
// This file is part of gold.
|
|
|
// This program is free software; you can redistribute it and/or modify
|
// This program is free software; you can redistribute it and/or modify
|
Line 70... |
Line 70... |
Input_file* input_file,
|
Input_file* input_file,
|
off_t offset,
|
off_t offset,
|
const elfcpp::Ehdr<size, big_endian>& ehdr)
|
const elfcpp::Ehdr<size, big_endian>& ehdr)
|
{
|
{
|
int et = ehdr.get_e_type();
|
int et = ehdr.get_e_type();
|
if (et == elfcpp::ET_REL)
|
// ET_EXEC files are valid input for --just-symbols/-R,
|
|
// and we treat them as relocatable objects.
|
|
if (et == elfcpp::ET_REL
|
|
|| (et == elfcpp::ET_EXEC && input_file->just_symbols()))
|
{
|
{
|
Sized_relobj_file<size, big_endian>* obj =
|
Sized_relobj_file<size, big_endian>* obj =
|
new Sized_relobj_file<size, big_endian>(name, input_file, offset, ehdr);
|
new Sized_relobj_file<size, big_endian>(name, input_file, offset, ehdr);
|
obj->setup();
|
obj->setup();
|
return obj;
|
return obj;
|
Line 198... |
Line 201... |
std::string fill = this->code_fill(len);
|
std::string fill = this->code_fill(len);
|
memcpy(view + offset, fill.data(), len);
|
memcpy(view + offset, fill.data(), len);
|
}
|
}
|
}
|
}
|
|
|
|
// Class Sized_target.
|
|
|
|
// Set the EI_OSABI field of the ELF header if requested.
|
|
|
|
template<int size, bool big_endian>
|
|
void
|
|
Sized_target<size, big_endian>::do_adjust_elf_header(unsigned char* view,
|
|
int len) const
|
|
{
|
|
elfcpp::ELFOSABI osabi = this->osabi();
|
|
if (osabi != elfcpp::ELFOSABI_NONE)
|
|
{
|
|
gold_assert(len == elfcpp::Elf_sizes<size>::ehdr_size);
|
|
|
|
elfcpp::Ehdr<size, false> ehdr(view);
|
|
unsigned char e_ident[elfcpp::EI_NIDENT];
|
|
memcpy(e_ident, ehdr.get_e_ident(), elfcpp::EI_NIDENT);
|
|
|
|
e_ident[elfcpp::EI_OSABI] = osabi;
|
|
|
|
elfcpp::Ehdr_write<size, false> oehdr(view);
|
|
oehdr.put_e_ident(e_ident);
|
|
}
|
|
}
|
|
|
|
#ifdef HAVE_TARGET_32_LITTLE
|
|
template
|
|
class Sized_target<32, false>;
|
|
#endif
|
|
|
|
#ifdef HAVE_TARGET_32_BIG
|
|
template
|
|
class Sized_target<32, true>;
|
|
#endif
|
|
|
|
#ifdef HAVE_TARGET_64_LITTLE
|
|
template
|
|
class Sized_target<64, false>;
|
|
#endif
|
|
|
|
#ifdef HAVE_TARGET_64_BIG
|
|
template
|
|
class Sized_target<64, true>;
|
|
#endif
|
|
|
} // End namespace gold.
|
} // End namespace gold.
|
|
|
No newline at end of file
|
No newline at end of file
|