Re: [PATCH] libelf: Fixup SHF_COMPRESSED sh_addralign in elf_update if necessary.

2020-08-20 Thread Nick Clifton via Elfutils-devel
Hi Guys,

  I have now applied the attached patch to the binutils sources to fix the 
problem there.

Cheers
  Nick

diff --git a/bfd/bfd.c b/bfd/bfd.c
index ec38a0673c..449bcc6cef 100644
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -2558,6 +2558,7 @@ bfd_update_compression_header (bfd *abfd, bfd_byte *contents,
   if ((abfd->flags & BFD_COMPRESS_GABI) != 0)
 	{
 	  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+	  struct bfd_elf_section_data * esd = elf_section_data (sec);
 
 	  /* Set the SHF_COMPRESSED bit.  */
 	  elf_section_flags (sec) |= SHF_COMPRESSED;
@@ -2571,6 +2572,7 @@ bfd_update_compression_header (bfd *abfd, bfd_byte *contents,
 			  &echdr->ch_addralign);
 	  /* bfd_log2 (alignof (Elf32_Chdr)) */
 	  bfd_set_section_alignment (sec, 2);
+	  esd->this_hdr.sh_addralign = 4;
 	}
 	  else
 	{
@@ -2582,6 +2584,7 @@ bfd_update_compression_header (bfd *abfd, bfd_byte *contents,
 			  &echdr->ch_addralign);
 	  /* bfd_log2 (alignof (Elf64_Chdr)) */
 	  bfd_set_section_alignment (sec, 3);
+	  esd->this_hdr.sh_addralign = 8;
 	}
 	  break;
 	}
diff --git a/ld/testsuite/ld-elf/zlibbegin.rS b/ld/testsuite/ld-elf/zlibbegin.rS
index dbab80c2ac..c34a0f8898 100644
--- a/ld/testsuite/ld-elf/zlibbegin.rS
+++ b/ld/testsuite/ld-elf/zlibbegin.rS
@@ -1,3 +1,3 @@
 #...
- +\[[ 0-9]+\] .debug_.* +(PROGBITS|MIPS_DWARF) +0+ +[0-9a-f]+ +[0-9a-f]+ [0-9a-f]+ +G?C +0 +0 +1
+ +\[[ 0-9]+\] .debug_.* +(PROGBITS|MIPS_DWARF) +0+ +[0-9a-f]+ +[0-9a-f]+ [0-9a-f]+ +G?C +0 +0 +[48]
 #pass
diff --git a/ld/testsuite/ld-elf/zlibnormal.rS b/ld/testsuite/ld-elf/zlibnormal.rS
index dbab80c2ac..c34a0f8898 100644
--- a/ld/testsuite/ld-elf/zlibnormal.rS
+++ b/ld/testsuite/ld-elf/zlibnormal.rS
@@ -1,3 +1,3 @@
 #...
- +\[[ 0-9]+\] .debug_.* +(PROGBITS|MIPS_DWARF) +0+ +[0-9a-f]+ +[0-9a-f]+ [0-9a-f]+ +G?C +0 +0 +1
+ +\[[ 0-9]+\] .debug_.* +(PROGBITS|MIPS_DWARF) +0+ +[0-9a-f]+ +[0-9a-f]+ [0-9a-f]+ +G?C +0 +0 +[48]
 #pass


[PATCH] libdwfl: do not dlopen libdebuginfod.so in --disable-libdebuginfod mode

2020-08-20 Thread Dmitry V. Levin
debuginfod-client.c used to try to dlopen libdebuginfod.so even if
libdebuginfod was completely disabled using --disable-libdebuginfod.

Fix this by disabling build of debuginfod-client.c and disabling all
__libdwfl_debuginfod_* invocations in --disable-libdebuginfod mode.

Signed-off-by: Dmitry V. Levin 
---
 ChangeLog|  4 
 configure.ac |  5 -
 libdwfl/ChangeLog| 13 +
 libdwfl/Makefile.am  |  5 -
 libdwfl/dwfl_build_id_find_elf.c |  2 ++
 libdwfl/dwfl_end.c   |  2 ++
 libdwfl/find-debuginfo.c |  2 ++
 7 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index c6b526fe..0f00fade 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2020-08-20  Dmitry V. Levin  
+
+   * configure.ac (--enable-libdebuginfod): AC_DEFINE ENABLE_LIBDEBUGINFOD.
+
 2020-07-17  Mark Wielaard  
 
* configure.ac: Set -DBAD_FTS=1 also for CXXFLAGS.
diff --git a/configure.ac b/configure.ac
index e2f213ab..f3f1597b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -693,7 +693,10 @@ AS_IF([test "x$enable_libdebuginfod" != "xno"], [
 fi
 ])
 
