summaryrefslogtreecommitdiffstats
path: root/lld/lib/ReaderWriter/ELF/Reader.cpp
blob: 49521613c027fb5264579782192d82405d737861 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//===- lib/ReaderWriter/ELF/Reader.cpp ------------------------------------===//
//
//                             The LLVM Linker
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
///
/// \file
/// \brief Defines the ELF Reader and all helper sub classes to consume an ELF
/// file and produces atoms out of it.
///
//===----------------------------------------------------------------------===//

#include "ELFReader.h"
#include <map>
#include <vector>

using llvm::support::endianness;
using namespace llvm::object;

namespace lld {

// This dynamic registration of a handler causes support for all ELF
// architectures to be pulled into the linker.  If we want to support making a
// linker that only supports one ELF architecture, we'd need to change this
// to have a different registration method for each architecture.
void Registry::addSupportELFObjects(bool atomizeStrings,
                                    TargetHandlerBase *handler) {

  // Tell registry about the ELF object file parser.
  add(std::move(handler->getObjReader(atomizeStrings)));

  // Tell registry about the relocation name to number mapping for this arch.
  handler->registerRelocationNames(*this);
}

void Registry::addSupportELFDynamicSharedObjects(bool useShlibUndefines,
                                                 TargetHandlerBase *handler) {
  // Tell registry about the ELF dynamic shared library file parser.
  add(handler->getDSOReader(useShlibUndefines));
}

} // end namespace lld
OpenPOWER on IntegriCloud