Commit 41394102 authored by sagnowski's avatar sagnowski
Browse files

Tidy up stack printing on Windows

parent d7eca387
Loading
Loading
Loading
Loading
+18 −17
Original line number Diff line number Diff line
@@ -196,27 +196,28 @@ static Word16 saturate (Word32 L_var1);
    symbol->SizeOfStruct = sizeof(SYMBOL_INFO);                                \
    module.SizeOfStruct = sizeof(IMAGEHLP_MODULE64);                           \
                                                                               \
    num_frames = CaptureStackBackTrace(0, 100, call_stack, NULL);              \
    if (num_frames > 11) num_frames -=8;                                       \
    IMAGEHLP_LINE *line_info =                                                 \
        (IMAGEHLP_LINE *)calloc(sizeof(IMAGEHLP_LINE), 1);                     \
    line_info->SizeOfStruct = sizeof(IMAGEHLP_LINE);                           \
                                                                               \
    num_frames = CaptureStackBackTrace(0, 200, call_stack, NULL);              \
    for (i = 0; i < num_frames; ++i) {                                         \
      DWORD dwLineDisplacement;                                                \
      SymFromAddr(process, (DWORD64)(call_stack[i]), &offset, symbol);         \
      SymGetModuleInfo(process, (DWORD)symbol->ModBase, &module);              \
      IMAGEHLP_LINE *supp_info = (IMAGEHLP_LINE *)calloc(sizeof(IMAGEHLP_LINE), 1);                 \
      supp_info->SizeOfStruct = sizeof(IMAGEHLP_LINE);                                              \
      DWORD dwLineDisplacement;                                                                     \
      if (SymGetLineFromAddr(process, (DWORD64)(call_stack[i]), &dwLineDisplacement, supp_info)) {  \
        if (i < 3){                                                                                 \
      if (SymGetLineFromAddr(process, (DWORD64)(call_stack[i]),                \
                             &dwLineDisplacement, line_info)) {                \
        printf("[BASOP] %i\t%s(%s+0x%llX) [0x%llX] %s:%d\n", i,                \
               module.ModuleName, symbol->Name, offset, symbol->Address,       \
               line_info->FileName, line_info->LineNumber);                    \
      } else {                                                                 \
        printf("[BASOP] %i\t%s(%s+0x%llX) [0x%llX]\n", i, module.ModuleName,   \
               symbol->Name, offset, symbol->Address);                         \
        } else {                                                                                    \
            printf("[BASOP] %i\t%s(%s+0x%llX) [0x%llX] %s:%d\n", i, module.ModuleName,              \
                    symbol->Name, offset, symbol->Address, supp_info->FileName, supp_info->LineNumber); \
        }                                                                                           \
      }                                                                        \
    }                                                                          \
    free(line_info);                                                           \
    free(symbol);                                                              \
  } while (0)

#else
#define PRINT_STACK()                                                          \
  do {                                                                         \