blob: f0788fa3da1d4fe89ad20501d85243dd571db4d9 [file] [log] [blame]
Nick Kledzikabb69812012-05-31 22:34:00 +00001//===- lib/ReaderWriter/MachO/ExecutableAtoms.hpp -------------------------===//
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
Rui Ueyama014192db2013-11-15 03:09:26 +000010#ifndef LLD_READER_WRITER_MACHO_EXECUTABLE_ATOMS_H
11#define LLD_READER_WRITER_MACHO_EXECUTABLE_ATOMS_H
Nick Kledzikabb69812012-05-31 22:34:00 +000012
Nick Kledzik473933b2013-09-27 22:50:00 +000013#include "llvm/Support/MachO.h"
Nick Kledzikabb69812012-05-31 22:34:00 +000014
15#include "lld/Core/DefinedAtom.h"
Nick Kledzikabb69812012-05-31 22:34:00 +000016#include "lld/Core/File.h"
Rui Ueyama0ca149f2013-08-06 22:31:59 +000017#include "lld/Core/LinkingContext.h"
Rui Ueyamae05d3802014-06-11 21:47:51 +000018#include "lld/Core/Reference.h"
19#include "lld/Core/Simple.h"
20#include "lld/Core/UndefinedAtom.h"
Rafael Espindola1675d512014-06-12 17:12:28 +000021#include "lld/ReaderWriter/MachOLinkingContext.h"
Nick Kledzikabb69812012-05-31 22:34:00 +000022
23namespace lld {
24namespace mach_o {
25
26
27//
Nick Kledzikebf093602014-08-13 23:31:07 +000028// CEntryFile adds an UndefinedAtom for "_main" so that the Resolving
Nick Kledzikabb69812012-05-31 22:34:00 +000029// phase will fail if "_main" is undefined.
30//
Nick Kledzikebf093602014-08-13 23:31:07 +000031class CEntryFile : public SimpleFile {
Nick Kledzikabb69812012-05-31 22:34:00 +000032public:
Nick Kledzikebf093602014-08-13 23:31:07 +000033 CEntryFile(const MachOLinkingContext &context)
34 : SimpleFile("C entry"),
35 _undefMain(*this, context.entrySymbolName()) {
36 this->addAtom(_undefMain);
37 }
Nick Kledzikc314b462013-04-04 18:59:24 +000038
Nick Kledzikabb69812012-05-31 22:34:00 +000039private:
40 SimpleUndefinedAtom _undefMain;
Nick Kledzikebf093602014-08-13 23:31:07 +000041};
42
43
44//
45// StubHelperFile adds an UndefinedAtom for "dyld_stub_binder" so that
46// the Resolveing phase will fail if "dyld_stub_binder" is undefined.
47//
48class StubHelperFile : public SimpleFile {
49public:
50 StubHelperFile(const MachOLinkingContext &context)
51 : SimpleFile("stub runtime"),
52 _undefBinder(*this, context.binderSymbolName()) {
53 this->addAtom(_undefBinder);
54 }
55
56private:
Nick Kledzik2458bec2014-07-16 19:49:02 +000057 SimpleUndefinedAtom _undefBinder;
Nick Kledzikabb69812012-05-31 22:34:00 +000058};
59
Nick Kledzikebf093602014-08-13 23:31:07 +000060
61
62
63
Rui Ueyama0ca149f2013-08-06 22:31:59 +000064} // namespace mach_o
65} // namespace lld
Nick Kledzikabb69812012-05-31 22:34:00 +000066
Rui Ueyama014192db2013-11-15 03:09:26 +000067#endif // LLD_READER_WRITER_MACHO_EXECUTABLE_ATOMS_H