Blame SOURCES/elfutils-0.188-compile-warnings.patch

68b702
commit 75f2de448f311807e2493f2a37a980e2d872b229
68b702
Author: Mark Wielaard <mark@klomp.org>
68b702
Date:   Thu Nov 3 13:38:45 2022 +0100
68b702
68b702
    readelf: Check phdr != NULL or shdr != NULL in handle_dynamic.
68b702
    
68b702
    The compiler doesn't know that when use_dynamic_segment is true,
68b702
    then phdr should/will be non-NULL and otherwise shdr is non-NULL.
68b702
    Add explicit checks to help the compiler out and in case an error
68b702
    is made calling the handle_dynamic function.
68b702
    
68b702
    Signed-off-by: Mark Wielaard <mark@klomp.org>
68b702
68b702
diff --git a/src/readelf.c b/src/readelf.c
68b702
index 0e0b05c4..e721a209 100644
68b702
--- a/src/readelf.c
68b702
+++ b/src/readelf.c
68b702
@@ -1828,7 +1828,7 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, GElf_Phdr *phdr)
68b702
   size_t dyn_ents;
68b702
 
68b702
   /* Get the data of the section.  */
68b702
-  if (use_dynamic_segment)
68b702
+  if (use_dynamic_segment && phdr != NULL)
68b702
     data = elf_getdata_rawchunk(ebl->elf, phdr->p_offset,
68b702
 				phdr->p_filesz, ELF_T_DYN);
68b702
   else
68b702
@@ -1840,7 +1840,7 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, GElf_Phdr *phdr)
68b702
   /* Get the dynamic section entry number */
68b702
   dyn_ents = get_dyn_ents (data);
68b702
 
68b702
-  if (!use_dynamic_segment)
68b702
+  if (!use_dynamic_segment && shdr != NULL)
68b702
     {
68b702
       /* Get the section header string table index.  */
68b702
       if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
68b702
@@ -1862,7 +1862,7 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, GElf_Phdr *phdr)
68b702
 	      (int) shdr->sh_link,
68b702
 	      elf_strptr (ebl->elf, shstrndx, glink->sh_name));
68b702
     }
68b702
-  else
68b702
+  else if (phdr != NULL)
68b702
     {
68b702
       printf (ngettext ("\
68b702
 \nDynamic segment contains %lu entry:\n Addr: %#0*" PRIx64 "  Offset: %#08" PRIx64 "\n",
68b702
@@ -1879,7 +1879,7 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, GElf_Phdr *phdr)
68b702
   /* if --use-dynamic option is enabled,
68b702
      use the string table to get the related library info.  */
68b702
   Elf_Data *strtab_data = NULL;
68b702
-  if (use_dynamic_segment)
68b702
+  if (use_dynamic_segment && phdr != NULL)
68b702
     {
68b702
       strtab_data = get_dynscn_strtab(ebl->elf, phdr);
68b702
       if (strtab_data == NULL)
68b702
@@ -1903,7 +1903,7 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, GElf_Phdr *phdr)
68b702
 	  || dyn->d_tag == DT_RPATH
68b702
 	  || dyn->d_tag == DT_RUNPATH)
68b702
 	{
68b702
-	  if (! use_dynamic_segment)
68b702
+	  if (! use_dynamic_segment && shdr != NULL)
68b702
 	    name = elf_strptr (ebl->elf, shdr->sh_link, dyn->d_un.d_val);
68b702
 	  else if (dyn->d_un.d_val < strtab_data->d_size
68b702
 		   && memrchr (strtab_data->d_buf + dyn->d_un.d_val, '\0',
68b702
68b702
commit b0a0235771906e3bcd6174c4e3c020b5522b0be5
68b702
Author: Mark Wielaard <mark@klomp.org>
68b702
Date:   Thu Nov 3 13:44:35 2022 +0100
68b702
68b702
    libdw: Don't dereference and assign values we are skipping
68b702
    
68b702
    We don't use the FDE address encoding byte, so no reason
68b702
    to read and store it. Just skip past it.
68b702
    
68b702
    Signed-off-by: Mark Wielaard <mark@klomp.org>
68b702
68b702
diff --git a/libdw/dwarf_next_cfi.c b/libdw/dwarf_next_cfi.c
68b702
index 23b16885..be08984f 100644
68b702
--- a/libdw/dwarf_next_cfi.c
68b702
+++ b/libdw/dwarf_next_cfi.c
68b702
@@ -226,7 +226,7 @@ dwarf_next_cfi (const unsigned char e_ident[],
68b702
 	      if (sized_augmentation)
68b702
 		{
68b702
 		  /* Skip FDE address encoding byte.  */
68b702
-		  encoding = *bytes++;
68b702
+		  bytes++;
68b702
 		  continue;
68b702
 		}
68b702
 	      break;
68b702
68b702
commit 52a6a3110e019d696284fdd822c2a2f0987dded2
68b702
Author: Mark Wielaard <mark@klomp.org>
68b702
Date:   Thu Nov 3 13:52:32 2022 +0100
68b702
68b702
    readelf: Check gelf_getdyn doesn't return NULL
68b702
    
68b702
    Signed-off-by: Mark Wielaard <mark@klomp.org>
68b702
68b702
diff --git a/src/readelf.c b/src/readelf.c
68b702
index e721a209..3dafb041 100644
68b702
--- a/src/readelf.c
68b702
+++ b/src/readelf.c
68b702
@@ -4910,7 +4910,7 @@ get_dynscn_addrs(Elf *elf, GElf_Phdr *phdr, GElf_Addr addrs[i_max])
68b702
     GElf_Dyn dyn_mem;
68b702
     GElf_Dyn *dyn = gelf_getdyn(data, dyn_idx, &dyn_mem);
68b702
     /* DT_NULL Marks end of dynamic section.  */
68b702
-    if (dyn->d_tag == DT_NULL)
68b702
+    if (dyn == NULL || dyn->d_tag == DT_NULL)
68b702
       break;
68b702
 
68b702
     switch (dyn->d_tag) {