From 92dd5cfe044b56e2c8a9382a4b2ae153fe0bd6aa Mon Sep 17 00:00:00 2001 From: Matt Kopec Date: Tue, 12 Feb 2013 18:30:30 +0000 Subject: [PATCH] Fix ELF parsing where undefined symbols were being added to the symbol table with the incorrect symbol type. llvm-svn: 174984 --- .../Plugins/ObjectFile/ELF/ObjectFileELF.cpp | 56 ++++++++++--------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp index 5500e2369983..2cee5c01da98 100644 --- a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp +++ b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp @@ -750,37 +750,41 @@ ParseSymbols(Symtab *symtab, break; } - switch (symbol.getType()) + // If a symbol is undefined do not process it further even if it has a STT type + if (symbol_type != eSymbolTypeUndefined) { - default: - case STT_NOTYPE: - // The symbol's type is not specified. - break; + switch (symbol.getType()) + { + default: + case STT_NOTYPE: + // The symbol's type is not specified. + break; - case STT_OBJECT: - // The symbol is associated with a data object, such as a variable, - // an array, etc. - symbol_type = eSymbolTypeData; - break; + case STT_OBJECT: + // The symbol is associated with a data object, such as a variable, + // an array, etc. + symbol_type = eSymbolTypeData; + break; - case STT_FUNC: - // The symbol is associated with a function or other executable code. - symbol_type = eSymbolTypeCode; - break; + case STT_FUNC: + // The symbol is associated with a function or other executable code. + symbol_type = eSymbolTypeCode; + break; - case STT_SECTION: - // The symbol is associated with a section. Symbol table entries of - // this type exist primarily for relocation and normally have - // STB_LOCAL binding. - break; + case STT_SECTION: + // The symbol is associated with a section. Symbol table entries of + // this type exist primarily for relocation and normally have + // STB_LOCAL binding. + break; - case STT_FILE: - // Conventionally, the symbol's name gives the name of the source - // file associated with the object file. A file symbol has STB_LOCAL - // binding, its section index is SHN_ABS, and it precedes the other - // STB_LOCAL symbols for the file, if it is present. - symbol_type = eSymbolTypeObjectFile; - break; + case STT_FILE: + // Conventionally, the symbol's name gives the name of the source + // file associated with the object file. A file symbol has STB_LOCAL + // binding, its section index is SHN_ABS, and it precedes the other + // STB_LOCAL symbols for the file, if it is present. + symbol_type = eSymbolTypeObjectFile; + break; + } } if (symbol_type == eSymbolTypeInvalid)