summaryrefslogtreecommitdiff
blob: 17bac81ca29199a1d96bd81734102c62766bc98b (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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
diff -ur ld.orig/InputFiles.cpp ld/InputFiles.cpp
--- ld.orig/InputFiles.cpp	2010-10-05 01:57:50.000000000 +0200
+++ ld/InputFiles.cpp	2011-09-03 20:33:40.000000000 +0200
@@ -58,7 +58,9 @@
 #include "macho_relocatable_file.h"
 #include "macho_dylib_file.h"
 #include "archive_file.h"
+#ifdef LTO
 #include "lto_file.h"
+#endif
 #include "opaque_section_file.h"
 
 
@@ -175,9 +177,11 @@
 	if ( result != NULL  )
 		 return result;
 		 
+#ifdef LTO
 	result = lto::archName(p, len);
 	if ( result != NULL  )
 		 return result;
+#endif
 	
 	if ( strncmp((const char*)p, "!<arch>\n", 8) == 0 )
 		return "archive";
@@ -264,10 +268,12 @@
 	if ( objResult != NULL ) 
 		return this->addObject(objResult, info, len);
 
+#if LTO
 	// see if it is an llvm object file
 	objResult = lto::parse(p, len, info.path, info.modTime, _nextInputOrdinal, _options.architecture(), _options.subArchitecture(), _options.logAllFiles());
 	if ( objResult != NULL ) 
 		return this->addObject(objResult, info, len);
+#endif
 
 	// see if it is a dynamic library
 	ld::dylib::File* dylibResult = mach_o::dylib::parse(p, len, info.path, info.modTime, _options, _nextInputOrdinal, info.options.fBundleLoader);
@@ -286,6 +292,7 @@
 	if ( archiveResult != NULL ) 
 		return this->addArchive(archiveResult, info, len);
 
+#ifdef LTO
 	// does not seem to be any valid linker input file, check LTO misconfiguration problems
 	if ( lto::archName((uint8_t*)p, len) != NULL ) {
 		if ( lto::libLTOisLoaded() ) {
@@ -310,6 +317,7 @@
 			throwf("could not process llvm bitcode object file, because %s could not be loaded", libLTO);
 		}
 	}
+#endif
 
 	// error handling
 	if ( ((fat_header*)p)->magic == OSSwapBigToHostInt32(FAT_MAGIC) ) {
diff -ur ld.orig/Options.cpp ld/Options.cpp
--- ld.orig/Options.cpp	2011-03-08 03:06:35.000000000 +0100
+++ ld/Options.cpp	2011-09-03 21:06:28.000000000 +0200
@@ -36,10 +36,12 @@
 #include "Architectures.hpp"
 #include "MachOFileAbstraction.hpp"
 
+#ifdef LTO
 // upward dependency on lto::version()
 namespace lto {
 	extern const char* version();
 }
+#endif
 
 // magic to place command line in crash reports
 const int crashreporterBufferSize = 2000;
@@ -2786,9 +2788,11 @@
 			fprintf(stderr, "%s", ldVersionString);
 			 // if only -v specified, exit cleanly
 			 if ( argc == 2 ) {
+#ifdef LTO
 				const char* ltoVers = lto::version();
 				if ( ltoVers != NULL )
 					fprintf(stderr, "%s\n", ltoVers);
+#endif
 				exit(0);
 			}
 		}
diff -ur ld.orig/Resolver.cpp ld/Resolver.cpp
--- ld.orig/Resolver.cpp	2010-12-10 23:39:41.000000000 +0100
+++ ld/Resolver.cpp	2011-09-03 20:38:24.000000000 +0200
@@ -58,7 +58,9 @@
 #include "InputFiles.h"
 #include "SymbolTable.h"
 #include "Resolver.h"
+#ifdef LTO
 #include "parsers/lto_file.h"
+#endif
 
 
 namespace ld {
@@ -1275,6 +1277,7 @@
 
 void Resolver::linkTimeOptimize()
 {
+#ifdef LTO
 	// only do work here if some llvm obj files where loaded
 	if ( ! _haveLLVMObjs )
 		return;
@@ -1375,6 +1378,9 @@
 		// check new code does not override some dylib
 		this->checkDylibSymbolCollisions();
 	}
+#else
+	return;
+#endif
 }
 
 
diff -ur ld.orig/ld.cpp ld/ld.cpp
--- ld.orig/ld.cpp	2011-09-03 20:24:07.000000000 +0200
+++ ld/ld.cpp	2011-09-03 20:40:06.000000000 +0200
@@ -85,7 +85,9 @@
 #include "parsers/archive_file.h"
 #include "parsers/macho_relocatable_file.h"
 #include "parsers/macho_dylib_file.h"
+#ifdef LTO
 #include "parsers/lto_file.h"
+#endif
 #include "parsers/opaque_section_file.h"
 
 
diff -ur ld.orig/parsers/archive_file.cpp ld/parsers/archive_file.cpp
--- ld.orig/parsers/archive_file.cpp	2010-09-29 02:26:13.000000000 +0200
+++ ld/parsers/archive_file.cpp	2011-09-03 21:01:55.000000000 +0200
@@ -38,7 +38,9 @@
 #include "Architectures.hpp"
 
 #include "macho_relocatable_file.h"
+#ifdef LTO
 #include "lto_file.h"
+#endif
 #include "archive_file.h"
 
 
@@ -87,8 +89,10 @@
 private:
 	static bool										validMachOFile(const uint8_t* fileContent, uint64_t fileLength, 
 																	const mach_o::relocatable::ParserOptions& opts);
+#ifdef LTO
 	static bool										validLTOFile(const uint8_t* fileContent, uint64_t fileLength, 
 																	const mach_o::relocatable::ParserOptions& opts);
+#endif
 	static cpu_type_t								architecture();
 
 
@@ -232,12 +236,13 @@
 	return mach_o::relocatable::isObjectFile(fileContent, fileLength, opts);
 }
 
