diff --git a/util/ceg/ce_back/as_back/back.h b/util/ceg/ce_back/as_back/back.h index accbb4a47..973111f3b 100644 --- a/util/ceg/ce_back/as_back/back.h +++ b/util/ceg/ce_back/as_back/back.h @@ -1,14 +1,19 @@ #include #include +#define codefile _codefile +#define cur_seg _cur_seg +#define saved _saved +#define labeltje _labeltje +#define name _name +#define output_back _output_back + extern File *codefile; extern char *extnd_name(), *extnd_dnam(), *extnd_dlb(), *extnd_ilb(), *extnd_hol(), *extnd_ext(), *extnd_pro(), *extnd_start(), *extnd_part(), *extnd_cont(); -extern int holno, procno; - #define swtxt() switchseg( SEGTXT) #define SEGTXT 0 diff --git a/util/ceg/ce_back/as_back/bottom.c b/util/ceg/ce_back/as_back/bottom.c index dfc303340..8b7b54671 100644 --- a/util/ceg/ce_back/as_back/bottom.c +++ b/util/ceg/ce_back/as_back/bottom.c @@ -4,7 +4,7 @@ /* This file contains low-level routines for generating assembly code. */ -int procno = 0, holno = 0, cur_seg = -1, saved = FALSE; +int cur_seg = -1, saved = FALSE; char name[256], labeltje[256]; File *codefile; @@ -41,18 +41,18 @@ dump_label() } -char *extnd_pro( procno) -int procno; +char *extnd_pro( prcno) +int prcno; { - sprint( name, "pro%d", procno); + sprint( name, "pro%d", prcno); return( name); } -char *extnd_start( procno) -int procno; +char *extnd_start( prcno) +int prcno; { - sprint( name, "start%d", procno); + sprint( name, "start%d", prcno); return( name); } @@ -81,10 +81,10 @@ arith g; } -char *extnd_ilb( l) +char *extnd_ilb( l, prcno) arith l; { - sprint( name, ILB_FMT, procno, (arith) l); + sprint( name, ILB_FMT, prcno, (arith) l); return( name); } diff --git a/util/ceg/ce_back/as_back/header.h b/util/ceg/ce_back/as_back/header.h index 640f3f9d9..9f9103efa 100644 --- a/util/ceg/ce_back/as_back/header.h +++ b/util/ceg/ce_back/as_back/header.h @@ -3,5 +3,3 @@ #include "back.h" extern int cur_seg; - -extern holno, procno; diff --git a/util/ceg/ce_back/obj_back/.distr b/util/ceg/ce_back/obj_back/.distr index d76935ae0..de62acc3b 100644 --- a/util/ceg/ce_back/obj_back/.distr +++ b/util/ceg/ce_back/obj_back/.distr @@ -18,7 +18,6 @@ init_back.c label.c memory.c misc.c -mysprint.c output.c reloc1.c reloc2.c diff --git a/util/ceg/ce_back/obj_back/back.h b/util/ceg/ce_back/obj_back/back.h index 301c5e3f8..7df6c5bff 100644 --- a/util/ceg/ce_back/obj_back/back.h +++ b/util/ceg/ce_back/obj_back/back.h @@ -4,15 +4,14 @@ extern char *extnd_name(), *extnd_dnam(), *extnd_dlb(), *extnd_ilb(), *extnd_hol(), *extnd_ext(), *extnd_pro(), *extnd_start(), *extnd_part(), *extnd_cont(); -extern holno, procno; #include "data.h" /* These routines are called very often, thus we turned them into macros. */ -#define text1(b) {if (--_text_cnt < 0) mem_text(); *text++ = b;} -#define con1(b) {if (--_data_cnt < 0) mem_data(); *data++ = b;} -#define rom1(b) {if (--_data_cnt < 0) mem_data(); *data++ = b;} +#define text1(b) {if (--text_cnt < 0) mem_text(); *text++ = b;} +#define con1(b) {if (--data_cnt < 0) mem_data(); *data++ = b;} +#define rom1(b) {if (--data_cnt < 0) mem_data(); *data++ = b;} #define bss( n) ( nbss += n) @@ -26,7 +25,7 @@ extern holno, procno; #define swtxt() switchseg( SEGTXT) -#define switchseg(seg) if ((seg) != cur_seg) swtchsg(seg); else +#define switchseg(seg) if ((seg) != cur_seg) _swtchsg(seg); else #define PC_REL 1 #define ABSOLUTE !PC_REL diff --git a/util/ceg/ce_back/obj_back/common.c b/util/ceg/ce_back/obj_back/common.c index d990f85da..59d3bea68 100644 --- a/util/ceg/ce_back/obj_back/common.c +++ b/util/ceg/ce_back/obj_back/common.c @@ -5,10 +5,10 @@ common(n) arith n; { - extern int Label, label_waiting; - register struct outname *nm = &symbol_table[Label]; + extern int _Label, _Label_waiting; + register struct outname *nm = &symbol_table[_Label]; - if (label_waiting) { + if (_Label_waiting) { /* If possible, generate a common. Local commons must be delt with later. */ @@ -16,7 +16,7 @@ arith n; if (n > nm->on_valu) { nm->on_valu = n; } - label_waiting = 0; + _Label_waiting = 0; return; } switchseg(SEGBSS); diff --git a/util/ceg/ce_back/obj_back/con2.c b/util/ceg/ce_back/obj_back/con2.c index 0fd6e6a04..d037ef637 100644 --- a/util/ceg/ce_back/obj_back/con2.c +++ b/util/ceg/ce_back/obj_back/con2.c @@ -4,7 +4,7 @@ con2( w) TWO_BYTES w; { - if ((_data_cnt -= 2) < 0) mem_data(); + if ((data_cnt -= 2) < 0) mem_data(); #ifdef BYTES_REVERSED *data++ = w>>8; *data++ = w; diff --git a/util/ceg/ce_back/obj_back/con4.c b/util/ceg/ce_back/obj_back/con4.c index 2027e5e93..a720e4754 100644 --- a/util/ceg/ce_back/obj_back/con4.c +++ b/util/ceg/ce_back/obj_back/con4.c @@ -10,7 +10,7 @@ con4( l) FOUR_BYTES l; { - if ((_data_cnt -= 4) < 0) mem_data(); + if ((data_cnt -= 4) < 0) mem_data(); #ifdef WORDS_REVERSED con2( (int)(l>>16)); con2( (int) l); @@ -19,5 +19,3 @@ FOUR_BYTES l; con2( (int) (l>>16)); #endif } - - diff --git a/util/ceg/ce_back/obj_back/data.h b/util/ceg/ce_back/obj_back/data.h index ee17d90a6..cd9e49e9f 100644 --- a/util/ceg/ce_back/obj_back/data.h +++ b/util/ceg/ce_back/obj_back/data.h @@ -1,5 +1,42 @@ /* The global datastructures (see "data.c"). */ +#define cur_value _cur_value +#define get4 _get4 +#define cur_seg _cur_seg +#define text _text +#define data _data +#define string _string +#define nname _nname +#define nbss _nbss +#define size_text _size_text +#define size_data _size_data +#define size_reloc _size_reloc +#define size_symbol _size_symbol +#define size_string _size_string +#define text_cnt _text_cnt +#define data_cnt _data_cnt +#define text_area _text_area +#define data_area _data_area +#define string_area _string_area +#define reloc_info _reloc_info +#define relo _relo +#define symbol_table _symbol_table +#define mem_text _mem_text +#define mem_data _mem_data +#define mem_relo _mem_relo +#define mem_string _mem_string +#define mem_symbol_hash _mem_symbol_hash +#define put1 _put1 +#define put2 _put2 +#define put4 _put4 +#define get1 _get1 +#define get2 _get2 +#define get4 _get4 +#define do_local_relocation _do_local_relocation +#define string_lengte _string_length +#define index_symbol_table _index_symbol_table +#define output_back _output_back + extern long cur_value(); extern long get4(); @@ -8,11 +45,11 @@ extern int cur_seg; extern char *text, *data, *string; extern int nname; extern long nbss, size_text, size_data, size_reloc, size_symbol, - size_string, _text_cnt, _data_cnt; + size_string, text_cnt, data_cnt; extern char *text_area, *data_area, *string_area; extern struct outrelo *reloc_info, *relo; extern struct outname *symbol_table; -#define put1(buf, off, w) ((buf)[off] = (w)) -#define get1(buf, off) ((buf)[off]) +#define _put1(buf, off, w) ((buf)[off] = (w)) +#define _get1(buf, off) ((buf)[off]) diff --git a/util/ceg/ce_back/obj_back/end_back.c b/util/ceg/ce_back/obj_back/end_back.c index 8aafca346..3c5519246 100644 --- a/util/ceg/ce_back/obj_back/end_back.c +++ b/util/ceg/ce_back/obj_back/end_back.c @@ -3,14 +3,7 @@ #include "back.h" #include "header.h" - -end_back() -{ - finish_tables(); - do_local_relocation(); -} - - +static finish_tables() /* Prepare tables for do_local_relocation() and output(). @@ -23,7 +16,6 @@ finish_tables() define_segments(); } - static char *seg_name[] = { ".text", ".rom", @@ -31,7 +23,7 @@ static char *seg_name[] = { ".bss" }; - +static define_segments() { int i, s; @@ -42,3 +34,8 @@ define_segments() } } +end_back() +{ + finish_tables(); + do_local_relocation(); +} diff --git a/util/ceg/ce_back/obj_back/extnd.c b/util/ceg/ce_back/obj_back/extnd.c index f8eeaf0c4..7995d62b1 100644 --- a/util/ceg/ce_back/obj_back/extnd.c +++ b/util/ceg/ce_back/obj_back/extnd.c @@ -4,6 +4,32 @@ #include "header.h" #include "data.h" #include "mach.h" +#include + +/* Mysprint() stores the string directly in the string_arae. This saves + * a copy action. It is assumed that the strings stored in the string-table + * are never longer than MAXSTRLEN bytes. + */ + +#define MAXSTRLEN 1024 + +/*VARARGS*/ +static int mysprint(va_alist) + va_dcl +{ + char *fmt; + va_list args; + int retval; + + va_start(args); + fmt = va_arg(args, char *); + while (string + MAXSTRLEN - string_area > size_string) + mem_string(); + retval = _format(string, fmt, args); + string[retval] = '\0'; + va_end(args); + return retval; +} /* The extnd_*()s make a name unique. The resulting string is directly stored * in the symbol_table (by mysprint()). Later additional fields in the @@ -12,22 +38,21 @@ */ extern int string_lengte, index_symbol_table; -int procno = 0, holno = 0; -char *extnd_pro( procno) -int procno; +char *extnd_pro( prcno) +int prcno; { - string_lengte = mysprint( "%cprc%d", GENLAB, procno); + string_lengte = mysprint( "%cprc%d", GENLAB, prcno); index_symbol_table = find_sym( string, STORE_STRING); return( symbol_table[ index_symbol_table].on_foff + string_area); } -char *extnd_start( procno) -int procno; +char *extnd_start( prcno) +int prcno; { - string_lengte = mysprint( "%cstrt%d", GENLAB, procno); + string_lengte = mysprint( "%cstrt%d", GENLAB, prcno); index_symbol_table = find_sym( string, STORE_STRING); return( symbol_table[ index_symbol_table].on_foff + string_area); } @@ -60,10 +85,10 @@ arith g; } -char *extnd_ilb( l) +char *extnd_ilb( l, prcno) arith l; { - string_lengte = mysprint( ILB_FMT, procno, (arith) l); + string_lengte = mysprint( ILB_FMT, prcno, (arith) l); index_symbol_table = find_sym( string, STORE_STRING); return( symbol_table[ index_symbol_table].on_foff + string_area); } diff --git a/util/ceg/ce_back/obj_back/hash.h b/util/ceg/ce_back/obj_back/hash.h index 52b6ff592..17c497450 100644 --- a/util/ceg/ce_back/obj_back/hash.h +++ b/util/ceg/ce_back/obj_back/hash.h @@ -3,4 +3,6 @@ struct Hashitem { int hs_nami; }; +#define Hashitems _HashItems + extern struct Hashitem *Hashitems; diff --git a/util/ceg/ce_back/obj_back/label.c b/util/ceg/ce_back/obj_back/label.c index cacf7afe6..379749871 100644 --- a/util/ceg/ce_back/obj_back/label.c +++ b/util/ceg/ce_back/obj_back/label.c @@ -2,7 +2,7 @@ #include "header.h" #include "back.h" -int Label, label_waiting; +int _Label, _Label_waiting; save_label( lab) char *lab; @@ -13,18 +13,18 @@ char *lab; * is not allowed. */ { - Label = find_sym( lab, SYMBOL_DEFINITION); - label_waiting = 1; + _Label = find_sym( lab, SYMBOL_DEFINITION); + _Label_waiting = 1; } dump_label() { - if ( label_waiting) { + if ( _Label_waiting) { align_word(); - symbol_table[ Label].on_valu = cur_value(); - symbol_table[ Label].on_type |= ( S_MIN + conv_seg( cur_seg)); - label_waiting = 0; + symbol_table[ _Label].on_valu = cur_value(); + symbol_table[ _Label].on_type |= ( S_MIN + conv_seg( cur_seg)); + _Label_waiting = 0; } } diff --git a/util/ceg/ce_back/obj_back/output.c b/util/ceg/ce_back/obj_back/output.c index 16d0ca6a8..28a6b87b6 100644 --- a/util/ceg/ce_back/obj_back/output.c +++ b/util/ceg/ce_back/obj_back/output.c @@ -5,6 +5,7 @@ #include "back.h" static reduce_name_table(); +static convert_outname(); static int nrelo; @@ -159,10 +160,11 @@ reduce_name_table() wr_fatal() { fprint( STDERR, "write failed\n"); - abort(); + sys_stop(S_ABORT); } +static convert_outname( header) struct outhead *header; { diff --git a/util/ceg/ce_back/obj_back/relocation.c b/util/ceg/ce_back/obj_back/relocation.c index d9ec080ba..0f0c49bc5 100644 --- a/util/ceg/ce_back/obj_back/relocation.c +++ b/util/ceg/ce_back/obj_back/relocation.c @@ -71,7 +71,7 @@ do_local_relocation() put1( sect, rp->or_addr, (char) newval); } else - print( STDERR, "do_relo() : bad relocation size\n"); + fprint( STDERR, "do_relo() : bad relocation size\n"); rp->or_nami = seg_index((np->on_type & S_TYP) - S_MIN); /* print( "reloc %s adrr=%ld sect=%ld oldval=%ld newval=%ld def = %ld\n", diff --git a/util/ceg/ce_back/obj_back/switchseg.c b/util/ceg/ce_back/obj_back/switchseg.c index b7752673e..bb63cdbca 100644 --- a/util/ceg/ce_back/obj_back/switchseg.c +++ b/util/ceg/ce_back/obj_back/switchseg.c @@ -1,6 +1,6 @@ #include "data.h" -swtchsg( seg) +_swtchsg( seg) int seg; /* The EM definition demands that pseudo instructions are aligned