Need Assignment of placeholder for S370 Mainframe target for cross-compile and port
Original Reporter info from Mantis: paul@paul-robinson.us
-
Reporter name: Paul Robinson
Original Reporter info from Mantis: paul@paul-robinson.us
- Reporter name: Paul Robinson
Description:
As stated in a discussion started over a year ago in the mailing list and on the FreePascal Wiki, in order to port the Free Pascal Compiler to the IBM S370 series mainframe (which includes the Hercules Mainframe Emulator, Fujitsu B2000, and the IBM z/System) it requires a placeholder to reserve the machine identifier (and operating system targets) so that from now on that machine will have a specific identifier that is the same for all releases and if someone else is considering a port to some other machine they don't end up using the same identifier to refer to a different architecture.
The architecture identifier is s370 as it will be intended to cover both the 370 series and the zSeries, as the zSeries is a 64-bit version of the 31-/32- bit 370 series.
The two OS targets are VS1 (later renamed zOS), and Linux.
Note this is not the complete set of changes, this is just the minimum necessary to ensure that the identifier table is updated, does not break the build, and the identifiers for this mainframe architecture and potential OS targets are reserved in the compiler so the same identifier set can be used for this potential target from now on.
Steps to reproduce:
The following minor code changes should be added (version 2.6.2):
In file systems.inc, at about line 50, change:
cpu_mipsel { 13 }
to
cpu_mipsel, { 13 }
cpu_s370 { 14 }
At about line 152, change
system_powerpc_wii { 70 }
to
system_powerpc_wii, { 70 }
system_s370_linux, { 71 }
system_s370_vs1 { 72 }
In unit SYSTEMS, at approximately lines 305-307 need to be altered to add the 370 (TsystemCpu will be adjusted to compensate):
cpu2str : array[TSystemCpu] of string[10] =
(,'i386','m68k','alpha','powerpc','sparc','vm','ia64','x86_64',
'mips','arm', 'powerpc64', 'avr', 'mipsel');
becomes:
cpu2str : array[TSystemCpu] of string[10] =
(,'i386','m68k','alpha','powerpc','sparc','vm','ia64','x86_64',
'mips','arm', 'powerpc64', 'avr', 'mipsel','s370');
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_s370
);
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_s370
);
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','s370'
);
CpuSuffix : array[TCpu] of string=(
'_i386','_m68k','_powerpc','_sparc','_x86_64','_arm','_powerpc64','avr',
'_armeb', '_armel', '_mips', '_mipsel', '_mips64', '_mips64el','_s370'
);
ppcSuffix : array[TCpu] of string=(
'386','m68k','ppc','sparc','x86_64','arm','ppc64','avr','armeb', 'armel',
'mips', 'mipsel', 'mips64', 'mips64el','s370'
);
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','vs1'
);
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','_vs1'
);
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, s370}
{ 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),
{ vs1 } ( false, false, false, false, false, false, false, false, false, false, false, false, false, false, true)
);
Additional information:
As far as I know, adding these will not break the build and will simply provide a "stub" to reserve the specific mainframe machine architecture and OS target so that it has an established identifier in the compiler and assigned values. This appears to be about the minimum change needed to add this machine architecture and OS target and neither break the compiler nor cause it to malfunction.
If I have stripped out too much from my original explanation that it does break something, please advise.
Thank you for your assistance.
Mantis conversion info:
- Mantis ID: 25640
- OS: z/OS
- Platform: 370 Mainframe
- Version: 2.6.2
- Monitored by: » @xhajt03 (Tomas Hajny)