diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/dwarf/Dwarf.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/dwarf/Dwarf.java index 2b659911dd7..003bf174b5e 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/dwarf/Dwarf.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/dwarf/Dwarf.java @@ -348,7 +348,8 @@ public class Dwarf { } // read the abbrev section. - InputStream in = new ByteArrayInputStream(data, offset + 11, length); + // Note "length+4" is the total size in bytes of the CU data. + InputStream in = new ByteArrayInputStream(data, offset + 11, length+4-11); Map abbrevs = parseDebugAbbreviation(header); parseDebugInfoEntry(requestor, in, abbrevs, header); diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/dwarf/DwarfReader.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/dwarf/DwarfReader.java index 4ae30a7bdad..4f445ec3175 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/dwarf/DwarfReader.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/dwarf/DwarfReader.java @@ -171,7 +171,7 @@ public class DwarfReader extends Dwarf implements ISymbolReader { private void addSourceFile(String dir, String name) { - if (name == null) + if (name == null || name.length() == 0) return; if (name.charAt(0) == '<') // don't count the entry "" from GCCE compiler return; @@ -237,16 +237,13 @@ public class DwarfReader extends Dwarf implements ISymbolReader { // Override parent: only handle TAG_Compile_Unit. void processDebugInfoEntry(IDebugEntryRequestor requestor, AbbreviationEntry entry, List list) { - int len = list.size(); int tag = (int) entry.tag; - for (int i = 0; i < len; i++) { - switch (tag) { - case DwarfConstants.DW_TAG_compile_unit : - processCompileUnit(requestor, list); - break; - default: - break; - } + switch (tag) { + case DwarfConstants.DW_TAG_compile_unit : + processCompileUnit(requestor, list); + break; + default: + break; } }