diff options
Diffstat (limited to 'meta/packages/gcc/gcc-4.3.1/debian/libjava-stacktrace.dpatch')
-rw-r--r-- | meta/packages/gcc/gcc-4.3.1/debian/libjava-stacktrace.dpatch | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/meta/packages/gcc/gcc-4.3.1/debian/libjava-stacktrace.dpatch b/meta/packages/gcc/gcc-4.3.1/debian/libjava-stacktrace.dpatch new file mode 100644 index 0000000000..9ace9dfb28 --- /dev/null +++ b/meta/packages/gcc/gcc-4.3.1/debian/libjava-stacktrace.dpatch | |||
@@ -0,0 +1,70 @@ | |||
1 | #! /bin/sh -e | ||
2 | |||
3 | # DP: libgcj: Lookup source file name and line number in separated | ||
4 | # DP: debug files found in /usr/lib/debug | ||
5 | |||
6 | dir= | ||
7 | if [ $# -eq 3 -a "$2" = '-d' ]; then | ||
8 | pdir="-d $3" | ||
9 | dir="$3/" | ||
10 | elif [ $# -ne 1 ]; then | ||
11 | echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" | ||
12 | exit 1 | ||
13 | fi | ||
14 | case "$1" in | ||
15 | -patch) | ||
16 | patch $pdir -f --no-backup-if-mismatch -p0 < $0 | ||
17 | ;; | ||
18 | -unpatch) | ||
19 | patch $pdir -f --no-backup-if-mismatch -R -p0 < $0 | ||
20 | ;; | ||
21 | *) | ||
22 | echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" | ||
23 | exit 1 | ||
24 | esac | ||
25 | exit 0 | ||
26 | |||
27 | |||
28 | --- libjava/stacktrace.cc.orig 2006-06-16 13:54:07.078577632 +0200 | ||
29 | +++ libjava/stacktrace.cc 2006-06-16 13:56:08.032189888 +0200 | ||
30 | @@ -20,6 +20,11 @@ | ||
31 | #endif | ||
32 | |||
33 | #include <stdio.h> | ||
34 | +#include <stdlib.h> | ||
35 | +#include <string.h> | ||
36 | +#ifdef HAVE_UNISTD_H | ||
37 | +#include <unistd.h> | ||
38 | +#endif | ||
39 | |||
40 | #include <java/lang/Class.h> | ||
41 | #include <java/lang/Long.h> | ||
42 | @@ -222,6 +227,28 @@ | ||
43 | finder->lookup (binaryName, (jlong) offset); | ||
44 | *sourceFileName = finder->getSourceFile(); | ||
45 | *lineNum = finder->getLineNum(); | ||
46 | + if (*lineNum == -1 && info.file_name[0] == '/') | ||
47 | + { | ||
48 | + const char *debugPrefix = "/usr/lib/debug"; | ||
49 | + char *debugPath = (char *) malloc (strlen(debugPrefix) | ||
50 | + + strlen(info.file_name) | ||
51 | + + 2); | ||
52 | + | ||
53 | + if (debugPath) | ||
54 | + { | ||
55 | + strcpy (debugPath, debugPrefix); | ||
56 | + strcat (debugPath, info.file_name); | ||
57 | + //printf ("%s: 0x%x\n", debugPath, offset); | ||
58 | + if (!access (debugPath, R_OK)) | ||
59 | + { | ||
60 | + binaryName = JvNewStringUTF (debugPath); | ||
61 | + finder->lookup (binaryName, (jlong) offset); | ||
62 | + *sourceFileName = finder->getSourceFile(); | ||
63 | + *lineNum = finder->getLineNum(); | ||
64 | + } | ||
65 | + free (debugPath); | ||
66 | + } | ||
67 | + } | ||
68 | if (*lineNum == -1 && NameFinder::showRaw()) | ||
69 | { | ||
70 | gnu::gcj::runtime::StringBuffer *t = | ||