MachO: Emit a version-min load command when possible.
authorJim Grosbach <grosbach@apple.com>
Tue, 18 Mar 2014 22:09:08 +0000 (22:09 +0000)
committerJim Grosbach <grosbach@apple.com>
Tue, 18 Mar 2014 22:09:08 +0000 (22:09 +0000)
When deployment target version information is available, emit it to the
target streamer for inclusion in the object file.

rdar://11337778

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204191 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/AsmPrinter.cpp

index 81316625704df7871cf047482da17ae4d6e31c51..086b08173eb4e13e38660f13830340be4963d204 100644 (file)
@@ -178,6 +178,25 @@ bool AsmPrinter::doInitialization(Module &M) {
 
   Mang = new Mangler(TM.getDataLayout());
 
+  // Emit the version-min deplyment target directive if needed.
+  //
+  // FIXME: If we end up with a collection of these sorts of Darwin-specific
+  // or ELF-specific things, it may make sense to have a platform helper class
+  // that will work with the target helper class. For now keep it here, as the
+  // alternative is duplicated code in each of the target asm printers that
+  // use the directive, where it would need the same conditionalization
+  // anyway.
+  Triple TT(getTargetTriple());
+  if (TT.isOSDarwin()) {
+    unsigned Major, Minor, Update;
+    TT.getOSVersion(Major, Minor, Update);
+    // If there is a version specified, Major will be non-zero.
+    if (Major)
+      OutStreamer.EmitVersionMin((TT.isMacOSX() ?
+                                  MCVM_OSXVersionMin : MCVM_IOSVersionMin),
+                                 Major, Minor, Update);
+  }
+
   // Allow the target to emit any magic that it wants at the start of the file.
   EmitStartOfAsmFile(M);