Index: llvm/trunk/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp
===================================================================
--- llvm/trunk/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp
+++ llvm/trunk/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp
@@ -136,6 +136,11 @@
                                                   uint64_t SymbolSize,
                                                   DataExtractor *OpdExtractor,
                                                   uint64_t OpdAddress) {
+  // Avoid adding symbols from an unknown/undefined section.
+  const ObjectFile *Obj = Symbol.getObject();
+  Expected<section_iterator> Sec = Symbol.getSection();
+  if (!Sec || (Obj && Obj->section_end() == *Sec))
+    return std::error_code();
   Expected<SymbolRef::Type> SymbolTypeOrErr = Symbol.getType();
   if (!SymbolTypeOrErr)
     return errorToErrorCode(SymbolTypeOrErr.takeError());
Index: llvm/trunk/test/tools/llvm-symbolizer/ignore-undefined-symbols.s
===================================================================
--- llvm/trunk/test/tools/llvm-symbolizer/ignore-undefined-symbols.s
+++ llvm/trunk/test/tools/llvm-symbolizer/ignore-undefined-symbols.s
@@ -0,0 +1,12 @@
+# REQUIRES: x86-registered-target
+# RUN: llvm-mc --filetype=obj --triple=x86_64-pc-linux %s -o %t.o -g
+# RUN: llvm-symbolizer --obj=%t.o 0 | FileCheck %s --implicit-check-not=bar
+
+# CHECK:      foo
+# CHECK-NEXT: ignore-undefined-symbols.s:12:0
+
+.type bar,@function
+.type foo,@function
+.global foo
+foo:
+    call bar