diff options
5 files changed, 12 insertions, 5 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/lang/c/global_variables/TestGlobalVariables.py b/lldb/packages/Python/lldbsuite/test/lang/c/global_variables/TestGlobalVariables.py index a881117ed7a..46cf54397ac 100644 --- a/lldb/packages/Python/lldbsuite/test/lang/c/global_variables/TestGlobalVariables.py +++ b/lldb/packages/Python/lldbsuite/test/lang/c/global_variables/TestGlobalVariables.py @@ -52,6 +52,7 @@ class GlobalVariablesTestCase(TestBase): # Check that GLOBAL scopes are indicated for the variables. self.expect("frame variable --show-types --scope --show-globals --no-args", VARIABLES_DISPLAYED_CORRECTLY, substrs = ['GLOBAL: (int) g_file_global_int = 42', + 'STATIC: (const int) g_file_static_int = 2', 'GLOBAL: (const char *) g_file_global_cstr', '"g_file_global_cstr"', 'STATIC: (const char *) g_file_static_cstr', diff --git a/lldb/packages/Python/lldbsuite/test/lang/c/global_variables/main.c b/lldb/packages/Python/lldbsuite/test/lang/c/global_variables/main.c index d0ac6a9534f..499b2504774 100644 --- a/lldb/packages/Python/lldbsuite/test/lang/c/global_variables/main.c +++ b/lldb/packages/Python/lldbsuite/test/lang/c/global_variables/main.c @@ -10,13 +10,14 @@ int g_common_1; // Not initialized on purpose to cause it to be undefined external in .o file int g_file_global_int = 42; +static const int g_file_static_int = 2; const char *g_file_global_cstr = "g_file_global_cstr"; static const char *g_file_static_cstr = "g_file_static_cstr"; extern int g_a; int main (int argc, char const *argv[]) { - g_common_1 = g_file_global_int / 2; + g_common_1 = g_file_global_int / g_file_static_int; static const char *g_func_static_cstr = "g_func_static_cstr"; printf ("%s %s\n", g_file_global_cstr, g_file_static_cstr); return g_file_global_int + g_a + g_common_1; // Set break point at this line. //// break $source:$line; continue; var -global g_a -global g_global_int diff --git a/lldb/source/Core/ValueObject.cpp b/lldb/source/Core/ValueObject.cpp index fa3f1ff76db..a2bebcae6d7 100644 --- a/lldb/source/Core/ValueObject.cpp +++ b/lldb/source/Core/ValueObject.cpp @@ -1135,6 +1135,7 @@ ValueObject::GetData (DataExtractor& data, Error &error) if (m_data.GetByteSize()) { data = m_data; + error.Clear(); return data.GetByteSize(); } else diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp index 421249c33f3..e7cb2b413ad 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp @@ -815,7 +815,7 @@ DWARFCompileUnit::IndexPrivate (DWARFCompileUnit* dwarf_cu, bool is_declaration = false; //bool is_artificial = false; bool has_address = false; - bool has_location = false; + bool has_location_or_const_value = false; bool is_global_or_static_variable = false; DWARFFormValue specification_die_form; @@ -860,7 +860,8 @@ DWARFCompileUnit::IndexPrivate (DWARFCompileUnit* dwarf_cu, break; case DW_AT_location: - has_location = true; + case DW_AT_const_value: + has_location_or_const_value = true; if (tag == DW_TAG_variable) { const DWARFDebugInfoEntry* parent_die = die.GetParent(); @@ -1035,7 +1036,7 @@ DWARFCompileUnit::IndexPrivate (DWARFCompileUnit* dwarf_cu, break; case DW_TAG_variable: - if (name && has_location && is_global_or_static_variable) + if (name && has_location_or_const_value && is_global_or_static_variable) { globals.Insert (ConstString(name), DIERef(cu_offset, die.GetOffset())); // Be sure to include variables by their mangled and demangled diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp index 9c161eb3ca5..0ed4d05be5c 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp @@ -4260,7 +4260,10 @@ SymbolFileDWARF::ParseVariableDIE } else { - scope = eValueTypeVariableLocal; + if (location_is_const_value_data) + scope = eValueTypeVariableStatic; + else + scope = eValueTypeVariableLocal; } } |