Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlain Magloire2003-03-12 21:16:07 +0000
committerAlain Magloire2003-03-12 21:16:07 +0000
commit053fd56be38e3e9c34128477ea41926f6fcf7e20 (patch)
tree22e7daf890eac5fb808d38ea0cc55f7ea857e991
parent1de22735941f4bec014b51874cfdc0de012c5447 (diff)
downloadorg.eclipse.cdt-053fd56be38e3e9c34128477ea41926f6fcf7e20.tar.gz
org.eclipse.cdt-053fd56be38e3e9c34128477ea41926f6fcf7e20.tar.xz
org.eclipse.cdt-053fd56be38e3e9c34128477ea41926f6fcf7e20.zip
bug fix, better check when calling addr2line to find the
nearest symbol.
-rw-r--r--core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/Elf.java18
1 files changed, 16 insertions, 2 deletions
diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/Elf.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/Elf.java
index f7f7b7c02fb..500ae864f6f 100644
--- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/Elf.java
+++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/Elf.java
@@ -303,8 +303,22 @@ public class Elf {
if ( line == null ) {
if ( addr2line == null )
addr2line = new Addr2line(file);
- line = addr2line.getLine(st_value + 19);
- func = addr2line.getFunction(st_value + 19);
+ long value = st_value;
+ // We try to get the nearest match
+ // since the symbol may not exactly align with debug info.
+ // In C line number 0 is invalid, line starts at 1 for file, we use
+ // this for validation.
+ for (int i = 0; i <= 20; i += 4, value += i) {
+ line = addr2line.getLine(value);
+ if (line != null) {
+ int colon = line.lastIndexOf(':');
+ String number = line.substring(colon + 1);
+ if (!number.startsWith("0")) {
+ break; // bail out
+ }
+ }
+ }
+ func = addr2line.getFunction(value);
}
return line;
}

Back to the top