]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
Move nested functions in libelf.
authorChih-Hung Hsieh <chh@google.com>
Wed, 14 Oct 2015 02:06:21 +0000 (19:06 -0700)
committerMark Wielaard <mjw@redhat.com>
Thu, 22 Oct 2015 20:43:42 +0000 (22:43 +0200)
* Move nested functions to file scope
  in libelf/elf_begin.c and elf32_updatefile.c
  to compile with clang.

Signed-off-by: Chih-Hung Hsieh <chh@google.com>
libelf/ChangeLog
libelf/elf32_updatefile.c
libelf/elf_begin.c

index d8651d759b1ee4cedb6663ccef5d176e718ddfd1..8beecd4b5d6659230a82a373391090dcebcb9ad0 100644 (file)
@@ -1,3 +1,10 @@
+2015-10-13  Chih-Hung Hsieh  <chh@google.com>
+
+       * elf32_updatefile.c (__elfw2(LIBELFBITS,updatemmap)): Move nested
+       function 'fill_mmap' to file scope.
+       * elf_begin.c (elf_begin): Move nested function 'lock_dup_elf'
+       to file scope.
+
 2015-10-09  Josh Stone  <jistone@redhat.com>
 
        * libelf.h: Replace loff_t with int64_t throughout.
index 832f852d4f2c564bd43aec79965217c58c799f96..090921976438fd5fc9fdfca42985193531e182e0 100644 (file)
@@ -101,6 +101,29 @@ sort_sections (Elf_Scn **scns, Elf_ScnList *list)
 }
 
 
+static inline void
+fill_mmap (size_t offset, char *last_position, char *scn_start,
+           char *const shdr_start, char *const shdr_end)
+{
+  size_t written = 0;
+
+  if (last_position < shdr_start)
+    {
+      written = MIN (scn_start + offset - last_position,
+                     shdr_start - last_position);
+
+      memset (last_position, __libelf_fill_byte, written);
+    }
+
+  if (last_position + written != scn_start + offset
+      && shdr_end < scn_start + offset)
+    {
+      char *fill_start = MAX (shdr_end, scn_start);
+      memset (fill_start, __libelf_fill_byte,
+              scn_start + offset - fill_start);
+    }
+}
+
 int
 internal_function
 __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum)
@@ -303,27 +326,6 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum)
          Elf_Data_List *dl = &scn->data_list;
          bool scn_changed = false;
 
-         void fill_mmap (size_t offset)
-         {
-           size_t written = 0;
-
-           if (last_position < shdr_start)
-             {
-               written = MIN (scn_start + offset - last_position,
-                              shdr_start - last_position);
-
-               memset (last_position, __libelf_fill_byte, written);
-             }
-
-           if (last_position + written != scn_start + offset
-               && shdr_end < scn_start + offset)
-             {
-               char *fill_start = MAX (shdr_end, scn_start);
-               memset (fill_start, __libelf_fill_byte,
-                       scn_start + offset - fill_start);
-             }
-         }
-
          if (scn->data_list_rear != NULL)
            do
              {
@@ -338,7 +340,8 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum)
                        || ((scn->flags | dl->flags | elf->flags)
                            & ELF_F_DIRTY) != 0))
                  {
-                   fill_mmap (dl->data.d.d_off);
+                   fill_mmap (dl->data.d.d_off, last_position, scn_start,
+                              shdr_start, shdr_end);
                    last_position = scn_start + dl->data.d.d_off;
                  }
 
@@ -390,7 +393,8 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum)
              /* If the previous section (or the ELF/program
                 header) changed we might have to fill the gap.  */
              if (scn_start > last_position && previous_scn_changed)
-               fill_mmap (0);
+               fill_mmap (0, last_position, scn_start,
+                          shdr_start, shdr_end);
 
              /* We have to trust the existing section header information.  */
              last_position = scn_start + shdr->sh_size;
index 213b5c0bbeba0aa38aa5cbd68b36f559c6305c64..f26119c2fde5cb14339bf605eced4569bf18c075 100644 (file)
@@ -1039,6 +1039,19 @@ write_file (int fd, Elf_Cmd cmd)
   return result;
 }
 
+/* Lock if necessary before dup an archive.  */
+static inline Elf *
+lock_dup_elf (int fildes, Elf_Cmd cmd, Elf *ref)
+{
+  /* We need wrlock to dup an archive.  */
+  if (ref->kind == ELF_K_AR)
+    {
+      rwlock_unlock (ref->lock);
+      rwlock_wrlock (ref->lock);
+    }
+    /* Duplicate the descriptor.  */
+  return dup_elf (fildes, cmd, ref);
+}
 
 /* Return a descriptor for the file belonging to FILDES.  */
 Elf *
@@ -1063,19 +1076,6 @@ elf_begin (int fildes, Elf_Cmd cmd, Elf *ref)
       return NULL;
     }
 
-  Elf *lock_dup_elf (void)
-  {
-    /* We need wrlock to dup an archive.  */
-    if (ref->kind == ELF_K_AR)
-      {
-       rwlock_unlock (ref->lock);
-       rwlock_wrlock (ref->lock);
-      }
-
-    /* Duplicate the descriptor.  */
-    return dup_elf (fildes, cmd, ref);
-  }
-
   switch (cmd)
     {
     case ELF_C_NULL:
@@ -1096,7 +1096,7 @@ elf_begin (int fildes, Elf_Cmd cmd, Elf *ref)
     case ELF_C_READ:
     case ELF_C_READ_MMAP:
       if (ref != NULL)
-       retval = lock_dup_elf ();
+       retval = lock_dup_elf (fildes, cmd, ref);
       else
        /* Create descriptor for existing file.  */
        retval = read_file (fildes, 0, ~((size_t) 0), cmd, NULL);
@@ -1117,7 +1117,7 @@ elf_begin (int fildes, Elf_Cmd cmd, Elf *ref)
              retval = NULL;
            }
          else
-           retval = lock_dup_elf ();
+           retval = lock_dup_elf (fildes, cmd, ref);
        }
       else
        /* Create descriptor for existing file.  */