summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Labath <labath@google.com>2018-06-14 14:41:30 +0000
committerPavel Labath <labath@google.com>2018-06-14 14:41:30 +0000
commit234c68168648d0bbcb514d337dd268d4dc3ed0c3 (patch)
treed56237c16871579a509299829395e461edc4c4a9
parent1ee741bdb65c1005eca047054cedab3f24deb8db (diff)
downloadbcm5719-llvm-234c68168648d0bbcb514d337dd268d4dc3ed0c3.tar.gz
bcm5719-llvm-234c68168648d0bbcb514d337dd268d4dc3ed0c3.zip
DebugNamesDWARFIndex: fix handling of compressed sections
This fixes a silly bug where we were accidentally freeing the memory used to store the decompressed .debug_names data. I had actually considered this scenario when writing the class and put appropriate precautions in place -- I just failed to wire it all up correctly. This was only an issue for compressed sections because in case of uncompressed ones we would access the data straight out of the mmapped object file. llvm-svn: 334717
-rw-r--r--lldb/lit/SymbolFile/DWARF/debug-names-compressed.cpp14
-rw-r--r--lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.h1
2 files changed, 15 insertions, 0 deletions
diff --git a/lldb/lit/SymbolFile/DWARF/debug-names-compressed.cpp b/lldb/lit/SymbolFile/DWARF/debug-names-compressed.cpp
new file mode 100644
index 00000000000..076cac19252
--- /dev/null
+++ b/lldb/lit/SymbolFile/DWARF/debug-names-compressed.cpp
@@ -0,0 +1,14 @@
+// Test for a bug where we crashed while processing a compressed debug_names
+// section (use after free).
+
+// REQUIRES: lld, zlib
+
+// RUN: clang -g -c -o %t.o --target=x86_64-pc-linux -mllvm -accel-tables=Dwarf %s
+// RUN: ld.lld %t.o -o %t --compress-debug-sections=zlib
+// RUN: lldb-test symbols --find=variable --name=foo %t | FileCheck %s
+
+// CHECK: Found 1 variables:
+int foo;
+// ONE-DAG: name = "foo", type = {{.*}} (int), {{.*}} decl = debug-names-compressed.cpp:[[@LINE-1]]
+
+extern "C" void _start() {}
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.h b/lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.h
index 4f0b1cee420..ad964e51cfc 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.h
+++ b/lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.h
@@ -53,6 +53,7 @@ private:
DWARFDataExtractor debug_str_data,
DWARFDebugInfo &debug_info)
: DWARFIndex(module), m_debug_info(debug_info),
+ m_debug_names_data(debug_names_data), m_debug_str_data(debug_str_data),
m_debug_names_up(std::move(debug_names_up)),
m_fallback(module, &debug_info, GetUnits(*m_debug_names_up)) {}
OpenPOWER on IntegriCloud