[llvm-dev] TargetTriple issue: LC_VERSION_MIN_MACOSX: Darwin kernel version vs SDK version

Daniel Sanders via llvm-dev llvm-dev at lists.llvm.org
Fri Sep 25 02:55:27 PDT 2015


Using 'clang -target ...-darwin10.10 ...' or configuring LLVM's default triple at configure-time (-DLLVM_DEFAULT_TARGET_TRIPLE=...-darwin10.10 for CMake) should work. I do the latter for MIPS32 toolchains on a MIPS64 host.

From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of Benoit Belley via llvm-dev
Sent: 24 September 2015 18:48
To: llvm-dev at lists.llvm.org
Cc: Ian Ameline; Eric Bourque
Subject: [llvm-dev] TargetTriple issue: LC_VERSION_MIN_MACOSX: Darwin kernel version vs SDK version

Hi everyone,

I just reported the following issue: https://llvm.org/bugs/show_bug.cgi?id=24927


Using the Xcode 7 linker, one gets messages such as the following when linking objects generated using llvm:



ld: warning: object file (foo.o) was built for newer OS X version (14.5) than being linked (10.9)



The issue is the following:



a) In lib/Support/Unix/Host.inc, sys::getDefaultTargetTriple() sets the OS name to darwin14.5 when running on MaxOS X 10.10. 14.5 is the Darwin kernel version as reported by uname.



b) In lib/CodeGen/AsmPrinter.cpp, AsmPrinter::doInitialization() writes out this version number to the LC_VERSION_MIN_MACOSX of the generated object.



c) The XCode 7 linker seems to expect that LC_VERSION_MIN_MACOSX contains the minimum version number of the MacOS X SDK (10.9, 10.11, ...), NOT the Darwin kernel version number!



AFAICT, LLVM had this wrong behaviour for a long time. The only new thing with Xcode 7 is that the linker is now reporting a warning for the version mismatch.

As a workaround, we are temporarily stripping out the darwin kernel version number from the triple in our project code. Something like:

// FIXME: LLVM confuses Darwin Kernel version numbers with MacOS X SDK

// version. By stripping out the kernel version number, we prevent the

// LC_VERSION_MIN_MACOSX directive from being emitted. Hopefully, that

// will get fixed by LLVM 3.8...

//

// See LLVM bug 24927: https://llvm.org/bugs/show_bug.cgi?id=24927#if defined(OSX)

#if (LLVM_VERSION_MAJOR < 3) || ((LLVM_VERSION_MAJOR == 3) && (LLVM_VERSION_MINOR < 8 ))

        triple = Triple(triple.getArchName(),

                        triple.getVendorName(),

                        "darwin",

                        triple.getEnvironmentName());

#endif

#endif

This prevents the LC_VERSION_MIN_MACOSX directives from being emitted into the LLVM generated object files.

Any suggestions how to go about fixing LLVM to generate the correct  LC_VERSION_MIN_MACOSX minimum SDK version number ? There seems to be no way to pass this information correctly through the Triple!



Thanks,

Benoit
Benoit Belley
Sr Principal Developer
M&E-Product Development Group

MAIN +1 514 393 1616
DIRECT +1 438 448 6304
FAX +1 514 393 0110

Twitter<http://twitter.com/autodesk>
Facebook<https://www.facebook.com/Autodesk>

Autodesk, Inc.
10 Duke Street
Montreal, Quebec, Canada H3C 2L7
www.autodesk.com<http://www.autodesk.com/>

[Description: Email_Signature_Logobar]

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150925/20d15f78/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image001.png
Type: image/png
Size: 4316 bytes
Desc: image001.png
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150925/20d15f78/attachment.png>


More information about the llvm-dev mailing list