diff options
| author | Wiimm <none> | 2020-09-30 13:20:16 +0200 |
|---|---|---|
| committer | Wiimm <none> | 2020-09-30 13:20:16 +0200 |
| commit | 646b95d113309378591b75a290ee6c62a04f3772 (patch) | |
| tree | a94864e8cef5fc0fbffb7e69d46d688e7caaae3d /project/dclib/dclib-debug.c | |
| parent | eaf1f8f8ce68b80ebdcefb45896461a89b47e1e1 (diff) | |
SZS v2.20a.beta1: Test Mac build
Diffstat (limited to 'project/dclib/dclib-debug.c')
| -rw-r--r-- | project/dclib/dclib-debug.c | 368 |
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()); |
