diff options
author | Alain Magloire | 2003-03-12 21:16:07 +0000 |
---|---|---|
committer | Alain Magloire | 2003-03-12 21:16:07 +0000 |
commit | 053fd56be38e3e9c34128477ea41926f6fcf7e20 (patch) | |
tree | 22e7daf890eac5fb808d38ea0cc55f7ea857e991 | |
parent | 1de22735941f4bec014b51874cfdc0de012c5447 (diff) | |
download | org.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.java | 18 |
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; } |