diff --git a/src/abg-dwarf-reader.cc b/src/abg-dwarf-reader.cc
index 66b99fd5..d842d25b 100644
--- a/src/abg-dwarf-reader.cc
+++ b/src/abg-dwarf-reader.cc
@@ -2130,8 +2130,10 @@ public:
     // Set symbols information to the corpus.
     corpus()->set_symtab(symtab());
 
-    // Get out now if no debug info is found.
-    if (!dwarf_debug_info())
+    // Get out now if no debug info is found or if the symbol table is
+    // empty.
+    if (!dwarf_debug_info()
+	|| !corpus()->get_symtab()->has_symbols())
       return corpus();
 
     uint8_t address_size = 0;
diff --git a/src/abg-elf-reader.cc b/src/abg-elf-reader.cc
index 57e7f2dc..101df0dc 100644
--- a/src/abg-elf-reader.cc
+++ b/src/abg-elf-reader.cc
@@ -958,10 +958,13 @@ reader::read_corpus(status& status)
   corpus()->set_architecture_name(elf_architecture());
 
   // See if we could find symbol tables.
-  if (!symtab() || !symtab()->has_symbols())
+  if (!symtab())
     {
       status |= STATUS_NO_SYMBOLS_FOUND;
-      // We found no ELF symbol, so we can't handle the binary.
+      // We found no ELF symbol, so we can't handle the binary.  Note
+      // that we could have found a symbol table with no defined &
+      // exported ELF symbols in it.  That case is handled as an empty
+      // corpus, which is different from this case.
       return corpus_sptr();
     }
 
diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
index aafa41de..f2d0c0ca 100644
--- a/tests/data/Makefile.am
+++ b/tests/data/Makefile.am
@@ -666,6 +666,8 @@ test-read-dwarf/PR29443-missing-xx.o.abi \
 test-read-dwarf/test-fallback.abi	\
 test-read-dwarf/test-fallback.c		\
 test-read-dwarf/test-fallback.o		\
+test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0 \
+test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0.abi \
 \
 test-read-ctf/test0		\
 test-read-ctf/test0.abi		\
diff --git a/tests/data/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0 b/tests/data/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0
new file mode 100755
index 0000000000000000000000000000000000000000..b92f4ef962c47e4d62eec161afbab2aeb6aaa42d
GIT binary patch
diff --git a/tests/data/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0.abi b/tests/data/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0.abi
--- /dev/null
+++ b/tests/data/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0.abi
@@ -0,0 +1,2 @@
+<abi-corpus version='2.1' soname='libkjava.so.1'>
+</abi-corpus>
diff --git a/tests/test-read-dwarf.cc b/tests/test-read-dwarf.cc
index 5a00e14e..d2d2ec6d 100644
--- a/tests/test-read-dwarf.cc
+++ b/tests/test-read-dwarf.cc
@@ -550,6 +550,15 @@ static InOutSpec in_out_specs[] =
     "output/test-read-dwarf/PR29443-missing-xx.o.abi",
     NULL,
   },
+  {
+    "data/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0",
+    "",
+    "",
+    SEQUENCE_TYPE_ID_STYLE,
+    "data/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0.abi",
+    "output/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0.abi",
+    NULL,
+  },
   // DWARF fallback feature.
   {
     "data/test-read-dwarf/test-fallback.o",
