зеркало из https://github.com/mozilla/pjs.git
Make Linux stack walking code (DEBUG only) print library and offset information even when symbol is unavailable. b=174168 r=bbaetz sr=bzbarsky a=rjesup
This commit is contained in:
Родитель
bff3c166a9
Коммит
22cde85310
|
@ -1178,16 +1178,20 @@ nsTraceRefcnt::WalkTheStack(FILE* aStream)
|
||||||
if (--skip <= 0) {
|
if (--skip <= 0) {
|
||||||
Dl_info info;
|
Dl_info info;
|
||||||
int ok = dladdr((void*) pc, &info);
|
int ok = dladdr((void*) pc, &info);
|
||||||
if (!ok)
|
if (!ok) {
|
||||||
goto unknown;
|
fprintf(aStream, "UNKNOWN %p\n", (void *)pc);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
PRUint32 foff = (char*)pc - (char*)info.dli_fbase;
|
||||||
|
|
||||||
const char * symbol = info.dli_sname;
|
const char * symbol = info.dli_sname;
|
||||||
if (!symbol)
|
int len;
|
||||||
goto unknown;
|
if (!symbol || !(len = strlen(symbol))) {
|
||||||
|
fprintf(aStream, "UNKNOWN [%s +0x%08X]\n",
|
||||||
int len = strlen(symbol);
|
info.dli_fname, foff);
|
||||||
if (! len)
|
continue;
|
||||||
goto unknown;
|
}
|
||||||
|
|
||||||
char demangled[4096] = "\0";
|
char demangled[4096] = "\0";
|
||||||
|
|
||||||
|
@ -1199,14 +1203,9 @@ nsTraceRefcnt::WalkTheStack(FILE* aStream)
|
||||||
}
|
}
|
||||||
|
|
||||||
PRUint32 off = (char*)pc - (char*)info.dli_saddr;
|
PRUint32 off = (char*)pc - (char*)info.dli_saddr;
|
||||||
PRUint32 foff = (char*)pc - (char*)info.dli_fbase;
|
|
||||||
fprintf(aStream, "%s+0x%08X [%s +0x%08X]\n",
|
fprintf(aStream, "%s+0x%08X [%s +0x%08X]\n",
|
||||||
symbol, off, info.dli_fname, foff);
|
symbol, off, info.dli_fname, foff);
|
||||||
|
|
||||||
}
|
}
|
||||||
continue;
|
|
||||||
unknown:
|
|
||||||
fprintf(aStream, "UNKNOWN %p\n", (void *)pc);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#elif defined(__sun) && (defined(__sparc) || defined(sparc) || defined(__i386) || defined(i386))
|
#elif defined(__sun) && (defined(__sparc) || defined(sparc) || defined(__i386) || defined(i386))
|
||||||
|
|
|
@ -1178,16 +1178,20 @@ nsTraceRefcnt::WalkTheStack(FILE* aStream)
|
||||||
if (--skip <= 0) {
|
if (--skip <= 0) {
|
||||||
Dl_info info;
|
Dl_info info;
|
||||||
int ok = dladdr((void*) pc, &info);
|
int ok = dladdr((void*) pc, &info);
|
||||||
if (!ok)
|
if (!ok) {
|
||||||
goto unknown;
|
fprintf(aStream, "UNKNOWN %p\n", (void *)pc);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
PRUint32 foff = (char*)pc - (char*)info.dli_fbase;
|
||||||
|
|
||||||
const char * symbol = info.dli_sname;
|
const char * symbol = info.dli_sname;
|
||||||
if (!symbol)
|
int len;
|
||||||
goto unknown;
|
if (!symbol || !(len = strlen(symbol))) {
|
||||||
|
fprintf(aStream, "UNKNOWN [%s +0x%08X]\n",
|
||||||
int len = strlen(symbol);
|
info.dli_fname, foff);
|
||||||
if (! len)
|
continue;
|
||||||
goto unknown;
|
}
|
||||||
|
|
||||||
char demangled[4096] = "\0";
|
char demangled[4096] = "\0";
|
||||||
|
|
||||||
|
@ -1199,14 +1203,9 @@ nsTraceRefcnt::WalkTheStack(FILE* aStream)
|
||||||
}
|
}
|
||||||
|
|
||||||
PRUint32 off = (char*)pc - (char*)info.dli_saddr;
|
PRUint32 off = (char*)pc - (char*)info.dli_saddr;
|
||||||
PRUint32 foff = (char*)pc - (char*)info.dli_fbase;
|
|
||||||
fprintf(aStream, "%s+0x%08X [%s +0x%08X]\n",
|
fprintf(aStream, "%s+0x%08X [%s +0x%08X]\n",
|
||||||
symbol, off, info.dli_fname, foff);
|
symbol, off, info.dli_fname, foff);
|
||||||
|
|
||||||
}
|
}
|
||||||
continue;
|
|
||||||
unknown:
|
|
||||||
fprintf(aStream, "UNKNOWN %p\n", (void *)pc);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#elif defined(__sun) && (defined(__sparc) || defined(sparc) || defined(__i386) || defined(i386))
|
#elif defined(__sun) && (defined(__sparc) || defined(sparc) || defined(__i386) || defined(i386))
|
||||||
|
|
Загрузка…
Ссылка в новой задаче