[PATCH] PR32930 backends/: guard asm/perf_regs.h include

2025-05-05 Thread Serhei Makarov
asm/perf_regs.h is an arch-specific linux include, not present on
architectures like hppa and m68k that lack perf_events support.

Only one place we need to fix; others already guard the include by
architecture, or use architecture-independent headers (e.g.
linux/perf_events.h).

* backends/libebl_PERF_FLAGS.h: Only include asm/perf_regs.h on
  architectures where we use it.
---
 backends/libebl_PERF_FLAGS.h | 8 ++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/backends/libebl_PERF_FLAGS.h b/backends/libebl_PERF_FLAGS.h
index 2ed45f0f..51c20ea6 100644
--- a/backends/libebl_PERF_FLAGS.h
+++ b/backends/libebl_PERF_FLAGS.h
@@ -32,8 +32,12 @@
 #define _LIBEBL_PERF_FLAGS_H 1
 
 #if defined(__linux__)
+/* XXX Need to exclude __linux__ arches without perf_regs.h. */
+#if defined(__x86_64__) || defined(__i386__)
+/* || defined(other_architecture)... */
 # include 
 #endif
+#endif
 
 #if defined(_ASM_X86_PERF_REGS_H)
 /* See the code in x86_initreg_sample.c for list of required regs and
@@ -49,8 +53,8 @@
see the code in tools/perf/util/intel-pt.c intel_pt_add_gp_regs()
and note how regs are added in the same order as the perf_regs.h enum.  */
 #else
-/* Since asm/perf_regs.h gives the register layout for a different arch,
-   we can't unwind x86_64 frames.  */
+/* Since asm/perf_regs.h is absent, or gives the register layout for a
+   different arch, we can't unwind i386 and x86_64 frames. */
 #define PERF_FRAME_REGISTERS_I386 0
 #define PERF_FRAME_REGISTERS_X86_64 0
 #endif
-- 
2.47.0



[PATCH v2] src/readelf.c: Access symbol and version data only if available

2025-05-05 Thread Aaron Merey
handle_dynamic_symtab can attempt to read symbol and version data from
file offset of 0 or address of 0 if the associated DT_ tags aren't found.

Fix this by only reading symbol and version data when non-zero file
offsets/addresses have been found.

https://sourceware.org/bugzilla/show_bug.cgi?id=32864

Suggested-by: Constantine Bytensky 
Signed-off-by: Aaron Merey 
---
v2 changes: Added checks for unset addrs and missing symbol version data.

 src/readelf.c | 82 ++-
 1 file changed, 49 insertions(+), 33 deletions(-)

diff --git a/src/readelf.c b/src/readelf.c
index 8603b3c4..e9df0344 100644
--- a/src/readelf.c
+++ b/src/readelf.c
@@ -3047,53 +3047,69 @@ handle_dynamic_symtab (Ebl *ebl)
   Elf_Data *verdef_data = NULL;
   Elf_Data *verneed_data = NULL;
 
-  symdata = elf_getdata_rawchunk (
-  ebl->elf, offs[i_symtab],
-  gelf_fsize (ebl->elf, ELF_T_SYM, syments, EV_CURRENT), ELF_T_SYM);
-  symstrdata = elf_getdata_rawchunk (ebl->elf, offs[i_strtab], addrs[i_strsz],
- ELF_T_BYTE);
-  versym_data = elf_getdata_rawchunk (
-  ebl->elf, offs[i_versym], syments * sizeof (Elf64_Half), ELF_T_HALF);
+  if (offs[i_symtab] != 0)
+symdata = elf_getdata_rawchunk (
+   ebl->elf, offs[i_symtab],
+   gelf_fsize (ebl->elf, ELF_T_SYM, syments, EV_CURRENT), ELF_T_SYM);
+
+  if (offs[i_strtab] != 0 && addrs[i_strsz] != 0)
+symstrdata = elf_getdata_rawchunk (ebl->elf, offs[i_strtab], 
addrs[i_strsz],
+  ELF_T_BYTE);
+
+  if (offs[i_versym] != 0)
+versym_data = elf_getdata_rawchunk (
+   ebl->elf, offs[i_versym], syments * sizeof (Elf64_Half), ELF_T_HALF);
 
   /* Get the verneed_data without vernaux.  */
-  verneed_data = elf_getdata_rawchunk (
-  ebl->elf, offs[i_verneed], addrs[i_verneednum] * sizeof (Elf64_Verneed),
-  ELF_T_VNEED);
+  if (offs[i_verneed] != 0 && addrs[i_verneednum] != 0)
+verneed_data = elf_getdata_rawchunk (
+   ebl->elf, offs[i_verneed], addrs[i_verneednum] * sizeof (Elf64_Verneed),
+   ELF_T_VNEED);
+
   size_t vernauxnum = 0;
   size_t vn_next_offset = 0;
 
-  for (size_t i = 0; i < addrs[i_verneednum]; i++)
-{
-  GElf_Verneed *verneed
-  = (GElf_Verneed *)(verneed_data->d_buf + vn_next_offset);
-  vernauxnum += verneed->vn_cnt;
-  vn_next_offset += verneed->vn_next;
-}
+  if (verneed_data != NULL && verneed_data->d_buf != NULL
+  && addrs[i_verneednum] != 0)
+for (size_t i = 0; i < addrs[i_verneednum]; i++)
+  {
+   GElf_Verneed *verneed
+ = (GElf_Verneed *)(verneed_data->d_buf + vn_next_offset);
+   vernauxnum += verneed->vn_cnt;
+   vn_next_offset += verneed->vn_next;
+  }
 
   /* Update the verneed_data to include the vernaux.  */
