This is the mail archive of the elfutils-devel@sourceware.org mailing list for the elfutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Move nested functions in libdwelf.


* Move nested functions to file scope
  in libdwelf/dwelf_elf_gnu_build_id.c
  to compile with clang.

Signed-off-by: Chih-Hung Hsieh <chh@google.com>
---
 libdwelf/ChangeLog                |  5 ++++
 libdwelf/dwelf_elf_gnu_build_id.c | 49 +++++++++++++++++++++++----------------
 2 files changed, 34 insertions(+), 20 deletions(-)

diff --git a/libdwelf/ChangeLog b/libdwelf/ChangeLog
index 342cb9c..f182ecf 100644
--- a/libdwelf/ChangeLog
+++ b/libdwelf/ChangeLog
@@ -1,3 +1,8 @@
+2015-10-14  Chih-Hung Hsieh  <chh@google.com>
+
+	* dwelf_elf_gnu_build_id.c (find_elf_build_id): Move nested function
+	'check_notes' to file scope.
+
 2014-11-14  Mark Wielaard  <mjw@redhat.com>
 
 	* dwelf_elf_gnu_debuglink.c (dwelf_elf_gnu_debuglink): Check d_buf
diff --git a/libdwelf/dwelf_elf_gnu_build_id.c b/libdwelf/dwelf_elf_gnu_build_id.c
index 1ed501d..8c78c70 100644
--- a/libdwelf/dwelf_elf_gnu_build_id.c
+++ b/libdwelf/dwelf_elf_gnu_build_id.c
@@ -35,33 +35,36 @@
 
 #define NO_VADDR	((GElf_Addr) -1l)
 
-/* Defined here for reuse. The dwelf interface doesn't care about the
-   address of the note, but libdwfl does.  */
 static int
-find_elf_build_id (Dwfl_Module *mod, int e_type, Elf *elf,
-		   const void **build_id_bits, GElf_Addr *build_id_elfaddr,
-		   int *build_id_len)
+check_notes (Elf_Data *data, GElf_Addr data_elfaddr,
+             const void **build_id_bits, GElf_Addr *build_id_elfaddr,
+             int *build_id_len)
 {
-  int check_notes (Elf_Data *data, GElf_Addr data_elfaddr)
-  {
-    size_t pos = 0;
-    GElf_Nhdr nhdr;
-    size_t name_pos;
-    size_t desc_pos;
-    while ((pos = gelf_getnote (data, pos, &nhdr, &name_pos, &desc_pos)) > 0)
-      if (nhdr.n_type == NT_GNU_BUILD_ID
-	  && nhdr.n_namesz == sizeof "GNU" && !memcmp (data->d_buf + name_pos,
-						       "GNU", sizeof "GNU"))
+  size_t pos = 0;
+  GElf_Nhdr nhdr;
+  size_t name_pos;
+  size_t desc_pos;
+  while ((pos = gelf_getnote (data, pos, &nhdr, &name_pos, &desc_pos)) > 0)
+    if (nhdr.n_type == NT_GNU_BUILD_ID
+	&& nhdr.n_namesz == sizeof "GNU"
+	&& !memcmp (data->d_buf + name_pos, "GNU", sizeof "GNU"))
 	{
 	  *build_id_bits = data->d_buf + desc_pos;
 	  *build_id_elfaddr = (data_elfaddr == NO_VADDR
-			       ? 0 : data_elfaddr + desc_pos);
+	                      ? 0 : data_elfaddr + desc_pos);
 	  *build_id_len = nhdr.n_descsz;
 	  return 1;
 	}
-    return 0;
-  }
+  return 0;
+}
 
+/* Defined here for reuse. The dwelf interface doesn't care about the
+   address of the note, but libdwfl does.  */
+static int
+find_elf_build_id (Dwfl_Module *mod, int e_type, Elf *elf,
+		   const void **build_id_bits, GElf_Addr *build_id_elfaddr,
+		   int *build_id_len)
+{
   size_t shstrndx = SHN_UNDEF;
   int result = 0;
 
@@ -86,7 +89,10 @@ find_elf_build_id (Dwfl_Module *mod, int e_type, Elf *elf,
 							phdr->p_offset,
 							phdr->p_filesz,
 							ELF_T_NHDR),
-				  phdr->p_vaddr);
+				  phdr->p_vaddr,
+				  build_id_bits,
+				  build_id_elfaddr,
+				  build_id_len);
 	}
     }
   else
@@ -105,7 +111,10 @@ find_elf_build_id (Dwfl_Module *mod, int e_type, Elf *elf,
 	    else if (__libdwfl_relocate_value (mod, elf, &shstrndx,
 					       elf_ndxscn (scn), &vaddr))
 	      vaddr = NO_VADDR;
-	    result = check_notes (elf_getdata (scn, NULL), vaddr);
+	    result = check_notes (elf_getdata (scn, NULL), vaddr,
+	                          build_id_bits,
+	                          build_id_elfaddr,
+	                          build_id_len);
 	  }
       }
     while (result == 0 && (scn = elf_nextscn (elf, scn)) != NULL);
-- 
2.6.0.rc2.230.g3dd15c0


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]