This commit is contained in:
Glenn Maynard
2003-10-01 20:54:37 +00:00
parent edf76805d0
commit 22c9cb17f3
5 changed files with 105 additions and 265 deletions
+31 -31
View File
@@ -65,8 +65,8 @@ IntDir=.\../Debug6
TargetDir=\temp\stepmania
TargetName=StepMania-debug
SOURCE="$(InputPath)"
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi
# End Special Build Tool
!ELSEIF "$(CFG)" == "StepMania - Xbox Debug"
@@ -82,23 +82,23 @@ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
XBCP=xbecopy.exe
# ADD BASE XBCP /NOLOGO
# ADD XBCP /NOLOGO
XBE=imagebld.exe
# ADD BASE XBE /nologo /stack:0x10000 /debug
# ADD XBE /nologo /stack:0x10000 /debug /out:"../default.xbe"
LINK32=link.exe
# ADD BASE LINK32 xapilibd.lib d3d8d.lib d3dx8d.lib xgraphicsd.lib dsoundd.lib dmusicd.lib xnetd.lib xboxkrnl.lib /nologo /incremental:no /debug /machine:I386 /subsystem:xbox /fixed:no /TMP
# ADD LINK32 xapilibd.lib d3d8d.lib d3dx8d.lib xgraphicsd.lib dsoundd.lib dmusicd.lib xnetd.lib xboxkrnl.lib /nologo /incremental:no /debug /machine:I386 /nodefaultlib:"libcd" /nodefaultlib:"libcmt" /out:"../StepManiaXbox-debug.exe" /subsystem:xbox /fixed:no /TMP
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
CPP=cl.exe
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_XBOX" /D "_DEBUG" /YX /FD /G6 /Ztmp /c
# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /I "SDL_sound-1.0.0" /D "WIN32" /D "_XBOX" /D "_DEBUG" /D "OGG_ONLY" /YX /FD /G6 /Ztmp /c
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 xapilibd.lib d3d8d.lib d3dx8d.lib xgraphicsd.lib dsoundd.lib dmusicd.lib xnetd.lib xboxkrnl.lib /nologo /incremental:no /debug /machine:I386 /subsystem:xbox /fixed:no /TMP
# ADD LINK32 xapilibd.lib d3d8d.lib d3dx8d.lib xgraphicsd.lib dsoundd.lib dmusicd.lib xnetd.lib xboxkrnl.lib /nologo /incremental:no /debug /machine:I386 /nodefaultlib:"libcd" /nodefaultlib:"libcmt" /out:"../StepManiaXbox-debug.exe" /subsystem:xbox /fixed:no /TMP
XBE=imagebld.exe
# ADD BASE XBE /nologo /stack:0x10000 /debug
# ADD XBE /nologo /stack:0x10000 /debug /out:"../default.xbe"
XBCP=xbecopy.exe
# ADD BASE XBCP /NOLOGO
# ADD XBCP /NOLOGO
# Begin Special Build Tool
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi
# End Special Build Tool
@@ -138,8 +138,8 @@ IntDir=.\../Release6
TargetDir=\temp\stepmania
TargetName=StepMania
SOURCE="$(InputPath)"
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi
# End Special Build Tool
!ELSEIF "$(CFG)" == "StepMania - Xbox Release"
@@ -156,26 +156,26 @@ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania
# PROP Intermediate_Dir "StepMania___Xbox_Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
XBCP=xbecopy.exe
# ADD BASE XBCP /NOLOGO
# ADD XBCP /NOLOGO
XBE=imagebld.exe
# ADD BASE XBE /nologo /stack:0x10000 /debug
# ADD XBE /nologo /testid:"123456" /stack:0x10000 /debug /out:"../default.xbe"
CPP=cl.exe
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /D "WIN32" /D "_XBOX" /D "_DEBUG" /Fr /YX"global.h" /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /I "SDL_sound-1.0.0" /D "WIN32" /D "_XBOX" /D "NDEBUG" /YX"global.h" /FD /c
# SUBTRACT CPP /Fr
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 $(intdir)\verstub.obj xapilibd.lib d3d8d.lib d3dx8d.lib xgraphicsd.lib dsoundd.lib dmusicd.lib xnetd.lib xboxkrnl.lib /nologo /pdb:"../debug6/StepMania-debug.pdb" /map /debug /machine:IX86 /nodefaultlib:"libcmtd.lib" /out:"../StepMania-debug.exe"
# SUBTRACT BASE LINK32 /verbose /profile /pdb:none /incremental:no /nodefaultlib
# ADD LINK32 $(intdir)\verstub.obj xapilib.lib d3d8.lib d3dx8.lib xgraphics.lib dsound.lib dmusic.lib xnet.lib xboxkrnl.lib libcmt.lib /nologo /incremental:no /pdb:"../release6xbox/StepMania.pdb" /machine:I386 /nodefaultlib:"libc" /nodefaultlib:"libcmtd" /out:"../StepManiaXbox.exe" /subsystem:xbox /fixed:no /TMP /OPT:REF
# SUBTRACT LINK32 /pdb:none /map /debug
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
CPP=cl.exe
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /D "WIN32" /D "_XBOX" /D "_DEBUG" /Fr /YX"global.h" /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /I "SDL_sound-1.0.0" /D "WIN32" /D "_XBOX" /D "NDEBUG" /YX"global.h" /FD /c
# SUBTRACT CPP /Fr
XBE=imagebld.exe
# ADD BASE XBE /nologo /stack:0x10000 /debug
# ADD XBE /nologo /testid:"123456" /stack:0x10000 /debug /out:"../default.xbe"
XBCP=xbecopy.exe
# ADD BASE XBCP /NOLOGO
# ADD XBCP /NOLOGO
# Begin Special Build Tool
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi
# End Special Build Tool
+2 -2
View File
@@ -63,7 +63,7 @@
TypeLibraryName=".\../StepMania.tlb"/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="disasm\mapconv &quot;$(IntDir)\$(TargetName).map&quot; &quot;$(TargetDir)\StepMania.vdi&quot; &quot;ia32.vdi&quot;"/>
CommandLine="disasm\mapconv &quot;$(IntDir)\$(TargetName).map&quot; &quot;$(TargetDir)\StepMania.vdi&quot;"/>
<Tool
Name="VCPreBuildEventTool"
CommandLine="disasm\verinc
@@ -141,7 +141,7 @@ cl /Zl /nologo /c verstub.cpp /Fo&quot;$(IntDir)&quot;\
TypeLibraryName=".\../StepMania.tlb"/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="disasm\mapconv &quot;$(IntDir)\$(TargetName).map&quot; &quot;$(TargetDir)\StepMania.vdi&quot; &quot;ia32.vdi&quot;"/>
CommandLine="disasm\mapconv &quot;$(IntDir)\$(TargetName).map&quot; &quot;$(TargetDir)\StepMania.vdi&quot;"/>
<Tool
Name="VCPreBuildEventTool"
CommandLine="disasm\verinc
+65 -105
View File
@@ -75,7 +75,6 @@ struct VDDebugInfoContext {
const unsigned char *pRVAHeap;
unsigned nFirstRVA;
const char *pClassNameHeap;
const char *pFuncNameHeap;
const unsigned long (*pSegments)[2];
int nSegments;
@@ -250,17 +249,7 @@ static void Report(HWND hwndList, HANDLE hFile, const char *format, ...) {
}
}
static void SetWindowTitlef(HWND hwnd, const char *format, ...) {
char buf[256];
va_list val;
va_start(val, format);
wvsprintf(buf, format, val);
va_end(val);
SetWindowText(hwnd, buf);
}
static void ReportReason(HWND hwnd, HWND hwndReason, HANDLE hFile, const EXCEPTION_POINTERS *const pExc)
static void ReportReason(HWND hwndReason, HANDLE hFile, const EXCEPTION_POINTERS *const pExc)
{
const EXCEPTION_RECORD *const pRecord = (const EXCEPTION_RECORD *)pExc->ExceptionRecord;
@@ -279,19 +268,21 @@ static void ReportReason(HWND hwnd, HWND hwndReason, HANDLE hFile, const EXCEPTI
// us with the read/write flag and virtual address as the docs say...
// *sigh*
if (!pel->code) {
if (hwndReason)
SetWindowTitlef(hwndReason, "Crash reason: unknown exception 0x%08lx", pRecord->ExceptionCode);
char buf[256] = "";
if (hFile)
Report(hwnd, hFile, "Crash reason: unknown exception 0x%08lx", pRecord->ExceptionCode);
} else {
if (hwndReason)
SetWindowTitlef(hwndReason, "Crash reason: %s", pel->name);
if (hFile)
Report(hwnd, hFile, "Crash reason: %s", pel->name);
if (!pel->code)
wsprintf( buf, "Crash reason: unknown exception 0x%08lx", pRecord->ExceptionCode );
else
{
strcpy( buf, "Crash reason: " );
strcat( buf, pel->name );
}
if( hwndReason )
SetWindowText( hwndReason, buf );
if( hFile )
Report( NULL, hFile, buf );
}
static const char *GetNameFromHeap(const char *heap, int idx) {
@@ -348,13 +339,6 @@ static bool IsValidCall(char *buf, int len) {
return false;
}
///////////////////////////////////////////////////////////////////////////
//
// info from Portable Executable/Common Object File Format (PE/COFF) spec
typedef unsigned short ushort;
typedef unsigned long ulong;
///////////////////////////////////////////////////////////////////////////
static bool IsExecutableProtection(DWORD dwProtect) {
@@ -422,36 +406,19 @@ bool VDDebugInfoInitFromMemory(VDDebugInfoContext *pctx, const void *_src) {
pctx->pRVAHeap = NULL;
// Check type string
if (!memcmp((char *)src + 6, "] StepMania disasm", 18))
src += *(long *)(src + 64) + 72;
if (src[0] != '[' || src[3] != '|')
if (memcmp((char *)src, "StepMania symbolic debug information", 36))
return false;
if (memcmp((char *)src + 6, "] StepMania symbolic debug information", 38))
return false;
// Check version number
// int write_version = (src[1]-'0')*10 + (src[2] - '0');
int compat_version = (src[4]-'0')*10 + (src[5] - '0');
if (compat_version > 1)
return false; // resource is too new for us to load
// Extract fields
src += 64;
pctx->nBuildNumber = *(int *)src;
pctx->pRVAHeap = (const unsigned char *)(src + 24);
pctx->nFirstRVA = *(const long *)(src + 20);
pctx->pClassNameHeap = (const char *)pctx->pRVAHeap - 4 + *(const long *)(src + 4);
pctx->pFuncNameHeap = pctx->pClassNameHeap + *(const long *)(src + 8);
pctx->pSegments = (unsigned long (*)[2])(pctx->pFuncNameHeap + *(const long *)(src + 12));
pctx->nSegments = *(const long *)(src + 16);
pctx->pRVAHeap = (const unsigned char *)(src + 20);
pctx->nFirstRVA = *(const long *)(src + 16);
pctx->pFuncNameHeap = (const char *)pctx->pRVAHeap - 4 + *(const long *)(src + 4);
pctx->pSegments = (unsigned long (*)[2])(pctx->pFuncNameHeap + *(const long *)(src + 8));
pctx->nSegments = *(const long *)(src + 12);
return true;
}
@@ -501,19 +468,24 @@ bool VDDebugInfoInitFromFile(VDDebugInfoContext *pctx, const char *pszFilename)
return false;
}
long VDDebugInfoLookupRVA(VDDebugInfoContext *pctx, unsigned rva, char *buf, int buflen) {
int i;
for(i=0; i<pctx->nSegments; ++i) {
static bool PointerIsInAnySegment( const VDDebugInfoContext *pctx, unsigned rva )
{
for( int i=0; i<pctx->nSegments; ++i )
{
if (rva >= pctx->pSegments[i][0] && rva < pctx->pSegments[i][0] + pctx->pSegments[i][1])
break;
return true;
}
if (i >= pctx->nSegments)
return false;
}
long VDDebugInfoLookupRVA(VDDebugInfoContext *pctx, unsigned rva, char *buf, int buflen)
{
if ( !PointerIsInAnySegment(pctx, rva) )
return -1;
const unsigned char *pr = pctx->pRVAHeap;
const unsigned char *pr_limit = (const unsigned char *)pctx->pClassNameHeap;
const unsigned char *pr_limit = (const unsigned char *)pctx->pFuncNameHeap;
int idx = 0;
// Linearly unpack RVA deltas and find lower_bound
@@ -542,22 +514,19 @@ long VDDebugInfoLookupRVA(VDDebugInfoContext *pctx, unsigned rva, char *buf, int
++idx;
}
if (pr >= pr_limit)
return -1;
// Decompress name for RVA
const char *fn_name = GetNameFromHeap(pctx->pFuncNameHeap, idx);
if (pr < pr_limit) {
const char *fn_name = GetNameFromHeap(pctx->pFuncNameHeap, idx);
if (!*fn_name)
fn_name = "(special)";
if (!*fn_name)
fn_name = "(special)";
strncpy( buf, fn_name, buflen );
buf[buflen-1]=0;
// ehh... where's my wsnprintf? _snprintf() might allocate memory or locks....
return wsprintf(buf, "%s", fn_name) >= 0
? rva
: -1;
}
return -1;
return rva;
}
///////////////////////////////////////////////////////////////////////////
@@ -622,15 +591,21 @@ static const char *Demangle( const char *buf )
return obuf;
}
static bool PointsToValidCall( unsigned long ptr )
{
char buf[7];
int len = 7;
memset( buf, 0, sizeof(buf) );
while(len > 0 && !ReadProcessMemory(GetCurrentProcess(), (void *)(ptr-len), buf+7-len, len, NULL))
--len;
return IsValidCall(buf+7, len);
}
static bool ReportCrashCallStack(HWND hwnd, HANDLE hFile, const EXCEPTION_POINTERS *const pExc)
{
const CONTEXT *const pContext = (const CONTEXT *)pExc->ContextRecord;
HANDLE hprMe = GetCurrentProcess();
char *lpAddr = (char *)pContext->Esp;
int limit = 100;
unsigned long data;
char buf[512];
if (!g_debugInfo.pRVAHeap) {
Report(hwnd, hFile, "Could not open debug resource file (StepMania.vdi).");
return false;
@@ -641,11 +616,6 @@ static bool ReportCrashCallStack(HWND hwnd, HANDLE hFile, const EXCEPTION_POINTE
return false;
}
// Get some module names.
void *pModuleMem;
// ModuleInfo *pModules = CrashGetModules(pModuleMem);
// Retrieve stack pointers.
// Not sure if NtCurrentTeb() is available on Win95....
@@ -658,33 +628,28 @@ static bool ReportCrashCallStack(HWND hwnd, HANDLE hFile, const EXCEPTION_POINTE
char *pStackBase = (char *)pTib->StackBase;
const CONTEXT *const pContext = (const CONTEXT *)pExc->ContextRecord;
const HANDLE hprMe = GetCurrentProcess();
const char *lpAddr = (const char *)pContext->Esp;
int limit = 100;
// Walk up the stack. Hopefully it wasn't fscked.
data = pContext->Eip;
unsigned long data = pContext->Eip;
do {
bool fValid = true;
int len;
MEMORY_BASIC_INFORMATION meminfo;
VirtualQuery((void *)data, &meminfo, sizeof meminfo);
if (!IsExecutableProtection(meminfo.Protect) || meminfo.State!=MEM_COMMIT) {
// Report(NULL, hFile, "Rejected: %08lx (%08lx)", data, meminfo.Protect);
if (!IsExecutableProtection(meminfo.Protect) || meminfo.State!=MEM_COMMIT)
fValid = false;
}
if (data != pContext->Eip) {
len = 7;
*(long *)(buf + 0) = *(long *)(buf + 4) = 0;
while(len > 0 && !ReadProcessMemory(GetCurrentProcess(), (void *)(data-len), buf+7-len, len, NULL))
--len;
fValid &= IsValidCall(buf+7, len);
}
if ( data != pContext->Eip && !PointsToValidCall(data) )
fValid = false;
if (fValid) {
char buf[512];
if (VDDebugInfoLookupRVA(&g_debugInfo, data, buf, sizeof buf) >= 0) {
Report(hwnd, hFile, "%08lx: %s", data, Demangle(buf));
--limit;
@@ -718,11 +683,6 @@ static bool ReportCrashCallStack(HWND hwnd, HANDLE hFile, const EXCEPTION_POINTE
lpAddr += 4;
} while(limit > 0 && ReadProcessMemory(hprMe, lpAddr-4, &data, 4, NULL));
// All done, close up shop and exit.
if (pModuleMem)
VirtualFree(pModuleMem, 0, MEM_RELEASE);
return true;
}
@@ -747,7 +707,7 @@ static void DoSave(const EXCEPTION_POINTERS *pExc)
"--------------------------------------"
"\r\n", PRODUCT_NAME_VER, version_num);
ReportReason(NULL, NULL, hFile, pExc);
ReportReason(NULL, hFile, pExc);
Report(NULL, hFile, "");
// Dump thread stacks
@@ -816,7 +776,7 @@ BOOL APIENTRY CrashDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) {
if (hFontMono)
SendMessage(hwndList, WM_SETFONT, (WPARAM)hFontMono, MAKELPARAM(TRUE, 0));
ReportReason(NULL, hwndReason, NULL, pExc);
ReportReason(hwndReason, NULL, pExc);
s_bHaveCallstack = ReportCrashCallStack(hwndList, NULL, pExc);
}
return TRUE;
+7 -127
View File
@@ -37,9 +37,6 @@ std::vector<RVAEnt> rvabuf;
char fnambuf[MAX_FNAMBUF];
char *fnamptr = fnambuf;
char cnambuf[MAX_CNAMBUF];
char *cnamptr = cnambuf;
long segbuf[MAX_SEGMENTS][2];
int segcnt=0;
int seggrp[MAX_SEGMENTS];
@@ -82,98 +79,8 @@ bool findline(const char *searchstr) {
///////////////////////////////////////////////////////////////////////////
void parsename(long rva, char *buf) {
char *func_name = NULL;
// char *class_name = NULL;
// char c;
// int special_func = 0;
// if (*buf++ != '?') {
func_name = buf;
/* } else {
if (*buf == '?') {
// ??0
// ??1
// ??_G
// ??_E
++buf;
c=*buf++;
special_func = 31;
if (c=='0')
special_func = 1; // constructor
else if (c=='1')
special_func = 2; // destructor
else if (c=='_') {
c = *buf++;
if (c == 'G')
special_func = 3; // scalar deleting destructor
else if (c == 'E')
special_func = 4; // vector deleting destructor?
}
} else {
func_name = buf;
while(*buf != '@') {
if (!*buf)
throw "bad decorated name";
++buf;
}
*buf++ = 0;
}
// Look for a class name.
if (*buf != '@') {
if (!*buf)
throw "bad decorated name";
class_name = buf;
while(*buf != '@') {
if (!*buf)
throw "bad decorated name (class)";
++buf;
}
*buf++ = 0;
}
}
// write out to buffers
if (class_name) {
char *csptr = cnambuf;
int idx = 0;
while(csptr < cnamptr) {
if (!strcmp(csptr, class_name)) {
break;
}
while(*csptr++);
++idx;
}
if (csptr >= cnamptr && strcmp(csptr, class_name) ) {
cnamptr = strtack(cnamptr, class_name, cnambuf+MAX_CNAMBUF);
if(!cnambuf)
throw "Too many class names; increase MAX_CNAMBUF.";
}
*fnamptr++ = 1 + (idx / 128);
*fnamptr++ = 1 + (idx % 128);
if (special_func)
*fnamptr++ = special_func;
}
*/
fnamptr = strtack(fnamptr, func_name? func_name:"", fnambuf+MAX_FNAMBUF);
void parsename(long rva, char *func_name) {
fnamptr = strtack(fnamptr, func_name, fnambuf+MAX_FNAMBUF);
if(!fnamptr)
throw "Too many func names; increase MAX_FNAMBUF.";
}
@@ -189,8 +96,8 @@ int main(int argc, char **argv) {
int i;
long load_addr;
if (argc<4) {
printf("mapconv <listing-file> <output-name> <disassembler module>\n");
if (argc<3) {
printf("mapconv <listing-file> <output-name>\n");
return 0;
}
@@ -212,27 +119,6 @@ int main(int argc, char **argv) {
return 20;
}
int disasm_size = 0;
{
FILE *fd;
if (!(fd=fopen(argv[3], "rb"))) {
printf("can't open disassembler module \"%s\"\n", argv[3]);
return 20;
}
void *buf = malloc(32768);
int act;
while((act = fread(buf, 1, 32768, fd)) > 0) {
disasm_size += act;
fwrite(buf, act, 1, fo);
}
free(buf);
fclose(fd);
}
// Begin parsing file
try {
@@ -340,9 +226,7 @@ int main(int argc, char **argv) {
}
/*
printf("Raw statistics:\n");
printf("\tDisassembler: %ld bytes\n", disasm_size);
printf("\tRVA bytes: %ld\n", rvabuf.size()*4);
printf("\tClass name bytes: %ld\n", cnamptr - cnambuf);
printf("\tFunc name bytes: %ld\n", fnamptr - fnambuf);
printf("\nPacking RVA data..."); fflush(stdout);
@@ -368,21 +252,18 @@ int main(int argc, char **argv) {
// dump data
long t;
static const char header[64]="[01|01] StepMania symbolic debug information\r\n\x1A";
static const char header[64]="StepMania symbolic debug information\r\n\x1A";
fwrite(header, 64, 1, fo);
long t;
t = ver;
fwrite(&t, 4, 1, fo);
t = rvaout.size() + 4;
fwrite(&t, 4, 1, fo);
t = cnamptr - cnambuf;
fwrite(&t, 4, 1, fo);
t = fnamptr - fnambuf;
fwrite(&t, 4, 1, fo);
@@ -391,7 +272,6 @@ int main(int argc, char **argv) {
fwrite(&firstrva, 4, 1, fo);
fwrite(&rvaout[0], rvaout.size(), 1, fo);
fwrite(cnambuf, cnamptr - cnambuf, 1, fo);
fwrite(fnambuf, fnamptr - fnambuf, 1, fo);
fwrite(segbuf, segcnt*8, 1, fo);
Binary file not shown.