Thanks for the patch.
I have installed it on your behalf after fixing the changelog in the log. > This commit adds new types for 32-bit systems and rename current > types to have a `_64' suffix. > > Signed-off-by: Mohammad-Reza Nabipoor <[email protected]> > > gcc/ChangeLog > > * algol68/ga68-exports.pk (ga68_text_reloc_64): Renamed and > adapted from ga68_text_reloc. > (ga68_data_reloc_64): Renamed and adapted from ga68_data_reloc. > (ga68_mode_64): Renamed and adapted from ga68_mode. > (ga68_extract_64): Renamed and adapted from ga68_extract. > (ga68_module_64): Renamed and adapted from ga68_module. > (ga68_text_reloc_32): New type. > (ga68_data_reloc_32): Likewise. > (ga68_mode_32): Likewise. > (ga68_extract_32): Likewise. > (ga68_module_32): Likewise. > --- > gcc/algol68/ga68-exports.pk | 171 ++++++++++++++++++++++++++++++++---- > 1 file changed, 154 insertions(+), 17 deletions(-) > > diff --git a/gcc/algol68/ga68-exports.pk b/gcc/algol68/ga68-exports.pk > index 01de350ec40..233c6987def 100644 > --- a/gcc/algol68/ga68-exports.pk > +++ b/gcc/algol68/ga68-exports.pk > @@ -95,8 +95,10 @@ var ga68_exports_ver = 1; > > load elf; > > -type ga68_text_reloc = Elf64_Addr; > -type ga68_data_reloc = Elf64_Addr; > +type ga68_text_reloc_64 = Elf64_Addr; > +type ga68_data_reloc_64 = Elf64_Addr; > +type ga68_text_reloc_32 = Elf32_Addr; > +type ga68_data_reloc_32 = Elf32_Addr; > > /* Strings are encoded in-place and are both pre-sized and > NULL-terminated. This is to ease reading them quickly and > @@ -135,7 +137,7 @@ var GA68_MODE_UNKNOWN = 0UB, > GA68_MODE_STRING = 14UB, > GA68_MODE_FLEX = 15UB; > > -type ga68_mode = > +type ga68_mode_64 = > struct > { > uint<8> kind : kind in [GA68_MODE_VOID, GA68_MODE_INT, > @@ -153,21 +155,21 @@ type ga68_mode = > GA68_MODE_BYTES]; > struct > { > - ga68_data_reloc mode; > + ga68_data_reloc_64 mode; > } name : kind == GA68_MODE_NAME || kind == GA68_MODE_FLEX; > > struct > { > - type triplet = struct { ga68_text_reloc lb; ga68_text_reloc ub; }; > + type triplet = struct { ga68_text_reloc_64 lb; ga68_text_reloc_64 > ub; }; > > uint<8> ndims; > triplet[ndims] dims; > - ga68_data_reloc row_of; > + ga68_data_reloc_64 row_of; > } row : kind == GA68_MODE_ROW; > > struct > { > - type field = struct { ga68_data_reloc mode; ga68_str name; }; > + type field = struct { ga68_data_reloc_64 mode; ga68_str name; }; > > uint<16> nfields; > field[nfields] fields; > @@ -176,14 +178,74 @@ type ga68_mode = > struct > { > uint<8> nmodes; > - ga68_data_reloc[nmodes] modes; > + ga68_data_reloc_64[nmodes] modes; > } uni : kind == GA68_MODE_UNION; > > struct > { > - type arg = struct { ga68_data_reloc mode; ga68_str name; }; > + type arg = struct { ga68_data_reloc_64 mode; ga68_str name; }; > > - ga68_data_reloc ret_mode; > + ga68_data_reloc_64 ret_mode; > + uint<8> nargs; > + arg[nargs] args; > + } routine : kind == GA68_MODE_PROC; > + > + struct { } _ : kind in [GA68_MODE_UNKNOWN, GA68_MODE_VOID, > + GA68_MODE_CHAR, GA68_MODE_BOOL, > + GA68_MODE_STRING]; > + > + } data; > + }; > + > +type ga68_mode_32 = > + struct > + { > + uint<8> kind : kind in [GA68_MODE_VOID, GA68_MODE_INT, > + GA68_MODE_REAL, GA68_MODE_BITS, > + GA68_MODE_BYTES, GA68_MODE_CHAR, > + GA68_MODE_CMPL, GA68_MODE_ROW, > + GA68_MODE_STRUCT, GA68_MODE_UNION, > + GA68_MODE_NAME, GA68_MODE_PROC, > + GA68_MODE_FLEX]; > + > + union > + { > + int<8> sizety : kind in [GA68_MODE_INT, GA68_MODE_REAL, > + GA68_MODE_CMPL, GA68_MODE_BITS, > + GA68_MODE_BYTES]; > + struct > + { > + ga68_data_reloc_32 mode; > + } name : kind == GA68_MODE_NAME || kind == GA68_MODE_FLEX; > + > + struct > + { > + type triplet = struct { ga68_text_reloc_32 lb; ga68_text_reloc_32 > ub; }; > + > + uint<8> ndims; > + triplet[ndims] dims; > + ga68_data_reloc_32 row_of; > + } row : kind == GA68_MODE_ROW; > + > + struct > + { > + type field = struct { ga68_data_reloc_32 mode; ga68_str name; }; > + > + uint<16> nfields; > + field[nfields] fields; > + } sct : kind == GA68_MODE_STRUCT; > + > + struct > + { > + uint<8> nmodes; > + ga68_data_reloc_32[nmodes] modes; > + } uni : kind == GA68_MODE_UNION; > + > + struct > + { > + type arg = struct { ga68_data_reloc_32 mode; ga68_str name; }; > + > + ga68_data_reloc_32 ret_mode; > uint<8> nargs; > arg[nargs] args; > } routine : kind == GA68_MODE_PROC; > @@ -224,7 +286,7 @@ var GA68_EXTRACT_MODU = 0UB, > GA68_EXTRACT_PRIO = 3UB, > GA68_EXTRACT_OPER = 4UB; > > -type ga68_extract = > +type ga68_extract_64 = > struct > { > Elf64_Off extract_size; > @@ -240,14 +302,14 @@ type ga68_extract = > { > uint<8> mark : mark == GA68_EXTRACT_IDEN; > ga68_str name; > - ga68_data_reloc mode; > + ga68_data_reloc_64 mode; > } identifier; > > struct > { > uint<8> mark : mark == GA68_EXTRACT_MODE; > ga68_str mode_indication; > - ga68_data_reloc mode; > + ga68_data_reloc_64 mode; > } mode; > > struct > @@ -261,7 +323,7 @@ type ga68_extract = > { > uint<8> mark : mark == GA68_EXTRACT_OPER; > ga68_str opname; > - ga68_mode mode; > + ga68_mode_64 mode; > } oper; > > } extract : extract'size == extract_size; > @@ -270,10 +332,62 @@ type ga68_extract = > uint<8>[mdextra_size] data; > }; > > +type ga68_extract_32 = > + struct > + { > + type ga68_mdextra = > + struct > + { > + Elf32_Off mdextra_size; > + uint<8>[mdextra_size] data; > + }; > + > + Elf32_Off extract_size; > + union > + { > + struct > + { > + uint<8> mark : mark == GA68_EXTRACT_MODU; > + ga68_str module_indication; > + } module; > + > + struct > + { > + uint<8> mark : mark == GA68_EXTRACT_IDEN; > + ga68_str name; > + ga68_data_reloc_32 mode; > + ga68_mdextra mdextra; > + } identifier; > + > + struct > + { > + uint<8> mark : mark == GA68_EXTRACT_MODE; > + ga68_str mode_indication; > + ga68_data_reloc_32 mode; > + } mode; > + > + struct > + { > + uint<8> mark : mark == GA68_EXTRACT_PRIO; > + ga68_str opname; > + uint<8> prio; > + } prio; > + > + struct > + { > + uint<8> mark : mark == GA68_EXTRACT_OPER; > + ga68_str opname; > + ga68_mode_32 mode; > + ga68_mdextra mdextra; > + } oper; > + > + } extract : extract'size == extract_size; > + }; > + > /* The contents of the .ga68_exports section can be mapped as a > ga68_module[sec.sh_size] */ > > -type ga68_module = > +type ga68_module_64 = > struct > { > uint<8>[2] magic : magic == [0x0aUB, 0x68UB]; > @@ -289,9 +403,32 @@ type ga68_module = > > /* Table of modes. */ > Elf64_Off modes_size; > - ga68_mode[modes_size] modes; > + ga68_mode_64[modes_size] modes; > > /* Table of extracts. */ > Elf64_Off extracts_size; > - ga68_extract[extracts_size] extracts; > + ga68_extract_64[extracts_size] extracts; > + }; > + > +type ga68_module_32 = > + struct > + { > + uint<8>[2] magic : magic == [0x0aUB, 0x68UB]; > + uint<16> version : version == ga68_exports_ver; > + > + /* Module identification. > + Add a hash or UUID? */ > + ga68_str name; > + > + /* Entry points. */ > + ga68_str prelude; > + ga68_str poslude; > + > + /* Table of modes. */ > + Elf32_Off modes_size; > + ga68_mode_32[modes_size] modes; > + > + /* Table of extracts. */ > + Elf32_Off extracts_size; > + ga68_extract_32[extracts_size] extracts; > };