+#ifdef LTO
 template <typename A>
 bool File<A>::validLTOFile(const uint8_t* fileContent, uint64_t fileLength, const mach_o::relocatable::ParserOptions& opts)
 {
 	return lto::isObjectFile(fileContent, fileLength, opts.architecture, opts.subType);
 }
-
+#endif
 
 
 template <typename A>
@@ -256,7 +261,11 @@
 		if ( (p==start) && ((strcmp(memberName, SYMDEF_SORTED) == 0) || (strcmp(memberName, SYMDEF) == 0)) )
 			continue;
 		// archive is valid if first .o file is valid
-		return (validMachOFile(p->content(), p->contentSize(), opts) || validLTOFile(p->content(), p->contentSize(), opts));
+		return (validMachOFile(p->content(), p->contentSize(), opts)
+#ifdef LTO
+				|| validLTOFile(p->content(), p->contentSize(), opts)
+#endif
+				);
 	}	
 	// empty archive
 	return true;
@@ -342,12 +351,14 @@
 																	this->ordinal() + memberIndex, _objOpts);
 		if ( result != NULL )
 			return result;
+#ifdef LTO
 		// see if member is llvm bitcode file
 		result = lto::parse(member->content(), member->contentSize(), 
 								mPath, member->modificationTime(), this->ordinal() + memberIndex, 
 								_objOpts.architecture, _objOpts.subType, _logAllFiles);
 		if ( result != NULL )
 			return result;
+#endif
 			
 		throwf("archive member '%s' with length %d is not mach-o or llvm bitcode", memberName, member->contentSize());
 	}
--- other/ObjectDump.cpp.orig	2011-09-03 21:15:10.000000000 +0200
+++ other/ObjectDump.cpp	2011-09-03 21:14:37.000000000 +0200
@@ -33,7 +33,9 @@
 
 #include "MachOFileAbstraction.hpp"
 #include "parsers/macho_relocatable_file.h"
+#ifdef LTO
 #include "parsers/lto_file.h"
+#endif
 
 static bool			sDumpContent= true;
 static bool			sDumpStabs	= false;
@@ -1121,10 +1123,12 @@
 	if ( objResult != NULL )
 		return objResult;
 
+#ifdef LTO
 	// see if it is an llvm object file
 	objResult = lto::parse(p, fileLen, path, stat_buf.st_mtime, 0, sPreferredArch, sPreferredSubArch, false);
 	if ( objResult != NULL ) 
 		return objResult;
+#endif
 
 	throwf("not a mach-o object file: %s", path);
 #else