PEFTools: reduce dependencies on Apple's interfaces

This commit is contained in:
Wolfgang Thaller 2015-09-13 00:43:34 +02:00
parent 05d5067e33
commit a9337f529f
2 changed files with 42 additions and 7 deletions

View File

@ -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
{

View File

@ -41,8 +41,6 @@ typedef struct {} FSSpec, *FSSpecPtr;
/* Definitions for PEF, from Apple's Universal Interfaces */
#include <PEFBinaryFormat.h>
#include <CodeFragments.h>
/* 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*")