/* */
/* */
/* */
-/* (C) 1998-2003 Ullrich von Bassewitz */
-/* Römerstrasse 52 */
-/* D-70794 Filderstadt */
-/* EMail: uz@cc65.org */
+/* (C) 1998-2010, Ullrich von Bassewitz */
+/* Roemerstrasse 52 */
+/* D-70794 Filderstadt */
+/* EMail: uz@cc65.org */
/* */
/* */
/* This software is provided 'as-is', without any expressed or implied */
#include <string.h>
/* common */
+#include "addrsize.h"
#include "check.h"
#include "symdefs.h"
#include "xmalloc.h"
-static DbgSym* NewDbgSym (unsigned char Type, ObjData* O)
+static DbgSym* NewDbgSym (unsigned char Type, unsigned char AddrSize, ObjData* O)
/* Create a new DbgSym and return it */
{
/* Allocate memory */
D->Flags = 0;
D->Obj = O;
D->Expr = 0;
- D->Name = 0;
+ D->Name = 0;
D->Type = Type;
+ D->AddrSize = AddrSize;
/* Return the new entry */
return D;
{
/* Create the hash. We hash over the symbol value */
unsigned Hash = ((Val >> 24) & 0xFF) ^
- ((Val >> 16) & 0xFF) ^
- ((Val >> 8) & 0xFF) ^
- ((Val >> 0) & 0xFF);
+ ((Val >> 16) & 0xFF) ^
+ ((Val >> 8) & 0xFF) ^
+ ((Val >> 0) & 0xFF);
/* Check for this symbol */
DbgSym* Sym = DbgSymPool[Hash];
DbgSym* ReadDbgSym (FILE* F, ObjData* O)
/* Read a debug symbol from a file, insert and return it */
{
- /* Read the type */
+ /* Read the type and address size */
unsigned char Type = Read8 (F);
+ unsigned char AddrSize = Read8 (F);
/* Create a new debug symbol */
- DbgSym* D = NewDbgSym (Type, O);
+ DbgSym* D = NewDbgSym (Type, AddrSize, O);
/* Read and assign the name */
D->Name = MakeGlobalStringId (O, ReadVar (F));
-static void ClearDbgSymTable (void)
+void ClearDbgSymTable (void)
/* Clear the debug symbol table */
{
unsigned I;
-long GetDbgSymVal (DbgSym* D)
+long GetDbgSymVal (const DbgSym* D)
/* Get the value of this symbol */
{
CHECK (D->Expr != 0);
{
unsigned I;
- /* Clear the debug sym table */
- ClearDbgSymTable ();
-
/* Walk through all debug symbols in this module */
- for (I = 0; I < O->DbgSymCount; ++I) {
+ for (I = 0; I < CollCount (&O->DbgSyms); ++I) {
long Val;
/* Get the next debug symbol */
- DbgSym* D = O->DbgSyms [I];
+ DbgSym* D = CollAt (&O->DbgSyms, I);
/* Get the symbol value */
Val = GetDbgSymVal (D);
/* Emit the debug file line */
fprintf (F,
- "sym\t\"%s\", 0x%02X, 0x%08lX\n",
+ "sym\t\"%s\",value=0x%08lX,addrsize=%s,type=%s\n",
GetString (D->Name),
- D->Type,
- Val);
+ Val,
+ AddrSizeToStr (D->AddrSize),
+ IS_EXP_LABEL (D->Type)? "label" : "equate");
/* Insert the symbol into the table */
InsertDbgSym (D, Val);
{
unsigned I;
- /* Clear the debug sym table */
- ClearDbgSymTable ();
-
/* Walk through all debug symbols in this module */
- for (I = 0; I < O->DbgSymCount; ++I) {
+ for (I = 0; I < CollCount (&O->DbgSyms); ++I) {
long Val;
/* Get the next debug symbol */
- DbgSym* D = O->DbgSyms [I];
+ DbgSym* D = CollAt (&O->DbgSyms, I);
/* Emit this symbol only if it is a label (ignore equates) */
if (IS_EXP_EQUATE (D->Type)) {
+