1 /* -*- mode: C++; c-basic-offset: 4; tab-width: 4 -*-
3 * Copyright (c) 2005-2010 Apple Inc. All rights reserved.
5 * @APPLE_LICENSE_HEADER_START@
7 * This file contains Original Code and/or Modifications of Original Code
8 * as defined in and that are subject to the Apple Public Source License
9 * Version 2.0 (the 'License'). You may not use this file except in
10 * compliance with the License. Please obtain a copy of the License at
11 * http://www.opensource.apple.com/apsl/ and read it before using this
14 * The Original Code and all software distributed under the License are
15 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
19 * Please see the License for the specific language governing rights and
20 * limitations under the License.
22 * @APPLE_LICENSE_HEADER_END@
30 #include <mach/machine.h>
33 #include <ext/hash_set>
34 #include <ext/hash_map>
38 extern void throwf (const char* format
, ...) __attribute__ ((noreturn
,format(printf
, 1, 2)));
39 extern void warning(const char* format
, ...) __attribute__((format(printf
, 1, 2)));
44 LibraryOptions() : fWeakImport(false), fReExport(false), fBundleLoader(false),
45 fLazyLoad(false), fUpward(false), fForceLoad(false) {}
46 // for dynamic libraries
52 // for static libraries
59 // The public interface to the Options class is the abstract representation of what work the linker
62 // This abstraction layer will make it easier to support a future where the linker is a shared library
63 // invoked directly from Xcode. The target settings in Xcode would be used to directly construct an Options
64 // object (without building a command line which is then parsed).
70 Options(int argc
, const char* argv
[]);
73 enum OutputKind
{ kDynamicExecutable
, kStaticExecutable
, kDynamicLibrary
, kDynamicBundle
, kObjectFile
, kDyld
, kPreload
, kKextBundle
};
74 enum NameSpace
{ kTwoLevelNameSpace
, kFlatNameSpace
, kForceFlatNameSpace
};
75 // Standard treatment for many options.
76 enum Treatment
{ kError
, kWarning
, kSuppress
, kNULL
, kInvalid
};
77 enum UndefinedTreatment
{ kUndefinedError
, kUndefinedWarning
, kUndefinedSuppress
, kUndefinedDynamicLookup
};
78 enum WeakReferenceMismatchTreatment
{ kWeakReferenceMismatchError
, kWeakReferenceMismatchWeak
,
79 kWeakReferenceMismatchNonWeak
};
80 enum CommonsMode
{ kCommonsIgnoreDylibs
, kCommonsOverriddenByDylibs
, kCommonsConflictsDylibsError
};
81 enum UUIDMode
{ kUUIDNone
, kUUIDRandom
, kUUIDContent
};
82 enum LocalSymbolHandling
{ kLocalSymbolsAll
, kLocalSymbolsNone
, kLocalSymbolsSelectiveInclude
, kLocalSymbolsSelectiveExclude
};
83 enum DebugInfoStripping
{ kDebugInfoNone
, kDebugInfoMinimal
, kDebugInfoFull
};
89 LibraryOptions options
;
93 const char* segmentName
;
94 const char* sectionName
;
98 typedef ExtraSection
* iterator
;
99 typedef const ExtraSection
* const_iterator
;
102 struct SectionAlignment
{
103 const char* segmentName
;
104 const char* sectionName
;
108 struct OrderedSymbol
{
109 const char* symbolName
;
110 const char* objectFileName
;
112 typedef const OrderedSymbol
* OrderedSymbolsIterator
;
114 struct SegmentStart
{
124 struct SegmentProtect
{
130 struct DylibOverride
{
131 const char* installName
;
132 const char* useInstead
;
136 const char* realName
;
140 typedef const char* const* UndefinesIterator
;
142 // const ObjectFile::ReaderOptions& readerOptions();
143 const char* outputFilePath() const { return fOutputFile
; }
144 const std::vector
<FileInfo
>& getInputFiles() const { return fInputFiles
; }
146 cpu_type_t
architecture() const { return fArchitecture
; }
147 bool preferSubArchitecture() const { return fHasPreferredSubType
; }
148 cpu_subtype_t
subArchitecture() const { return fSubArchitecture
; }
149 bool allowSubArchitectureMismatches() const { return fAllowCpuSubtypeMismatches
; }
150 bool forceCpuSubtypeAll() const { return fForceSubtypeAll
; }
151 const char* architectureName() const { return fArchitectureName
; }
152 void setArchitecture(cpu_type_t
, cpu_subtype_t subtype
);
153 bool archSupportsThumb2() const { return fArchSupportsThumb2
; }
154 OutputKind
outputKind() const { return fOutputKind
; }
155 bool prebind() const { return fPrebind
; }
156 bool bindAtLoad() const { return fBindAtLoad
; }
157 NameSpace
nameSpace() const { return fNameSpace
; }
158 const char* installPath() const; // only for kDynamicLibrary
159 uint64_t currentVersion() const { return fDylibCurrentVersion
; } // only for kDynamicLibrary
160 uint32_t currentVersion32() const; // only for kDynamicLibrary
161 uint32_t compatibilityVersion() const { return fDylibCompatVersion
; } // only for kDynamicLibrary
162 const char* entryName() const { return fEntryName
; } // only for kDynamicExecutable or kStaticExecutable
163 const char* executablePath();
164 uint64_t baseAddress() const { return fBaseAddress
; }
165 uint64_t maxAddress() const { return fMaxAddress
; }
166 bool keepPrivateExterns() const { return fKeepPrivateExterns
; } // only for kObjectFile
167 bool needsModuleTable() const { return fNeedsModuleTable
; } // only for kDynamicLibrary
168 bool interposable(const char* name
) const;
169 bool hasExportRestrictList() const { return (fExportMode
!= kExportDefault
); } // -exported_symbol or -unexported_symbol
170 bool hasExportMaskList() const { return (fExportMode
== kExportSome
); } // just -exported_symbol
171 bool hasWildCardExportRestrictList() const;
172 bool hasReExportList() const { return ! fReExportSymbols
.empty(); }
173 bool wasRemovedExport(const char* sym
) const { return ( fRemovedExports
.find(sym
) != fRemovedExports
.end() ); }
174 bool allGlobalsAreDeadStripRoots() const;
175 bool shouldExport(const char*) const;
176 bool shouldReExport(const char*) const;
177 bool ignoreOtherArchInputFiles() const { return fIgnoreOtherArchFiles
; }
178 bool traceDylibs() const { return fTraceDylibs
; }
179 bool traceArchives() const { return fTraceArchives
; }
180 bool deadCodeStrip() const { return fDeadStrip
; }
181 UndefinedTreatment
undefinedTreatment() const { return fUndefinedTreatment
; }
182 ld::MacVersionMin
macosxVersionMin() const { return fMacVersionMin
; }
183 ld::IOSVersionMin
iOSVersionMin() const { return fIOSVersionMin
; }
184 bool minOS(ld::MacVersionMin mac
, ld::IOSVersionMin iPhoneOS
);
185 bool messagesPrefixedWithArchitecture();
186 Treatment
picTreatment();
187 WeakReferenceMismatchTreatment
weakReferenceMismatchTreatment() const { return fWeakReferenceMismatchTreatment
; }
188 const char* umbrellaName() const { return fUmbrellaName
; }
189 const std::vector
<const char*>& allowableClients() const { return fAllowableClients
; }
190 const char* clientName() const { return fClientName
; }
191 const char* initFunctionName() const { return fInitFunctionName
; } // only for kDynamicLibrary
192 const char* dotOutputFile();
193 uint64_t pageZeroSize() const { return fZeroPageSize
; }
194 bool hasCustomStack() const { return (fStackSize
!= 0); }
195 uint64_t customStackSize() const { return fStackSize
; }
196 uint64_t customStackAddr() const { return fStackAddr
; }
197 bool hasExecutableStack() const { return fExecutableStack
; }
198 bool hasNonExecutableHeap() const { return fNonExecutableHeap
; }
199 UndefinesIterator
initialUndefinesBegin() const { return &fInitialUndefines
[0]; }
200 UndefinesIterator
initialUndefinesEnd() const { return &fInitialUndefines
[fInitialUndefines
.size()]; }
201 bool printWhyLive(const char* name
) const;
202 uint32_t minimumHeaderPad() const { return fMinimumHeaderPad
; }
203 bool maxMminimumHeaderPad() const { return fMaxMinimumHeaderPad
; }
204 ExtraSection::const_iterator
extraSectionsBegin() const { return &fExtraSections
[0]; }
205 ExtraSection::const_iterator
extraSectionsEnd() const { return &fExtraSections
[fExtraSections
.size()]; }
206 CommonsMode
commonsMode() const { return fCommonsMode
; }
207 bool warnCommons() const { return fWarnCommons
; }
208 bool keepRelocations();
209 FileInfo
findFile(const char* path
) const;
210 UUIDMode
UUIDMode() const { return fUUIDMode
; }
212 bool pauseAtEnd() { return fPause
; }
213 bool printStatistics() const { return fStatistics
; }
214 bool printArchPrefix() const { return fMessagesPrefixedWithArchitecture
; }
215 void gotoClassicLinker(int argc
, const char* argv
[]);
216 bool sharedRegionEligible() const { return fSharedRegionEligible
; }
217 bool printOrderFileStatistics() const { return fPrintOrderFileStatistics
; }
218 const char* dTraceScriptName() { return fDtraceScriptName
; }
219 bool dTrace() { return (fDtraceScriptName
!= NULL
); }
220 unsigned long orderedSymbolsCount() const { return fOrderedSymbols
.size(); }
221 OrderedSymbolsIterator
orderedSymbolsBegin() const { return &fOrderedSymbols
[0]; }
222 OrderedSymbolsIterator
orderedSymbolsEnd() const { return &fOrderedSymbols
[fOrderedSymbols
.size()]; }
223 bool splitSeg() const { return fSplitSegs
; }
224 uint64_t baseWritableAddress() { return fBaseWritableAddress
; }
225 uint64_t segmentAlignment() const { return fSegmentAlignment
; }
226 uint64_t segPageSize(const char* segName
) const;
227 uint64_t customSegmentAddress(const char* segName
) const;
228 bool hasCustomSegmentAddress(const char* segName
) const;
229 bool hasCustomSectionAlignment(const char* segName
, const char* sectName
) const;
230 uint8_t customSectionAlignment(const char* segName
, const char* sectName
) const;
231 uint32_t initialSegProtection(const char*) const;
232 uint32_t maxSegProtection(const char*) const;
233 bool saveTempFiles() const { return fSaveTempFiles
; }
234 const std::vector
<const char*>& rpaths() const { return fRPaths
; }
235 bool readOnlyx86Stubs() { return fReadOnlyx86Stubs
; }
236 const std::vector
<DylibOverride
>& dylibOverrides() const { return fDylibOverrides
; }
237 const char* generatedMapPath() const { return fMapPath
; }
238 bool positionIndependentExecutable() const { return fPositionIndependentExecutable
; }
239 Options::FileInfo
findFileUsingPaths(const char* path
) const;
240 bool deadStripDylibs() const { return fDeadStripDylibs
; }
241 bool allowedUndefined(const char* name
) const { return ( fAllowedUndefined
.find(name
) != fAllowedUndefined
.end() ); }
242 bool someAllowedUndefines() const { return (fAllowedUndefined
.size() != 0); }
243 LocalSymbolHandling
localSymbolHandling() { return fLocalSymbolHandling
; }
244 bool keepLocalSymbol(const char* symbolName
) const;
245 bool allowTextRelocs() const { return fAllowTextRelocs
; }
246 bool warnAboutTextRelocs() const { return fWarnTextRelocs
; }
247 bool usingLazyDylibLinking() const { return fUsingLazyDylibLinking
; }
248 bool verbose() const { return fVerbose
; }
249 bool makeEncryptable() const { return fEncryptable
; }
250 bool needsUnwindInfoSection() const { return fAddCompactUnwindEncoding
; }
251 const std::vector
<const char*>& llvmOptions() const{ return fLLVMOptions
; }
252 const std::vector
<const char*>& dyldEnvironExtras() const{ return fDyldEnvironExtras
; }
253 bool makeCompressedDyldInfo() const { return fMakeCompressedDyldInfo
; }
254 bool hasExportedSymbolOrder();
255 bool exportedSymbolOrder(const char* sym
, unsigned int* order
) const;
256 bool orderData() { return fOrderData
; }
257 bool errorOnOtherArchFiles() const { return fErrorOnOtherArchFiles
; }
258 bool markAutoDeadStripDylib() const { return fMarkDeadStrippableDylib
; }
259 bool removeEHLabels() const { return fNoEHLabels
; }
260 bool useSimplifiedDylibReExports() const { return fUseSimplifiedDylibReExports
; }
261 bool objCABIVersion2POverride() const { return fObjCABIVersion2Override
; }
262 bool useUpwardDylibs() const { return fCanUseUpwardDylib
; }
263 bool fullyLoadArchives() const { return fFullyLoadArchives
; }
264 bool loadAllObjcObjectsFromArchives() const { return fLoadAllObjcObjectsFromArchives
; }
265 bool autoOrderInitializers() const { return fAutoOrderInitializers
; }
266 bool optimizeZeroFill() const { return fOptimizeZeroFill
; }
267 bool mergeZeroFill() const { return fMergeZeroFill
; }
268 bool logAllFiles() const { return fLogAllFiles
; }
269 DebugInfoStripping
debugInfoStripping() const { return fDebugInfoStripping
; }
270 bool flatNamespace() const { return fFlatNamespace
; }
271 bool linkingMainExecutable() const { return fLinkingMainExecutable
; }
272 bool implicitlyLinkIndirectPublicDylibs() const { return fImplicitlyLinkPublicDylibs
; }
273 bool whyLoad() const { return fWhyLoad
; }
274 const char* traceOutputFile() const { return fTraceOutputFile
; }
275 bool outputSlidable() const { return fOutputSlidable
; }
276 bool haveCmdLineAliases() const { return (fAliases
.size() != 0); }
277 const std::vector
<AliasPair
>& cmdLineAliases() const { return fAliases
; }
278 bool makeTentativeDefinitionsReal() const { return fMakeTentativeDefinitionsReal
; }
279 const char* dyldInstallPath() const { return fDyldInstallPath
; }
280 bool warnWeakExports() const { return fWarnWeakExports
; }
281 bool objcGcCompaction() const { return fObjcGcCompaction
; }
282 bool objcGc() const { return fObjCGc
; }
283 bool objcGcOnly() const { return fObjCGcOnly
; }
284 bool canUseThreadLocalVariables() const { return fTLVSupport
; }
285 bool demangleSymbols() const { return fDemangle
; }
286 bool addVersionLoadCommand() const { return fVersionLoadCommand
; }
287 bool addFunctionStarts() const { return fFunctionStartsLoadCommand
; }
288 bool canReExportSymbols() const { return fCanReExportSymbols
; }
289 const char* tempLtoObjectPath() const { return fTempLtoObjectPath
; }
290 bool objcCategoryMerging() const { return fObjcCategoryMerging
; }
291 bool pageAlignDataAtoms() const { return fPageAlignDataAtoms
; }
292 bool hasWeakBitTweaks() const;
293 bool forceWeak(const char* symbolName
) const;
294 bool forceNotWeak(const char* symbolName
) const;
295 bool forceWeakNonWildCard(const char* symbolName
) const;
296 bool forceNotWeakNonWildcard(const char* symbolName
) const;
297 bool errorBecauseOfWarnings() const;
303 bool operator()(const char* left
, const char* right
) const { return (strcmp(left
, right
) == 0); }
305 typedef __gnu_cxx::hash_map
<const char*, unsigned int, __gnu_cxx::hash
<const char*>, CStringEquals
> NameToOrder
;
306 typedef __gnu_cxx::hash_set
<const char*, __gnu_cxx::hash
<const char*>, CStringEquals
> NameSet
;
307 enum ExportMode
{ kExportDefault
, kExportSome
, kDontExportSome
};
308 enum LibrarySearchMode
{ kSearchDylibAndArchiveInEachDir
, kSearchAllDirsForDylibsThenAllDirsForArchives
};
309 enum InterposeMode
{ kInterposeNone
, kInterposeAllExternal
, kInterposeSome
};
311 class SetWithWildcards
{
313 void insert(const char*);
314 bool contains(const char*) const;
315 bool containsNonWildcard(const char*) const;
316 bool empty() const { return fRegular
.empty() && fWildCard
.empty(); }
317 bool hasWildCards() const { return !fWildCard
.empty(); }
318 NameSet::iterator
regularBegin() const { return fRegular
.begin(); }
319 NameSet::iterator
regularEnd() const { return fRegular
.end(); }
320 void remove(const NameSet
&);
322 static bool hasWildCards(const char*);
323 bool wildCardMatch(const char* pattern
, const char* candidate
) const;
324 bool inCharRange(const char*& range
, unsigned char c
) const;
327 std::vector
<const char*> fWildCard
;
331 void parse(int argc
, const char* argv
[]);
332 void checkIllegalOptionCombinations();
333 void buildSearchPaths(int argc
, const char* argv
[]);
334 void parseArch(const char* architecture
);
335 FileInfo
findLibrary(const char* rootName
, bool dylibsOnly
=false);
336 FileInfo
findFramework(const char* frameworkName
);
337 FileInfo
findFramework(const char* rootName
, const char* suffix
);
338 bool checkForFile(const char* format
, const char* dir
, const char* rootName
,
339 FileInfo
& result
) const;
340 uint64_t parseVersionNumber64(const char*);
341 uint32_t parseVersionNumber32(const char*);
342 void parseSectionOrderFile(const char* segment
, const char* section
, const char* path
);
343 void parseOrderFile(const char* path
, bool cstring
);
344 void addSection(const char* segment
, const char* section
, const char* path
);
345 void addSubLibrary(const char* name
);
346 void loadFileList(const char* fileOfPaths
);
347 uint64_t parseAddress(const char* addr
);
348 void loadExportFile(const char* fileOfExports
, const char* option
, SetWithWildcards
& set
);
349 void parseAliasFile(const char* fileOfAliases
);
350 void parsePreCommandLineEnvironmentSettings();
351 void parsePostCommandLineEnvironmentSettings();
352 void setUndefinedTreatment(const char* treatment
);
353 void setMacOSXVersionMin(const char* version
);
354 void setIOSVersionMin(const char* version
);
355 void setWeakReferenceMismatchTreatment(const char* treatment
);
356 void addDylibOverride(const char* paths
);
357 void addSectionAlignment(const char* segment
, const char* section
, const char* alignment
);
358 CommonsMode
parseCommonsTreatment(const char* mode
);
359 Treatment
parseTreatment(const char* treatment
);
360 void reconfigureDefaults();
361 void checkForClassic(int argc
, const char* argv
[]);
362 void parseSegAddrTable(const char* segAddrPath
, const char* installPath
);
363 void addLibrary(const FileInfo
& info
);
364 void warnObsolete(const char* arg
);
365 uint32_t parseProtection(const char* prot
);
366 void loadSymbolOrderFile(const char* fileOfExports
, NameToOrder
& orderMapping
);
370 // ObjectFile::ReaderOptions fReaderOptions;
371 const char* fOutputFile
;
372 std::vector
<Options::FileInfo
> fInputFiles
;
373 cpu_type_t fArchitecture
;
374 cpu_subtype_t fSubArchitecture
;
375 const char* fArchitectureName
;
376 OutputKind fOutputKind
;
377 bool fHasPreferredSubType
;
378 bool fArchSupportsThumb2
;
381 bool fKeepPrivateExterns
;
382 bool fNeedsModuleTable
;
383 bool fIgnoreOtherArchFiles
;
384 bool fErrorOnOtherArchFiles
;
385 bool fForceSubtypeAll
;
386 InterposeMode fInterposeMode
;
388 NameSpace fNameSpace
;
389 uint32_t fDylibCompatVersion
;
390 uint64_t fDylibCurrentVersion
;
391 const char* fDylibInstallName
;
392 const char* fFinalName
;
393 const char* fEntryName
;
394 uint64_t fBaseAddress
;
395 uint64_t fMaxAddress
;
396 uint64_t fBaseWritableAddress
;
398 SetWithWildcards fExportSymbols
;
399 SetWithWildcards fDontExportSymbols
;
400 SetWithWildcards fInterposeList
;
401 SetWithWildcards fForceWeakSymbols
;
402 SetWithWildcards fForceNotWeakSymbols
;
403 SetWithWildcards fReExportSymbols
;
404 NameSet fRemovedExports
;
405 NameToOrder fExportSymbolsOrder
;
406 ExportMode fExportMode
;
407 LibrarySearchMode fLibrarySearchMode
;
408 UndefinedTreatment fUndefinedTreatment
;
409 bool fMessagesPrefixedWithArchitecture
;
410 WeakReferenceMismatchTreatment fWeakReferenceMismatchTreatment
;
411 std::vector
<const char*> fSubUmbellas
;
412 std::vector
<const char*> fSubLibraries
;
413 std::vector
<const char*> fAllowableClients
;
414 std::vector
<const char*> fRPaths
;
415 const char* fClientName
;
416 const char* fUmbrellaName
;
417 const char* fInitFunctionName
;
418 const char* fDotOutputFile
;
419 const char* fExecutablePath
;
420 const char* fBundleLoader
;
421 const char* fDtraceScriptName
;
422 const char* fSegAddrTablePath
;
423 const char* fMapPath
;
424 const char* fDyldInstallPath
;
425 const char* fTempLtoObjectPath
;
426 uint64_t fZeroPageSize
;
429 bool fExecutableStack
;
430 bool fNonExecutableHeap
;
431 bool fDisableNonExecutableHeap
;
432 uint32_t fMinimumHeaderPad
;
433 uint64_t fSegmentAlignment
;
434 CommonsMode fCommonsMode
;
435 enum UUIDMode fUUIDMode
;
436 SetWithWildcards fLocalSymbolsIncluded
;
437 SetWithWildcards fLocalSymbolsExcluded
;
438 LocalSymbolHandling fLocalSymbolHandling
;
441 bool fKeepRelocations
;
443 bool fTraceDylibSearching
;
447 bool fSharedRegionEligible
;
448 bool fPrintOrderFileStatistics
;
449 bool fReadOnlyx86Stubs
;
450 bool fPositionIndependentExecutable
;
451 bool fPIEOnCommandLine
;
452 bool fDisablePositionIndependentExecutable
;
453 bool fMaxMinimumHeaderPad
;
454 bool fDeadStripDylibs
;
455 bool fAllowTextRelocs
;
456 bool fWarnTextRelocs
;
457 bool fUsingLazyDylibLinking
;
460 bool fMarkDeadStrippableDylib
;
461 bool fMakeCompressedDyldInfo
;
462 bool fMakeCompressedDyldInfoForceOff
;
464 bool fAllowCpuSubtypeMismatches
;
465 bool fUseSimplifiedDylibReExports
;
466 bool fObjCABIVersion2Override
;
467 bool fObjCABIVersion1Override
;
468 bool fCanUseUpwardDylib
;
469 bool fFullyLoadArchives
;
470 bool fLoadAllObjcObjectsFromArchives
;
472 bool fLinkingMainExecutable
;
473 bool fForFinalLinkedImage
;
476 bool fMakeTentativeDefinitionsReal
;
480 bool fImplicitlyLinkPublicDylibs
;
481 bool fAddCompactUnwindEncoding
;
482 bool fWarnCompactUnwind
;
483 bool fRemoveDwarfUnwindIfCompactExists
;
484 bool fAutoOrderInitializers
;
485 bool fOptimizeZeroFill
;
487 bool fLogObjectFiles
;
490 bool fTraceIndirectDylibs
;
492 bool fOutputSlidable
;
493 bool fWarnWeakExports
;
494 bool fObjcGcCompaction
;
499 bool fVersionLoadCommand
;
500 bool fVersionLoadCommandForcedOn
;
501 bool fVersionLoadCommandForcedOff
;
502 bool fFunctionStartsLoadCommand
;
503 bool fFunctionStartsForcedOn
;
504 bool fFunctionStartsForcedOff
;
505 bool fCanReExportSymbols
;
506 bool fObjcCategoryMerging
;
507 bool fPageAlignDataAtoms
;
508 DebugInfoStripping fDebugInfoStripping
;
509 const char* fTraceOutputFile
;
510 ld::MacVersionMin fMacVersionMin
;
511 ld::IOSVersionMin fIOSVersionMin
;
512 std::vector
<AliasPair
> fAliases
;
513 std::vector
<const char*> fInitialUndefines
;
514 NameSet fAllowedUndefined
;
516 std::vector
<ExtraSection
> fExtraSections
;
517 std::vector
<SectionAlignment
> fSectionAlignments
;
518 std::vector
<OrderedSymbol
> fOrderedSymbols
;
519 std::vector
<SegmentStart
> fCustomSegmentAddresses
;
520 std::vector
<SegmentSize
> fCustomSegmentSizes
;
521 std::vector
<SegmentProtect
> fCustomSegmentProtections
;
522 std::vector
<DylibOverride
> fDylibOverrides
;
523 std::vector
<const char*> fLLVMOptions
;
524 std::vector
<const char*> fLibrarySearchPaths
;
525 std::vector
<const char*> fFrameworkSearchPaths
;
526 std::vector
<const char*> fSDKPaths
;
527 std::vector
<const char*> fDyldEnvironExtras
;
533 #endif // __OPTIONS__