mirror of
https://github.com/upx/upx
synced 2025-09-28 19:06:07 +08:00
Allow CPU_TYPE_X86_64 for MH_EXECUTE in fat (universal) binaries,
but no MH_DYLIB yet. infoWarning() for unsupported cputype.
This commit is contained in:
parent
7e2e72bd40
commit
77377195aa
|
@ -1191,6 +1191,25 @@ void PackMachFat::pack(OutputFile *fo)
|
||||||
packer.pack(fo);
|
packer.pack(fo);
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
case PackMachFat::CPU_TYPE_X86_64: {
|
||||||
|
typedef N_Mach::Mach_header<MachClass_LE64::MachITypes> Mach_header;
|
||||||
|
Mach_header hdr;
|
||||||
|
fi->readx(&hdr, sizeof(hdr));
|
||||||
|
if (hdr.filetype==Mach_header::MH_EXECUTE) {
|
||||||
|
PackMachAMD64 packer(fi);
|
||||||
|
packer.initPackHeader();
|
||||||
|
packer.canPack();
|
||||||
|
packer.updatePackHeader();
|
||||||
|
packer.pack(fo);
|
||||||
|
}
|
||||||
|
//else if (hdr.filetype==Mach_header::MH_DYLIB) {
|
||||||
|
// PackDylibAMD64 packer(fi);
|
||||||
|
// packer.initPackHeader();
|
||||||
|
// packer.canPack();
|
||||||
|
// packer.updatePackHeader();
|
||||||
|
// packer.pack(fo);
|
||||||
|
//}
|
||||||
|
} break;
|
||||||
case PackMachFat::CPU_TYPE_POWERPC: {
|
case PackMachFat::CPU_TYPE_POWERPC: {
|
||||||
typedef N_Mach::Mach_header<MachClass_BE32::MachITypes> Mach_header;
|
typedef N_Mach::Mach_header<MachClass_BE32::MachITypes> Mach_header;
|
||||||
Mach_header hdr;
|
Mach_header hdr;
|
||||||
|
@ -1298,7 +1317,11 @@ bool PackMachFat::canPack()
|
||||||
fi->set_extent(fat_head.arch[j].offset, fat_head.arch[j].size);
|
fi->set_extent(fat_head.arch[j].offset, fat_head.arch[j].size);
|
||||||
fi->seek(0, SEEK_SET);
|
fi->seek(0, SEEK_SET);
|
||||||
switch (arch[j].cputype) {
|
switch (arch[j].cputype) {
|
||||||
default: return false;
|
default: {
|
||||||
|
infoWarning("unknown cputype 0x%x: %s",
|
||||||
|
(unsigned)arch[j].cputype, fi->getName());
|
||||||
|
return false;
|
||||||
|
} break;
|
||||||
case PackMachFat::CPU_TYPE_I386: {
|
case PackMachFat::CPU_TYPE_I386: {
|
||||||
PackMachI386 packer(fi);
|
PackMachI386 packer(fi);
|
||||||
if (!packer.canPack()) {
|
if (!packer.canPack()) {
|
||||||
|
@ -1307,6 +1330,14 @@ bool PackMachFat::canPack()
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
case PackMachFat::CPU_TYPE_X86_64: {
|
||||||
|
PackMachAMD64 packer(fi);
|
||||||
|
if (!packer.canPack()) {
|
||||||
|
//PackDylibI386 pack2r(fi);
|
||||||
|
//if (!pack2r.canPack())
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
case PackMachFat::CPU_TYPE_POWERPC: {
|
case PackMachFat::CPU_TYPE_POWERPC: {
|
||||||
PackMachPPC32 packer(fi);
|
PackMachPPC32 packer(fi);
|
||||||
if (!packer.canPack()) {
|
if (!packer.canPack()) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user