mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-08 06:08:16 +02:00
+ basic i386-embedded implementation for multiboot by Jeppe Johansen, resolves #15676
git-svn-id: trunk@16801 -
This commit is contained in:
parent
197049c221
commit
0be59445f8
@ -80,6 +80,9 @@ implementation
|
||||
{$ifndef NOTARGETNATIVENT}
|
||||
,t_nativent
|
||||
{$endif}
|
||||
{$ifndef NOTARGETEMBEDDED}
|
||||
,t_embed
|
||||
{$endif}
|
||||
|
||||
{**************************************
|
||||
Assemblers
|
||||
|
@ -1229,7 +1229,7 @@ implementation
|
||||
asmbin : '';
|
||||
asmcmd : '';
|
||||
supported_targets : [system_i386_linux,system_i386_beos,system_i386_freebsd,system_i386_haiku,system_i386_Netware,system_i386_netwlibc,
|
||||
system_i386_solaris];
|
||||
system_i386_solaris,system_i386_embedded];
|
||||
flags : [af_outputbinary,af_smartlink_sections,af_supports_dwarf];
|
||||
labelprefix : '.L';
|
||||
comment : '';
|
||||
|
@ -152,6 +152,68 @@ unit i_embed;
|
||||
abi : abi_default
|
||||
);
|
||||
|
||||
system_i386_embedded_info : tsysteminfo =
|
||||
(
|
||||
system : system_i386_embedded;
|
||||
name : 'Embedded';
|
||||
shortname : 'embedded';
|
||||
flags : [tf_needs_symbol_size,tf_files_case_sensitive
|
||||
,tf_smartlink_sections];
|
||||
cpu : cpu_i386;
|
||||
unit_env : '';
|
||||
extradefines : '';
|
||||
exeext : '';
|
||||
defext : '.def';
|
||||
scriptext : '.sh';
|
||||
smartext : '.sl';
|
||||
unitext : '.ppu';
|
||||
unitlibext : '.ppl';
|
||||
asmext : '.s';
|
||||
objext : '.o';
|
||||
resext : '.res';
|
||||
resobjext : '.or';
|
||||
sharedlibext : '.so';
|
||||
staticlibext : '.a';
|
||||
staticlibprefix : 'libp';
|
||||
sharedlibprefix : 'lib';
|
||||
sharedClibext : '.so';
|
||||
staticClibext : '.a';
|
||||
staticClibprefix : 'lib';
|
||||
sharedClibprefix : 'lib';
|
||||
importlibprefix : 'libimp';
|
||||
importlibext : '.a';
|
||||
Cprefix : '';
|
||||
newline : #10;
|
||||
dirsep : '/';
|
||||
assem : as_i386_elf32;
|
||||
assemextern : as_gas;
|
||||
link : nil;
|
||||
linkextern : nil;
|
||||
ar : ar_gnu_ar;
|
||||
res : res_none;
|
||||
dbg : dbg_stabs;
|
||||
script : script_unix;
|
||||
endian : endian_little;
|
||||
alignment :
|
||||
(
|
||||
procalign : 16;
|
||||
loopalign : 4;
|
||||
jumpalign : 0;
|
||||
constalignmin : 0;
|
||||
constalignmax : 8;
|
||||
varalignmin : 0;
|
||||
varalignmax : 16;
|
||||
localalignmin : 4;
|
||||
localalignmax : 8;
|
||||
recordalignmin : 0;
|
||||
recordalignmax : 16;
|
||||
maxCrecordalign : 4
|
||||
);
|
||||
first_parm_offset : 8;
|
||||
stacksize : 4096;
|
||||
abi : abi_default
|
||||
);
|
||||
|
||||
implementation
|
||||
|
||||
initialization
|
||||
@ -165,4 +227,9 @@ initialization
|
||||
set_source_info(system_avr_embedded_info);
|
||||
{$endif embedded}
|
||||
{$endif CPUAVR}
|
||||
{$ifdef CPUI386}
|
||||
{$ifdef embedded}
|
||||
set_source_info(system_i386_embedded_info);
|
||||
{$endif embedded}
|
||||
{$endif CPUI386}
|
||||
end.
|
||||
|
@ -82,11 +82,11 @@ Var
|
||||
begin
|
||||
WriteResponseFile:=False;
|
||||
linklibc:=(SharedLibFiles.Find('c')<>nil);
|
||||
{$ifdef ARM}
|
||||
{$if defined(ARM) or defined(i386)}
|
||||
prtobj:='';
|
||||
{$else ARM}
|
||||
{$else}
|
||||
prtobj:='prt0';
|
||||
{$endif ARM}
|
||||
{$endif}
|
||||
cprtobj:='cprt0';
|
||||
if linklibc then
|
||||
prtobj:=cprtobj;
|
||||
@ -293,6 +293,41 @@ begin
|
||||
Add('_end = .;');
|
||||
end;
|
||||
{$endif ARM}
|
||||
{$ifdef i386}
|
||||
with linkres do
|
||||
begin
|
||||
Add('ENTRY(_START)');
|
||||
Add('SECTIONS');
|
||||
Add('{');
|
||||
Add(' . = 0x100000;');
|
||||
Add(' .text ALIGN (0x1000) :');
|
||||
Add(' {');
|
||||
Add(' KEEP(*(.init, .init.*))');
|
||||
Add(' *(.text, .text.*)');
|
||||
Add(' *(.strings)');
|
||||
Add(' *(.rodata, .rodata.*)');
|
||||
Add(' *(.comment)');
|
||||
Add(' _etext = .;');
|
||||
Add(' }');
|
||||
Add(' .data ALIGN (0x1000) :');
|
||||
Add(' {');
|
||||
Add(' _data = .;');
|
||||
Add(' *(.data, .data.*)');
|
||||
Add(' KEEP (*(.fpc .fpc.n_version .fpc.n_links))');
|
||||
Add(' _edata = .;');
|
||||
Add(' }');
|
||||
Add(' . = ALIGN(4);');
|
||||
Add(' .bss :');
|
||||
Add(' {');
|
||||
Add(' _bss_start = .;');
|
||||
Add(' *(.bss, .bss.*)');
|
||||
Add(' *(COMMON)');
|
||||
Add(' }');
|
||||
Add('_bss_end = . ;');
|
||||
Add('}');
|
||||
Add('_end = .;');
|
||||
end;
|
||||
{$endif I386}
|
||||
|
||||
{ Write and Close response }
|
||||
linkres.writetodisk;
|
||||
@ -354,7 +389,7 @@ begin
|
||||
DeleteFile(outputexedir+Info.ResName);
|
||||
|
||||
{ Post process }
|
||||
if success then
|
||||
if success and (target_info.system=system_arm_embedded) then
|
||||
begin
|
||||
success:=DoExec(FindUtil(utilsprefix+'objcopy'),'-O ihex '+
|
||||
ChangeFileExt(current_module.exefilename^,'.elf')+' '+
|
||||
@ -379,4 +414,9 @@ initialization
|
||||
RegisterExternalLinker(system_avr_embedded_info,TlinkerEmbedded);
|
||||
RegisterTarget(system_avr_embedded_info);
|
||||
{$endif avr}
|
||||
|
||||
{$ifdef i386}
|
||||
RegisterExternalLinker(system_i386_embedded_info,TlinkerEmbedded);
|
||||
RegisterTarget(system_i386_embedded_info);
|
||||
{$endif i386}
|
||||
end.
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2010/09/29]
|
||||
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2011/01/11]
|
||||
#
|
||||
default: all
|
||||
MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-solaris x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded mipsel-linux
|
||||
@ -282,6 +282,9 @@ SYSINIT_UNITS=
|
||||
ifeq ($(ARCH),arm)
|
||||
CPU_UNITS=lpc21x4 at91sam7x256 stellaris stm32f103
|
||||
endif
|
||||
ifeq ($(ARCH),i386)
|
||||
CPU_UNITS=multiboot
|
||||
endif
|
||||
OBJPASDIR=$(RTL)/objpas
|
||||
GRAPHDIR=$(INC)/graph
|
||||
ifeq ($(FULL_TARGET),i386-linux)
|
||||
|
@ -51,6 +51,10 @@ ifeq ($(ARCH),arm)
|
||||
CPU_UNITS=lpc21x4 at91sam7x256 stellaris stm32f103
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),i386)
|
||||
CPU_UNITS=multiboot
|
||||
endif
|
||||
|
||||
# Paths
|
||||
OBJPASDIR=$(RTL)/objpas
|
||||
GRAPHDIR=$(INC)/graph
|
||||
|
Loading…
Reference in New Issue
Block a user