mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-07 01:48:00 +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
|
||||
AsmLists[hal]:=TAsmList.create;
|
||||
{ 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,''));
|
||||
{ CFI }
|
||||
FAsmCFI:=CAsmCFI.Create;
|
||||
|
@ -361,7 +361,8 @@ implementation
|
||||
system_powerpc_darwin,
|
||||
system_i386_darwin,
|
||||
system_powerpc64_darwin,
|
||||
system_x86_64_darwin:
|
||||
system_x86_64_darwin,
|
||||
system_arm_darwin:
|
||||
begin
|
||||
if (atype = sec_stub) then
|
||||
AsmWrite('.section ');
|
||||
@ -390,6 +391,8 @@ implementation
|
||||
system_i386_darwin:
|
||||
AsmWriteln('__IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5');
|
||||
{ darwin/x86-64 uses RIP-based GOT addressing }
|
||||
system_arm_darwin:
|
||||
AsmWriteln('.section __TEXT,__picsymbolstub4,symbol_stubs,none,16');
|
||||
else
|
||||
internalerror(2006031101);
|
||||
end;
|
||||
|
@ -56,6 +56,9 @@ implementation
|
||||
{$ifndef NOTARGETSYMBIAN}
|
||||
,t_symbian
|
||||
{$endif}
|
||||
{$ifndef NOTARGETBSD}
|
||||
,t_bsd
|
||||
{$endif}
|
||||
|
||||
{**************************************
|
||||
Assemblers
|
||||
|
@ -3826,7 +3826,8 @@ implementation
|
||||
case target_info.system of
|
||||
system_powerpc_darwin,
|
||||
system_i386_darwin,
|
||||
system_powerpc64_darwin:
|
||||
system_powerpc64_darwin,
|
||||
system_arm_darwin:
|
||||
begin
|
||||
l:=current_asmdata.getasmsymbol('L'+symname+'$non_lazy_ptr');
|
||||
if not(assigned(l)) then
|
||||
|
@ -1504,7 +1504,7 @@ implementation
|
||||
|
||||
function torddef.alignment:shortint;
|
||||
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
|
||||
result := 4
|
||||
else
|
||||
@ -1630,7 +1630,7 @@ implementation
|
||||
|
||||
function tfloatdef.alignment:shortint;
|
||||
begin
|
||||
if (target_info.system = system_i386_darwin) then
|
||||
if (target_info.system in [system_i386_darwin,system_arm_darwin]) then
|
||||
case floattype of
|
||||
s80real : result:=16;
|
||||
s64real,
|
||||
|
@ -144,7 +144,8 @@ interface
|
||||
system_arm_symbian, { 60 }
|
||||
system_x86_64_darwin, { 61 }
|
||||
system_avr_embedded, { 62 }
|
||||
system_i386_haiku { 63 }
|
||||
system_i386_haiku, { 63 }
|
||||
system_arm_darwin { 64 }
|
||||
);
|
||||
|
||||
type
|
||||
@ -395,7 +396,8 @@ interface
|
||||
|
||||
{ all darwin systems }
|
||||
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 }
|
||||
system_unit_program_exports = [system_i386_win32,
|
||||
@ -924,11 +926,22 @@ begin
|
||||
{$ifdef cpuarm}
|
||||
default_target(source_info.system);
|
||||
{$else cpuarm}
|
||||
{$ifdef WINDOWS}
|
||||
default_target(system_arm_wince);
|
||||
{$else WINDOWS}
|
||||
default_target(system_arm_linux);
|
||||
{$endif WINDOWS}
|
||||
{$ifdef WINDOWS}
|
||||
{$define default_target_set}
|
||||
default_target(system_arm_wince);
|
||||
{$endif}
|
||||
{$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 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
|
||||
|
||||
@ -703,5 +761,10 @@ initialization
|
||||
{$ifdef Darwin}
|
||||
set_source_info(system_powerpc64_darwin_info);
|
||||
{$endif Darwin}
|
||||
{$ifdef cpuarm}
|
||||
{$ifdef Darwin}
|
||||
set_source_info(system_arm_darwin_info);
|
||||
{$endif Darwin}
|
||||
{$endif cpuarm}
|
||||
{$endif powerpc64}
|
||||
end.
|
||||
|
@ -317,6 +317,8 @@ begin
|
||||
LinkRes.Add('ppc64');
|
||||
system_x86_64_darwin:
|
||||
LinkRes.Add('x86_64');
|
||||
system_arm_darwin:
|
||||
LinkRes.Add('arm');
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@ -762,6 +764,12 @@ initialization
|
||||
RegisterExport(system_powerpc64_darwin,texportlibdarwin);
|
||||
RegisterTarget(system_powerpc64_darwin_info);
|
||||
{$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_macho_info,TWinLikeResourceFile);
|
||||
|
Loading…
Reference in New Issue
Block a user