Added some more support for debugger
This commit is contained in:
		
							parent
							
								
									f321062250
								
							
						
					
					
						commit
						5c0938d05b
					
				
					 3 changed files with 57 additions and 14 deletions
				
			
		| 
						 | 
					@ -13,6 +13,8 @@
 | 
				
			||||||
%{
 | 
					%{
 | 
				
			||||||
#include	"comm0.h"
 | 
					#include	"comm0.h"
 | 
				
			||||||
#include	"comm1.h"
 | 
					#include	"comm1.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static item_t	*last_it, *o_it;
 | 
				
			||||||
%}
 | 
					%}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ========== Machine independent Yacc definitions ========== */
 | 
					/* ========== Machine independent Yacc definitions ========== */
 | 
				
			||||||
| 
						 | 
					@ -49,6 +51,7 @@
 | 
				
			||||||
%token COMMON
 | 
					%token COMMON
 | 
				
			||||||
%token BASE
 | 
					%token BASE
 | 
				
			||||||
%token SYMB
 | 
					%token SYMB
 | 
				
			||||||
 | 
					%token SYMD
 | 
				
			||||||
%token ALIGN
 | 
					%token ALIGN
 | 
				
			||||||
%token ASSERT
 | 
					%token ASSERT
 | 
				
			||||||
%token SPACE
 | 
					%token SPACE
 | 
				
			||||||
