[MachO] Introduce MinVersion API.
authorDavide Italiano <davide@freebsd.org>
Tue, 25 Aug 2015 15:02:23 +0000 (15:02 +0000)
committerDavide Italiano <davide@freebsd.org>
Tue, 25 Aug 2015 15:02:23 +0000 (15:02 +0000)
While introducing support for MinVersionLoadCommand in llvm-readobj I noticed there's
no API to extract Major/Minor/Update components conveniently. Currently consumers
do the bit twiddling on their own, but this will change from now on.

I'll convert llvm-objdump (and llvm-readobj) in a later commit.

Differential Revision:  http://reviews.llvm.org/D12282
Reviewed by: rafael

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

include/llvm/Object/MachO.h
lib/Object/MachOObjectFile.cpp

index 47d018d3a5ea6e9c72dbeefafabbec8e244222a1..903398321a93fffccbf58bd92eb10fccd48d14dc 100644 (file)
@@ -344,6 +344,12 @@ public:
   getLinkerOptionLoadCommand(const LoadCommandInfo &L) const;
   MachO::version_min_command
   getVersionMinLoadCommand(const LoadCommandInfo &L) const;
+  static uint32_t
+  getVersionMinMajor(MachO::version_min_command &C, bool SDK);
+  static uint32_t
+  getVersionMinMinor(MachO::version_min_command &C, bool SDK);
+  static uint32_t
+  getVersionMinUpdate(MachO::version_min_command &C, bool SDK);
   MachO::dylib_command
   getDylibIDLoadCommand(const LoadCommandInfo &L) const;
   MachO::dyld_info_command
index d1faf7be3af8dd26ae00160af07acb727366b1ba..d287eec6c2c6603871619a871aa6d37f756889ff 100644 (file)
@@ -2001,6 +2001,24 @@ MachOObjectFile::getVersionMinLoadCommand(const LoadCommandInfo &L) const {
   return getStruct<MachO::version_min_command>(this, L.Ptr);
 }
 
+uint32_t
+MachOObjectFile::getVersionMinMajor(MachO::version_min_command &C, bool SDK) {
+  uint32_t VersionOrSDK = (SDK) ? C.sdk : C.version;
+  return (VersionOrSDK >> 16) & 0xffff;
+}
+
+uint32_t
+MachOObjectFile::getVersionMinMinor(MachO::version_min_command &C, bool SDK) {
+  uint32_t VersionOrSDK = (SDK) ? C.sdk : C.version;
+  return (VersionOrSDK >> 8) & 0xff;
+}
+
+uint32_t
+MachOObjectFile::getVersionMinUpdate(MachO::version_min_command &C, bool SDK) {
+  uint32_t VersionOrSDK = (SDK) ? C.sdk : C.version;
+  return VersionOrSDK & 0xff;
+}
+
 MachO::dylib_command
 MachOObjectFile::getDylibIDLoadCommand(const LoadCommandInfo &L) const {
   return getStruct<MachO::dylib_command>(this, L.Ptr);