blob: aaae6e8d0d6c621534428d34b97649603b847bf6 [file] [log] [blame]
Michael J. Spencer84487f12015-07-24 21:03:07 +00001//===- Chunks.cpp ---------------------------------------------------------===//
2//
3// The LLVM Linker
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "Chunks.h"
Rafael Espindola192e1fa2015-08-06 15:08:23 +000011#include "Error.h"
Michael J. Spencer84487f12015-07-24 21:03:07 +000012
13using namespace llvm;
14using namespace llvm::ELF;
15
16using namespace lld;
17using namespace lld::elf2;
18
19template <class ELFT>
20SectionChunk<ELFT>::SectionChunk(object::ELFFile<ELFT> *Obj,
21 const Elf_Shdr *Header)
Rafael Espindolae7a00e32015-08-05 13:55:34 +000022 : Obj(Obj), Header(Header) {
Michael J. Spencer84487f12015-07-24 21:03:07 +000023 // Initialize SectionName.
24 ErrorOr<StringRef> Name = Obj->getSectionName(Header);
25 error(Name);
26 SectionName = *Name;
27
28 Align = Header->sh_addralign;
29}
30
31template <class ELFT> void SectionChunk<ELFT>::writeTo(uint8_t *Buf) {
32 if (Header->sh_type == SHT_NOBITS)
33 return;
34 // Copy section contents from source object file to output file.
35 ArrayRef<uint8_t> Data = *Obj->getSectionContents(Header);
Rafael Espindola674b5d52015-08-13 15:54:36 +000036 memcpy(Buf + OutputSectionOff, Data.data(), Data.size());
Michael J. Spencer84487f12015-07-24 21:03:07 +000037
38 // FIXME: Relocations
39}
40
41namespace lld {
42namespace elf2 {
43template class SectionChunk<object::ELF32LE>;
44template class SectionChunk<object::ELF32BE>;
45template class SectionChunk<object::ELF64LE>;
46template class SectionChunk<object::ELF64BE>;
47}
48}