Added output of types.
git-svn-id: svn://svn.cc65.org/cc65/trunk@5277 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
@@ -100,10 +100,13 @@ static void CmdShowSymbol (Collection* Args);
|
|||||||
/* Show symbols */
|
/* Show symbols */
|
||||||
|
|
||||||
static void CmdShowSymDef (Collection* Args);
|
static void CmdShowSymDef (Collection* Args);
|
||||||
/* Show lines from for a symbol definition */
|
/* Show lines from the debug info file */
|
||||||
|
|
||||||
static void CmdShowSymRef (Collection* Args);
|
static void CmdShowSymRef (Collection* Args);
|
||||||
/* Show lines from for symbol references */
|
/* Show lines from the debug info file */
|
||||||
|
|
||||||
|
static void CmdShowType (Collection* Args);
|
||||||
|
/* Show types from the debug info file */
|
||||||
|
|
||||||
static void CmdUnload (Collection* Args attribute ((unused)));
|
static void CmdUnload (Collection* Args attribute ((unused)));
|
||||||
/* Unload a debug info file */
|
/* Unload a debug info file */
|
||||||
@@ -136,7 +139,8 @@ enum {
|
|||||||
SegmentId,
|
SegmentId,
|
||||||
SourceId,
|
SourceId,
|
||||||
SpanId,
|
SpanId,
|
||||||
SymbolId
|
SymbolId,
|
||||||
|
TypeId
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Structure that contains a command description */
|
/* Structure that contains a command description */
|
||||||
@@ -151,6 +155,11 @@ struct CmdEntry {
|
|||||||
/* Table with main commands */
|
/* Table with main commands */
|
||||||
static const CmdEntry MainCmds[] = {
|
static const CmdEntry MainCmds[] = {
|
||||||
{
|
{
|
||||||
|
"exit",
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
CmdQuit
|
||||||
|
}, {
|
||||||
"help",
|
"help",
|
||||||
"Show available commands",
|
"Show available commands",
|
||||||
1,
|
1,
|
||||||
@@ -240,6 +249,11 @@ static const CmdEntry ShowCmds[] = {
|
|||||||
"Show where a symbol was referenced. May be followed by one or more symbol ids.",
|
"Show where a symbol was referenced. May be followed by one or more symbol ids.",
|
||||||
-2,
|
-2,
|
||||||
CmdShowSymRef
|
CmdShowSymRef
|
||||||
|
}, {
|
||||||
|
"type",
|
||||||
|
"Show type information. May be followed by one or more type ids.",
|
||||||
|
-2,
|
||||||
|
CmdShowType
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -386,7 +400,10 @@ static void PrintHelp (const CmdEntry* Tab, unsigned Count)
|
|||||||
/* Output help for one command table */
|
/* Output help for one command table */
|
||||||
{
|
{
|
||||||
while (Count--) {
|
while (Count--) {
|
||||||
PrintLine ("%-*s%s", (int) sizeof (Tab->Cmd) + 2, Tab->Cmd, Tab->Help);
|
/* Ignore the commands without help text */
|
||||||
|
if (Tab->Help) {
|
||||||
|
PrintLine ("%-*s%s", (int) sizeof (Tab->Cmd) + 2, Tab->Cmd, Tab->Help);
|
||||||
|
}
|
||||||
++Tab;
|
++Tab;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -418,6 +435,8 @@ static unsigned FindIdType (const char* TypeName)
|
|||||||
{ "span", SpanId },
|
{ "span", SpanId },
|
||||||
{ "sym", SymbolId },
|
{ "sym", SymbolId },
|
||||||
{ "symbol", SymbolId },
|
{ "symbol", SymbolId },
|
||||||
|
{ "t", TypeId },
|
||||||
|
{ "type", TypeId },
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned I;
|
unsigned I;
|
||||||
@@ -761,6 +780,72 @@ static void PrintSymbols (const cc65_symbolinfo* S)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void PrintTypeHeader (void)
|
||||||
|
/* Output a header for a list of types */
|
||||||
|
{
|
||||||
|
/* Header */
|
||||||
|
PrintLine (" id description");
|
||||||
|
PrintSeparator ();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void PrintType (unsigned Id, const cc65_typedata* T)
|
||||||
|
/* Output one type */
|
||||||
|
{
|
||||||
|
/* Output the id */
|
||||||
|
PrintId (Id, 6);
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
switch (T->what) {
|
||||||
|
|
||||||
|
case CC65_TYPE_VOID:
|
||||||
|
Print ("VOID");
|
||||||
|
goto ExitPoint;
|
||||||
|
|
||||||
|
case CC65_TYPE_BYTE:
|
||||||
|
Print ("BYTE");
|
||||||
|
goto ExitPoint;
|
||||||
|
|
||||||
|
case CC65_TYPE_WORD:
|
||||||
|
Print ("WORD");
|
||||||
|
goto ExitPoint;
|
||||||
|
|
||||||
|
case CC65_TYPE_DBYTE:
|
||||||
|
Print ("DBYTE");
|
||||||
|
goto ExitPoint;
|
||||||
|
|
||||||
|
case CC65_TYPE_DWORD:
|
||||||
|
Print ("DWORD");
|
||||||
|
goto ExitPoint;
|
||||||
|
|
||||||
|
case CC65_TYPE_FARPTR:
|
||||||
|
Print ("FAR ");
|
||||||
|
/* FALLTHROUGH */
|
||||||
|
|
||||||
|
case CC65_TYPE_PTR:
|
||||||
|
Print ("POINTER TO ");
|
||||||
|
T = T->data.ptr.ind_type;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CC65_TYPE_ARRAY:
|
||||||
|
Print ("ARRAY[%u] OF ", T->data.array.ele_count);
|
||||||
|
T = T->data.array.ele_type;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
/* Anything else is currently not implemented */
|
||||||
|
Print ("***NOT IMPLEMENTED***");
|
||||||
|
goto ExitPoint;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ExitPoint:
|
||||||
|
NewLine ();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/* Debug file handling */
|
/* Debug file handling */
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
@@ -1339,7 +1424,7 @@ static void CmdShowSpan (Collection* Args)
|
|||||||
|
|
||||||
|
|
||||||
static void CmdShowSymbol (Collection* Args)
|
static void CmdShowSymbol (Collection* Args)
|
||||||
/* Show symbols */
|
/* Show symbols from the debug info file */
|
||||||
{
|
{
|
||||||
const cc65_symbolinfo* S;
|
const cc65_symbolinfo* S;
|
||||||
unsigned I;
|
unsigned I;
|
||||||
@@ -1390,7 +1475,7 @@ static void CmdShowSymbol (Collection* Args)
|
|||||||
|
|
||||||
|
|
||||||
static void CmdShowSymDef (Collection* Args)
|
static void CmdShowSymDef (Collection* Args)
|
||||||
/* Show lines from for a symbol definition */
|
/* Show symbol definitions from the debug info file */
|
||||||
{
|
{
|
||||||
const cc65_lineinfo* L;
|
const cc65_lineinfo* L;
|
||||||
unsigned I;
|
unsigned I;
|
||||||
@@ -1437,7 +1522,7 @@ static void CmdShowSymDef (Collection* Args)
|
|||||||
|
|
||||||
|
|
||||||
static void CmdShowSymRef (Collection* Args)
|
static void CmdShowSymRef (Collection* Args)
|
||||||
/* Show lines from for symbol references */
|
/* Show symbol references from the debug info file */
|
||||||
{
|
{
|
||||||
const cc65_lineinfo* L;
|
const cc65_lineinfo* L;
|
||||||
unsigned I;
|
unsigned I;
|
||||||
@@ -1483,6 +1568,63 @@ static void CmdShowSymRef (Collection* Args)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void CmdShowType (Collection* Args)
|
||||||
|
/* Show types from the debug info file */
|
||||||
|
{
|
||||||
|
const cc65_typedata* T;
|
||||||
|
const cc65_spaninfo* S;
|
||||||
|
unsigned I;
|
||||||
|
|
||||||
|
/* Be sure a file is loaded */
|
||||||
|
if (!FileIsLoaded ()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Output the header */
|
||||||
|
PrintTypeHeader ();
|
||||||
|
|
||||||
|
for (I = 0; I < CollCount (Args); ++I) {
|
||||||
|
|
||||||
|
/* Parse the argument */
|
||||||
|
unsigned Id;
|
||||||
|
unsigned IdType = TypeId;
|
||||||
|
if (GetId (CollConstAt (Args, I), &Id, &IdType)) {
|
||||||
|
/* Fetch list depending on type */
|
||||||
|
switch (IdType) {
|
||||||
|
|
||||||
|
case SpanId:
|
||||||
|
S = cc65_span_byid (Info, Id);
|
||||||
|
if (S == 0 || S->count == 0) {
|
||||||
|
T = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Id = S->data[0].type_id;
|
||||||
|
/* FALLTHROUGH */
|
||||||
|
|
||||||
|
case TypeId:
|
||||||
|
T = cc65_type_byid (Info, Id);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
T = 0;
|
||||||
|
PrintLine ("Invalid id type");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* Ignore the invalid id */
|
||||||
|
T = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Output the list */
|
||||||
|
if (T) {
|
||||||
|
PrintType (Id, T);
|
||||||
|
cc65_free_typedata (Info, T);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void CmdUnload (Collection* Args attribute ((unused)))
|
static void CmdUnload (Collection* Args attribute ((unused)))
|
||||||
/* Unload a debug info file */
|
/* Unload a debug info file */
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user