blob: 6b51cd6810a9504e00db119473bf07d9240efb1c [file] [log] [blame]
Rui Ueyama9f56df82013-06-11 23:07:43 +00001//===- lld/unittest/DarwinLdDriverTest.cpp --------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9///
10/// \file
11/// \brief Darwin's ld driver tests.
12///
13//===----------------------------------------------------------------------===//
14
15#include "DriverTest.h"
16
17#include "lld/ReaderWriter/MachOTargetInfo.h"
18#include "../../lib/ReaderWriter/MachO/MachOFormat.hpp"
19
20using namespace llvm;
21using namespace lld;
22
23namespace {
24
25class DarwinLdParserTest : public ParserTest<DarwinLdDriver, MachOTargetInfo> {
26protected:
Nick Kledzik2a709ea2013-07-16 18:45:57 +000027 virtual const TargetInfo *targetInfo() {
28 return &_info;
Rui Ueyama9f56df82013-06-11 23:07:43 +000029 }
30};
31
32TEST_F(DarwinLdParserTest, Basic) {
Nick Kledzik2a709ea2013-07-16 18:45:57 +000033 EXPECT_FALSE(parse("ld", "foo.o", "bar.o", nullptr));
34 EXPECT_FALSE(_info.allowRemainingUndefines());
35 EXPECT_FALSE(_info.deadStrip());
36 EXPECT_EQ(2, inputFileCount());
37 EXPECT_EQ("foo.o", inputFile(0));
38 EXPECT_EQ("bar.o", inputFile(1));
Rui Ueyama9f56df82013-06-11 23:07:43 +000039}
40
Nick Kledzika1210532013-07-18 23:13:13 +000041TEST_F(DarwinLdParserTest, Output) {
42 parse("ld", "-o", "my.out", "foo.o", nullptr);
43 EXPECT_EQ("my.out", _info.outputPath());
44}
45
Rui Ueyama9f56df82013-06-11 23:07:43 +000046TEST_F(DarwinLdParserTest, Dylib) {
Nick Kledzik2a709ea2013-07-16 18:45:57 +000047 EXPECT_FALSE(parse("ld", "-dylib", "foo.o", nullptr));
48 EXPECT_EQ(mach_o::MH_DYLIB, _info.outputFileType());
Rui Ueyama9f56df82013-06-11 23:07:43 +000049}
50
51TEST_F(DarwinLdParserTest, Relocatable) {
Nick Kledzik2a709ea2013-07-16 18:45:57 +000052 EXPECT_FALSE(parse("ld", "-r", "foo.o", nullptr));
53 EXPECT_EQ(mach_o::MH_OBJECT, _info.outputFileType());
Rui Ueyama9f56df82013-06-11 23:07:43 +000054}
55
56TEST_F(DarwinLdParserTest, Bundle) {
Nick Kledzik2a709ea2013-07-16 18:45:57 +000057 EXPECT_FALSE(parse("ld", "-bundle", "foo.o", nullptr));
58 EXPECT_EQ(mach_o::MH_BUNDLE, _info.outputFileType());
Rui Ueyama9f56df82013-06-11 23:07:43 +000059}
60
61TEST_F(DarwinLdParserTest, Preload) {
Nick Kledzik2a709ea2013-07-16 18:45:57 +000062 EXPECT_FALSE(parse("ld", "-preload", "foo.o", nullptr));
63 EXPECT_EQ(mach_o::MH_PRELOAD, _info.outputFileType());
Rui Ueyama9f56df82013-06-11 23:07:43 +000064}
65
66TEST_F(DarwinLdParserTest, Static) {
Nick Kledzik2a709ea2013-07-16 18:45:57 +000067 EXPECT_FALSE(parse("ld", "-static", "foo.o", nullptr));
68 EXPECT_EQ(mach_o::MH_EXECUTE, _info.outputFileType());
Rui Ueyama9f56df82013-06-11 23:07:43 +000069}
70
71TEST_F(DarwinLdParserTest, Entry) {
Nick Kledzik2a709ea2013-07-16 18:45:57 +000072 EXPECT_FALSE(parse("ld", "-e", "entryFunc", "foo.o", nullptr));
73 EXPECT_EQ("entryFunc", _info.entrySymbolName());
Rui Ueyama9f56df82013-06-11 23:07:43 +000074}
75
76TEST_F(DarwinLdParserTest, OutputPath) {
Nick Kledzik2a709ea2013-07-16 18:45:57 +000077 EXPECT_FALSE(parse("ld", "-o", "foo", "foo.o", nullptr));
78 EXPECT_EQ("foo", _info.outputPath());
Rui Ueyama9f56df82013-06-11 23:07:43 +000079}
80
81TEST_F(DarwinLdParserTest, DeadStrip) {
Nick Kledzik2a709ea2013-07-16 18:45:57 +000082 EXPECT_FALSE(parse("ld", "-dead_strip", "foo.o", nullptr));
83 EXPECT_TRUE(_info.deadStrip());
Rui Ueyama9f56df82013-06-11 23:07:43 +000084}
85
Nick Kledzika1210532013-07-18 23:13:13 +000086TEST_F(DarwinLdParserTest, DeadStripRootsExe) {
87 parse("ld", "-dead_strip", "foo.o", nullptr);
88 EXPECT_FALSE(_info.globalsAreDeadStripRoots());
89}
90
91TEST_F(DarwinLdParserTest, DeadStripRootsDylib) {
92 parse("ld", "-dylib", "-dead_strip", "foo.o", nullptr);
93 EXPECT_TRUE(_info.globalsAreDeadStripRoots());
94}
95
96TEST_F(DarwinLdParserTest, ForceLoadArchive) {
97 parse("ld","-all_load", "foo.o", nullptr);
98 EXPECT_TRUE(_info.forceLoadAllArchives());
99}
100
101TEST_F(DarwinLdParserTest, NoForceLoadArchive) {
102 parse("ld", "foo.o", nullptr);
103 EXPECT_FALSE(_info.forceLoadAllArchives());
104}
105
Rui Ueyama9f56df82013-06-11 23:07:43 +0000106TEST_F(DarwinLdParserTest, Arch) {
Nick Kledzik2a709ea2013-07-16 18:45:57 +0000107 EXPECT_FALSE(parse("ld", "-arch", "x86_64", "foo.o", nullptr));
108 EXPECT_EQ(MachOTargetInfo::arch_x86_64, _info.arch());
Nick Kledzika1210532013-07-18 23:13:13 +0000109 EXPECT_EQ(mach_o::CPU_TYPE_X86_64, _info.getCPUType());
110 EXPECT_EQ(mach_o::CPU_SUBTYPE_X86_64_ALL, _info.getCPUSubType());
Rui Ueyama9f56df82013-06-11 23:07:43 +0000111}
112
Nick Kledzika1210532013-07-18 23:13:13 +0000113TEST_F(DarwinLdParserTest, Arch_x86) {
114 parse("ld", "-arch", "i386", "foo.o", nullptr);
115 EXPECT_EQ(MachOTargetInfo::arch_x86, _info.arch());
116 EXPECT_EQ(mach_o::CPU_TYPE_I386, _info.getCPUType());
117 EXPECT_EQ(mach_o::CPU_SUBTYPE_X86_ALL, _info.getCPUSubType());
118}
119
120TEST_F(DarwinLdParserTest, Arch_armv6) {
121 parse("ld", "-arch", "armv6", "foo.o", nullptr);
122 EXPECT_EQ(MachOTargetInfo::arch_armv6, _info.arch());
123 EXPECT_EQ(mach_o::CPU_TYPE_ARM, _info.getCPUType());
124 EXPECT_EQ(mach_o::CPU_SUBTYPE_ARM_V6, _info.getCPUSubType());
125}
126
127TEST_F(DarwinLdParserTest, Arch_armv7) {
128 parse("ld", "-arch", "armv7", "foo.o", nullptr);
129 EXPECT_EQ(MachOTargetInfo::arch_armv7, _info.arch());
130 EXPECT_EQ(mach_o::CPU_TYPE_ARM, _info.getCPUType());
131 EXPECT_EQ(mach_o::CPU_SUBTYPE_ARM_V7, _info.getCPUSubType());
132}
133
134TEST_F(DarwinLdParserTest, Arch_armv7s) {
135 parse("ld", "-arch", "armv7s", "foo.o", nullptr);
136 EXPECT_EQ(MachOTargetInfo::arch_armv7s, _info.arch());
137 EXPECT_EQ(mach_o::CPU_TYPE_ARM, _info.getCPUType());
138 EXPECT_EQ(mach_o::CPU_SUBTYPE_ARM_V7S, _info.getCPUSubType());
139}
140
141TEST_F(DarwinLdParserTest, MinMacOSX10_7) {
142 parse("ld", "-macosx_version_min", "10.7", "foo.o", nullptr);
143 EXPECT_EQ(MachOTargetInfo::OS::macOSX, _info.os());
144 EXPECT_TRUE(_info.minOS("10.7", ""));
145 EXPECT_FALSE(_info.minOS("10.8", ""));
146}
147
148TEST_F(DarwinLdParserTest, MinMacOSX10_8) {
149 parse("ld", "-macosx_version_min", "10.8.3", "foo.o", nullptr);
150 EXPECT_EQ(MachOTargetInfo::OS::macOSX, _info.os());
151 EXPECT_TRUE(_info.minOS("10.7", ""));
152 EXPECT_TRUE(_info.minOS("10.8", ""));
153}
154
155TEST_F(DarwinLdParserTest, iOS5) {
156 parse("ld", "-ios_version_min", "5.0", "foo.o", nullptr);
157 EXPECT_EQ(MachOTargetInfo::OS::iOS, _info.os());
158 EXPECT_TRUE(_info.minOS("", "5.0"));
159 EXPECT_FALSE(_info.minOS("", "6.0"));
160}
161
162TEST_F(DarwinLdParserTest, iOS6) {
163 parse("ld", "-ios_version_min", "6.0", "foo.o", nullptr);
164 EXPECT_EQ(MachOTargetInfo::OS::iOS, _info.os());
165 EXPECT_TRUE(_info.minOS("", "5.0"));
166 EXPECT_TRUE(_info.minOS("", "6.0"));
167}
168
169TEST_F(DarwinLdParserTest, iOS_Simulator5) {
170 parse("ld", "-ios_simulator_version_min", "5.0", "foo.o", nullptr);
171 EXPECT_EQ(MachOTargetInfo::OS::iOS_simulator, _info.os());
172 EXPECT_TRUE(_info.minOS("", "5.0"));
173 EXPECT_FALSE(_info.minOS("", "6.0"));
174}
175
176TEST_F(DarwinLdParserTest, iOS_Simulator6) {
177 parse("ld", "-ios_simulator_version_min", "6.0", "foo.o", nullptr);
178 EXPECT_EQ(MachOTargetInfo::OS::iOS_simulator, _info.os());
179 EXPECT_TRUE(_info.minOS("", "5.0"));
180 EXPECT_TRUE(_info.minOS("", "6.0"));
181}
182
183
184
Rui Ueyama9f56df82013-06-11 23:07:43 +0000185} // end anonymous namespace