ZSeries/Part 3
This continues the list from part 2 of an examination of every unit in the compiler and where changes/additions need to be made for the addition of a new CPU and/or operating system environment.
Unit link
- Called from: compiler.pas, includes fpcdefs.inc, no called units noted
(To be added later) Linker and binder calls.
Unit dbgbase
- Called from: compiler.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit import
- Called from: compiler.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit export
- Called from: compiler.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit tokens
- Called from: compiler.pas; parser.pas; symtable.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit pass_1
- Called from: compiler.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit wpobase
- Called from: compiler.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit wpo
- Called from: compiler.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit cpupara
- Called from: compiler.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit cpupi
- Called from: compiler.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit cgcpu
- Called from: compiler.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit cpunode
- Called from: compiler.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit cputarg
- Called from: compiler.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit globtype
- Called from: compiler.pas; verbose.pas; comphook.pas; cfileutl.pas; cclasses.pas; options.pas; parser.pas; symtable.pas; assemble.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit finput
- Called from: verbose.pas; comphook.pas; parser.pas; assemble.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit cmsgs
- Called from: verbose.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit cstreams
- Called from: cclasses.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit cpuinfo
- Called from: options.pas; parser.pas; cpuinfo.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit comprsrc
- Called from: options.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit version
- Called from: parser.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit switches
- Called from: parser.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit symbase
- Called from: parser.pas; symtable.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit symdef
- Called from: parser.pas; symtable.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit symsym
- Called from: parser.pas; symtable.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit fppu
- Called from: parser.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit aasmbase
- Called from: parser.pas; assemble.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit aasmtai
- Called from: parser.pas; symtable.pas; assemble.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit aasmdata
- Called from: parser.pas; symtable.pas; assemble.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit cgbase
- Called from: parser.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit script
- Called from: parser.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit gendef
- Called from: parser.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit scanner
- Called from: parser.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit scandir
- Called from: parser.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit pbase
- Called from: parser.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit ptype
- Called from: parser.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit psystem
- Called from: parser.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit pmodules
- Called from: parser.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit psub
- Called from: parser.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit ncgrtti
- Called from: parser.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit htypechk
- Called from: parser.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit cresstr
- Called from: parser.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit procinfo
- Called from: parser.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit symtype
- Called from: symtable.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit ppu
- Called from: symtable.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Unit ogbase
- Called from: assemble.pas, includes fpcdefs.inc, no called units noted
(To be added later)
Units I will have to create
Unit i_i370
- Called from: compiler.pas, includes fpcdefs.inc, no called units noted
(This will be created later once I know what has to go into it)
t_i370.pas
(The cross-compiler instructions say I'll need this. It will be in the systems subdirectory. Will figure out later.) It appears to be used for running the support programs such as the assembler and the linker, if so, it's going to be a stub.
Other files
From the description for porting the compiler, a few other files have to be edited.
- utils/fpcm/fpcmmain.pp - add a new entry at the end of TCpu and TOs, near line 85:
TCpu=(
c_i386,c_m68k,c_powerpc,c_sparc,c_x86_64,c_arm,c_powerpc64,c_avr,c_armeb,
c_armel,c_mips,c_mipsel,c_mips64,c_mips64el,c_i370
);
TOS=(
o_linux,o_go32v2,o_win32,o_os2,o_freebsd,o_beos,o_haiku,o_netbsd,
o_amiga,o_atari, o_solaris, o_qnx, o_netware, o_openbsd,o_wdosx,
o_palmos,o_macos,o_darwin,o_emx,o_watcom,o_morphos,o_netwlibc,
o_win64,o_wince,o_gba,o_nds,o_embedded,o_symbian,o_nativent,o_iphonesim,
o_wii,o_i370
);
About line 81, add the new item to these entries:
CpuStr : array[TCpu] of string=(
'i386','m68k','powerpc','sparc','x86_64','arm','powerpc64','avr','armeb',
'armel', 'mips', 'mipsel', 'mips64', 'mips64el','i370'
);
CpuSuffix : array[TCpu] of string=(
'_i386','_m68k','_powerpc','_sparc','_x86_64','_arm','_powerpc64','avr',
'_armeb', '_armel', '_mips', '_mipsel', '_mips64', '_mips64el','_i370'
);
ppcSuffix : array[TCpu] of string=(
'386','m68k','ppc','sparc','x86_64','arm','ppc64','avr','armeb', 'armel',
'mips', 'mipsel', 'mips64', 'mips64el','i370'
);
OSStr : array[TOS] of string=(
'linux','go32v2','win32','os2','freebsd','beos','haiku','netbsd',
'amiga','atari','solaris', 'qnx', 'netware','openbsd','wdosx',
'palmos','macos','darwin','emx','watcom','morphos','netwlibc',
'win64','wince','gba','nds','embedded','symbian','nativent',
'iphonesim', 'wii','i370'
);
OSSuffix : array[TOS] of string=(
'_linux','_go32v2','_win32','_os2','_freebsd','_beos','_haiku','_netbsd',
'_amiga','_atari','_solaris', '_qnx', '_netware','_openbsd','_wdosx',
'_palmos','_macos','_darwin','_emx','_watcom','_morphos','_netwlibc',
'_win64','_wince','_gba','_nds','_embedded','_symbian','_nativent',
'_iphonesim','_wii','_i370'
);
And then this huge table is changed to the following:
{ This table is kept OS,Cpu because it is easier to maintain (PFV) }
OSCpuPossible : array[TOS,TCpu] of boolean = (
{ os i386 m68k ppc sparc x86_64 arm ppc64 avr armeb armel mips mipsel mips64 misp64el, i370}
{ linux } ( true, true, true, true, true, true, true, false, true, false, false, true, false, false, true),
{ go32v2 } ( true, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
{ win32 } ( true, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
{ os2 } ( true, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
{ freebsd } ( true, true, false, false, true, false, false, false, false, false, false, false, false, false, false),
{ beos } ( true, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
{ haiku } ( true, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
{ netbsd } ( true, true, true, true, false, false, false, false, false, false, false, false, false, false, false),
{ amiga } ( false, true, true, false, false, false, false, false, false, false, false, false, false, false, false),
{ atari } ( false, true, false, false, false, false, false, false, false, false, false, false, false, false, false),
{ solaris } ( true, false, false, true, true, false, false, false, false, false, false, false, false, false, false),
{ qnx } ( true, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
{ netware } ( true, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
{ openbsd } ( true, true, false, false, false, false, false, false, false, false, false, false, false, false, false),
{ wdosx } ( true, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
{ palmos } ( false, true, false, false, false, true, false, false, false, false, false, false, false, false, false),
{ macos } ( false, false, true, false, false, false, false, false, false, false, false, false, false, false, false),
{ darwin } ( true, false, true, false, true, true, true, false, false, false, false, false, false, false, false),
{ emx } ( true, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
{ watcom } ( true, false, false, false ,false, false, false, false, false, false, false, false, false, false, false),
{ morphos } ( false, false, true, false ,false, false, false, false, false, false, false, false, false, false, false),
{ netwlibc }( true, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
{ win64 } ( false, false, false, false, true, false, false, false, false, false, false, false, false, false, false),
{ wince }( true, false, false, false, false, true, false, false, false, false, false, false, false, false, false),
{ gba } ( false, false, false, false, false, true, false, false, false, false, false, false, false, false, false),
{ nds } ( false, false, false, false, false, true, false, false, false, false, false, false, false, false, false),
{ embedded }( true, true, true, true, true, true, true, true, true , false, false, false, false, false, false),
{ symbian } ( true, false, false, false, false, true, false, false, false, false, false, false, false, false, false),
{ nativent }( true, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
{ iphonesim }( true, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
{ wii } ( false, false, true, false, false, false, false, false, false, false, false, false, false, false, false),
{ i370 } ( false, false, false, false, false, false, false, false, false, false, false, false, false, false, true)
);