# DP: libgcj: Lookup source file name and line number in separated # DP: debug files found in /usr/lib/debug --- libjava/stacktrace.cc | 27 +++++++++++++++++++++++++++ 1 files changed, 27 insertions(+), 0 deletions(-) Index: b/src/libjava/stacktrace.cc =================================================================== --- a/src/libjava/stacktrace.cc +++ b/src/libjava/stacktrace.cc @@ -17,6 +17,11 @@ details. */ #include #include +#include +#include +#ifdef HAVE_UNISTD_H +#include +#endif #include #include @@ -260,6 +265,28 @@ _Jv_StackTrace::getLineNumberForFrame(_J finder->lookup (binaryName, (jlong) offset); *sourceFileName = finder->getSourceFile(); *lineNum = finder->getLineNum(); + if (*lineNum == -1 && info.file_name[0] == '/') + { + const char *debugPrefix = "/usr/lib/debug"; + char *debugPath = (char *) malloc (strlen(debugPrefix) + + strlen(info.file_name) + + 2); + + if (debugPath) + { + strcpy (debugPath, debugPrefix); + strcat (debugPath, info.file_name); + //printf ("%s: 0x%x\n", debugPath, offset); + if (!access (debugPath, R_OK)) + { + binaryName = JvNewStringUTF (debugPath); + finder->lookup (binaryName, (jlong) offset); + *sourceFileName = finder->getSourceFile(); + *lineNum = finder->getLineNum(); + } + free (debugPath); + } + } if (*lineNum == -1 && NameFinder::showRaw()) { gnu::gcj::runtime::StringBuffer *t =