mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-18 13:49:12 +02:00
+ some generic changes preparing for darwin/arm support
git-svn-id: trunk@11849 -
This commit is contained in:
parent
456e40bde7
commit
afa14de20d
@ -298,7 +298,7 @@ implementation
|
|||||||
for hal:=low(TAsmListType) to high(TAsmListType) do
|
for hal:=low(TAsmListType) to high(TAsmListType) do
|
||||||
AsmLists[hal]:=TAsmList.create;
|
AsmLists[hal]:=TAsmList.create;
|
||||||
{ PIC data }
|
{ PIC data }
|
||||||
if (target_info.system in [system_powerpc_darwin,system_powerpc64_darwin,system_i386_darwin]) then
|
if (target_info.system in [system_powerpc_darwin,system_powerpc64_darwin,system_i386_darwin,system_arm_darwin]) then
|
||||||
AsmLists[al_picdata].concat(tai_directive.create(asd_non_lazy_symbol_pointer,''));
|
AsmLists[al_picdata].concat(tai_directive.create(asd_non_lazy_symbol_pointer,''));
|
||||||
{ CFI }
|
{ CFI }
|
||||||
FAsmCFI:=CAsmCFI.Create;
|
FAsmCFI:=CAsmCFI.Create;
|
||||||
|
@ -361,7 +361,8 @@ implementation
|
|||||||
system_powerpc_darwin,
|
system_powerpc_darwin,
|
||||||
system_i386_darwin,
|
system_i386_darwin,
|
||||||
system_powerpc64_darwin,
|
system_powerpc64_darwin,
|
||||||
system_x86_64_darwin:
|
system_x86_64_darwin,
|
||||||
|
system_arm_darwin:
|
||||||
begin
|
begin
|
||||||
if (atype = sec_stub) then
|
if (atype = sec_stub) then
|
||||||
AsmWrite('.section ');
|
AsmWrite('.section ');
|
||||||
@ -390,6 +391,8 @@ implementation
|
|||||||
system_i386_darwin:
|
system_i386_darwin:
|
||||||
AsmWriteln('__IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5');
|
AsmWriteln('__IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5');
|
||||||
{ darwin/x86-64 uses RIP-based GOT addressing }
|
{ darwin/x86-64 uses RIP-based GOT addressing }
|
||||||
|
system_arm_darwin:
|
||||||
|
AsmWriteln('.section __TEXT,__picsymbolstub4,symbol_stubs,none,16');
|
||||||
else
|
else
|
||||||
internalerror(2006031101);
|
internalerror(2006031101);
|
||||||
end;
|
end;
|
||||||
|
@ -56,6 +56,9 @@ implementation
|
|||||||
{$ifndef NOTARGETSYMBIAN}
|
{$ifndef NOTARGETSYMBIAN}
|
||||||
,t_symbian
|
,t_symbian
|
||||||
{$endif}
|
{$endif}
|
||||||
|
{$ifndef NOTARGETBSD}
|
||||||
|
,t_bsd
|
||||||
|
{$endif}
|
||||||
|
|
||||||
{**************************************
|
{**************************************
|
||||||
Assemblers
|
Assemblers
|
||||||
|
@ -3826,7 +3826,8 @@ implementation
|
|||||||
case target_info.system of
|
case target_info.system of
|
||||||
system_powerpc_darwin,
|
system_powerpc_darwin,
|
||||||
system_i386_darwin,
|
system_i386_darwin,
|
||||||
system_powerpc64_darwin:
|
system_powerpc64_darwin,
|
||||||
|
system_arm_darwin:
|
||||||
begin
|
begin
|
||||||
l:=current_asmdata.getasmsymbol('L'+symname+'$non_lazy_ptr');
|
l:=current_asmdata.getasmsymbol('L'+symname+'$non_lazy_ptr');
|
||||||
if not(assigned(l)) then
|
if not(assigned(l)) then
|
||||||
|
@ -1504,7 +1504,7 @@ implementation
|
|||||||
|
|
||||||
function torddef.alignment:shortint;
|
function torddef.alignment:shortint;
|
||||||
begin
|
begin
|
||||||
if (target_info.system = system_i386_darwin) and
|
if (target_info.system in [system_i386_darwin,system_arm_darwin]) and
|
||||||
(ordtype in [s64bit,u64bit]) then
|
(ordtype in [s64bit,u64bit]) then
|
||||||
result := 4
|
result := 4
|
||||||
else
|
else
|
||||||
@ -1630,7 +1630,7 @@ implementation
|
|||||||
|
|
||||||
function tfloatdef.alignment:shortint;
|
function tfloatdef.alignment:shortint;
|
||||||
begin
|
begin
|
||||||
if (target_info.system = system_i386_darwin) then
|
if (target_info.system in [system_i386_darwin,system_arm_darwin]) then
|
||||||
case floattype of
|
case floattype of
|
||||||
s80real : result:=16;
|
s80real : result:=16;
|
||||||
s64real,
|
s64real,
|
||||||
|
@ -144,7 +144,8 @@ interface
|
|||||||
system_arm_symbian, { 60 }
|
system_arm_symbian, { 60 }
|
||||||
system_x86_64_darwin, { 61 }
|
system_x86_64_darwin, { 61 }
|
||||||
system_avr_embedded, { 62 }
|
system_avr_embedded, { 62 }
|
||||||
system_i386_haiku { 63 }
|
system_i386_haiku, { 63 }
|
||||||
|
system_arm_darwin { 64 }
|
||||||
);
|
);
|
||||||
|
|
||||||
type
|
type
|
||||||
@ -395,7 +396,8 @@ interface
|
|||||||
|
|
||||||
{ all darwin systems }
|
{ all darwin systems }
|
||||||
systems_darwin = [system_powerpc_darwin,system_i386_darwin,
|
systems_darwin = [system_powerpc_darwin,system_i386_darwin,
|
||||||
system_powerpc64_darwin,system_x86_64_darwin];
|
system_powerpc64_darwin,system_x86_64_darwin,
|
||||||
|
system_arm_darwin];
|
||||||
|
|
||||||
{ all systems supporting exports from programs or units }
|
{ all systems supporting exports from programs or units }
|
||||||
system_unit_program_exports = [system_i386_win32,
|
system_unit_program_exports = [system_i386_win32,
|
||||||
@ -924,11 +926,22 @@ begin
|
|||||||
{$ifdef cpuarm}
|
{$ifdef cpuarm}
|
||||||
default_target(source_info.system);
|
default_target(source_info.system);
|
||||||
{$else cpuarm}
|
{$else cpuarm}
|
||||||
{$ifdef WINDOWS}
|
{$ifdef WINDOWS}
|
||||||
default_target(system_arm_wince);
|
{$define default_target_set}
|
||||||
{$else WINDOWS}
|
default_target(system_arm_wince);
|
||||||
default_target(system_arm_linux);
|
{$endif}
|
||||||
{$endif WINDOWS}
|
{$ifdef linux}
|
||||||
|
{$define default_target_set}
|
||||||
|
default_target(system_arm_linux);
|
||||||
|
{$endif}
|
||||||
|
{$ifdef darwin}
|
||||||
|
{$define default_target_set}
|
||||||
|
default_target(system_arm_darwin);
|
||||||
|
{$endif}
|
||||||
|
{$ifndef default_target_set}
|
||||||
|
default_target(system_arm_linux);
|
||||||
|
{$define default_target_set}
|
||||||
|
{$endif}
|
||||||
{$endif cpuarm}
|
{$endif cpuarm}
|
||||||
{$endif arm}
|
{$endif arm}
|
||||||
|
|
||||||
|
@ -660,6 +660,64 @@ unit i_bsd;
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
system_arm_darwin_info : tsysteminfo =
|
||||||
|
(
|
||||||
|
system : system_arm_darwin;
|
||||||
|
name : 'Darwin for ARM';
|
||||||
|
shortname : 'Darwin';
|
||||||
|
flags : [tf_p_ext_support,tf_files_case_sensitive,tf_smartlink_sections,tf_dwarf_relative_addresses,tf_dwarf_only_local_labels,tf_pic_default,tf_has_winlike_resources];
|
||||||
|
cpu : cpu_arm;
|
||||||
|
unit_env : 'BSDUNITS';
|
||||||
|
extradefines : 'UNIX;BSD;HASUNIX;CPUARMEL';
|
||||||
|
exeext : '';
|
||||||
|
defext : '.def';
|
||||||
|
scriptext : '.sh';
|
||||||
|
smartext : '.sl';
|
||||||
|
unitext : '.ppu';
|
||||||
|
unitlibext : '.ppl';
|
||||||
|
asmext : '.s';
|
||||||
|
objext : '.o';
|
||||||
|
resext : '.res';
|
||||||
|
resobjext : '.or';
|
||||||
|
sharedlibext : '.dylib';
|
||||||
|
staticlibext : '.a';
|
||||||
|
staticlibprefix : 'libp';
|
||||||
|
sharedlibprefix : 'lib';
|
||||||
|
sharedClibext : '.dylib';
|
||||||
|
staticClibext : '.a';
|
||||||
|
staticClibprefix : 'lib';
|
||||||
|
sharedClibprefix : 'lib';
|
||||||
|
Cprefix : '_';
|
||||||
|
newline : #10;
|
||||||
|
dirsep : '/';
|
||||||
|
assem : as_darwin;
|
||||||
|
assemextern : as_darwin;
|
||||||
|
link : nil;
|
||||||
|
linkextern : nil;
|
||||||
|
ar : ar_gnu_ar;
|
||||||
|
res : res_macho;
|
||||||
|
dbg : dbg_dwarf2;
|
||||||
|
script : script_unix;
|
||||||
|
endian : endian_little;
|
||||||
|
alignment :
|
||||||
|
(
|
||||||
|
procalign : 4;
|
||||||
|
loopalign : 4;
|
||||||
|
jumpalign : 0;
|
||||||
|
constalignmin : 0;
|
||||||
|
constalignmax : 8;
|
||||||
|
varalignmin : 0;
|
||||||
|
varalignmax : 8;
|
||||||
|
localalignmin : 4;
|
||||||
|
localalignmax : 8;
|
||||||
|
recordalignmin : 0;
|
||||||
|
recordalignmax : 8;
|
||||||
|
maxCrecordalign : 8
|
||||||
|
);
|
||||||
|
first_parm_offset : 8;
|
||||||
|
stacksize : 262144;
|
||||||
|
abi : abi_eabi
|
||||||
|
);
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@ -703,5 +761,10 @@ initialization
|
|||||||
{$ifdef Darwin}
|
{$ifdef Darwin}
|
||||||
set_source_info(system_powerpc64_darwin_info);
|
set_source_info(system_powerpc64_darwin_info);
|
||||||
{$endif Darwin}
|
{$endif Darwin}
|
||||||
|
{$ifdef cpuarm}
|
||||||
|
{$ifdef Darwin}
|
||||||
|
set_source_info(system_arm_darwin_info);
|
||||||
|
{$endif Darwin}
|
||||||
|
{$endif cpuarm}
|
||||||
{$endif powerpc64}
|
{$endif powerpc64}
|
||||||
end.
|
end.
|
||||||
|
@ -317,6 +317,8 @@ begin
|
|||||||
LinkRes.Add('ppc64');
|
LinkRes.Add('ppc64');
|
||||||
system_x86_64_darwin:
|
system_x86_64_darwin:
|
||||||
LinkRes.Add('x86_64');
|
LinkRes.Add('x86_64');
|
||||||
|
system_arm_darwin:
|
||||||
|
LinkRes.Add('arm');
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -762,6 +764,12 @@ initialization
|
|||||||
RegisterExport(system_powerpc64_darwin,texportlibdarwin);
|
RegisterExport(system_powerpc64_darwin,texportlibdarwin);
|
||||||
RegisterTarget(system_powerpc64_darwin_info);
|
RegisterTarget(system_powerpc64_darwin_info);
|
||||||
{$endif powerpc64}
|
{$endif powerpc64}
|
||||||
|
{$ifdef arm}
|
||||||
|
RegisterExternalLinker(system_arm_darwin_info,TLinkerBSD);
|
||||||
|
RegisterImport(system_arm_darwin,timportlibdarwin);
|
||||||
|
RegisterExport(system_arm_darwin,texportlibdarwin);
|
||||||
|
RegisterTarget(system_arm_darwin_info);
|
||||||
|
{$endif arm}
|
||||||
|
|
||||||
RegisterRes(res_elf_info,TWinLikeResourceFile);
|
RegisterRes(res_elf_info,TWinLikeResourceFile);
|
||||||
RegisterRes(res_macho_info,TWinLikeResourceFile);
|
RegisterRes(res_macho_info,TWinLikeResourceFile);
|
||||||
|
Loading…
Reference in New Issue
Block a user