| 
						 | 
					@ -164,7 +167,8 @@ operation
 | 
				
			||||||
			{	if ($2.val == 0 && pass == PASS_3)
 | 
								{	if ($2.val == 0 && pass == PASS_3)
 | 
				
			||||||
					warning("assertion failed");
 | 
										warning("assertion failed");
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
	|	SYMB STRING ',' expr optabs2 optabs2
 | 
						|	SYMB STRING ',' expr	{ o_it = last_it; }
 | 
				
			||||||
 | 
							optabs2 optabs2
 | 
				
			||||||
			{	if ((sflag & SYM_SMB) && PASS_SYMB) {
 | 
								{	if ((sflag & SYM_SMB) && PASS_SYMB) {
 | 
				
			||||||
#ifndef ASLD
 | 
					#ifndef ASLD
 | 
				
			||||||
					if (
 | 
										if (
 | 
				
			||||||
| 
						 | 
					@ -175,16 +179,45 @@ operation
 | 
				
			||||||
						serror("expression undefined");
 | 
											serror("expression undefined");
 | 
				
			||||||
						relonami = -1;
 | 
											relonami = -1;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
 | 
										if (
 | 
				
			||||||
 | 
											PASS_SYMB
 | 
				
			||||||
 | 
											&&
 | 
				
			||||||
 | 
											($4.typ & S_COM)
 | 
				
			||||||
 | 
										   ) {
 | 
				
			||||||
 | 
											/* No value is known at
 | 
				
			||||||
 | 
											   assembler time.
 | 
				
			||||||
 | 
											   Generate reference to other
 | 
				
			||||||
 | 
											   entry in name table
 | 
				
			||||||
 | 
											*/
 | 
				
			||||||
 | 
											$4.typ = S_CRS;
 | 
				
			||||||
 | 
											$4.val = new_string(o_it->i_name);
 | 
				
			||||||
 | 
											relonami = 0;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
										    
 | 
				
			||||||
					newsymb(
 | 
										newsymb(
 | 
				
			||||||
						stringbuf+1,
 | 
											*(stringbuf+1) ? stringbuf+1 : (char *) 0,
 | 
				
			||||||
						(short)(
 | 
											(short)(
 | 
				
			||||||
							($4.typ & (S_EXT|S_TYP))
 | 
												($4.typ & (S_EXT|S_TYP))
 | 
				
			||||||
							|
 | 
												|
 | 
				
			||||||
							((ushort)$5<<8)
 | 
												((ushort)$6<<8)
 | 
				
			||||||
 | 
											),
 | 
				
			||||||
 | 
											(short)$7,
 | 
				
			||||||
 | 
											$4.val
 | 
				
			||||||
 | 
										);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
						|	SYMD STRING ','  absexp ',' absexp
 | 
				
			||||||
 | 
								{	if ((sflag & SYM_SMB) && PASS_SYMB) {
 | 
				
			||||||
 | 
										newsymb(
 | 
				
			||||||
 | 
											*(stringbuf+1) ? stringbuf+1 : (char *) 0,
 | 
				
			||||||
 | 
											(short)(
 | 
				
			||||||
 | 
												(DOTTYP & (S_EXT|S_TYP))
 | 
				
			||||||
 | 
												|
 | 
				
			||||||
 | 
												((ushort)$4<<8)
 | 
				
			||||||
						),
 | 
											),
 | 
				
			||||||
						(short)$6,
 | 
											(short)$6,
 | 
				
			||||||
						$4.val
 | 
											(valu_t)DOTVAL
 | 
				
			||||||
					);
 | 
										);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
| 
						 | 
					@ -258,6 +291,7 @@ expr	:	error
 | 
				
			||||||
			{	$$.val = $1; $$.typ = S_ABS;}
 | 
								{	$$.val = $1; $$.typ = S_ABS;}
 | 
				
			||||||
	|	id_fb
 | 
						|	id_fb
 | 
				
			||||||
			{	$$.val = load($1); 
 | 
								{	$$.val = load($1); 
 | 
				
			||||||
 | 
									last_it = $1;
 | 
				
			||||||
				$$.typ = $1->i_type & ~S_EXT;
 | 
									$$.typ = $1->i_type & ~S_EXT;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
	|	STRING
 | 
						|	STRING
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,6 +38,7 @@ item_t	keytab[] = {
 | 
				
			||||||
	0,	SECTION,	0,		".sect",
 | 
						0,	SECTION,	0,		".sect",
 | 
				
			||||||
	0,	BASE,		0,		".base",
 | 
						0,	BASE,		0,		".base",
 | 
				
			||||||
	0,	SYMB,		0,		".symb",
 | 
						0,	SYMB,		0,		".symb",
 | 
				
			||||||
 | 
						0,	SYMD,		0,		".symd",
 | 
				
			||||||
	0,	LINE,		0,		".line",
 | 
						0,	LINE,		0,		".line",
 | 
				
			||||||
	0,	FILe,		0,		".file",
 | 
						0,	FILe,		0,		".file",
 | 
				
			||||||
#ifdef LISTING
 | 
					#ifdef LISTING
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -310,6 +310,22 @@ short s;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					long
 | 
				
			||||||
 | 
					new_string(s)
 | 
				
			||||||
 | 
						char	*s;
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						long	r = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (s) {
 | 
				
			||||||
 | 
							long len = strlen(s) + 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							r = outhead.oh_nchar;
 | 
				
			||||||
 | 
							if (pass == PASS_3) wr_string(s, len);
 | 
				
			||||||
 | 
							outhead.oh_nchar += len;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return r;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
newsymb(name, type, desc, valu)
 | 
					newsymb(name, type, desc, valu)
 | 
				
			||||||
register char *name;
 | 
					register char *name;
 | 
				
			||||||
short type;
 | 
					short type;
 | 
				
			||||||
| 
						 | 
					@ -322,20 +338,12 @@ valu_t valu;
 | 
				
			||||||
		name = 0;
 | 
							name = 0;
 | 
				
			||||||
	assert(PASS_SYMB);
 | 
						assert(PASS_SYMB);
 | 
				
			||||||
	if (pass != PASS_3) {
 | 
						if (pass != PASS_3) {
 | 
				
			||||||
		if (name)
 | 
							new_string(name);
 | 
				
			||||||
			outhead.oh_nchar += strlen(name)+1;
 | 
					 | 
				
			||||||
		outhead.oh_nname++;
 | 
							outhead.oh_nname++;
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	nname++;
 | 
						nname++;
 | 
				
			||||||
	if (name) {
 | 
						outname.on_foff = new_string(name);
 | 
				
			||||||
		long len = strlen(name) + 1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		wr_string(name, len);
 | 
					 | 
				
			||||||
		outname.on_foff = outhead.oh_nchar;
 | 
					 | 
				
			||||||
		outhead.oh_nchar += len;
 | 
					 | 
				
			||||||
	} else
 | 
					 | 
				
			||||||
		outname.on_foff = 0;
 | 
					 | 
				
			||||||
	outname.on_type = type;
 | 
						outname.on_type = type;
 | 
				
			||||||
	outname.on_desc = desc;
 | 
						outname.on_desc = desc;
 | 
				
			||||||
	outname.on_valu = valu & ~(((0xFFFFFFFF)<<(4*sizeof(valu_t)))<<(4*sizeof(valu_t)));
 | 
						outname.on_valu = valu & ~(((0xFFFFFFFF)<<(4*sizeof(valu_t)))<<(4*sizeof(valu_t)));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue