From a9337f529f1551e45dc8db782667f00d34facf74 Mon Sep 17 00:00:00 2001 From: Wolfgang Thaller Date: Sun, 13 Sep 2015 00:43:34 +0200 Subject: [PATCH] PEFTools: reduce dependencies on Apple's interfaces --- PEFTools/MakeImport.cc | 10 +++++----- PEFTools/PEF.h | 39 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/PEFTools/MakeImport.cc b/PEFTools/MakeImport.cc index 896107bd63..a5218ea51b 100755 --- a/PEFTools/MakeImport.cc +++ b/PEFTools/MakeImport.cc @@ -221,13 +221,13 @@ void MakeImportLibraryMulti(fs::path path, fs::path libname) string membername = string(member->name+1, member->name+1+member->name[0]); - if(member->architecture == kPowerPCCFragArch - || member->architecture == kAnyCFragArch) + if(member->architecture == 'pwpc' + || member->architecture == '\?\?\?\?') { - if(member->usage == kStubLibraryCFrag - || member->usage == kImportLibraryCFrag) + if(member->usage == 0 /* import library */ + || member->usage == 3 /* stub library */) ; - else if(member->usage == kWeakStubLibraryCFrag) + else if(member->usage == 4 /* weak stub library */) membername += "__weak"; else { diff --git a/PEFTools/PEF.h b/PEFTools/PEF.h index 44bb61537a..9708e15408 100644 --- a/PEFTools/PEF.h +++ b/PEFTools/PEF.h @@ -41,8 +41,6 @@ typedef struct {} FSSpec, *FSSpecPtr; /* Definitions for PEF, from Apple's Universal Interfaces */ #include -#include - /* Deal with differences between versions of PEFBinaryFormat.h */ #ifndef PEFRelocComposeSetPosition_1st @@ -105,6 +103,43 @@ DEFINE_ESWAP(PEFImportedSymbol, "L") DEFINE_ESWAP(PEFLoaderRelocationHeader, "ssLL") DEFINE_ESWAP(PEFExportedSymbol, "LLs") + + +struct CFragResourceMember { + uint32_t architecture; + uint16_t reservedA; + uint8_t reservedB; + uint8_t updateLevel; + uint32_t currentVersion; + uint32_t oldDefVersion; + uint32_t uUsage1; + uint16_t uUsage2; + uint8_t usage; + uint8_t where; + uint32_t offset; + uint32_t length; + uint32_t uWhere1; + uint16_t uWhere2; + uint16_t extensionCount; + uint16_t memberSize; + unsigned char name[16]; +}; + +struct CFragResource { + uint32_t reservedA; + uint32_t reservedB; + uint16_t reservedC; + uint16_t version; + uint32_t reservedD; + uint32_t reservedE; + uint32_t reservedF; + uint32_t reservedG; + uint16_t reservedH; + uint16_t memberCount; + CFragResourceMember firstMember; +}; + + DEFINE_ESWAP(CFragResource, "LLssLLLLss*") DEFINE_ESWAP(CFragResourceMember, "Ls..LLLs..LLLsss*")