summaryrefslogtreecommitdiff
path: root/packages/fcl-res
diff options
context:
space:
mode:
authorjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2009-05-01 12:47:01 +0000
committerjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2009-05-01 12:47:01 +0000
commit4f0780c2b12952eb621e8fa7a133808b743318c0 (patch)
tree20dd7564103ebe7a7a1ef40b1937d0685a73b480 /packages/fcl-res
parent5917d5ff6e6b9d859332030d139fa9068e52a1c0 (diff)
downloadfpc-4f0780c2b12952eb621e8fa7a133808b743318c0.tar.gz
+ darwin/arm support for fcl-res and fpcres
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@13071 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fcl-res')
-rw-r--r--packages/fcl-res/src/machoconsts.pp5
-rw-r--r--packages/fcl-res/src/machoreader.pp3
-rw-r--r--packages/fcl-res/src/machotypes.pp2
-rw-r--r--packages/fcl-res/src/machowriter.pp11
4 files changed, 18 insertions, 3 deletions
diff --git a/packages/fcl-res/src/machoconsts.pp b/packages/fcl-res/src/machoconsts.pp
index 67afb2d9e3..37ad55c418 100644
--- a/packages/fcl-res/src/machoconsts.pp
+++ b/packages/fcl-res/src/machoconsts.pp
@@ -47,7 +47,7 @@ const
CPU_TYPE_ANY = -1;
CPU_TYPE_I386 = 7;
CPU_TYPE_X86_64 = CPU_TYPE_I386 or CPU_ARCH_ABI64;
-// CPU_TYPE_ARM = 12;
+ CPU_TYPE_ARM = 12;
CPU_TYPE_POWERPC = 18;
CPU_TYPE_POWERPC64 = CPU_TYPE_POWERPC or CPU_ARCH_ABI64;
@@ -55,6 +55,7 @@ const
CPU_SUBTYPE_I386_ALL = 3;
CPU_SUBTYPE_X86_64_ALL = CPU_SUBTYPE_I386_ALL;
CPU_SUBTYPE_POWERPC_ALL = 0;
+ CPU_SUBTYPE_ARM_ALL = 0;
//Mach-O object types
MH_OBJECT = $1; // relocatable object file
@@ -197,6 +198,8 @@ const
//relocation types - x86_64
X86_64_RELOC_UNSIGNED = 0; // for absolute addresses
+ // relocation types - ARM
+ ARM_RELOC_VANILLA = 0; // generic relocation
implementation
diff --git a/packages/fcl-res/src/machoreader.pp b/packages/fcl-res/src/machoreader.pp
index 6fe09fa608..17f28e33be 100644
--- a/packages/fcl-res/src/machoreader.pp
+++ b/packages/fcl-res/src/machoreader.pp
@@ -218,7 +218,8 @@ begin
CPU_TYPE_I386 : fMachineType:=mmti386;
CPU_TYPE_X86_64 : fMachineType:=mmtx86_64;
CPU_TYPE_POWERPC : fMachineType:=mmtpowerpc;
- CPU_TYPE_POWERPC64 : fMachineType:=mmtpowerpc64
+ CPU_TYPE_POWERPC64 : fMachineType:=mmtpowerpc64;
+ CPU_TYPE_ARM : fMachineType:=mmtarm
else exit;
end;
diff --git a/packages/fcl-res/src/machotypes.pp b/packages/fcl-res/src/machotypes.pp
index c1b179db62..ac6ec7dcba 100644
--- a/packages/fcl-res/src/machotypes.pp
+++ b/packages/fcl-res/src/machotypes.pp
@@ -20,7 +20,7 @@ unit machotypes;
interface
type
- TMachOMachineType = (mmtpowerpc, mmtpowerpc64, mmti386, mmtx86_64);
+ TMachOMachineType = (mmtpowerpc, mmtpowerpc64, mmti386, mmtx86_64, mmtarm);
TSegSectName = array[0..15] of char;
type
diff --git a/packages/fcl-res/src/machowriter.pp b/packages/fcl-res/src/machowriter.pp
index 029c6ad81d..490f8c25f2 100644
--- a/packages/fcl-res/src/machowriter.pp
+++ b/packages/fcl-res/src/machowriter.pp
@@ -282,6 +282,11 @@ begin
fRelocType:=X86_64_RELOC_UNSIGNED;
fRelocSize:=3;
end;
+ mmtarm : begin
+ fEndianess:=MACH_LITTLE_ENDIAN;
+ fRelocType:=ARM_RELOC_VANILLA;
+ fRelocSize:=2;
+ end;
end;
fOppositeEndianess:=aOppositeEndianess;
end;
@@ -487,6 +492,11 @@ begin
fHeader.cputype:=CPU_TYPE_X86_64;
fHeader.cpusubtype:=CPU_SUBTYPE_X86_64_ALL;
end;
+ mmtarm : begin
+ fHeader.magic:=MH_MAGIC;
+ fHeader.cputype:=CPU_TYPE_ARM;
+ fHeader.cpusubtype:=CPU_SUBTYPE_ARM_ALL;
+ end;
end;
fHeader.filetype:=MH_OBJECT;
fHeader.ncmds:=3;
@@ -568,6 +578,7 @@ begin
mmtpowerpc64 : begin fBits:=MACH_64BIT; fEndianess:=MACH_BIG_ENDIAN; end;
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;
end;
fMachineType:=aMachineType;
fOppositeEndianess:=fNativeEndianess<>fEndianess;