diff --git a/include/asm/fstack.h b/include/asm/fstack.h index 98bcbfc7..b63cd78f 100644 --- a/include/asm/fstack.h +++ b/include/asm/fstack.h @@ -43,6 +43,7 @@ void fstk_RunInclude(char *tzFileName); void fstk_RunMacroArg(int32_t s); void fstk_Init(char *s); void fstk_Dump(void); +void fstk_DumpStringExpansions(void); void fstk_AddIncludePath(char *s); uint32_t fstk_RunMacro(char *s); void fstk_RunRept(uint32_t count, int32_t nReptLineNo); diff --git a/src/asm/fstack.c b/src/asm/fstack.c index a4977ef8..0d0dd5b9 100644 --- a/src/asm/fstack.c +++ b/src/asm/fstack.c @@ -262,6 +262,20 @@ void fstk_Dump(void) fprintf(stderr, "%s(%d)", tzCurrentFileName, nLineNo); } +/* + * Dump the string expansion stack to stderr + */ +void fstk_DumpStringExpansions(void) +{ + const struct sStringExpansionPos *pExpansion = pCurrentStringExpansion; + + while (pExpansion) { + fprintf(stderr, "while expanding symbol \"%s\"\n", + pExpansion->tzName); + pExpansion = pExpansion->pParent; + } +} + /* * Extra includepath stuff */ diff --git a/src/asm/main.c b/src/asm/main.c index 5524f4b1..ef24b3d6 100644 --- a/src/asm/main.c +++ b/src/asm/main.c @@ -239,12 +239,13 @@ static void opt_ParseDefines(void) */ void verror(const char *fmt, va_list args) { - fprintf(stderr, "ERROR: "); + fputs("ERROR: ", stderr); fstk_Dump(); - fprintf(stderr, ":\n "); + fputs(":\n ", stderr); vfprintf(stderr, fmt, args); - fprintf(stderr, "\n"); - nErrors += 1; + fputc('\n', stderr); + fstk_DumpStringExpansions(); + nErrors++; } void yyerror(const char *fmt, ...) @@ -276,11 +277,12 @@ void warning(const char *fmt, ...) va_start(args, fmt); - fprintf(stderr, "warning: "); + fputs("warning: ", stderr); fstk_Dump(); - fprintf(stderr, ":\n "); + fputs(":\n ", stderr); vfprintf(stderr, fmt, args); - fprintf(stderr, "\n"); + fputc('\n', stderr); + fstk_DumpStringExpansions(); va_end(args); } diff --git a/test/asm/equs-recursion.out b/test/asm/equs-recursion.out index 71895a5d..c6180ed3 100644 --- a/test/asm/equs-recursion.out +++ b/test/asm/equs-recursion.out @@ -1,2 +1,66 @@ ERROR: equs-recursion.asm(2): Recursion limit (64) exceeded +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse" +while expanding symbol "recurse"