From: Timm Bäder <tbae...@redhat.com>

Signed-off-by: Timm Bäder <tbae...@redhat.com>
---
 src/strip.c | 37 +++++++++++++++++++++----------------
 1 file changed, 21 insertions(+), 16 deletions(-)

diff --git a/src/strip.c b/src/strip.c
index 7ce14ab8..c971b6c2 100644
--- a/src/strip.c
+++ b/src/strip.c
@@ -1535,25 +1535,30 @@ handle_elf (int fd, Elf *elf, const char *prefix, const 
char *fname,
                 files by setting the .debug_data pointer to the original
                 file's .data pointer.  Below, we'll copy the section
                 contents.  */
+             size_t shdr_indices[2] = { shdr_info[cnt].shdr.sh_link, 0 };
+             int n = 1;
 
-             inline void check_preserved (size_t i)
-             {
-               if (i != 0 && i < shnum + 2 && shdr_info[i].idx != 0
-                   && shdr_info[i].debug_data == NULL)
-                 {
-                   if (shdr_info[i].data == NULL)
-                     shdr_info[i].data = elf_getdata (shdr_info[i].scn, NULL);
-                   if (shdr_info[i].data == NULL)
-                     INTERNAL_ERROR (fname);
+             if (SH_INFO_LINK_P (&shdr_info[cnt].shdr))
+               {
+                 shdr_indices[1] = shdr_info[cnt].shdr.sh_info;
+                 n++;
+               }
 
-                   shdr_info[i].debug_data = shdr_info[i].data;
-                   changes |= i < cnt;
-                 }
-             }
+             for (int j = 0; j < n; j++)
+               {
+                 size_t i = shdr_indices[j];
+                 if (i != 0 && i < shnum + 2 && shdr_info[i].idx != 0
+                     && shdr_info[i].debug_data == NULL)
+                   {
+                     if (shdr_info[i].data == NULL)
+                       shdr_info[i].data = elf_getdata (shdr_info[i].scn, 
NULL);
+                     if (shdr_info[i].data == NULL)
+                       INTERNAL_ERROR (fname);
 
-             check_preserved (shdr_info[cnt].shdr.sh_link);
-             if (SH_INFO_LINK_P (&shdr_info[cnt].shdr))
-               check_preserved (shdr_info[cnt].shdr.sh_info);
+                     shdr_info[i].debug_data = shdr_info[i].data;
+                     changes |= i < cnt;
+                   }
+               }
            }
        }
     }
-- 
2.26.2

Reply via email to