Modified for Solaris 2
This commit is contained in:
parent
964bf270ab
commit
91d270eb90
|
@ -3,13 +3,22 @@
|
|||
open_back( filename)
|
||||
char *filename;
|
||||
{
|
||||
if ( filename == (char *) 0)
|
||||
if ( filename == (char *) 0) {
|
||||
codefile= STDOUT;
|
||||
else
|
||||
#ifndef sys_close
|
||||
return( sys_open( filename, OP_WRITE, &codefile));
|
||||
#else
|
||||
return (codefile = fopen(filename, "w")) != NULL;
|
||||
#ifdef __solaris__
|
||||
fprint(codefile, ".section \".text\"\n");
|
||||
#endif
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
#ifndef sys_close
|
||||
if ( sys_open( filename, OP_WRITE, &codefile)) {
|
||||
#else
|
||||
if ((codefile = fopen(filename, "w")) != NULL) {
|
||||
#endif
|
||||
#ifdef __solaris__
|
||||
fprint(codefile, ".section \".text\"\n");
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -2,13 +2,12 @@
|
|||
|
||||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
#include <alloc.h>
|
||||
#include "mach.h"
|
||||
|
||||
#ifdef __STDC__
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#else
|
||||
extern char *malloc();
|
||||
extern char *strcpy();
|
||||
#endif
|
||||
|
||||
|
@ -108,6 +107,12 @@ static struct cache_elt cache[CACHE_SIZE], *tos = 0;
|
|||
static int c_count = 0;
|
||||
static const_str_t s;
|
||||
|
||||
_PROTOTYPE(static void panic, (char*));
|
||||
_PROTOTYPE(static void dump_cache, (File *stream));
|
||||
_PROTOTYPE(static int cache_read, (int n, int i));
|
||||
_PROTOTYPE(static void flush_part_cache, (int c, int r, int f, int d));
|
||||
_PROTOTYPE(static void subst_reg, (reg_t, reg_t));
|
||||
|
||||
static void panic(s)
|
||||
char *s;
|
||||
{
|
||||
|
@ -824,8 +829,7 @@ char *s;
|
|||
char *p;
|
||||
|
||||
enter("push_ext");
|
||||
p = malloc(strlen(s)+1);
|
||||
assert(p);
|
||||
p = Malloc(strlen(s)+1);
|
||||
|
||||
INC_TOS;
|
||||
tos->reg = reg_g0;
|
||||
|
@ -1282,7 +1286,7 @@ enter("dup_tos");
|
|||
*tos = tos[-n];
|
||||
if (tos->ext)
|
||||
{
|
||||
ext= malloc(strlen(tos->ext)+1);
|
||||
ext= Malloc(strlen(tos->ext)+1);
|
||||
strcpy(ext, tos->ext);
|
||||
tos->ext= ext;
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@ C_mes_end.c
|
|||
C_pnam.c
|
||||
C_rom_scon.c
|
||||
C_scon.c
|
||||
C_exp.c
|
||||
C_pro.c
|
||||
C_exa_dnam.c
|
||||
misc.c
|
||||
ms_reg.c
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#include "mach.h"
|
||||
#include "back.h"
|
||||
|
||||
void
|
||||
C_con_scon( s, n)
|
||||
char *s;
|
||||
arith n;
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include <em.h>
|
||||
#include "back.h"
|
||||
|
||||
void
|
||||
C_exa_dnam( s)
|
||||
char *s;
|
||||
{
|
||||
|
|
28
mach/sparc/ce/ce.src/C_pro.c
Normal file
28
mach/sparc/ce/ce.src/C_pro.c
Normal file
|
@ -0,0 +1,28 @@
|
|||
#define CODE_EXPANDER
|
||||
#include <em.h>
|
||||
#include "back.h"
|
||||
#include <alloc.h>
|
||||
|
||||
extern int B_locals_created;
|
||||
extern int B_procno;
|
||||
char *B_procnam;
|
||||
|
||||
void
|
||||
C_pro( s, l)
|
||||
char *s;
|
||||
arith l;
|
||||
{
|
||||
swtxt();
|
||||
s = extnd_name(s);
|
||||
#ifdef __solaris__
|
||||
fprint(codefile, "\t.type\t%s,#function\n", s);
|
||||
if (B_procnam) free(B_procnam);
|
||||
B_procnam = Salloc(s, strlen(s)+1);
|
||||
#endif
|
||||
|
||||
symbol_definition( s);
|
||||
B_procno++;
|
||||
C_prolog();
|
||||
C_locals(l);
|
||||
B_locals_created = 1;
|
||||
}
|
|
@ -3,6 +3,7 @@
|
|||
#include "mach.h"
|
||||
#include "back.h"
|
||||
|
||||
void
|
||||
C_rom_scon( s, n)
|
||||
char *s;
|
||||
arith n;
|
||||
|
|
|
@ -34,6 +34,7 @@ static int current_reg_mes[RM_COUNT+4];
|
|||
static int in_reg_mes = 0; /* boolean */
|
||||
static int reg_mes_nr;
|
||||
static int db_mes = 0;
|
||||
static int db_kind = 0;
|
||||
static int db_str = 0;
|
||||
static int db_nul = 0; /* boolean */
|
||||
|
||||
|
@ -252,18 +253,36 @@ load_float_regs()
|
|||
|
||||
}
|
||||
|
||||
void
|
||||
C_mes_begin( ms)
|
||||
int ms;
|
||||
{
|
||||
#ifdef __solaris__
|
||||
static int inits;
|
||||
#endif
|
||||
|
||||
reg_mes_nr = 0;
|
||||
in_reg_mes = (ms == ms_reg);
|
||||
if (ms == ms_gto)
|
||||
fprint(codefile, "ta 3\n");
|
||||
db_mes = (ms == ms_stb || ms == ms_std) ? ms : 0;
|
||||
#ifdef __solaris__
|
||||
if (db_mes && ! inits) {
|
||||
fprint(codefile, ".pushsection \".text\"\nBtext.text:\n.popsection\n");
|
||||
fprint(codefile, ".pushsection \".data\"\nBdata.data:\n.popsection\n");
|
||||
fprint(codefile, ".pushsection \".bss\"\nBbss.bss:\n.popsection\n");
|
||||
inits = 1;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static dump_reg_tabs();
|
||||
|
||||
#ifdef __solaris__
|
||||
extern char *B_procnam;
|
||||
#endif
|
||||
|
||||
void
|
||||
C_mes_end()
|
||||
{
|
||||
int pos;
|
||||
|
@ -271,10 +290,22 @@ C_mes_end()
|
|||
|
||||
if (db_mes) {
|
||||
db_nul = 0;
|
||||
#ifdef __solaris__
|
||||
if (db_mes == ms_std) {
|
||||
if (db_str == 2) {
|
||||
fprint(codefile, ",1f\n1:\n");
|
||||
}
|
||||
else {
|
||||
fprint(codefile, ",1f-%s\n1:\n", B_procnam);
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (db_mes == ms_std && db_str == 2) fprint(codefile,",1f\n1:\n");
|
||||
#endif
|
||||
else fprint(codefile, "\n");
|
||||
db_str = 0;
|
||||
db_mes = 0;
|
||||
db_kind = 0;
|
||||
}
|
||||
if (!in_reg_mes) /* end of some other mes */
|
||||
return;
|
||||
|
@ -326,22 +357,32 @@ C_mes_end()
|
|||
|
||||
extern int __gdb_flag;
|
||||
|
||||
void
|
||||
C_cst( l)
|
||||
arith l;
|
||||
{
|
||||
static int correct_offset;
|
||||
|
||||
if (db_mes) {
|
||||
if (! db_kind) db_kind = l;
|
||||
if (! db_str) {
|
||||
switchseg( SEGTXT);
|
||||
if (l == N_SLINE && ! __gdb_flag) {
|
||||
flush_cache();
|
||||
#ifdef __solaris__
|
||||
fprint(codefile, "call $__uX_LiB\nnop\n");
|
||||
#else
|
||||
fprint(codefile, "call ___uX_LiB\nnop\n");
|
||||
#endif
|
||||
}
|
||||
#ifdef __solaris__
|
||||
fprint(codefile, ".stabn 0x%lx,0", (long) l);
|
||||
#else
|
||||
if (db_mes == ms_std) {
|
||||
fprint(codefile, ".stabd 0x%lx,0", (long) l);
|
||||
}
|
||||
else fprint(codefile, ".stabn 0x%lx,0", (long) l);
|
||||
#endif
|
||||
db_str = 1;
|
||||
db_nul = 1;
|
||||
}
|
||||
|
@ -364,6 +405,7 @@ arith l;
|
|||
current_reg_mes[reg_mes_nr++] = l;
|
||||
}
|
||||
|
||||
void
|
||||
C_scon(s, l)
|
||||
register char *s;
|
||||
register arith l;
|
||||
|
@ -383,6 +425,7 @@ register arith l;
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
C_dlb(l, off)
|
||||
label l;
|
||||
arith off;
|
||||
|
@ -391,9 +434,20 @@ arith off;
|
|||
fprint(codefile,",");
|
||||
fprint(codefile, DLB_FMT, (long) l);
|
||||
if (off) fprint(codefile,"+%ld", (long) off);
|
||||
#ifdef __solaris__
|
||||
switch(db_kind) {
|
||||
case N_LCSYM:
|
||||
fprint(codefile, "-Bbss.bss");
|
||||
break;
|
||||
case N_STSYM:
|
||||
fprint(codefile, "-Bdata.data");
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
C_dnam(l, off)
|
||||
char *l;
|
||||
arith off;
|
||||
|
@ -402,26 +456,44 @@ arith off;
|
|||
fprint(codefile,",");
|
||||
fprint(codefile, DNAM_FMT, l);
|
||||
if (off) fprint(codefile,"+%ld", (long) off);
|
||||
#ifdef __solaris__
|
||||
switch(db_kind) {
|
||||
case N_LCSYM:
|
||||
fprint(codefile, "-Bbss.bss");
|
||||
break;
|
||||
case N_STSYM:
|
||||
fprint(codefile, "-Bdata.data");
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
extern int B_procno;
|
||||
|
||||
void
|
||||
C_ilb(l)
|
||||
label l;
|
||||
{
|
||||
if (db_mes) {
|
||||
fprint(codefile,",");
|
||||
fprint(codefile, ILB_FMT, B_procno, (long)l);
|
||||
#ifdef __solaris__
|
||||
fprint(codefile, "-Btext.text");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
C_pnam(s)
|
||||
char *s;
|
||||
{
|
||||
if (db_mes) {
|
||||
fprint(codefile,",");
|
||||
fprint(codefile, NAME_FMT, s);
|
||||
#ifdef __solaris__
|
||||
fprint(codefile, "-Btext.text");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -13,19 +13,6 @@ int arg;
|
|||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
do_open( filename)
|
||||
char *filename;
|
||||
{
|
||||
if ( filename == (char *)0 || !sys_open( filename, OP_WRITE, &codefile))
|
||||
return( 0);
|
||||
|
||||
fprint( codefile, ".sect .text; .sect .rom; .sect .data; .sect .bss\n");
|
||||
return( 1);
|
||||
}
|
||||
*/
|
||||
|
||||
#define IEEEFLOAT
|
||||
#define FL_MSL_AT_LOW_ADDRESS 1
|
||||
#define FL_MSW_AT_LOW_ADDRESS 1
|
||||
|
|
|
@ -34,11 +34,7 @@ extern reg_t reg_f0;
|
|||
extern reg_t reg_sp, reg_lb, reg_gap;
|
||||
extern reg_t reg_tmp;
|
||||
|
||||
#ifdef __STDC__
|
||||
#define _PROTOTYPE(x,y) x y
|
||||
#else
|
||||
#define _PROTOTYPE(x,y) x()
|
||||
#endif
|
||||
#include "ansi.h"
|
||||
|
||||
_PROTOTYPE(int const13, (int));
|
||||
_PROTOTYPE(void init_cache, (void));
|
||||
|
@ -54,13 +50,8 @@ _PROTOTYPE(void push_const, (arith));
|
|||
_PROTOTYPE(void push_reg, (reg_t));
|
||||
_PROTOTYPE(void push_ext, (char *));
|
||||
_PROTOTYPE(void flush_cache, (void));
|
||||
static _PROTOTYPE(void flush_part_cache, (int c, int r, int f, int d));
|
||||
static _PROTOTYPE(void subst_reg, (reg_t, reg_t));
|
||||
_PROTOTYPE(void cache_need, (int));
|
||||
static _PROTOTYPE(int cache_read, (int n, int i));
|
||||
static _PROTOTYPE(void dump_cache, (File *stream));
|
||||
_PROTOTYPE(void pop_nop, (int));
|
||||
static _PROTOTYPE(void panic, (char*));
|
||||
|
||||
_PROTOTYPE(reg_t alloc_reg, (void));
|
||||
_PROTOTYPE(reg_t alloc_reg_var, (void));
|
||||
|
@ -74,8 +65,6 @@ _PROTOTYPE(reg_t pop_reg_reg, (reg_t*));
|
|||
_PROTOTYPE(reg_t pop_float, (void));
|
||||
_PROTOTYPE(reg_t pop_double, (reg_t *sub_reg));
|
||||
_PROTOTYPE(void pop_reg_as, (reg_t r));
|
||||
static _PROTOTYPE(reg_t top_reg, (void));
|
||||
static _PROTOTYPE(reg_t top_reg_c13, (char*));
|
||||
|
||||
_PROTOTYPE(arith pop_const, (char *n_str));
|
||||
_PROTOTYPE(arith top_const, (void));
|
||||
|
|
Loading…
Reference in a new issue