-AS_IF([test "x$enable_libdebuginfod" = 
"xdummy"],AC_DEFINE([DUMMY_LIBDEBUGINFOD],[1],[Build dummy libdebuginfod]))
+AS_IF([test "x$enable_libdebuginfod" = "xyes" || test "x$enable_libdebuginfod" 
= "xdummy"],
+  [AC_DEFINE([ENABLE_LIBDEBUGINFOD], [1], [Enable libdebuginfod])])
+AS_IF([test "x$enable_libdebuginfod" = "xdummy"],
+  [AC_DEFINE([DUMMY_LIBDEBUGINFOD], [1], [Build dummy libdebuginfod])])
 AM_CONDITIONAL([LIBDEBUGINFOD],[test "x$enable_libdebuginfod" = "xyes" || test 
"x$enable_libdebuginfod" = "xdummy"])
 AM_CONDITIONAL([DUMMY_LIBDEBUGINFOD],[test "x$enable_libdebuginfod" = 
"xdummy"])
 
diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog
index e59efd77..bf6b3ff6 100644
--- a/libdwfl/ChangeLog
+++ b/libdwfl/ChangeLog
@@ -1,3 +1,16 @@
+2020-08-20  Dmitry V. Levin  
+
+   * Makefile.am (libdwfl_a_SOURCES): Conditionalize
+   debuginfod-client.c on LIBDEBUGINFOD.
+   * dwfl_build_id_find_elf.c (dwfl_build_id_find_elf): Conditionalize
+   __libdwfl_debuginfod_find_executable invocation on
+   ENABLE_LIBDEBUGINFOD.
+   * dwfl_end.c (dwfl_end): Conditionalize __libdwfl_debuginfod_end
+   invocation on ENABLE_LIBDEBUGINFOD.
+   * find-debuginfo.c (dwfl_standard_find_debuginfo): Conditionalize
+   __libdwfl_debuginfod_find_debuginfo invocation on
+   ENABLE_LIBDEBUGINFOD.
+
 2020-07-05  Mark Wielaard  
 
* argp-std.c (parse_opt): Don't assert, but call fail when
diff --git a/libdwfl/Makefile.am b/libdwfl/Makefile.am
index 47bd62a5..1de05492 100644
--- a/libdwfl/Makefile.am
+++ b/libdwfl/Makefile.am
@@ -70,7 +70,7 @@ libdwfl_a_SOURCES = dwfl_begin.c dwfl_end.c dwfl_error.c 
dwfl_version.c \
link_map.c core-file.c open.c image-header.c \
dwfl_frame.c frame_unwind.c dwfl_frame_pc.c \
linux-pid-attach.c linux-core-attach.c dwfl_frame_regs.c \
-   gzip.c debuginfod-client.c
+   gzip.c
 
 if BZLIB
 libdwfl_a_SOURCES += bzip2.c
@@ -78,6 +78,9 @@ endif
 if LZMA
 libdwfl_a_SOURCES += lzma.c
 endif
+if LIBDEBUGINFOD
+libdwfl_a_SOURCES += debuginfod-client.c
+endif
 
 libdwfl = $(libdw)
 libdw = ../libdw/libdw.so
diff --git a/libdwfl/dwfl_build_id_find_elf.c b/libdwfl/dwfl_build_id_find_elf.c
index f685c979..7b604d47 100644
--- a/libdwfl/dwfl_build_id_find_elf.c
+++ b/libdwfl/dwfl_build_id_find_elf.c
@@ -192,12 +192,14 @@ dwfl_build_id_find_elf (Dwfl_Module *mod,
 }
   else
 {
+#ifdef ENABLE_LIBDEBUGINFOD
   /* If all else fails and a build-id is available, query the
 debuginfo-server if enabled.  */
   if (fd < 0 && mod->build_id_len > 0)
fd = __libdwfl_debuginfod_find_executable (mod->dwfl,
   mod->build_id_bits,
   mod->build_id_len);
+#endif
 }
 
   if (fd < 0 && errno == 0 && mod->build_id_len > 0)
diff --git a/libdwfl/dwfl_end.c b/libdwfl/dwfl_end.c
index 4f6c722a..b1840191 100644
--- a/libdwfl/dwfl_end.c
+++ b/libdwfl/dwfl_end.c
@@ -39,7 +39,9 @@ dwfl_end (Dwfl *dwfl)
   if (dwfl == NULL)
 return;
 
+#ifdef ENABLE_LIBDEBUGINFOD
   __libdwfl_debuginfod_end (dwfl->debuginfod);
+#endif
 
   if (dwfl->process)
 __libdwfl_process_free (dwfl->process);
diff --git a/libdwfl/find-debuginfo.c b/libdwfl/find-debuginfo.c
index eb68d549..449df5a1 100644
--- a/libdwfl/find-debuginfo.c
+++ b/libdwfl/find-debuginfo.c
@@ -401,6 +401,7 @@ dwfl_standard_find_debuginfo (Dwfl_Module *mod,
   free (canon);
 }
 
+#ifdef ENABLE_LIBDEBUGINFOD
   /* Still nothing? Try if we can use the debuginfod client.
  But note that we might be looking for the alt file.
  We use the same trick as dwfl_build_id_find_debuginfo.
@@ -422,6 +423,7 @@ dwfl_standard_find_debuginfo (