-  verneed_data = elf_getdata_rawchunk (
-  ebl->elf, offs[i_verneed],
-  (addrs[i_verneednum] + vernauxnum) * sizeof (GElf_Verneed), ELF_T_VNEED);
+  if (offs[i_verneed] != 0 && addrs[i_verneednum] != 0)
+verneed_data = elf_getdata_rawchunk (
+   ebl->elf, offs[i_verneed],
+   (addrs[i_verneednum] + vernauxnum) * sizeof (GElf_Verneed),
+   ELF_T_VNEED);
 
   /* Get the verdef_data without verdaux.  */
-  verdef_data = elf_getdata_rawchunk (
-  ebl->elf, offs[i_verdef], addrs[i_verdefnum] * sizeof (Elf64_Verdef),
-  ELF_T_VDEF);
+  if (offs[i_verdef] != 0 && addrs[i_verdefnum] != 0)
+verdef_data = elf_getdata_rawchunk (
+   ebl->elf, offs[i_verdef], addrs[i_verdefnum] * sizeof (Elf64_Verdef),
+   ELF_T_VDEF);
+
   size_t verdauxnum = 0;
   size_t vd_next_offset = 0;
 
-  for (size_t i = 0; i < addrs[i_verdefnum]; i++)
-{
-  GElf_Verdef *verdef
-  = (GElf_Verdef *)(verdef_data->d_buf + vd_next_offset);
-  verdauxnum += verdef->vd_cnt;
-  vd_next_offset += verdef->vd_next;
-}
+  if (verdef_data != NULL && verdef_data->d_buf != NULL
+  && addrs[i_verdefnum] != 0)
+for (size_t i = 0; i < addrs[i_verdefnum]; i++)
+  {
+   GElf_Verdef *verdef
+ = (GElf_Verdef *)(verdef_data->d_buf + vd_next_offset);
+   verdauxnum += verdef->vd_cnt;
+   vd_next_offset += verdef->vd_next;
+  }
 
   /* Update the verdef_data to include the verdaux.  */
-  verdef_data = elf_getdata_rawchunk (
-  ebl->elf, offs[i_verdef],
-  (addrs[i_verdefnum] + verdauxnum) * sizeof (GElf_Verdef), ELF_T_VDEF);
+  if (offs[i_verdef] != 0 && addrs[i_verdefnum] != 0)
+verdef_data = elf_getdata_rawchunk (
+   ebl->elf, offs[i_verdef],
+   (addrs[i_verdefnum] + verdauxnum) * sizeof (GElf_Verdef), ELF_T_VDEF);
 
   unsigned int nsyms = (unsigned int)syments;
   process_symtab (ebl, nsyms, 0, 0, 0, symdata, versym_data, symstrdata,
-- 
2.49.0



☠ Buildbot (Sourceware): elfutils - failed test (failure) (main)

2025-05-05 Thread builder
A new failure has been detected on builder elfutils-debian-armhf while building 
elfutils.

Full details are available at:
https://builder.sourceware.org/buildbot/#/builders/6/builds/411

Build state: failed test (failure)
Revision: c96c4fcd54c64678dbcf9e43b9a991362aa83106
Worker: debian-armhf
Build Reason: (unknown)
Blamelist: Mark Wielaard 

Steps:

- 0: worker_preparation ( success )

- 1: set package name ( success )

- 2: git checkout ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#/builders/6/builds/411/steps/2/logs/stdio

- 3: autoreconf ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#/builders/6/builds/411/steps/3/logs/stdio

- 4: configure ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#/builders/6/builds/411/steps/4/logs/stdio
- config.log: 
https://builder.sourceware.org/buildbot/#/builders/6/builds/411/steps/4/logs/config_log

- 5: get version ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#/builders/6/builds/411/steps/5/logs/stdio
- property changes: 
https://builder.sourceware.org/buildbot/#/builders/6/builds/411/steps/5/logs/property_changes

- 6: make ( warnings )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#/builders/6/builds/411/steps/6/logs/stdio
- warnings (3): 
https://builder.sourceware.org/buildbot/#/builders/6/builds/411/steps/6/logs/warnings__3_

- 7: make check ( failure )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#/builders/6/builds/411/steps/7/logs/stdio
- test-suite.log: 
https://builder.sourceware.org/buildbot/#/builders/6/builds/411/steps/7/logs/test-suite_log

- 8: prep ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#/builders/6/builds/411/steps/8/logs/stdio

- 9: build bunsen.cpio.gz ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#/builders/6/builds/411/steps/9/logs/stdio

- 10: fetch bunsen.cpio.gz ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#/builders/6/builds/411/steps/10/logs/stdio

- 11: unpack bunsen.cpio.gz ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#/builders/6/builds/411/steps/11/logs/stdio

- 12: pass .bunsen.source.* ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#/builders/6/builds/411/steps/12/logs/stdio

- 13: upload to bunsen ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#/builders/6/builds/411/steps/13/logs/stdio

- 14: clean up ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#/builders/6/builds/411/steps/14/logs/stdio

- 15: make distclean ( success )
Logs:
- stdio: 
https://builder.sourceware.org/buildbot/#/builders/6/builds/411/steps/15/logs/stdio