blob: 144baf7a562c8eaa271dd9a4e27c18f1c75c64bc [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"
16#include "lld/Core/UndefinedAtom.h"
17#include "lld/Core/File.h"
18#include "lld/Core/Reference.h"
Rui Ueyama0ca149f2013-08-06 22:31:59 +000019#include "lld/Core/LinkingContext.h"
Michael J. Spencer19c47562013-01-24 22:52:25 +000020#include "lld/ReaderWriter/Simple.h"
Nick Kledzikabb69812012-05-31 22:34:00 +000021
22namespace lld {
23namespace mach_o {
24
25
26//
27// CRuntimeFile adds an UndefinedAtom for "_main" so that the Resolving
28// phase will fail if "_main" is undefined.
29//
30class CRuntimeFile : public SimpleFile {
31public:
Rui Ueyama170a1a82013-12-20 07:48:29 +000032 CRuntimeFile(const MachOLinkingContext &context)
33 : SimpleFile("C runtime"), _undefMain(*this, context.entrySymbolName()) {
Nick Kledzikabb69812012-05-31 22:34:00 +000034 // only main executables need _main
Nick Kledzik473933b2013-09-27 22:50:00 +000035 if (context.outputFileType() == llvm::MachO::MH_EXECUTE) {
Nick Kledzikabb69812012-05-31 22:34:00 +000036 this->addAtom(_undefMain);
Nick Kledzikc314b462013-04-04 18:59:24 +000037 }
Nick Kledzikabb69812012-05-31 22:34:00 +000038 }
Nick Kledzikc314b462013-04-04 18:59:24 +000039
Nick Kledzikabb69812012-05-31 22:34:00 +000040private:
41 SimpleUndefinedAtom _undefMain;
42};
43
Rui Ueyama0ca149f2013-08-06 22:31:59 +000044} // namespace mach_o
45} // namespace lld
Nick Kledzikabb69812012-05-31 22:34:00 +000046
Rui Ueyama014192db2013-11-15 03:09:26 +000047#endif // LLD_READER_WRITER_MACHO_EXECUTABLE_ATOMS_H