Many changes, mostly for Solaris 2
This commit is contained in:
parent
4539174f47
commit
b95ae2fa70
22 changed files with 351 additions and 6 deletions
|
@ -26,6 +26,7 @@ make.ops
|
||||||
make.tokcase
|
make.tokcase
|
||||||
make.tokfile
|
make.tokfile
|
||||||
message.h
|
message.h
|
||||||
|
misc.h
|
||||||
modula-2.c
|
modula-2.c
|
||||||
operator.h
|
operator.h
|
||||||
operators.ot
|
operators.ot
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include "expr.h"
|
#include "expr.h"
|
||||||
#include "tree.h"
|
#include "tree.h"
|
||||||
#include "operator.h"
|
#include "operator.h"
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
extern FILE *db_out, *db_in;
|
extern FILE *db_out, *db_in;
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include "langdep.h"
|
#include "langdep.h"
|
||||||
#include "token.h"
|
#include "token.h"
|
||||||
#include "expr.h"
|
#include "expr.h"
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
extern char *Salloc();
|
extern char *Salloc();
|
||||||
extern char *strindex();
|
extern char *strindex();
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include "class.h"
|
#include "class.h"
|
||||||
#include "idf.h"
|
#include "idf.h"
|
||||||
#include "rd.h"
|
#include "rd.h"
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
extern char *strindex();
|
extern char *strindex();
|
||||||
extern long str2long();
|
extern long str2long();
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include "symbol.h"
|
#include "symbol.h"
|
||||||
#include "scope.h"
|
#include "scope.h"
|
||||||
#include "file.h"
|
#include "file.h"
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
extern FILE *db_out;
|
extern FILE *db_out;
|
||||||
extern t_lineno listline, currline;
|
extern t_lineno listline, currline;
|
||||||
|
|
|
@ -52,12 +52,14 @@
|
||||||
#include "langdep.h"
|
#include "langdep.h"
|
||||||
#include "scope.h"
|
#include "scope.h"
|
||||||
#include "idf.h"
|
#include "idf.h"
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
extern FILE *db_out;
|
extern FILE *db_out;
|
||||||
extern int stack_offset;
|
extern int stack_offset;
|
||||||
extern char *strcpy();
|
extern char *strcpy();
|
||||||
extern t_addr *get_EM_regs();
|
extern t_addr *get_EM_regs();
|
||||||
extern char *memcpy();
|
extern char *memcpy();
|
||||||
|
extern char *malloc(), *realloc();
|
||||||
|
|
||||||
#define malloc_succeeded(p) if (! (p)) {\
|
#define malloc_succeeded(p) if (! (p)) {\
|
||||||
error("could not allocate enough memory");\
|
error("could not allocate enough memory");\
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include "position.h"
|
#include "position.h"
|
||||||
#include "tree.h"
|
#include "tree.h"
|
||||||
#include "operator.h"
|
#include "operator.h"
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
extern FILE *db_out;
|
extern FILE *db_out;
|
||||||
extern int db_ss;
|
extern int db_ss;
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include "idf.h"
|
#include "idf.h"
|
||||||
#include "file.h"
|
#include "file.h"
|
||||||
#include "symbol.h"
|
#include "symbol.h"
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
static line_positions();
|
static line_positions();
|
||||||
extern char *dirs[];
|
extern char *dirs[];
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
/* $Header$ */
|
/* $Header$ */
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <varargs.h>
|
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
#if __STDC__
|
||||||
|
#include <stdarg.h>
|
||||||
|
#else
|
||||||
|
#include <varargs.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "tokenname.h"
|
#include "tokenname.h"
|
||||||
#include "position.h"
|
#include "position.h"
|
||||||
|
@ -12,6 +16,7 @@
|
||||||
#include "Lpars.h"
|
#include "Lpars.h"
|
||||||
#include "type.h"
|
#include "type.h"
|
||||||
#include "langdep.h"
|
#include "langdep.h"
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
static char *usage = "Usage: %s [<ack.out>] [<a.out>]";
|
static char *usage = "Usage: %s [<ack.out>] [<a.out>]";
|
||||||
char *progname;
|
char *progname;
|
||||||
|
@ -114,7 +119,58 @@ prompt()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern int errorgiven;
|
||||||
|
|
||||||
|
#if __STDC__
|
||||||
|
void
|
||||||
|
fatal(char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
va_start(ap, fmt);
|
||||||
|
{
|
||||||
|
fprintf(db_out, "%s: ", progname);
|
||||||
|
vfprintf(db_out, fmt, ap);
|
||||||
|
fprintf(db_out, "\n");
|
||||||
|
}
|
||||||
|
va_end(ap);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
error(char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
if (! interrupted) {
|
||||||
|
va_start(ap, fmt);
|
||||||
|
{
|
||||||
|
fprintf(db_out, "%s: ", progname);
|
||||||
|
vfprintf(db_out, fmt, ap);
|
||||||
|
fprintf(db_out, "\n");
|
||||||
|
}
|
||||||
|
va_end(ap);
|
||||||
|
}
|
||||||
|
errorgiven = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
warning(char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
va_start(ap, fmt);
|
||||||
|
{
|
||||||
|
fprintf(db_out, "%s: ", progname);
|
||||||
|
vfprintf(db_out, fmt, ap);
|
||||||
|
fprintf(db_out, "\n");
|
||||||
|
}
|
||||||
|
va_end(ap);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
/*VARARGS*/
|
/*VARARGS*/
|
||||||
|
void
|
||||||
fatal(va_alist)
|
fatal(va_alist)
|
||||||
va_dcl
|
va_dcl
|
||||||
{
|
{
|
||||||
|
@ -132,9 +188,8 @@ fatal(va_alist)
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int errorgiven;
|
|
||||||
|
|
||||||
/*VARARGS*/
|
/*VARARGS*/
|
||||||
|
void
|
||||||
error(va_alist)
|
error(va_alist)
|
||||||
va_dcl
|
va_dcl
|
||||||
{
|
{
|
||||||
|
@ -155,6 +210,7 @@ error(va_alist)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*VARARGS*/
|
/*VARARGS*/
|
||||||
|
void
|
||||||
warning(va_alist)
|
warning(va_alist)
|
||||||
va_dcl
|
va_dcl
|
||||||
{
|
{
|
||||||
|
@ -170,12 +226,15 @@ warning(va_alist)
|
||||||
}
|
}
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void
|
||||||
rd_fatal()
|
rd_fatal()
|
||||||
{
|
{
|
||||||
fatal("read error in %s", AckObj);
|
fatal("read error in %s", AckObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
No_Mem()
|
No_Mem()
|
||||||
{
|
{
|
||||||
fatal("out of memory");
|
fatal("out of memory");
|
||||||
|
|
7
util/grind/misc.h
Normal file
7
util/grind/misc.h
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
/* $Header$ */
|
||||||
|
|
||||||
|
#include <ansi.h>
|
||||||
|
|
||||||
|
_PROTOTYPE(void fatal, (char *, ...));
|
||||||
|
_PROTOTYPE(void error, (char *, ...));
|
||||||
|
_PROTOTYPE(void warning, (char *, ...));
|
|
@ -15,6 +15,7 @@
|
||||||
#include "expr.h"
|
#include "expr.h"
|
||||||
#include "tree.h"
|
#include "tree.h"
|
||||||
#include "operator.h"
|
#include "operator.h"
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
extern FILE *db_out, *db_in;
|
extern FILE *db_out, *db_in;
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include "expr.h"
|
#include "expr.h"
|
||||||
#include "tree.h"
|
#include "tree.h"
|
||||||
#include "operator.h"
|
#include "operator.h"
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
extern FILE *db_out, *db_in;
|
extern FILE *db_out, *db_in;
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include "file.h"
|
#include "file.h"
|
||||||
#include "idf.h"
|
#include "idf.h"
|
||||||
#include "symbol.h"
|
#include "symbol.h"
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
extern FILE *db_out;
|
extern FILE *db_out;
|
||||||
|
|
||||||
|
|
|
@ -11,9 +11,11 @@
|
||||||
#include "position.h"
|
#include "position.h"
|
||||||
#include "idf.h"
|
#include "idf.h"
|
||||||
#include "expr.h"
|
#include "expr.h"
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
extern FILE *db_out;
|
extern FILE *db_out;
|
||||||
extern char *strindex();
|
extern char *strindex();
|
||||||
|
extern char *malloc();
|
||||||
|
|
||||||
static
|
static
|
||||||
print_unsigned(tp, v, format)
|
print_unsigned(tp, v, format)
|
||||||
|
|
|
@ -22,7 +22,7 @@ MODLIB = \
|
||||||
$(LIBDIR)/libstring.$(LIBSUF) \
|
$(LIBDIR)/libstring.$(LIBSUF) \
|
||||||
$(LIBDIR)/libsystem.$(LIBSUF)
|
$(LIBDIR)/libsystem.$(LIBSUF)
|
||||||
|
|
||||||
LIBS = $(MODLIB)
|
LIBS = $(EXTRALIB) $(MODLIB)
|
||||||
|
|
||||||
LINTLIBS = \
|
LINTLIBS = \
|
||||||
$(LINTLIBDIR)/$(LINTPREF)assert.$(LINTSUF) \
|
$(LINTLIBDIR)/$(LINTPREF)assert.$(LINTSUF) \
|
||||||
|
@ -33,7 +33,7 @@ LINTLIBS = \
|
||||||
|
|
||||||
PROFILE =
|
PROFILE =
|
||||||
INCLUDES = -I. -I$(SRC_DIR) -I$(TARGET_HOME)/modules/h -I$(TARGET_HOME)/h -I$(TARGET_HOME)/modules/pkg
|
INCLUDES = -I. -I$(SRC_DIR) -I$(TARGET_HOME)/modules/h -I$(TARGET_HOME)/h -I$(TARGET_HOME)/modules/pkg
|
||||||
CFLAGS = $(PROFILE) $(INCLUDES) $(COPTIONS)
|
CFLAGS = $(PROFILE) $(INCLUDES) $(COPTIONS) -DNDEBUG
|
||||||
LINTFLAGS = $(INCLUDES) $(LINTOPTIONS)
|
LINTFLAGS = $(INCLUDES) $(LINTOPTIONS)
|
||||||
LDFLAGS = $(PROFILE) $(LDOPTIONS)
|
LDFLAGS = $(PROFILE) $(LDOPTIONS)
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ UTIL_BIN = $(UTIL_HOME)/bin
|
||||||
TABGEN= $(UTIL_BIN)/tabgen
|
TABGEN= $(UTIL_BIN)/tabgen
|
||||||
LLGEN = $(UTIL_BIN)/LLgen
|
LLGEN = $(UTIL_BIN)/LLgen
|
||||||
LLGENOPTIONS = -v
|
LLGENOPTIONS = -v
|
||||||
|
EXTRALIB =
|
||||||
|
|
||||||
SRC_G1 = $(SRC_DIR)/commands.g
|
SRC_G1 = $(SRC_DIR)/commands.g
|
||||||
GEN_G1 = tokenfile.g
|
GEN_G1 = tokenfile.g
|
||||||
|
@ -64,7 +65,7 @@ NEXTFILES = $(SRC_DIR)/file.hh \
|
||||||
$(SRC_DIR)/langdep.cc
|
$(SRC_DIR)/langdep.cc
|
||||||
|
|
||||||
all: make.main
|
all: make.main
|
||||||
make -f make.main grind
|
make -f make.main "EXTRALIB="$(EXTRALIB) grind
|
||||||
|
|
||||||
install: all
|
install: all
|
||||||
cp grind $(TARGET_HOME)/bin/grind
|
cp grind $(TARGET_HOME)/bin/grind
|
||||||
|
|
258
util/grind/rd.c
258
util/grind/rd.c
|
@ -3,10 +3,15 @@
|
||||||
/* a.out file reading ... */
|
/* a.out file reading ... */
|
||||||
|
|
||||||
#include "rd.h"
|
#include "rd.h"
|
||||||
|
#include "misc.h"
|
||||||
|
#include <assert.h>
|
||||||
|
#include <alloc.h>
|
||||||
|
|
||||||
#if defined(__sun)
|
#if defined(__sun)
|
||||||
|
#if ! defined(sun)
|
||||||
#define sun
|
#define sun
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(__i386)
|
#if defined(__i386)
|
||||||
#define i386
|
#define i386
|
||||||
|
@ -17,13 +22,20 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__sparc)
|
#if defined(__sparc)
|
||||||
|
#if ! defined(sparc)
|
||||||
#define sparc
|
#define sparc
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(__vax)
|
#if defined(__vax)
|
||||||
#define vax
|
#define vax
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(__solaris) || defined(__solaris__)
|
||||||
|
#define solaris
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ! defined(solaris)
|
||||||
#if defined(sun) || defined(vax)
|
#if defined(sun) || defined(vax)
|
||||||
|
|
||||||
struct exec {
|
struct exec {
|
||||||
|
@ -215,6 +227,7 @@ rd_close()
|
||||||
fclose(inf);
|
fclose(inf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(i386)
|
#if defined(i386)
|
||||||
|
@ -380,3 +393,248 @@ rd_close()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(solaris)
|
||||||
|
#include <libelf.h>
|
||||||
|
#include <sys/elf_M32.h>
|
||||||
|
#include <stb.h>
|
||||||
|
|
||||||
|
struct nlist {
|
||||||
|
union {
|
||||||
|
char *n_name;
|
||||||
|
long n_strx;
|
||||||
|
} n_un;
|
||||||
|
unsigned char n_type;
|
||||||
|
char n_other;
|
||||||
|
short n_desc;
|
||||||
|
unsigned long n_value;
|
||||||
|
};
|
||||||
|
|
||||||
|
static int fildes;
|
||||||
|
static Elf *elf;
|
||||||
|
static Elf32_Ehdr *ehdr;
|
||||||
|
static struct nlist *dbtab;
|
||||||
|
static char *dbstringtab;
|
||||||
|
static Elf32_Sym *tab;
|
||||||
|
static char *stringtab;
|
||||||
|
static struct outhead hh;
|
||||||
|
static struct nlist *maxdn;
|
||||||
|
|
||||||
|
#define N_STAB 0xe0
|
||||||
|
|
||||||
|
int
|
||||||
|
rd_open(f)
|
||||||
|
char *f;
|
||||||
|
{
|
||||||
|
if ((fildes = open(f, 0)) < 0) return 0;
|
||||||
|
elf_version(EV_CURRENT);
|
||||||
|
if ((elf = elf_begin(fildes, ELF_C_READ, (Elf *) 0)) == 0) {
|
||||||
|
close(fildes);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if ((ehdr = elf32_getehdr(elf)) == NULL) {
|
||||||
|
elf_end(elf);
|
||||||
|
close(fildes);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
rd_ohead(h)
|
||||||
|
struct outhead *h;
|
||||||
|
{
|
||||||
|
Elf_Scn *scn = 0;
|
||||||
|
Elf32_Shdr *shdr;
|
||||||
|
Elf_Data *sectnames;
|
||||||
|
Elf_Data *dt;
|
||||||
|
register struct nlist *dn;
|
||||||
|
register Elf32_Sym *n;
|
||||||
|
long text_offset, data_offset, bss_offset, fun_offset;
|
||||||
|
int fixnamoff = 0, newfixnamoff = 0;
|
||||||
|
|
||||||
|
h->oh_magic = O_CONVERTED;
|
||||||
|
h->oh_stamp = 0;
|
||||||
|
h->oh_nsect = 4;
|
||||||
|
h->oh_nrelo = 0;
|
||||||
|
h->oh_flags = 0;
|
||||||
|
h->oh_nemit = 0;
|
||||||
|
h->oh_nname = 0;
|
||||||
|
|
||||||
|
scn = elf_getscn(elf, (size_t) ehdr->e_shstrndx);
|
||||||
|
sectnames = elf_getdata(scn, (Elf_Data *) 0);
|
||||||
|
|
||||||
|
scn = 0;
|
||||||
|
while ((scn = elf_nextscn(elf, scn)) != 0) {
|
||||||
|
shdr = elf32_getshdr(scn);
|
||||||
|
switch(shdr->sh_type) {
|
||||||
|
case SHT_PROGBITS:
|
||||||
|
/* Get stab symbol table. Elf does not know about it,
|
||||||
|
and, unfortunately, no relocation is done on it.
|
||||||
|
*/
|
||||||
|
h->oh_nemit += shdr->sh_size;
|
||||||
|
if (! strcmp(".stab", (char *)(sectnames->d_buf)+shdr->sh_name)) {
|
||||||
|
dt = elf_getdata(scn, (Elf_Data *) 0);
|
||||||
|
if (dt->d_size == 0) {
|
||||||
|
fatal("(part of) symbol table is missing");
|
||||||
|
}
|
||||||
|
dbtab = (struct nlist *) Malloc(dt->d_size);
|
||||||
|
memcpy((char *) dbtab, (char *) dt->d_buf, dt->d_size);
|
||||||
|
maxdn = (struct nlist *)((char *)dbtab+dt->d_size);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SHT_STRTAB:
|
||||||
|
/* Get the stab string table, as well as the usual string
|
||||||
|
table.
|
||||||
|
*/
|
||||||
|
if (! strcmp(".stabstr", (char *)(sectnames->d_buf)+shdr->sh_name)) {
|
||||||
|
dt = elf_getdata(scn, (Elf_Data *) 0);
|
||||||
|
if (dt->d_size == 0) {
|
||||||
|
fatal("(part of) symbol table is missing");
|
||||||
|
}
|
||||||
|
dbstringtab = dt->d_buf;
|
||||||
|
h->oh_nchar = dt->d_size;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (! strcmp(".strtab", (char *)(sectnames->d_buf)+shdr->sh_name)) {
|
||||||
|
dt = elf_getdata(scn, (Elf_Data *) 0);
|
||||||
|
if (dt->d_size == 0) {
|
||||||
|
fatal("(part of) symbol table is missing");
|
||||||
|
}
|
||||||
|
stringtab = dt->d_buf;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SHT_SYMTAB:
|
||||||
|
/* Get the symbol table. */
|
||||||
|
if (! strcmp(".symtab", (char *)(sectnames->d_buf)+shdr->sh_name)) {
|
||||||
|
dt = elf_getdata(scn, (Elf_Data *) 0);
|
||||||
|
if (dt->d_size == 0) {
|
||||||
|
fatal("(part of) symbol table is missing");
|
||||||
|
}
|
||||||
|
tab = dt->d_buf;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Convert offsets in stab symbol table. */
|
||||||
|
n = tab;
|
||||||
|
dn = dbtab;
|
||||||
|
while (dn < maxdn) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (dn->n_un.n_strx) {
|
||||||
|
dn->n_un.n_strx += fixnamoff;
|
||||||
|
}
|
||||||
|
switch(dn->n_type) {
|
||||||
|
case 0:
|
||||||
|
fixnamoff = newfixnamoff;
|
||||||
|
newfixnamoff += dn->n_value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case N_SO:
|
||||||
|
h->oh_nname++;
|
||||||
|
i = 0;
|
||||||
|
while (i < 3) {
|
||||||
|
while (stringtab[n->st_name] != 'B') n++;
|
||||||
|
if (! strcmp("Btext.text", &(stringtab[n->st_name]))) {
|
||||||
|
text_offset = n->st_value; i++;
|
||||||
|
}
|
||||||
|
else if (! strcmp("Bdata.data", &(stringtab[n->st_name]))) {
|
||||||
|
data_offset = n->st_value; i++;
|
||||||
|
}
|
||||||
|
else if (! strcmp("Bbss.bss", &(stringtab[n->st_name]))) {
|
||||||
|
bss_offset = n->st_value; i++;
|
||||||
|
}
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case N_GSYM:
|
||||||
|
h->oh_nname++;
|
||||||
|
/* Fortunately, we don't use this in ACK, so we don't
|
||||||
|
have to handle it here. The problem is that we don't know
|
||||||
|
which segment it comes from.
|
||||||
|
*/
|
||||||
|
break;
|
||||||
|
|
||||||
|
case N_STSYM:
|
||||||
|
h->oh_nname++;
|
||||||
|
dn->n_value += data_offset;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case N_LCSYM:
|
||||||
|
h->oh_nname++;
|
||||||
|
dn->n_value += bss_offset;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case N_FUN:
|
||||||
|
h->oh_nname++;
|
||||||
|
dn->n_value += text_offset;
|
||||||
|
fun_offset = dn->n_value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case N_MAIN:
|
||||||
|
dn->n_value += text_offset;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case N_LBRAC:
|
||||||
|
case N_RBRAC:
|
||||||
|
case N_SLINE:
|
||||||
|
h->oh_nname++;
|
||||||
|
dn->n_value += fun_offset;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case N_SOL:
|
||||||
|
case N_EINCL:
|
||||||
|
case N_BINCL:
|
||||||
|
case N_PSYM:
|
||||||
|
case N_SSYM:
|
||||||
|
case N_SCOPE:
|
||||||
|
case N_RSYM:
|
||||||
|
case N_LSYM:
|
||||||
|
h->oh_nname++;
|
||||||
|
/* Nothing to be done. */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
dn++;
|
||||||
|
}
|
||||||
|
hh = *h;
|
||||||
|
}
|
||||||
|
|
||||||
|
rd_name(nm, count)
|
||||||
|
struct outname *nm;
|
||||||
|
unsigned int count;
|
||||||
|
{
|
||||||
|
register struct nlist *dn = dbtab;
|
||||||
|
register struct outname *n = nm;
|
||||||
|
while (dn < maxdn) {
|
||||||
|
if (dn->n_type & N_STAB) {
|
||||||
|
n->on_type = dn->n_type << 8;
|
||||||
|
n->on_valu = dn->n_value;
|
||||||
|
n->on_desc = dn->n_desc;
|
||||||
|
if (dn->n_un.n_strx == 0) n->on_foff = 0;
|
||||||
|
else n->on_foff = OFF_CHAR(hh) + dn->n_un.n_strx;
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
dn++;
|
||||||
|
}
|
||||||
|
free(dbtab);
|
||||||
|
}
|
||||||
|
|
||||||
|
rd_string(nm, count)
|
||||||
|
char *nm;
|
||||||
|
long count;
|
||||||
|
{
|
||||||
|
memcpy(nm, dbstringtab, count);
|
||||||
|
}
|
||||||
|
|
||||||
|
rd_close()
|
||||||
|
{
|
||||||
|
elf_end(elf);
|
||||||
|
close(fildes);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -18,10 +18,12 @@
|
||||||
#include "scope.h"
|
#include "scope.h"
|
||||||
#include "type.h"
|
#include "type.h"
|
||||||
#include "expr.h"
|
#include "expr.h"
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
#define MAXARG 128
|
#define MAXARG 128
|
||||||
|
|
||||||
extern char *strncpy();
|
extern char *strncpy();
|
||||||
|
extern char *malloc();
|
||||||
extern struct idf *str2idf();
|
extern struct idf *str2idf();
|
||||||
|
|
||||||
extern char *AObj;
|
extern char *AObj;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include "scope.h"
|
#include "scope.h"
|
||||||
#include "tree.h"
|
#include "tree.h"
|
||||||
#include "operator.h"
|
#include "operator.h"
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
p_symbol currfile, listfile;
|
p_symbol currfile, listfile;
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include "position.h"
|
#include "position.h"
|
||||||
#include "file.h"
|
#include "file.h"
|
||||||
#include "idf.h"
|
#include "idf.h"
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
/* To centralize the declaration of %tokens, their presence in this
|
/* To centralize the declaration of %tokens, their presence in this
|
||||||
file is taken as their declaration. The Makefile will produce
|
file is taken as their declaration. The Makefile will produce
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include "langdep.h"
|
#include "langdep.h"
|
||||||
#include "type.h"
|
#include "type.h"
|
||||||
#include "expr.h"
|
#include "expr.h"
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
extern FILE *db_out;
|
extern FILE *db_out;
|
||||||
t_lineno currline;
|
t_lineno currline;
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include "scope.h"
|
#include "scope.h"
|
||||||
#include "langdep.h"
|
#include "langdep.h"
|
||||||
#include "expr.h"
|
#include "expr.h"
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
p_type int_type, char_type, short_type, long_type, bool_type;
|
p_type int_type, char_type, short_type, long_type, bool_type;
|
||||||
p_type uint_type, uchar_type, ushort_type, ulong_type;
|
p_type uint_type, uchar_type, ushort_type, ulong_type;
|
||||||
|
|
Loading…
Reference in a new issue