summaryrefslogtreecommitdiff
path: root/packages/fcl-res/src/machowriter.pp
diff options
context:
space:
mode:
Diffstat (limited to 'packages/fcl-res/src/machowriter.pp')
-rw-r--r--packages/fcl-res/src/machowriter.pp14
1 files changed, 13 insertions, 1 deletions
diff --git a/packages/fcl-res/src/machowriter.pp b/packages/fcl-res/src/machowriter.pp
index 3b7946b1d0..2420006e07 100644
--- a/packages/fcl-res/src/machowriter.pp
+++ b/packages/fcl-res/src/machowriter.pp
@@ -37,6 +37,7 @@ type
msm386_all: (f386SubType: TMachOSubMachineType386);
msmx64_all: (fX64SubType: TMachOSubMachineTypex64);
mmtarm: (fArmSubType: TMachOSubMachineTypeArm);
+ mmtarm64: (fArm64SubType: TMachOSubMachineTypeAarch64);
end;
TMachOResourceWriter = class(TAbstractResourceWriter)
@@ -301,6 +302,11 @@ begin
fRelocType:=ARM_RELOC_VANILLA;
fRelocSize:=2;
end;
+ mmtarm64 : begin
+ fEndianess:=MACH_LITTLE_ENDIAN;
+ fRelocType:=ARM64_RELOC_UNSIGNED;
+ fRelocSize:=3;
+ end;
end;
fOppositeEndianess:=aOppositeEndianess;
end;
@@ -491,6 +497,7 @@ const
armsm2int: array[TMachOSubMachineTypeArm] of longint = (CPU_SUBTYPE_ARM_ALL,
CPU_SUBTYPE_ARM_V4T,CPU_SUBTYPE_ARM_V6,CPU_SUBTYPE_ARM_V5TEJ,
CPU_SUBTYPE_ARM_XSCALE,CPU_SUBTYPE_ARM_V7);
+ arm64sm2int: array[TMachOSubMachineTypeAarch64] of longint = (CPU_SUBTYPE_ARM64_ALL);
begin
aStream.Position:=0;
case fMachineType of
@@ -519,6 +526,11 @@ begin
fHeader.cputype:=CPU_TYPE_ARM;
fHeader.cpusubtype:=armsm2int[fSubMachineType.fArmSubType];
end;
+ mmtarm64 : begin
+ fHeader.magic:=MH_MAGIC_64;
+ fHeader.cputype:=CPU_TYPE_ARM64;
+ fHeader.cpusubtype:=arm64sm2int[fSubMachineType.fArm64SubType];
+ end;
end;
fHeader.filetype:=MH_OBJECT;
fHeader.ncmds:=3;
@@ -559,7 +571,6 @@ begin
WriteMachOStringTable(aStream);
FixHeader(aStream);
FixLoadCommands(aStream,aResources);
- FixResHeader(aStream);
end;
constructor TAbstractMachOSubWriter.Create(aParent : TMachOResourceWriter;
@@ -602,6 +613,7 @@ begin
mmti386 : begin fBits:=MACH_32BIT; fEndianess:=MACH_LITTLE_ENDIAN; end;
mmtx86_64 : begin fBits:=MACH_64BIT; fEndianess:=MACH_LITTLE_ENDIAN; end;
mmtarm : begin fBits:=MACH_32BIT; fEndianess:=MACH_LITTLE_ENDIAN; end;
+ mmtarm64 : begin fBits:=MACH_64BIT; fEndianess:=MACH_LITTLE_ENDIAN; end;
end;
fMachineType:=aMachineType;
fOppositeEndianess:=fNativeEndianess<>fEndianess;