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

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