Added support for debugger, de-linted somewhat
This commit is contained in:
parent
eb1326e3ec
commit
41e3cf403b
17 changed files with 541 additions and 32 deletions
|
@ -89,6 +89,7 @@ scan.c
|
||||||
sizes.h
|
sizes.h
|
||||||
skip.c
|
skip.c
|
||||||
specials.h
|
specials.h
|
||||||
|
stab.c
|
||||||
stack.c
|
stack.c
|
||||||
stack.str
|
stack.str
|
||||||
statement.g
|
statement.g
|
||||||
|
|
|
@ -136,3 +136,7 @@
|
||||||
#undef REGCOUNT 1 /* count occurrences for register messages */
|
#undef REGCOUNT 1 /* count occurrences for register messages */
|
||||||
|
|
||||||
|
|
||||||
|
!File: dbsymtab.h
|
||||||
|
#define DBSYMTAB 1 /* ability to produce symbol table for debugger */
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -131,3 +131,7 @@
|
||||||
#undef REGCOUNT 1 /* count occurrences for register messages */
|
#undef REGCOUNT 1 /* count occurrences for register messages */
|
||||||
|
|
||||||
|
|
||||||
|
!File: dbsymtab.h
|
||||||
|
#undef DBSYMTAB 1 /* ability to produce symbol table for debugger */
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -83,7 +83,7 @@ CSRC = main.c idf.c declarator.c decspecs.c struct.c \
|
||||||
input.c domacro.c replace.c init.c options.c \
|
input.c domacro.c replace.c init.c options.c \
|
||||||
skip.c stack.c type.c ch3mon.c label.c eval.c \
|
skip.c stack.c type.c ch3mon.c label.c eval.c \
|
||||||
switch.c conversion.c util.c proto.c \
|
switch.c conversion.c util.c proto.c \
|
||||||
pragma.c blocks.c dataflow.c Version.c \
|
pragma.c blocks.c dataflow.c Version.c stab.c\
|
||||||
l_lint.c l_states.c l_misc.c l_ev_ord.c l_outdef.c l_comment.c l_dummy.c
|
l_lint.c l_states.c l_misc.c l_ev_ord.c l_outdef.c l_comment.c l_dummy.c
|
||||||
COBJ = main.o idf.o declarator.o decspecs.o struct.o \
|
COBJ = main.o idf.o declarator.o decspecs.o struct.o \
|
||||||
expr.o ch3.o ch3bin.o cstoper.o fltcstoper.o arith.o \
|
expr.o ch3.o ch3bin.o cstoper.o fltcstoper.o arith.o \
|
||||||
|
@ -92,7 +92,7 @@ COBJ = main.o idf.o declarator.o decspecs.o struct.o \
|
||||||
input.o domacro.o replace.o init.o options.o \
|
input.o domacro.o replace.o init.o options.o \
|
||||||
skip.o stack.o type.o ch3mon.o label.o eval.o \
|
skip.o stack.o type.o ch3mon.o label.o eval.o \
|
||||||
switch.o conversion.o util.o proto.o \
|
switch.o conversion.o util.o proto.o \
|
||||||
pragma.o blocks.o dataflow.o Version.o \
|
pragma.o blocks.o dataflow.o Version.o stab.o \
|
||||||
l_lint.o l_states.o l_misc.o l_ev_ord.o l_outdef.o l_comment.o l_dummy.o
|
l_lint.o l_states.o l_misc.o l_ev_ord.o l_outdef.o l_comment.o l_dummy.o
|
||||||
|
|
||||||
# Objects of other generated C files
|
# Objects of other generated C files
|
||||||
|
@ -281,6 +281,8 @@ main.o: LLlex.h
|
||||||
main.o: Lpars.h
|
main.o: Lpars.h
|
||||||
main.o: align.h
|
main.o: align.h
|
||||||
main.o: arith.h
|
main.o: arith.h
|
||||||
|
main.o: assert.h
|
||||||
|
main.o: dbsymtab.h
|
||||||
main.o: debug.h
|
main.o: debug.h
|
||||||
main.o: declar.h
|
main.o: declar.h
|
||||||
main.o: file_info.h
|
main.o: file_info.h
|
||||||
|
@ -307,6 +309,7 @@ idf.o: align.h
|
||||||
idf.o: arith.h
|
idf.o: arith.h
|
||||||
idf.o: assert.h
|
idf.o: assert.h
|
||||||
idf.o: botch_free.h
|
idf.o: botch_free.h
|
||||||
|
idf.o: dbsymtab.h
|
||||||
idf.o: debug.h
|
idf.o: debug.h
|
||||||
idf.o: declar.h
|
idf.o: declar.h
|
||||||
idf.o: decspecs.h
|
idf.o: decspecs.h
|
||||||
|
@ -332,6 +335,7 @@ idf.o: type.h
|
||||||
declarator.o: Lpars.h
|
declarator.o: Lpars.h
|
||||||
declarator.o: arith.h
|
declarator.o: arith.h
|
||||||
declarator.o: botch_free.h
|
declarator.o: botch_free.h
|
||||||
|
declarator.o: dbsymtab.h
|
||||||
declarator.o: debug.h
|
declarator.o: debug.h
|
||||||
declarator.o: declar.h
|
declarator.o: declar.h
|
||||||
declarator.o: def.h
|
declarator.o: def.h
|
||||||
|
@ -351,6 +355,7 @@ declarator.o: type.h
|
||||||
decspecs.o: Lpars.h
|
decspecs.o: Lpars.h
|
||||||
decspecs.o: arith.h
|
decspecs.o: arith.h
|
||||||
decspecs.o: assert.h
|
decspecs.o: assert.h
|
||||||
|
decspecs.o: dbsymtab.h
|
||||||
decspecs.o: debug.h
|
decspecs.o: debug.h
|
||||||
decspecs.o: decspecs.h
|
decspecs.o: decspecs.h
|
||||||
decspecs.o: def.h
|
decspecs.o: def.h
|
||||||
|
@ -365,6 +370,7 @@ struct.o: align.h
|
||||||
struct.o: arith.h
|
struct.o: arith.h
|
||||||
struct.o: assert.h
|
struct.o: assert.h
|
||||||
struct.o: botch_free.h
|
struct.o: botch_free.h
|
||||||
|
struct.o: dbsymtab.h
|
||||||
struct.o: debug.h
|
struct.o: debug.h
|
||||||
struct.o: def.h
|
struct.o: def.h
|
||||||
struct.o: field.h
|
struct.o: field.h
|
||||||
|
@ -387,6 +393,7 @@ expr.o: Lpars.h
|
||||||
expr.o: arith.h
|
expr.o: arith.h
|
||||||
expr.o: assert.h
|
expr.o: assert.h
|
||||||
expr.o: botch_free.h
|
expr.o: botch_free.h
|
||||||
|
expr.o: dbsymtab.h
|
||||||
expr.o: debug.h
|
expr.o: debug.h
|
||||||
expr.o: declar.h
|
expr.o: declar.h
|
||||||
expr.o: decspecs.h
|
expr.o: decspecs.h
|
||||||
|
@ -408,6 +415,7 @@ expr.o: use_tmp.h
|
||||||
ch3.o: Lpars.h
|
ch3.o: Lpars.h
|
||||||
ch3.o: arith.h
|
ch3.o: arith.h
|
||||||
ch3.o: assert.h
|
ch3.o: assert.h
|
||||||
|
ch3.o: dbsymtab.h
|
||||||
ch3.o: debug.h
|
ch3.o: debug.h
|
||||||
ch3.o: def.h
|
ch3.o: def.h
|
||||||
ch3.o: expr.h
|
ch3.o: expr.h
|
||||||
|
@ -424,6 +432,7 @@ ch3.o: type.h
|
||||||
ch3bin.o: Lpars.h
|
ch3bin.o: Lpars.h
|
||||||
ch3bin.o: arith.h
|
ch3bin.o: arith.h
|
||||||
ch3bin.o: botch_free.h
|
ch3bin.o: botch_free.h
|
||||||
|
ch3bin.o: dbsymtab.h
|
||||||
ch3bin.o: debug.h
|
ch3bin.o: debug.h
|
||||||
ch3bin.o: expr.h
|
ch3bin.o: expr.h
|
||||||
ch3bin.o: idf.h
|
ch3bin.o: idf.h
|
||||||
|
@ -440,6 +449,7 @@ ch3bin.o: type.h
|
||||||
cstoper.o: Lpars.h
|
cstoper.o: Lpars.h
|
||||||
cstoper.o: arith.h
|
cstoper.o: arith.h
|
||||||
cstoper.o: assert.h
|
cstoper.o: assert.h
|
||||||
|
cstoper.o: dbsymtab.h
|
||||||
cstoper.o: debug.h
|
cstoper.o: debug.h
|
||||||
cstoper.o: expr.h
|
cstoper.o: expr.h
|
||||||
cstoper.o: idf.h
|
cstoper.o: idf.h
|
||||||
|
@ -454,6 +464,7 @@ cstoper.o: type.h
|
||||||
fltcstoper.o: Lpars.h
|
fltcstoper.o: Lpars.h
|
||||||
fltcstoper.o: arith.h
|
fltcstoper.o: arith.h
|
||||||
fltcstoper.o: assert.h
|
fltcstoper.o: assert.h
|
||||||
|
fltcstoper.o: dbsymtab.h
|
||||||
fltcstoper.o: debug.h
|
fltcstoper.o: debug.h
|
||||||
fltcstoper.o: expr.h
|
fltcstoper.o: expr.h
|
||||||
fltcstoper.o: idf.h
|
fltcstoper.o: idf.h
|
||||||
|
@ -468,6 +479,7 @@ fltcstoper.o: type.h
|
||||||
arith.o: Lpars.h
|
arith.o: Lpars.h
|
||||||
arith.o: arith.h
|
arith.o: arith.h
|
||||||
arith.o: assert.h
|
arith.o: assert.h
|
||||||
|
arith.o: dbsymtab.h
|
||||||
arith.o: debug.h
|
arith.o: debug.h
|
||||||
arith.o: expr.h
|
arith.o: expr.h
|
||||||
arith.o: field.h
|
arith.o: field.h
|
||||||
|
@ -490,6 +502,7 @@ code.o: atw.h
|
||||||
code.o: botch_free.h
|
code.o: botch_free.h
|
||||||
code.o: code.h
|
code.o: code.h
|
||||||
code.o: dataflow.h
|
code.o: dataflow.h
|
||||||
|
code.o: dbsymtab.h
|
||||||
code.o: debug.h
|
code.o: debug.h
|
||||||
code.o: declar.h
|
code.o: declar.h
|
||||||
code.o: decspecs.h
|
code.o: decspecs.h
|
||||||
|
@ -514,6 +527,7 @@ code.o: type.h
|
||||||
code.o: use_tmp.h
|
code.o: use_tmp.h
|
||||||
dumpidf.o: Lpars.h
|
dumpidf.o: Lpars.h
|
||||||
dumpidf.o: arith.h
|
dumpidf.o: arith.h
|
||||||
|
dumpidf.o: dbsymtab.h
|
||||||
dumpidf.o: debug.h
|
dumpidf.o: debug.h
|
||||||
dumpidf.o: declar.h
|
dumpidf.o: declar.h
|
||||||
dumpidf.o: def.h
|
dumpidf.o: def.h
|
||||||
|
@ -547,6 +561,7 @@ field.o: align.h
|
||||||
field.o: arith.h
|
field.o: arith.h
|
||||||
field.o: assert.h
|
field.o: assert.h
|
||||||
field.o: code.h
|
field.o: code.h
|
||||||
|
field.o: dbsymtab.h
|
||||||
field.o: debug.h
|
field.o: debug.h
|
||||||
field.o: expr.h
|
field.o: expr.h
|
||||||
field.o: field.h
|
field.o: field.h
|
||||||
|
@ -647,6 +662,7 @@ options.o: arith.h
|
||||||
options.o: botch_free.h
|
options.o: botch_free.h
|
||||||
options.o: class.h
|
options.o: class.h
|
||||||
options.o: dataflow.h
|
options.o: dataflow.h
|
||||||
|
options.o: dbsymtab.h
|
||||||
options.o: idf.h
|
options.o: idf.h
|
||||||
options.o: idfsize.h
|
options.o: idfsize.h
|
||||||
options.o: lint.h
|
options.o: lint.h
|
||||||
|
@ -668,6 +684,7 @@ skip.o: spec_arith.h
|
||||||
stack.o: Lpars.h
|
stack.o: Lpars.h
|
||||||
stack.o: arith.h
|
stack.o: arith.h
|
||||||
stack.o: botch_free.h
|
stack.o: botch_free.h
|
||||||
|
stack.o: dbsymtab.h
|
||||||
stack.o: debug.h
|
stack.o: debug.h
|
||||||
stack.o: def.h
|
stack.o: def.h
|
||||||
stack.o: idf.h
|
stack.o: idf.h
|
||||||
|
@ -684,6 +701,7 @@ type.o: Lpars.h
|
||||||
type.o: align.h
|
type.o: align.h
|
||||||
type.o: arith.h
|
type.o: arith.h
|
||||||
type.o: botch_free.h
|
type.o: botch_free.h
|
||||||
|
type.o: dbsymtab.h
|
||||||
type.o: debug.h
|
type.o: debug.h
|
||||||
type.o: decspecs.h
|
type.o: decspecs.h
|
||||||
type.o: def.h
|
type.o: def.h
|
||||||
|
@ -700,6 +718,7 @@ type.o: type.h
|
||||||
ch3mon.o: Lpars.h
|
ch3mon.o: Lpars.h
|
||||||
ch3mon.o: arith.h
|
ch3mon.o: arith.h
|
||||||
ch3mon.o: botch_free.h
|
ch3mon.o: botch_free.h
|
||||||
|
ch3mon.o: dbsymtab.h
|
||||||
ch3mon.o: debug.h
|
ch3mon.o: debug.h
|
||||||
ch3mon.o: def.h
|
ch3mon.o: def.h
|
||||||
ch3mon.o: expr.h
|
ch3mon.o: expr.h
|
||||||
|
@ -715,6 +734,7 @@ ch3mon.o: trgt_sizes.h
|
||||||
ch3mon.o: type.h
|
ch3mon.o: type.h
|
||||||
label.o: Lpars.h
|
label.o: Lpars.h
|
||||||
label.o: arith.h
|
label.o: arith.h
|
||||||
|
label.o: dbsymtab.h
|
||||||
label.o: def.h
|
label.o: def.h
|
||||||
label.o: idf.h
|
label.o: idf.h
|
||||||
label.o: label.h
|
label.o: label.h
|
||||||
|
@ -731,6 +751,7 @@ eval.o: assert.h
|
||||||
eval.o: atw.h
|
eval.o: atw.h
|
||||||
eval.o: code.h
|
eval.o: code.h
|
||||||
eval.o: dataflow.h
|
eval.o: dataflow.h
|
||||||
|
eval.o: dbsymtab.h
|
||||||
eval.o: debug.h
|
eval.o: debug.h
|
||||||
eval.o: def.h
|
eval.o: def.h
|
||||||
eval.o: expr.h
|
eval.o: expr.h
|
||||||
|
@ -753,6 +774,7 @@ switch.o: arith.h
|
||||||
switch.o: assert.h
|
switch.o: assert.h
|
||||||
switch.o: botch_free.h
|
switch.o: botch_free.h
|
||||||
switch.o: code.h
|
switch.o: code.h
|
||||||
|
switch.o: dbsymtab.h
|
||||||
switch.o: debug.h
|
switch.o: debug.h
|
||||||
switch.o: density.h
|
switch.o: density.h
|
||||||
switch.o: expr.h
|
switch.o: expr.h
|
||||||
|
@ -768,6 +790,7 @@ switch.o: trgt_sizes.h
|
||||||
switch.o: type.h
|
switch.o: type.h
|
||||||
conversion.o: Lpars.h
|
conversion.o: Lpars.h
|
||||||
conversion.o: arith.h
|
conversion.o: arith.h
|
||||||
|
conversion.o: dbsymtab.h
|
||||||
conversion.o: lint.h
|
conversion.o: lint.h
|
||||||
conversion.o: nobitfield.h
|
conversion.o: nobitfield.h
|
||||||
conversion.o: nocross.h
|
conversion.o: nocross.h
|
||||||
|
@ -792,6 +815,7 @@ proto.o: align.h
|
||||||
proto.o: arith.h
|
proto.o: arith.h
|
||||||
proto.o: assert.h
|
proto.o: assert.h
|
||||||
proto.o: botch_free.h
|
proto.o: botch_free.h
|
||||||
|
proto.o: dbsymtab.h
|
||||||
proto.o: debug.h
|
proto.o: debug.h
|
||||||
proto.o: declar.h
|
proto.o: declar.h
|
||||||
proto.o: decspecs.h
|
proto.o: decspecs.h
|
||||||
|
@ -827,11 +851,26 @@ blocks.o: spec_arith.h
|
||||||
blocks.o: stack.h
|
blocks.o: stack.h
|
||||||
blocks.o: trgt_sizes.h
|
blocks.o: trgt_sizes.h
|
||||||
dataflow.o: dataflow.h
|
dataflow.o: dataflow.h
|
||||||
|
stab.o: LLlex.h
|
||||||
|
stab.o: Lpars.h
|
||||||
|
stab.o: dbsymtab.h
|
||||||
|
stab.o: def.h
|
||||||
|
stab.o: field.h
|
||||||
|
stab.o: file_info.h
|
||||||
|
stab.o: idf.h
|
||||||
|
stab.o: level.h
|
||||||
|
stab.o: lint.h
|
||||||
|
stab.o: nobitfield.h
|
||||||
|
stab.o: nopp.h
|
||||||
|
stab.o: stack.h
|
||||||
|
stab.o: struct.h
|
||||||
|
stab.o: type.h
|
||||||
l_lint.o: LLlex.h
|
l_lint.o: LLlex.h
|
||||||
l_lint.o: Lpars.h
|
l_lint.o: Lpars.h
|
||||||
l_lint.o: arith.h
|
l_lint.o: arith.h
|
||||||
l_lint.o: assert.h
|
l_lint.o: assert.h
|
||||||
l_lint.o: code.h
|
l_lint.o: code.h
|
||||||
|
l_lint.o: dbsymtab.h
|
||||||
l_lint.o: debug.h
|
l_lint.o: debug.h
|
||||||
l_lint.o: def.h
|
l_lint.o: def.h
|
||||||
l_lint.o: expr.h
|
l_lint.o: expr.h
|
||||||
|
@ -854,6 +893,7 @@ l_states.o: Lpars.h
|
||||||
l_states.o: arith.h
|
l_states.o: arith.h
|
||||||
l_states.o: assert.h
|
l_states.o: assert.h
|
||||||
l_states.o: code.h
|
l_states.o: code.h
|
||||||
|
l_states.o: dbsymtab.h
|
||||||
l_states.o: debug.h
|
l_states.o: debug.h
|
||||||
l_states.o: def.h
|
l_states.o: def.h
|
||||||
l_states.o: expr.h
|
l_states.o: expr.h
|
||||||
|
@ -877,6 +917,7 @@ l_misc.o: LLlex.h
|
||||||
l_misc.o: Lpars.h
|
l_misc.o: Lpars.h
|
||||||
l_misc.o: arith.h
|
l_misc.o: arith.h
|
||||||
l_misc.o: code.h
|
l_misc.o: code.h
|
||||||
|
l_misc.o: dbsymtab.h
|
||||||
l_misc.o: debug.h
|
l_misc.o: debug.h
|
||||||
l_misc.o: def.h
|
l_misc.o: def.h
|
||||||
l_misc.o: expr.h
|
l_misc.o: expr.h
|
||||||
|
@ -897,6 +938,7 @@ l_ev_ord.o: Lpars.h
|
||||||
l_ev_ord.o: arith.h
|
l_ev_ord.o: arith.h
|
||||||
l_ev_ord.o: assert.h
|
l_ev_ord.o: assert.h
|
||||||
l_ev_ord.o: code.h
|
l_ev_ord.o: code.h
|
||||||
|
l_ev_ord.o: dbsymtab.h
|
||||||
l_ev_ord.o: debug.h
|
l_ev_ord.o: debug.h
|
||||||
l_ev_ord.o: def.h
|
l_ev_ord.o: def.h
|
||||||
l_ev_ord.o: expr.h
|
l_ev_ord.o: expr.h
|
||||||
|
@ -918,6 +960,7 @@ l_outdef.o: Lpars.h
|
||||||
l_outdef.o: arith.h
|
l_outdef.o: arith.h
|
||||||
l_outdef.o: assert.h
|
l_outdef.o: assert.h
|
||||||
l_outdef.o: code.h
|
l_outdef.o: code.h
|
||||||
|
l_outdef.o: dbsymtab.h
|
||||||
l_outdef.o: debug.h
|
l_outdef.o: debug.h
|
||||||
l_outdef.o: def.h
|
l_outdef.o: def.h
|
||||||
l_outdef.o: expr.h
|
l_outdef.o: expr.h
|
||||||
|
@ -953,6 +996,7 @@ declar.o: LLlex.h
|
||||||
declar.o: Lpars.h
|
declar.o: Lpars.h
|
||||||
declar.o: arith.h
|
declar.o: arith.h
|
||||||
declar.o: code.h
|
declar.o: code.h
|
||||||
|
declar.o: dbsymtab.h
|
||||||
declar.o: debug.h
|
declar.o: debug.h
|
||||||
declar.o: declar.h
|
declar.o: declar.h
|
||||||
declar.o: decspecs.h
|
declar.o: decspecs.h
|
||||||
|
@ -980,6 +1024,7 @@ statement.o: Lpars.h
|
||||||
statement.o: arith.h
|
statement.o: arith.h
|
||||||
statement.o: botch_free.h
|
statement.o: botch_free.h
|
||||||
statement.o: code.h
|
statement.o: code.h
|
||||||
|
statement.o: dbsymtab.h
|
||||||
statement.o: debug.h
|
statement.o: debug.h
|
||||||
statement.o: def.h
|
statement.o: def.h
|
||||||
statement.o: expr.h
|
statement.o: expr.h
|
||||||
|
@ -998,6 +1043,7 @@ expression.o: LLlex.h
|
||||||
expression.o: Lpars.h
|
expression.o: Lpars.h
|
||||||
expression.o: arith.h
|
expression.o: arith.h
|
||||||
expression.o: code.h
|
expression.o: code.h
|
||||||
|
expression.o: dbsymtab.h
|
||||||
expression.o: debug.h
|
expression.o: debug.h
|
||||||
expression.o: expr.h
|
expression.o: expr.h
|
||||||
expression.o: file_info.h
|
expression.o: file_info.h
|
||||||
|
@ -1015,6 +1061,7 @@ program.o: LLlex.h
|
||||||
program.o: Lpars.h
|
program.o: Lpars.h
|
||||||
program.o: arith.h
|
program.o: arith.h
|
||||||
program.o: code.h
|
program.o: code.h
|
||||||
|
program.o: dbsymtab.h
|
||||||
program.o: debug.h
|
program.o: debug.h
|
||||||
program.o: declar.h
|
program.o: declar.h
|
||||||
program.o: decspecs.h
|
program.o: decspecs.h
|
||||||
|
@ -1034,6 +1081,7 @@ ival.o: LLlex.h
|
||||||
ival.o: Lpars.h
|
ival.o: Lpars.h
|
||||||
ival.o: arith.h
|
ival.o: arith.h
|
||||||
ival.o: assert.h
|
ival.o: assert.h
|
||||||
|
ival.o: dbsymtab.h
|
||||||
ival.o: debug.h
|
ival.o: debug.h
|
||||||
ival.o: def.h
|
ival.o: def.h
|
||||||
ival.o: estack.h
|
ival.o: estack.h
|
||||||
|
|
|
@ -136,3 +136,7 @@
|
||||||
#undef REGCOUNT 1 /* count occurrences for register messages */
|
#undef REGCOUNT 1 /* count occurrences for register messages */
|
||||||
|
|
||||||
|
|
||||||
|
!File: dbsymtab.h
|
||||||
|
#undef DBSYMTAB 1 /* ability to produce symbol table for debugger */
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,8 @@ the same as \fB\-D\fIname\fR=1.
|
||||||
insert \fIdirname\fR in the list of include directories.
|
insert \fIdirname\fR in the list of include directories.
|
||||||
.IP \fB\-M\fP\fIn\fP
|
.IP \fB\-M\fP\fIn\fP
|
||||||
set maximum identifier length to \fIn\fP.
|
set maximum identifier length to \fIn\fP.
|
||||||
|
.IP \fB\-g\fP
|
||||||
|
produce a DBX-style symbol table.
|
||||||
.IP \fB\-n\fR
|
.IP \fB\-n\fR
|
||||||
do not generate EM register messages.
|
do not generate EM register messages.
|
||||||
The user-declared variables are not stored into registers on the target
|
The user-declared variables are not stored into registers on the target
|
||||||
|
|
|
@ -7,7 +7,8 @@
|
||||||
|
|
||||||
#include "lint.h"
|
#include "lint.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include <em.h>
|
#include "dbsymtab.h"
|
||||||
|
#include <em_code.h>
|
||||||
#include "botch_free.h"
|
#include "botch_free.h"
|
||||||
#include <alloc.h>
|
#include <alloc.h>
|
||||||
#include "dataflow.h"
|
#include "dataflow.h"
|
||||||
|
@ -34,6 +35,9 @@
|
||||||
#ifdef LINT
|
#ifdef LINT
|
||||||
#include "l_lint.h"
|
#include "l_lint.h"
|
||||||
#endif LINT
|
#endif LINT
|
||||||
|
#ifdef DBSYMTAB
|
||||||
|
#include <stb.h>
|
||||||
|
#endif /* DBSYMTAB */
|
||||||
|
|
||||||
label lab_count = 1;
|
label lab_count = 1;
|
||||||
label datlab_count = 1;
|
label datlab_count = 1;
|
||||||
|
@ -53,6 +57,7 @@ static int pro_id;
|
||||||
|
|
||||||
extern char options[];
|
extern char options[];
|
||||||
extern char *symbol2str();
|
extern char *symbol2str();
|
||||||
|
extern char *source;
|
||||||
|
|
||||||
#ifndef LINT
|
#ifndef LINT
|
||||||
init_code(dst_file)
|
init_code(dst_file)
|
||||||
|
@ -66,6 +71,23 @@ init_code(dst_file)
|
||||||
fatal("cannot write to %s\n", dst_file);
|
fatal("cannot write to %s\n", dst_file);
|
||||||
C_magic();
|
C_magic();
|
||||||
C_ms_emx(word_size, pointer_size);
|
C_ms_emx(word_size, pointer_size);
|
||||||
|
#ifdef DBSYMTAB
|
||||||
|
if (options['g']) {
|
||||||
|
C_ms_std(source, N_SO, 0);
|
||||||
|
stb_typedef(int_type, "int");
|
||||||
|
stb_typedef(schar_type, "char");
|
||||||
|
stb_typedef(long_type, "long");
|
||||||
|
stb_typedef(short_type, "short");
|
||||||
|
stb_typedef(uchar_type, "unsigned char");
|
||||||
|
stb_typedef(ushort_type, "unsigned short");
|
||||||
|
stb_typedef(ulong_type, "unsigned long");
|
||||||
|
stb_typedef(uint_type, "unsigned int");
|
||||||
|
stb_typedef(float_type, "float");
|
||||||
|
stb_typedef(double_type, "double");
|
||||||
|
stb_typedef(lngdbl_type, "long double");
|
||||||
|
stb_typedef(void_type, "void");
|
||||||
|
}
|
||||||
|
#endif /* DBSYMTAB */
|
||||||
#ifdef USE_TMP
|
#ifdef USE_TMP
|
||||||
#ifdef PREPEND_SCOPES
|
#ifdef PREPEND_SCOPES
|
||||||
C_insertpart(tmp_id = C_getid());
|
C_insertpart(tmp_id = C_getid());
|
||||||
|
@ -139,11 +161,10 @@ prepend_scopes()
|
||||||
C_beginpart(tmp_id);
|
C_beginpart(tmp_id);
|
||||||
#endif USE_TMP
|
#endif USE_TMP
|
||||||
while (se != 0) {
|
while (se != 0) {
|
||||||
register struct idf *id = se->se_idf;
|
register struct def *df = se->se_idf->id_def;
|
||||||
register struct def *df = id->id_def;
|
|
||||||
|
|
||||||
if (df && (df->df_initialized || df->df_used || df->df_alloc)) {
|
if (df && (df->df_initialized || df->df_used || df->df_alloc)) {
|
||||||
code_scope(id->id_text, df);
|
code_scope(se->se_idf->id_text, df);
|
||||||
}
|
}
|
||||||
se = se->next;
|
se = se->next;
|
||||||
}
|
}
|
||||||
|
@ -272,6 +293,14 @@ begin_proc(ds, idf) /* to be called when entering a procedure */
|
||||||
C_fil_dlb(file_name_label, (arith)0);
|
C_fil_dlb(file_name_label, (arith)0);
|
||||||
C_lin((arith)LineNumber);
|
C_lin((arith)LineNumber);
|
||||||
}
|
}
|
||||||
|
#ifdef DBSYMTAB
|
||||||
|
if (options['g']) {
|
||||||
|
stb_string(def, FUNCTION, name);
|
||||||
|
if (! strcmp(name, "main")) {
|
||||||
|
C_ms_stb_cst(name, N_MAIN, 0, (arith) 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
end_proc(fbytes)
|
end_proc(fbytes)
|
||||||
|
@ -403,8 +432,14 @@ code_declaration(idf, expr, lvl, sc)
|
||||||
int fund = def->df_type->tp_fund;
|
int fund = def->df_type->tp_fund;
|
||||||
int def_sc = def->df_sc;
|
int def_sc = def->df_sc;
|
||||||
|
|
||||||
if (def_sc == TYPEDEF) /* no code for typedefs */
|
if (def_sc == TYPEDEF) { /* no code for typedefs */
|
||||||
|
#ifdef DBSYMTAB
|
||||||
|
if (options['g']) {
|
||||||
|
stb_typedef(def->df_type, idf->id_text);
|
||||||
|
}
|
||||||
|
#endif /* DBSYMTAB */
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if (lvl == L_GLOBAL) { /* global variable */
|
if (lvl == L_GLOBAL) { /* global variable */
|
||||||
/* is this an allocating declaration? */
|
/* is this an allocating declaration? */
|
||||||
if ( (sc == 0 || sc == STATIC)
|
if ( (sc == 0 || sc == STATIC)
|
||||||
|
@ -421,6 +456,11 @@ code_declaration(idf, expr, lvl, sc)
|
||||||
code_scope(idf->id_text, def);
|
code_scope(idf->id_text, def);
|
||||||
#endif PREPEND_SCOPES
|
#endif PREPEND_SCOPES
|
||||||
def->df_alloc = ALLOC_DONE;
|
def->df_alloc = ALLOC_DONE;
|
||||||
|
#ifdef DBSYMTAB
|
||||||
|
if (options['g']) {
|
||||||
|
stb_string(def, sc, idf->id_text);
|
||||||
|
}
|
||||||
|
#endif /* DBSYMTAB */
|
||||||
C_df_dnam(idf->id_text);
|
C_df_dnam(idf->id_text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -436,6 +476,11 @@ code_declaration(idf, expr, lvl, sc)
|
||||||
/* they are handled on the spot and get an
|
/* they are handled on the spot and get an
|
||||||
integer label in EM.
|
integer label in EM.
|
||||||
*/
|
*/
|
||||||
|
#ifdef DBSYMTAB
|
||||||
|
if (options['g']) {
|
||||||
|
stb_string(def, sc, idf->id_text);
|
||||||
|
}
|
||||||
|
#endif /* DBSYMTAB */
|
||||||
C_df_dlb((label)def->df_address);
|
C_df_dlb((label)def->df_address);
|
||||||
if (expr) { /* there is an initialisation */
|
if (expr) { /* there is an initialisation */
|
||||||
}
|
}
|
||||||
|
@ -457,6 +502,11 @@ code_declaration(idf, expr, lvl, sc)
|
||||||
break;
|
break;
|
||||||
case AUTO:
|
case AUTO:
|
||||||
case REGISTER:
|
case REGISTER:
|
||||||
|
#ifdef DBSYMTAB
|
||||||
|
if (options['g']) {
|
||||||
|
stb_string(def, sc, idf->id_text);
|
||||||
|
}
|
||||||
|
#endif /* DBSYMTAB */
|
||||||
if (expr)
|
if (expr)
|
||||||
loc_init(expr, idf);
|
loc_init(expr, idf);
|
||||||
else if ((fund == ARRAY)
|
else if ((fund == ARRAY)
|
||||||
|
@ -474,32 +524,33 @@ code_declaration(idf, expr, lvl, sc)
|
||||||
|
|
||||||
loc_init(expr, id)
|
loc_init(expr, id)
|
||||||
struct expr *expr;
|
struct expr *expr;
|
||||||
register struct idf *id;
|
struct idf *id;
|
||||||
{
|
{
|
||||||
/* loc_init() generates code for the assignment of
|
/* loc_init() generates code for the assignment of
|
||||||
expression expr to the local variable described by id.
|
expression expr to the local variable described by id.
|
||||||
It frees the expression afterwards.
|
It frees the expression afterwards.
|
||||||
*/
|
*/
|
||||||
register struct expr *e = expr;
|
register struct expr *e = expr;
|
||||||
register struct type *tp = id->id_def->df_type;
|
register struct def *df = id->id_def;
|
||||||
|
register struct type *tp = df->df_type;
|
||||||
static arith tmpoffset = 0;
|
static arith tmpoffset = 0;
|
||||||
static arith unknownsize = 0;
|
static arith unknownsize = 0;
|
||||||
|
|
||||||
ASSERT(id->id_def->df_sc != STATIC);
|
ASSERT(df->df_sc != STATIC);
|
||||||
switch (tp->tp_fund) {
|
switch (tp->tp_fund) {
|
||||||
case ARRAY:
|
case ARRAY:
|
||||||
if (id->id_def->df_type->tp_size == (arith) -1)
|
if (tp->tp_size == (arith) -1)
|
||||||
unknownsize = 1;
|
unknownsize = 1;
|
||||||
case STRUCT:
|
case STRUCT:
|
||||||
case UNION:
|
case UNION:
|
||||||
if (expr != (struct expr *) 0) {
|
if (e != (struct expr *) 0) {
|
||||||
break; /* switch */
|
break; /* switch */
|
||||||
} else if (!tmpoffset) {/* first time for this variable */
|
} else if (!tmpoffset) {/* first time for this variable */
|
||||||
tmpoffset = id->id_def->df_address;
|
tmpoffset = df->df_address;
|
||||||
id->id_def->df_address = data_label();
|
df->df_address = data_label();
|
||||||
C_df_dlb((label)id->id_def->df_address);
|
C_df_dlb((label)df->df_address);
|
||||||
} else {
|
} else {
|
||||||
C_lae_dlb((label)id->id_def->df_address, (arith)0);
|
C_lae_dlb((label)df->df_address, (arith)0);
|
||||||
load_block(tp->tp_size, 1);
|
load_block(tp->tp_size, 1);
|
||||||
if (unknownsize) {
|
if (unknownsize) {
|
||||||
/* tmpoffset += tp->tp_size; */
|
/* tmpoffset += tp->tp_size; */
|
||||||
|
@ -508,13 +559,19 @@ loc_init(expr, id)
|
||||||
tmpoffset = NewLocal(tp->tp_size
|
tmpoffset = NewLocal(tp->tp_size
|
||||||
, tp->tp_align
|
, tp->tp_align
|
||||||
, regtype(tp)
|
, regtype(tp)
|
||||||
, id->id_def->df_sc);
|
, df->df_sc);
|
||||||
}
|
}
|
||||||
C_lal(tmpoffset);
|
C_lal(tmpoffset);
|
||||||
store_block(tp->tp_size, 1);
|
store_block(tp->tp_size, 1);
|
||||||
id->id_def->df_address = tmpoffset;
|
df->df_address = tmpoffset;
|
||||||
tmpoffset = 0;
|
tmpoffset = 0;
|
||||||
}
|
}
|
||||||
|
#ifdef DBSYMTAB
|
||||||
|
if (options['g']) {
|
||||||
|
stb_string(df, AUTO, id->id_text);
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif /* DBSYMTAB */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (ISCOMMA(e)) { /* embraced: int i = {12}; */
|
if (ISCOMMA(e)) { /* embraced: int i = {12}; */
|
||||||
|
@ -536,7 +593,7 @@ loc_init(expr, id)
|
||||||
store_val(&vl, tp);
|
store_val(&vl, tp);
|
||||||
}
|
}
|
||||||
#else LINT
|
#else LINT
|
||||||
id->id_def->df_set = 1;
|
df->df_set = 1;
|
||||||
#endif LINT
|
#endif LINT
|
||||||
free_expression(expr);
|
free_expression(expr);
|
||||||
}
|
}
|
||||||
|
@ -547,12 +604,18 @@ bss(idf)
|
||||||
{
|
{
|
||||||
/* bss() allocates bss space for the global idf.
|
/* bss() allocates bss space for the global idf.
|
||||||
*/
|
*/
|
||||||
|
register struct def *df = idf->id_def;
|
||||||
|
|
||||||
#ifndef PREPEND_SCOPES
|
#ifndef PREPEND_SCOPES
|
||||||
code_scope(idf->id_text, idf->id_def);
|
code_scope(idf->id_text, df);
|
||||||
#endif PREPEND_SCOPES
|
#endif PREPEND_SCOPES
|
||||||
|
#ifdef DBSYMTAB
|
||||||
|
if (options['g']) {
|
||||||
|
stb_string(df, df->df_sc, idf->id_text);
|
||||||
|
}
|
||||||
|
#endif /* DBSYMTAB */
|
||||||
C_df_dnam(idf->id_text);
|
C_df_dnam(idf->id_text);
|
||||||
C_bss_cst(ATW(idf->id_def->df_type->tp_size), (arith)0, 1);
|
C_bss_cst(ATW(df->df_type->tp_size), (arith)0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
formal_cvt(hasproto,df)
|
formal_cvt(hasproto,df)
|
||||||
|
@ -596,6 +659,9 @@ code_expr(expr, val, code, tlbl, flbl)
|
||||||
#ifndef LINT
|
#ifndef LINT
|
||||||
if (! options['L']) /* profiling */
|
if (! options['L']) /* profiling */
|
||||||
C_lin((arith)(expr->ex_line));
|
C_lin((arith)(expr->ex_line));
|
||||||
|
#ifdef DBSYMTAB
|
||||||
|
if (options['g']) db_line(expr->ex_file, (int)expr->ex_line);
|
||||||
|
#endif
|
||||||
|
|
||||||
EVAL(expr, val, code, tlbl, flbl);
|
EVAL(expr, val, code, tlbl, flbl);
|
||||||
#else LINT
|
#else LINT
|
||||||
|
@ -690,3 +756,19 @@ prc_exit()
|
||||||
C_asp(pointer_size);
|
C_asp(pointer_size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DBSYMTAB
|
||||||
|
db_line(file, line)
|
||||||
|
char *file;
|
||||||
|
int line;
|
||||||
|
{
|
||||||
|
static int oldline;
|
||||||
|
static char *oldfile;
|
||||||
|
|
||||||
|
if (file != oldfile || line != oldline) {
|
||||||
|
C_ms_std((char *) 0, N_SLINE, line);
|
||||||
|
oldline = line;
|
||||||
|
oldfile = file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
{
|
{
|
||||||
#include "lint.h"
|
#include "lint.h"
|
||||||
|
#include "dbsymtab.h"
|
||||||
#include <alloc.h>
|
#include <alloc.h>
|
||||||
#include "nobitfield.h"
|
#include "nobitfield.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
@ -31,6 +32,8 @@
|
||||||
#include "l_lint.h"
|
#include "l_lint.h"
|
||||||
#include "l_state.h"
|
#include "l_state.h"
|
||||||
#endif LINT
|
#endif LINT
|
||||||
|
|
||||||
|
extern char options[];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 3.5 */
|
/* 3.5 */
|
||||||
|
@ -363,6 +366,13 @@ enum_specifier(register struct type **tpp;)
|
||||||
[
|
[
|
||||||
{declare_struct(ENUM, idf, tpp);}
|
{declare_struct(ENUM, idf, tpp);}
|
||||||
enumerator_pack(*tpp, &l)
|
enumerator_pack(*tpp, &l)
|
||||||
|
{
|
||||||
|
#ifdef DBSYMTAB
|
||||||
|
if (options['g']) {
|
||||||
|
stb_tag(idf->id_enum, idf->id_text);
|
||||||
|
}
|
||||||
|
#endif /*DBSYMTAB */
|
||||||
|
}
|
||||||
|
|
|
|
||||||
{apply_struct(ENUM, idf, tpp);}
|
{apply_struct(ENUM, idf, tpp);}
|
||||||
/* empty */
|
/* empty */
|
||||||
|
@ -430,6 +440,11 @@ struct_or_union_specifier(register struct type **tpp;)
|
||||||
struct_declaration_pack(*tpp)
|
struct_declaration_pack(*tpp)
|
||||||
{
|
{
|
||||||
(idf->id_struct->tg_busy)--;
|
(idf->id_struct->tg_busy)--;
|
||||||
|
#ifdef DBSYMTAB
|
||||||
|
if (options['g']) {
|
||||||
|
stb_tag(idf->id_struct, idf->id_text);
|
||||||
|
}
|
||||||
|
#endif /*DBSYMTAB */
|
||||||
}
|
}
|
||||||
|
|
|
|
||||||
{
|
{
|
||||||
|
|
|
@ -695,13 +695,18 @@ declare_formals(idf, fp)
|
||||||
*/
|
*/
|
||||||
formal_cvt(hasproto, def);
|
formal_cvt(hasproto, def);
|
||||||
|
|
||||||
se = se->next;
|
|
||||||
def->df_level = L_FORMAL2; /* CJ */
|
def->df_level = L_FORMAL2; /* CJ */
|
||||||
RegisterAccount(def->df_address, def->df_type->tp_size,
|
RegisterAccount(def->df_address, def->df_type->tp_size,
|
||||||
regtype(def->df_type),
|
regtype(def->df_type),
|
||||||
def->df_sc);
|
def->df_sc);
|
||||||
if (nparams++ >= STDC_NPARAMS)
|
if (nparams++ >= STDC_NPARAMS)
|
||||||
strict("number of formal parameters exceeds ANSI limit");
|
strict("number of formal parameters exceeds ANSI limit");
|
||||||
|
#ifdef DBSYMTAB
|
||||||
|
if (options['g']) {
|
||||||
|
stb_string(def, FORMAL, se->se_idf->id_text);
|
||||||
|
}
|
||||||
|
#endif /* DBSYMTAB */
|
||||||
|
se = se->next;
|
||||||
}
|
}
|
||||||
*fp = f_offset;
|
*fp = f_offset;
|
||||||
}
|
}
|
||||||
|
|
|
@ -176,7 +176,7 @@ char *source;
|
||||||
add_dependency(s)
|
add_dependency(s)
|
||||||
char *s;
|
char *s;
|
||||||
{
|
{
|
||||||
register struct idf *p = str2idf(s, 0);
|
register struct idf *p = str2idf(s);
|
||||||
|
|
||||||
if (! p->id_resmac) {
|
if (! p->id_resmac) {
|
||||||
p->id_resmac = K_FILE;
|
p->id_resmac = K_FILE;
|
||||||
|
@ -260,7 +260,7 @@ compile(argc, argv)
|
||||||
FileName = source = argv[0];
|
FileName = source = argv[0];
|
||||||
else {
|
else {
|
||||||
source = 0;
|
source = 0;
|
||||||
FileName = Salloc("standard input", 16);
|
FileName = Salloc("standard input", (unsigned) 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!InsertFile(source, (char **) 0, &result)) /* read the source file */
|
if (!InsertFile(source, (char **) 0, &result)) /* read the source file */
|
||||||
|
|
|
@ -5,6 +5,7 @@ C while running preprocessor, copy comment
|
||||||
d perform a small dataflow analysis
|
d perform a small dataflow analysis
|
||||||
D see identifier following as a macro
|
D see identifier following as a macro
|
||||||
E run preprocessor only
|
E run preprocessor only
|
||||||
|
g produce symbol table for debugger
|
||||||
i suppress /usr/include include files in dependency list
|
i suppress /usr/include include files in dependency list
|
||||||
I expand include table with directory name following
|
I expand include table with directory name following
|
||||||
m generate file.o: file1.h format dependency lines
|
m generate file.o: file1.h format dependency lines
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#include "align.h"
|
#include "align.h"
|
||||||
#include "use_tmp.h"
|
#include "use_tmp.h"
|
||||||
#include "dataflow.h"
|
#include "dataflow.h"
|
||||||
|
#include "dbsymtab.h"
|
||||||
|
|
||||||
#ifndef NOPP
|
#ifndef NOPP
|
||||||
extern char **inctable;
|
extern char **inctable;
|
||||||
|
@ -76,6 +77,12 @@ next_option: /* to allow combined one-char options */
|
||||||
break;
|
break;
|
||||||
#endif NOPP
|
#endif NOPP
|
||||||
#endif LINT
|
#endif LINT
|
||||||
|
#ifdef DBSYMTAB
|
||||||
|
case 'g': /* symbol table for debugger */
|
||||||
|
options['g'] = 1;
|
||||||
|
options['n'] = 1;
|
||||||
|
break;
|
||||||
|
#endif /* DBSYMTAB */
|
||||||
|
|
||||||
#ifndef LINT
|
#ifndef LINT
|
||||||
#ifdef DATAFLOW
|
#ifdef DATAFLOW
|
||||||
|
@ -150,7 +157,7 @@ deleted, is now a debug-flag
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_def(str2idf(name), mactext, -1, maclen, NOFLAG);
|
macro_def(str2idf(name), mactext, -1, (int)maclen, NOFLAG);
|
||||||
#else NOPP
|
#else NOPP
|
||||||
warning("-D option ignored");
|
warning("-D option ignored");
|
||||||
#endif NOPP
|
#endif NOPP
|
||||||
|
@ -176,7 +183,8 @@ deleted, is now a debug-flag
|
||||||
|
|
||||||
if (++inc_total > inc_max) {
|
if (++inc_total > inc_max) {
|
||||||
inctable = (char **)
|
inctable = (char **)
|
||||||
Realloc(inctable,(inc_max+=10)*sizeof(char *));
|
Realloc((char *)inctable,
|
||||||
|
(unsigned)((inc_max+=10)*sizeof(char *)));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = inc_pos++; i < inc_total ; i++) {
|
for (i = inc_pos++; i < inc_total ; i++) {
|
||||||
|
|
|
@ -22,7 +22,9 @@ extern struct idf *GetIdentifier();
|
||||||
|
|
||||||
do_pragma()
|
do_pragma()
|
||||||
{
|
{
|
||||||
|
#if NR_PRAGMAS
|
||||||
register struct pkey *pkp = &pragmas[0];
|
register struct pkey *pkp = &pragmas[0];
|
||||||
|
#endif
|
||||||
register struct idf *id = GetIdentifier(1);
|
register struct idf *id = GetIdentifier(1);
|
||||||
|
|
||||||
if (id != (struct idf *)0) {
|
if (id != (struct idf *)0) {
|
||||||
|
|
|
@ -262,7 +262,6 @@ struct repl *repl;
|
||||||
{
|
{
|
||||||
register struct repl *nrepl = ReplaceList;
|
register struct repl *nrepl = ReplaceList;
|
||||||
register struct args *ap = nrepl->r_args;
|
register struct args *ap = nrepl->r_args;
|
||||||
struct args *args = repl->r_args;
|
|
||||||
register char *p;
|
register char *p;
|
||||||
|
|
||||||
/* stash identifier name */
|
/* stash identifier name */
|
||||||
|
@ -743,7 +742,7 @@ add2repl(repl, ch)
|
||||||
|
|
||||||
ASSERT(index < repl->r_size);
|
ASSERT(index < repl->r_size);
|
||||||
if (index + 2 >= repl->r_size) {
|
if (index + 2 >= repl->r_size) {
|
||||||
repl->r_text = Realloc(repl->r_text, repl->r_size <<= 1);
|
repl->r_text = Realloc(repl->r_text, (unsigned) (repl->r_size <<= 1));
|
||||||
repl->r_ptr = repl->r_text + index;
|
repl->r_ptr = repl->r_text + index;
|
||||||
}
|
}
|
||||||
*repl->r_ptr++ = ch;
|
*repl->r_ptr++ = ch;
|
||||||
|
@ -768,7 +767,7 @@ stash(repl, ch, stashraw)
|
||||||
ASSERT(index < args->a_expsize);
|
ASSERT(index < args->a_expsize);
|
||||||
if (index + 1 >= args->a_expsize) {
|
if (index + 1 >= args->a_expsize) {
|
||||||
args->a_expbuf = Realloc(args->a_expbuf,
|
args->a_expbuf = Realloc(args->a_expbuf,
|
||||||
args->a_expsize <<= 1);
|
(unsigned) (args->a_expsize <<= 1));
|
||||||
args->a_expptr = args->a_expbuf + index;
|
args->a_expptr = args->a_expbuf + index;
|
||||||
}
|
}
|
||||||
*args->a_expptr++ = ch;
|
*args->a_expptr++ = ch;
|
||||||
|
@ -779,7 +778,7 @@ stash(repl, ch, stashraw)
|
||||||
ASSERT(index < args->a_rawsize);
|
ASSERT(index < args->a_rawsize);
|
||||||
if (index + 1 >= args->a_rawsize) {
|
if (index + 1 >= args->a_rawsize) {
|
||||||
args->a_rawbuf = Realloc(args->a_rawbuf,
|
args->a_rawbuf = Realloc(args->a_rawbuf,
|
||||||
args->a_rawsize <<= 1);
|
(unsigned)(args->a_rawsize <<= 1));
|
||||||
args->a_rawptr = args->a_rawbuf + index;
|
args->a_rawptr = args->a_rawbuf + index;
|
||||||
}
|
}
|
||||||
*args->a_rawptr++ = ch;
|
*args->a_rawptr++ = ch;
|
||||||
|
|
299
lang/cem/cemcom.ansi/stab.c
Normal file
299
lang/cem/cemcom.ansi/stab.c
Normal file
|
@ -0,0 +1,299 @@
|
||||||
|
/*
|
||||||
|
* (c) copyright 1990 by the Vrije Universiteit, Amsterdam, The Netherlands.
|
||||||
|
* See the copyright notice in the ACK home directory, in the file "Copyright".
|
||||||
|
*
|
||||||
|
* Author: Ceriel J.H. Jacobs
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* D E B U G G E R S Y M B O L T A B L E */
|
||||||
|
|
||||||
|
/* $Header$ */
|
||||||
|
|
||||||
|
#include "dbsymtab.h"
|
||||||
|
|
||||||
|
#ifdef DBSYMTAB
|
||||||
|
|
||||||
|
#include <alloc.h>
|
||||||
|
#include <em_arith.h>
|
||||||
|
#include <em_label.h>
|
||||||
|
#include <em_code.h>
|
||||||
|
#include <flt_arith.h>
|
||||||
|
#include <stb.h>
|
||||||
|
|
||||||
|
#include "LLlex.h"
|
||||||
|
#include "stack.h"
|
||||||
|
#include "def.h"
|
||||||
|
#include "type.h"
|
||||||
|
#include "struct.h"
|
||||||
|
#include "field.h"
|
||||||
|
#include "idf.h"
|
||||||
|
#include "Lpars.h"
|
||||||
|
#include "level.h"
|
||||||
|
|
||||||
|
extern long full_mask[];
|
||||||
|
extern char *sprint();
|
||||||
|
|
||||||
|
#define INCR_SIZE 64
|
||||||
|
|
||||||
|
static struct db_str {
|
||||||
|
unsigned sz;
|
||||||
|
char *base;
|
||||||
|
char *currpos;
|
||||||
|
} db_str;
|
||||||
|
|
||||||
|
static
|
||||||
|
create_db_str()
|
||||||
|
{
|
||||||
|
if (! db_str.base) {
|
||||||
|
db_str.base = Malloc(INCR_SIZE);
|
||||||
|
db_str.sz = INCR_SIZE;
|
||||||
|
}
|
||||||
|
db_str.currpos = db_str.base;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
addc_db_str(c)
|
||||||
|
int c;
|
||||||
|
{
|
||||||
|
int df = db_str.currpos - db_str.base;
|
||||||
|
if (df >= db_str.sz-1) {
|
||||||
|
db_str.sz += INCR_SIZE;
|
||||||
|
db_str.base = Realloc(db_str.base, db_str.sz);
|
||||||
|
db_str.currpos = db_str.base + df;
|
||||||
|
}
|
||||||
|
*db_str.currpos++ = c;
|
||||||
|
*db_str.currpos = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
adds_db_str(s)
|
||||||
|
char *s;
|
||||||
|
{
|
||||||
|
while (*s) addc_db_str(*s++);
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
stb_type(tp, assign_num)
|
||||||
|
register struct type *tp;
|
||||||
|
{
|
||||||
|
char buf[128];
|
||||||
|
static int stb_count;
|
||||||
|
long l;
|
||||||
|
|
||||||
|
if (tp->tp_dbindex > 0) {
|
||||||
|
adds_db_str(sprint(buf, "%d", tp->tp_dbindex));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (tp->tp_dbindex == 0 && assign_num) {
|
||||||
|
tp->tp_dbindex = ++stb_count;
|
||||||
|
}
|
||||||
|
if (tp->tp_dbindex > 0) {
|
||||||
|
adds_db_str(sprint(buf, "%d=", tp->tp_dbindex));
|
||||||
|
}
|
||||||
|
if (tp == void_type) {
|
||||||
|
adds_db_str(sprint(buf, "%d", tp->tp_dbindex));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
switch(tp->tp_fund) {
|
||||||
|
/* simple types ... */
|
||||||
|
case INT:
|
||||||
|
case LONG:
|
||||||
|
case CHAR:
|
||||||
|
case SHORT:
|
||||||
|
l = full_mask[(int)tp->tp_size];
|
||||||
|
if (tp->tp_unsigned) {
|
||||||
|
adds_db_str(sprint(buf,
|
||||||
|
"r%d;0;%ld",
|
||||||
|
tp->tp_dbindex,
|
||||||
|
l));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
l &= ~ (1L << ((int)tp->tp_size * 8 - 1));
|
||||||
|
adds_db_str(sprint(buf,
|
||||||
|
"r%d;%ld;%ld",
|
||||||
|
tp->tp_dbindex,
|
||||||
|
-l-1,
|
||||||
|
l));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case FLOAT:
|
||||||
|
case DOUBLE:
|
||||||
|
case LNGDBL:
|
||||||
|
adds_db_str(sprint(buf,
|
||||||
|
"r%d;%ld;0",
|
||||||
|
tp->tp_dbindex,
|
||||||
|
(long)tp->tp_size));
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* constructed types ... */
|
||||||
|
case POINTER:
|
||||||
|
addc_db_str('*');
|
||||||
|
stb_type(tp->tp_up, 0);
|
||||||
|
break;
|
||||||
|
case ARRAY:
|
||||||
|
if (tp->tp_size > 0) {
|
||||||
|
adds_db_str("ar");
|
||||||
|
stb_type(int_type, 0);
|
||||||
|
adds_db_str(sprint(buf, ";0;%ld;", tp->tp_size / tp->tp_up->tp_size));
|
||||||
|
stb_type(tp->tp_up, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ENUM:
|
||||||
|
if (tp->tp_size < 0) {
|
||||||
|
adds_db_str(sprint(buf,
|
||||||
|
"xe%s:",
|
||||||
|
tp->tp_idf->id_text));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
addc_db_str('e');
|
||||||
|
{
|
||||||
|
register struct stack_entry *se = local_level->sl_entry;
|
||||||
|
|
||||||
|
while (se) {
|
||||||
|
register struct def *edef = se->se_idf->id_def;
|
||||||
|
while (edef) {
|
||||||
|
if (edef->df_type == tp &&
|
||||||
|
edef->df_sc == ENUM) {
|
||||||
|
adds_db_str(sprint(buf,
|
||||||
|
"%s:%ld,",
|
||||||
|
se->se_idf->id_text,
|
||||||
|
edef->df_address));
|
||||||
|
}
|
||||||
|
edef = edef->next;
|
||||||
|
}
|
||||||
|
se = se->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
addc_db_str(';');
|
||||||
|
break;
|
||||||
|
case STRUCT:
|
||||||
|
case UNION:
|
||||||
|
if (tp->tp_size < 0) {
|
||||||
|
adds_db_str(sprint(buf,
|
||||||
|
"x%c%s:",
|
||||||
|
tp->tp_fund == STRUCT ? 's' : 'u',
|
||||||
|
tp->tp_idf->id_text));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
adds_db_str(sprint(buf,
|
||||||
|
"%c%ld",
|
||||||
|
tp->tp_fund == STRUCT ? 's' : 'u',
|
||||||
|
tp->tp_size));
|
||||||
|
{
|
||||||
|
register struct sdef *sdef = tp->tp_sdef;
|
||||||
|
|
||||||
|
while (sdef) {
|
||||||
|
adds_db_str(sdef->sd_idf->id_text);
|
||||||
|
addc_db_str(':');
|
||||||
|
if (sdef->sd_type->tp_fund == FIELD) {
|
||||||
|
stb_type(sdef->sd_type->tp_up, 0);
|
||||||
|
adds_db_str(sprint(buf,
|
||||||
|
",%ld,%ld;",
|
||||||
|
sdef->sd_offset*8+sdef->sd_type->tp_field->fd_shift,
|
||||||
|
sdef->sd_type->tp_field->fd_width));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
stb_type(sdef->sd_type, 0);
|
||||||
|
adds_db_str(sprint(buf,
|
||||||
|
",%ld,%ld;",
|
||||||
|
sdef->sd_offset*8,
|
||||||
|
sdef->sd_type->tp_size*8));
|
||||||
|
}
|
||||||
|
sdef = sdef->sd_sdef;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
addc_db_str(';');
|
||||||
|
break;
|
||||||
|
case FUNCTION:
|
||||||
|
addc_db_str('f');
|
||||||
|
stb_type(tp->tp_up, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stb_tag(tg, str)
|
||||||
|
register struct tag *tg;
|
||||||
|
char *str;
|
||||||
|
{
|
||||||
|
create_db_str();
|
||||||
|
adds_db_str(str);
|
||||||
|
adds_db_str(":T");
|
||||||
|
stb_type(tg->tg_type, 1);
|
||||||
|
addc_db_str(';');
|
||||||
|
C_ms_stb_cst(db_str.base,
|
||||||
|
N_LSYM,
|
||||||
|
tg->tg_type == void_type || tg->tg_type->tp_size >= 32767
|
||||||
|
? 0
|
||||||
|
: (int)tg->tg_type->tp_size,
|
||||||
|
(arith) 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
stb_typedef(tp, str)
|
||||||
|
register struct type *tp;
|
||||||
|
char *str;
|
||||||
|
{
|
||||||
|
create_db_str();
|
||||||
|
adds_db_str(str);
|
||||||
|
adds_db_str(":t");
|
||||||
|
stb_type(tp, 1);
|
||||||
|
addc_db_str(';');
|
||||||
|
C_ms_stb_cst(db_str.base,
|
||||||
|
N_LSYM,
|
||||||
|
tp == void_type || tp->tp_size >= 32767
|
||||||
|
? 0
|
||||||
|
: (int)tp->tp_size,
|
||||||
|
(arith) 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
stb_string(df, kind, str)
|
||||||
|
register struct def *df;
|
||||||
|
char *str;
|
||||||
|
{
|
||||||
|
register struct type *tp = df->df_type;
|
||||||
|
|
||||||
|
create_db_str();
|
||||||
|
adds_db_str(str);
|
||||||
|
addc_db_str(':');
|
||||||
|
switch(kind) {
|
||||||
|
case FUNCTION:
|
||||||
|
addc_db_str(df->df_sc == STATIC ? 'f' : 'F');
|
||||||
|
stb_type(tp->tp_up, 0);
|
||||||
|
addc_db_str(';');
|
||||||
|
C_ms_stb_pnam(db_str.base, N_FUN, 1 /* proclevel */, str);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (df->df_sc == FORMAL ||
|
||||||
|
(df->df_sc == REGISTER && df->df_address >= 0)) {
|
||||||
|
/* value parameter */
|
||||||
|
addc_db_str('p');
|
||||||
|
stb_type(tp, 0);
|
||||||
|
addc_db_str(';');
|
||||||
|
C_ms_stb_cst(db_str.base, N_PSYM, 0, df->df_address);
|
||||||
|
}
|
||||||
|
else if (df->df_sc != AUTO && df->df_sc != REGISTER) {
|
||||||
|
/* global */
|
||||||
|
if (df->df_sc == STATIC) {
|
||||||
|
if (df->df_level == L_LOCAL) {
|
||||||
|
addc_db_str('V');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
addc_db_str('S');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
addc_db_str('G');
|
||||||
|
}
|
||||||
|
stb_type(tp, 0);
|
||||||
|
addc_db_str(';');
|
||||||
|
C_ms_stb_dnam(db_str.base, N_LCSYM, 0, str, (arith) 0);
|
||||||
|
}
|
||||||
|
else { /* local variable */
|
||||||
|
stb_type(tp, 1); /* assign type num to avoid
|
||||||
|
difficult to parse string */
|
||||||
|
addc_db_str(';');
|
||||||
|
C_ms_stb_cst(db_str.base, N_LSYM, 0, df->df_address);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif DBSYMTAB
|
|
@ -6,11 +6,12 @@
|
||||||
/* STATEMENT SYNTAX PARSER */
|
/* STATEMENT SYNTAX PARSER */
|
||||||
|
|
||||||
{
|
{
|
||||||
#include <em.h>
|
#include <em_code.h>
|
||||||
|
|
||||||
#include "lint.h"
|
#include "lint.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "botch_free.h"
|
#include "botch_free.h"
|
||||||
|
#include "dbsymtab.h"
|
||||||
|
|
||||||
#include <flt_arith.h>
|
#include <flt_arith.h>
|
||||||
#include "arith.h"
|
#include "arith.h"
|
||||||
|
@ -26,8 +27,12 @@
|
||||||
#include "l_lint.h"
|
#include "l_lint.h"
|
||||||
#include "l_state.h"
|
#include "l_state.h"
|
||||||
#endif LINT
|
#endif LINT
|
||||||
|
#ifdef DBSYMTAB
|
||||||
|
#include <stb.h>
|
||||||
|
#endif /* DBSYMTAB */
|
||||||
|
|
||||||
extern int level;
|
extern int level;
|
||||||
|
extern char options[];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Each statement construction is stacked in order to trace a
|
/* Each statement construction is stacked in order to trace a
|
||||||
|
@ -463,7 +468,14 @@ jump
|
||||||
;
|
;
|
||||||
|
|
||||||
/* 3.6.2 */
|
/* 3.6.2 */
|
||||||
compound_statement:
|
compound_statement
|
||||||
|
{
|
||||||
|
#ifdef DBSYMTAB
|
||||||
|
static int brc_level = 1;
|
||||||
|
int ndecl = 0;
|
||||||
|
#endif /* DBSYMTAB */
|
||||||
|
}
|
||||||
|
:
|
||||||
'{'
|
'{'
|
||||||
{
|
{
|
||||||
stack_level();
|
stack_level();
|
||||||
|
@ -472,12 +484,31 @@ compound_statement:
|
||||||
(DOT == IDENTIFIER && AHEAD == IDENTIFIER))
|
(DOT == IDENTIFIER && AHEAD == IDENTIFIER))
|
||||||
/* >>> conflict on TYPE_IDENTIFIER, IDENTIFIER */
|
/* >>> conflict on TYPE_IDENTIFIER, IDENTIFIER */
|
||||||
declaration
|
declaration
|
||||||
|
{
|
||||||
|
#ifdef DBSYMTAB
|
||||||
|
ndecl++;
|
||||||
|
#endif /* DBSYMTAB */
|
||||||
|
}
|
||||||
]*
|
]*
|
||||||
|
{
|
||||||
|
#ifdef DBSYMTAB
|
||||||
|
++brc_level;
|
||||||
|
if (options['g'] && ndecl) {
|
||||||
|
C_ms_std((char *) 0, N_LBRAC, brc_level);
|
||||||
|
}
|
||||||
|
#endif /* DBSYMTAB */
|
||||||
|
}
|
||||||
[%persistent
|
[%persistent
|
||||||
statement
|
statement
|
||||||
]*
|
]*
|
||||||
'}'
|
'}'
|
||||||
{
|
{
|
||||||
unstack_level();
|
unstack_level();
|
||||||
|
#ifdef DBSYMTAB
|
||||||
|
if (options['g'] && ndecl) {
|
||||||
|
C_ms_std((char *) 0, N_RBRAC, brc_level);
|
||||||
|
}
|
||||||
|
brc_level--;
|
||||||
|
#endif /* DBSYMTAB */
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
/* TYPE DESCRIPTOR */
|
/* TYPE DESCRIPTOR */
|
||||||
|
|
||||||
#include "nobitfield.h"
|
#include "nobitfield.h"
|
||||||
|
#include "dbsymtab.h"
|
||||||
|
|
||||||
struct type {
|
struct type {
|
||||||
struct type *next; /* used for ARRAY and for qualifiers */
|
struct type *next; /* used for ARRAY and for qualifiers */
|
||||||
|
@ -16,6 +17,9 @@ struct type {
|
||||||
arith tp_size; /* -1 if declared but not defined */
|
arith tp_size; /* -1 if declared but not defined */
|
||||||
struct type *tp_pointer; /* to POINTER */
|
struct type *tp_pointer; /* to POINTER */
|
||||||
struct type *tp_array; /* to ARRAY */
|
struct type *tp_array; /* to ARRAY */
|
||||||
|
#ifdef DBSYMTAB
|
||||||
|
int tp_dbindex;
|
||||||
|
#endif
|
||||||
#if 0
|
#if 0
|
||||||
/* This field is not needed now; see comment in function_of() routine. */
|
/* This field is not needed now; see comment in function_of() routine. */
|
||||||
struct type *tp_function; /* to FUNCTION */
|
struct type *tp_function; /* to FUNCTION */
|
||||||
|
|
Loading…
Reference in a new issue