#! /bin/sh -e # DP: libgcj: Lookup source file name and line number in separated # DP: debug files found in /usr/lib/debug dir= if [ $# -eq 3 -a "$2" = '-d' ]; then pdir="-d $3" dir="$3/" elif [ $# -ne 1 ]; then echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" exit 1 fi case "$1" in -patch) patch $pdir -f --no-backup-if-mismatch -p0 < $0 ;; -unpatch) patch $pdir -f --no-backup-if-mismatch -R -p0 < $0 ;; *) echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" exit 1 esac exit 0 --- libjava/stacktrace.cc.orig 2006-06-16 13:54:07.078577632 +0200 +++ libjava/stacktrace.cc 2006-06-16 13:56:08.032189888 +0200 @@ -20,6 +20,11 @@ #endif #include +#include +#include +#ifdef HAVE_UNISTD_H +#include +#endif #include #include @@ -222,6 +227,28 @@ 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 =