aboutsummaryrefslogtreecommitdiff
path: root/project/dclib/dclib-debug.c
diff options
context:
space:
mode:
authorWiimm <none>2020-09-30 13:20:16 +0200
committerWiimm <none>2020-09-30 13:20:16 +0200
commit646b95d113309378591b75a290ee6c62a04f3772 (patch)
treea94864e8cef5fc0fbffb7e69d46d688e7caaae3d /project/dclib/dclib-debug.c
parenteaf1f8f8ce68b80ebdcefb45896461a89b47e1e1 (diff)
SZS v2.20a.beta1: Test Mac build
Diffstat (limited to '')
-rw-r--r--project/dclib/dclib-debug.c368
1 files changed, 28 insertions, 340 deletions
diff --git a/project/dclib/dclib-debug.c b/project/dclib/dclib-debug.c
index fd51f17..f6a474f 100644
--- a/project/dclib/dclib-debug.c
+++ b/project/dclib/dclib-debug.c
@@ -45,10 +45,7 @@
#include "dclib-basics.h"
#include "dclib-file.h"
-
-#if ENABLE_HEXDUMP_WRAPPER > 0
- #include "dclib-xdump.h"
-#endif
+#include "dclib-xdump.h"
//
///////////////////////////////////////////////////////////////////////////////
@@ -381,18 +378,7 @@ void ListErrorCodes
/////////////// error handling ///////////////
///////////////////////////////////////////////////////////////////////////////
-ccp progpath = 0;
-ccp progdir = 0;
-ccp progname = 0;
-
-ccp toolname = 0;
-ccp toolversion = 0;
-ccp tooltitle = 0;
-
-bool multi_processing = false;
-enumError last_error = ERR_OK;
-enumError max_error = ERR_OK;
-u32 error_count = 0;
+ProgInfo_t ProgInfo = {0};
///////////////////////////////////////////////////////////////////////////////
@@ -436,9 +422,9 @@ enumError PrintErrorArg ( ccp func, ccp file, unsigned int line,
}
char msg[1000];
- if (!progname)
- progname = "?";
- const int plen = strlen(progname)+2;
+ if (!ProgInfo.progname)
+ ProgInfo.progname = "?";
+ const int plen = strlen(ProgInfo.progname)+2;
if ( !format && err_code > ERR_NOT_IMPLEMENTED )
format = "Program is aborted immediately!";
@@ -491,21 +477,21 @@ enumError PrintErrorArg ( ccp func, ccp file, unsigned int line,
{
if ( err_code > ERR_WARNING )
fprintf(stdwrn,"%s%s%s:%s ERROR #%d [%s] in %s() @ %s#%d%s\n",
- prefix, coln, progname, col1, err_code,
+ prefix, coln, ProgInfo.progname, col1, err_code,
GetErrorName(err_code,0), func, file, line, col0 );
else
fprintf(stdwrn,"%s%s%s:%s WARNING in %s() @ %s#%d%s\n",
- prefix, coln, progname, col1, func, file, line, col0 );
+ prefix, coln, ProgInfo.progname, col1, func, file, line, col0 );
}
else
{
if ( err_code > ERR_WARNING )
fprintf(stdwrn,"%s%s%s:%s ERROR #%d [%s]%s\n",
- prefix, coln, progname, col1, err_code,
+ prefix, coln, ProgInfo.progname, col1, err_code,
GetErrorName(err_code,0), col0 );
else
fprintf(stdwrn,"%s%s%s:%s WARNING%s\n",
- prefix, coln, progname, col1, col0 );
+ prefix, coln, ProgInfo.progname, col1, col0 );
}
#if defined(EXTENDED_ERRORS) && EXTENDED_ERRORS > 1
@@ -518,8 +504,8 @@ enumError PrintErrorArg ( ccp func, ccp file, unsigned int line,
}
else
{
- fprintf(stdwrn,"%s%s:",prefix,progname);
- PutLines(stdwrn,plen,fw,strlen(progname)+1,prefix,msg,0);
+ fprintf(stdwrn,"%s%s:",prefix,ProgInfo.progname);
+ PutLines(stdwrn,plen,fw,strlen(ProgInfo.progname)+1,prefix,msg,0);
}
if (syserr)
@@ -531,14 +517,16 @@ enumError PrintErrorArg ( ccp func, ccp file, unsigned int line,
fflush(stdwrn);
if ( err_code > ERR_OK )
- error_count++;
+ {
+ ProgInfo.error_count++;
- last_error = err_code;
- if ( max_error < err_code )
- max_error = err_code;
+ ProgInfo.last_error = err_code;
+ if ( ProgInfo.max_error < err_code )
+ ProgInfo.max_error = err_code;
- if ( err_code > ERR_NOT_IMPLEMENTED )
- exit(err_code);
+ if ( err_code > ERR_NOT_IMPLEMENTED )
+ exit(err_code);
+ }
return err_code;
}
@@ -563,7 +551,7 @@ enumError PrintErrorStat ( enumError err, int verbose, ccp cmdname )
}
fprintf(stdwrn,"%s: Command '%s' returns with status #%d [%s]\n",
- progname, cmdname, err, GetErrorName(err,0) );
+ ProgInfo.progname, cmdname, err, GetErrorName(err,0) );
}
return err;
}
@@ -601,55 +589,6 @@ bool mark_used ( ccp name, ... )
/////////////// hexdump ///////////////
///////////////////////////////////////////////////////////////////////////////
-#if ENABLE_HEXDUMP_WRAPPER > 1
- int enable_xdump_wrapper = 1;
-#elif ENABLE_HEXDUMP_WRAPPER
- int enable_xdump_wrapper = 0;
-#endif
-
-ccp hexdump_prefix = "";
-ccp hexdump_eol = "\n";
-bool hexdump_align = false;
-
-//-----------------------------------------------------------------------------
-
-#if ENABLE_HEXDUMP_WRAPPER > 0
-
-static void SetupXDumpWrapper
-(
- XDump_t *xd,
- FILE *f,
- int indent,
- u64 addr,
- int addr_fw,
- int row_len
-)
-{
- DASSERT(xd);
- InitializeXDump(xd);
-
- xd->f = f;
- xd->prefix = hexdump_prefix;
- xd->eol = hexdump_eol;
- xd->mode_align = hexdump_align;
- xd->indent = indent;
- xd->start_addr = addr;
- xd->min_addr_fw = addr_fw;
- xd->min_width = row_len;
- xd->format = XDUMPF_INT_1;
- xd->print_format = false;
- xd->print_summary = false;
- xd->print_diff_sep = false;
-
- hexdump_prefix = EmptyString;
- hexdump_eol = "\n";
- hexdump_align = false;
-}
-
-#endif
-
-//-----------------------------------------------------------------------------
-
uint HexDump16 ( FILE * f, int indent, u64 addr,
const void * data, size_t count )
{
@@ -675,101 +614,10 @@ uint HexDump ( FILE * f, int indent, u64 addr, int addr_fw, int row_len,
if ( !f || !p_data || !count )
return 0;
- #if ENABLE_HEXDUMP_WRAPPER == 1 || ENABLE_HEXDUMP_WRAPPER == 2
- if (enable_xdump_wrapper)
- #endif
-
- #if ENABLE_HEXDUMP_WRAPPER > 0
- {
XDump_t xd;
- SetupXDumpWrapper(&xd,f,indent,addr,addr_fw,row_len);
+ InitializeXDumpEx(&xd,f,indent,addr,addr_fw,row_len);
const int stat = XDump(&xd,p_data,count,true);
return stat < 0 ? 0 : stat;
- }
- #endif
-
- #if ENABLE_HEXDUMP_WRAPPER < 3
-
- const int MAX_LEN = 256;
- char buf[MAX_LEN+2];
-
- const u8 * data = (const u8 *)p_data;
-
- indent = NormalizeIndent(indent);
- addr_fw = NormalizeIndent(addr_fw);
-
- const bool show_ascii = row_len >= 0;
- if ( row_len < 0 )
- row_len = -row_len;
- else if ( row_len < 1 )
- row_len = 16;
- else if ( row_len > MAX_LEN )
- row_len = MAX_LEN;
-
- uint skip = 0;
- if ( (s64)addr != -1 )
- {
- const int fw = snprintf(buf,sizeof(buf),"%llx",addr+count-1);
- if ( addr_fw < fw )
- addr_fw = fw;
-
- if (hexdump_align)
- {
- skip = addr % row_len;
- addr -= skip;
- }
- }
-
- uint line_count = 0;
- while ( count > 0 )
- {
- if ( (s64)addr == -1 )
- fprintf(f,"%s%*s", hexdump_prefix, indent,"" );
- else
- {
- fprintf(f,"%s%*s%*llx:", hexdump_prefix, indent,"", addr_fw, addr );
- addr += row_len;
- }
- char * dest = buf;
- if (!skip)
- *dest++ = ':';
-
- int i;
- for ( i = 0; i < row_len; i++ )
- {
- if ( skip > 0 )
- {
- fprintf(f,"%s ", i&3 ? "" : " " );
- *dest++ = ' ';
- if (!--skip)
- *dest++ = ':';
- }
- else
- {
- u8 ch = *data++;
- if ( count > 0 )
- {
- count--;
- fprintf(f,"%s%02x ", i&3 ? "" : " ", ch );
- *dest++ = ch < ' ' || ch >= 0x7f ? '.' : ch;
- }
- else
- fprintf(f,"%s ", i&3 ? "" : " " );
- }
- }
- *dest = 0;
- if (show_ascii)
- fprintf(f,"%s:%s",buf,hexdump_eol);
- else
- fputs(hexdump_eol,f);
- line_count++;
- }
-
- hexdump_prefix = "";
- hexdump_eol = "\n";
- hexdump_align = false;
- return line_count;
- #endif
}
//-----------------------------------------------------------------------------
@@ -790,23 +638,11 @@ uint HexDump0 ( FILE * f, int indent, u64 addr, int addr_fw, int row_len,
if ( !f || !p_data || !count )
return 0;
- #if ENABLE_HEXDUMP_WRAPPER == 1 || ENABLE_HEXDUMP_WRAPPER == 2
- if (enable_xdump_wrapper)
- #endif
-
- #if ENABLE_HEXDUMP_WRAPPER > 0
- {
XDump_t xd;
- SetupXDumpWrapper(&xd,f,indent,addr,addr_fw,row_len);
+ InitializeXDumpEx(&xd,f,indent,addr,addr_fw,row_len);
xd.mode_ignore = true;
const int stat = XDump(&xd,p_data,count,true);
return stat < 0 ? 0 : stat;
- }
- #endif
-
- #if ENABLE_HEXDUMP_WRAPPER < 3
- return HexDump( f, indent, addr, addr_fw, row_len, p_data, count );
- #endif
}
//-----------------------------------------------------------------------------
@@ -827,158 +663,10 @@ void HexDiff ( FILE * f, int indent, u64 addr, int addr_fw, int row_len,
if (!f)
return;
- #if ENABLE_HEXDUMP_WRAPPER == 1 || ENABLE_HEXDUMP_WRAPPER == 2
- if (enable_xdump_wrapper)
- #endif
-
- #if ENABLE_HEXDUMP_WRAPPER > 0
- {
XDump_t xd;
- SetupXDumpWrapper(&xd,f,indent,addr,addr_fw,row_len);
+ InitializeXDumpEx(&xd,f,indent,addr,addr_fw,row_len);
XDiff(&xd, p_data1,count1,true, p_data2,count2,true, 0,false );
return;
- }
- #endif
-
- #if ENABLE_HEXDUMP_WRAPPER < 3
-
- const int MAX_LEN = 256;
- char buf[MAX_LEN+2];
-
- const u8 * data1 = p_data1 ? (const u8 *)p_data1 : (u8*)EmptyString;
- const u8 * data2 = p_data2 ? (const u8 *)p_data2 : (u8*)EmptyString;
-
- indent = NormalizeIndent(indent);
- addr_fw = NormalizeIndent(addr_fw);
-
- const bool show_ascii = row_len >= 0;
- if ( row_len < 0 )
- row_len = -row_len;
- else if ( row_len < 1 )
- row_len = 16;
- else if ( row_len > MAX_LEN )
- row_len = MAX_LEN;
-
- uint skip = 0;
-
- if ( (s64)addr != -1 )
- {
- const size_t count = count1 > count2 ? count1 : count2;
- const int fw = snprintf(buf,sizeof(buf),"%llx",addr+count-1);
- if ( addr_fw < fw )
- addr_fw = fw;
-
- if (hexdump_align)
- {
- skip = addr % row_len;
- addr -= skip;
- }
- }
-
- while ( count1 > 0 && count2 > 0 )
- {
- size_t count = count1 < count2 ? count1 : count2;
- if ( count > row_len )
- count = row_len;
- noPRINT(" cnt=%zd,%zd -> %zd; cmp=%d\n",
- count1, count2, count, memcmp(data1,data2,count) );
-
- if (memcmp(data1,data2,count))
- {
- //--- print first line
-
- if (IS_M1(addr))
- fprintf(f,"%s%*s<", hexdump_prefix, indent,"" );
- else
- fprintf(f,"%s%*s<%*llx:", hexdump_prefix, indent,"", addr_fw, addr );
-
- char * dest = buf;
- if (!skip)
- *dest++ = ':';
-
- int i;
- for ( i = 0; i < row_len; i++ )
- {
- if ( skip > 0 )
- {
- fprintf(f,"%s ", i&3 ? "" : " " );
- *dest++ = ' ';
- if (!--skip)
- *dest++ = ':';
- }
- else
- {
- u8 ch = data1[i];
- if ( i < count1 )
- {
- fprintf(f,"%s%02x ", i&3 ? "" : " ", ch );
- *dest++ = ch < ' ' || ch >= 0x7f ? '.' : ch;
- }
- else
- fprintf(f,"%s ", i&3 ? "" : " " );
- }
- }
- *dest = 0;
- if (show_ascii)
- fprintf(f,"%s:%s",buf,hexdump_eol);
- else
- fputs(hexdump_eol,f);
-
-
- //--- print second line
-
- if (IS_M1(addr))
- fprintf(f,"%s%*s>", hexdump_prefix, indent,"" );
- else
- fprintf(f,"%s%*s>%*llx:", hexdump_prefix, indent,"", addr_fw, addr );
-
- dest = buf;
- if (!skip)
- *dest++ = ':';
-
- for ( i = 0; i < row_len; i++ )
- {
- if ( skip > 0 )
- {
- fprintf(f,"%s ", i&3 ? "" : " " );
- *dest++ = ' ';
- if (!--skip)
- *dest++ = ':';
- }
- else
- {
- u8 ch = data2[i];
- if ( i < count2 )
- {
- if ( ch == data1[i] )
- fprintf(f,"%s . ", i&3 ? "" : " " );
- else
- fprintf(f,"%s%02x ", i&3 ? "" : " ", ch );
- *dest++ = ch < ' ' || ch >= 0x7f ? '.' : ch;
- }
- else
- fprintf(f,"%s ", i&3 ? "" : " " );
- }
- }
- *dest = 0;
- if (show_ascii)
- fprintf(f,"%s:%s",buf,hexdump_eol);
- else
- fputs(hexdump_eol,f);
- }
- data1 += count;
- data2 += count;
- count1 -= count;
- count2 -= count;
- if (!IS_M1(addr))
- addr += count;
-
- }
- hexdump_prefix = "";
- hexdump_eol = "\n";
- hexdump_align = false;
-
- #endif
}
//
@@ -998,14 +686,14 @@ static void trace_helper ( int print_stderr, ccp format, va_list arg )
if (!TRACE_FILE)
{
char extend[16];
- if (multi_processing)
+ if (ProgInfo.multi_processing)
snprintf(extend,sizeof(extend),"-%u",getpid());
else
*extend = 0;
char fname[1000];
- if ( progname && *progname && *progname != '?' )
- snprintf( fname, sizeof(fname), "_trace-%s%s.tmp", progname, extend );
+ if ( ProgInfo.progname && *ProgInfo.progname && *ProgInfo.progname != '?' )
+ snprintf( fname, sizeof(fname), "_trace-%s%s.tmp", ProgInfo.progname, extend );
else
snprintf( fname, sizeof(fname), "_trace-%s.tmp", extend );
@@ -1373,8 +1061,8 @@ static FILE * OpenMemLog()
{
done = true;
char fname[500];
- if ( progname && *progname && *progname != '?' )
- snprintf(fname,sizeof(fname),"_trace_alloc-%s-%u.tmp",progname,getpid());
+ if ( ProgInfo.progname && *ProgInfo.progname && *ProgInfo.progname != '?' )
+ snprintf(fname,sizeof(fname),"_trace_alloc-%s-%u.tmp",ProgInfo.progname,getpid());
else
snprintf(fname,sizeof(fname),"_trace_alloc-%u.tmp",getpid());