public inbox for libabigail@sourceware.org
 help / color / mirror / Atom feed
* [PATCH, applied] Bug 29692 - Support binaries with empty symbol table
@ 2023-03-22 16:31 Dodji Seketeli
  0 siblings, 0 replies; only message in thread
From: Dodji Seketeli @ 2023-03-22 16:31 UTC (permalink / raw)
  To: libabigail

Hello,

Some binaries can have a symbol table in which no symbol is actually
defined and exported.  That binary would thus have an empty ABI
corpus.

Interestingly, Libabigail's DWARF reader is emits an error when
it encounters such binaries.

This patch adds the support for those binaries.

	* src/abg-dwarf-reader.cc (reader::read_debug_info_into_corpus):
	Get out early also upon having an empty symbol table.
	* src/abg-elf-reader.cc (reader::read_corpus): Error out only if
	there is no symbol table for the binary.  If an empty symbol table
	is found however, that is not an error.
	* tests/data/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0:
	New binary test input.
	* tests/data/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0.abi:
	New expected abixml file.
	* tests/data/Makefile.am: Add the new input test files to source
	distribution.
	* tests/test-read-dwarf.cc (in_out_specs): Add the new test inputs
	above to this test harness.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
---
 src/abg-dwarf-reader.cc                         |   6 ++++--
 src/abg-elf-reader.cc                           |   7 +++++--
 tests/data/Makefile.am                          |   2 ++
 .../PR29692-kdelibs3-libkjava.so.1.0.0          | Bin 0 -> 15048 bytes
 .../PR29692-kdelibs3-libkjava.so.1.0.0.abi      |   2 ++
 tests/test-read-dwarf.cc                        |   9 +++++++++
 6 files changed, 22 insertions(+), 4 deletions(-)
 create mode 100755 tests/data/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0
 create mode 100644 tests/data/test-read-dwarf/PR29692-kdelibs3-libkjava.so.1.0.0.abi

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
literal 15048
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

literal 0
HcmV?d00001

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
new file mode 100644
index 00000000..e2b3e145
--- /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",
-- 
2.39.2


-- 
		Dodji


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-03-22 16:31 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-22 16:31 [PATCH, applied] Bug 29692 - Support binaries with empty symbol table Dodji Seketeli

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).