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]

Re: [PATCH] Replace libdwelf nested functions with macros.


This patch could be abandoned and replaced by the new patch "Move nested
functions in libdwelf".



On Tue, Sep 15, 2015 at 2:26 PM, Chih-Hung Hsieh <chh@google.com> wrote:

> To be compiled without gnu99 extension.
>
> Signed-off-by: Chih-Hung Hsieh <chh@google.com>
> ---
>  libdwelf/ChangeLog                |  5 +++++
>  libdwelf/dwelf_elf_gnu_build_id.c | 42
> +++++++++++++++++++++------------------
>  2 files changed, 28 insertions(+), 19 deletions(-)
>
> diff --git a/libdwelf/ChangeLog b/libdwelf/ChangeLog
> index 342cb9c..1300182 100644
> --- a/libdwelf/ChangeLog
> +++ b/libdwelf/ChangeLog
> @@ -1,3 +1,8 @@
> +2015-09-14  Chih-Hung Hsieh  <chh@google.com>
> +
> +       * dwelf_elf_gnu_build_id.c (find_elf_build_id): Replace nested
> function
> +       with macro.
> +
>  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..cb20bca 100644
> --- a/libdwelf/dwelf_elf_gnu_build_id.c
> +++ b/libdwelf/dwelf_elf_gnu_build_id.c
> @@ -42,25 +42,29 @@ 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)
>  {
> -  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"))
> -       {
> -         *build_id_bits = data->d_buf + desc_pos;
> -         *build_id_elfaddr = (data_elfaddr == NO_VADDR
> -                              ? 0 : data_elfaddr + desc_pos);
> -         *build_id_len = nhdr.n_descsz;
> -         return 1;
> -       }
> -    return 0;
> -  }
> +#define check_notes(_data, _data_elfaddr) \
> +  ( { \
> +    Elf_Data *data = _data; \
> +    GElf_Addr data_elfaddr = _data_elfaddr;  \
> +    int check_result = 0; \
> +    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); \
> +         *build_id_len = nhdr.n_descsz; \
> +         check_result = 1; \
> +         break; \
> +       } \
> +    check_result; \
> +  } )
>
>    size_t shstrndx = SHN_UNDEF;
>    int result = 0;
> --
> 2.6.0.rc0.131.gf624c3d
>
>
This patch could be abandoned and replaced by the new patch "Move nested functions in libdwelf".



On Tue, Sep 15, 2015 at 2:26 PM, Chih-Hung Hsieh <chh@google.com> wrote:
To be compiled without gnu99 extension.

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

diff --git a/libdwelf/ChangeLog b/libdwelf/ChangeLog
index 342cb9c..1300182 100644
--- a/libdwelf/ChangeLog
+++ b/libdwelf/ChangeLog
@@ -1,3 +1,8 @@
+2015-09-14  Chih-Hung Hsieh  <chh@google.com>
+
+       * dwelf_elf_gnu_build_id.c (find_elf_build_id): Replace nested function
+       with macro.
+
 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..cb20bca 100644
--- a/libdwelf/dwelf_elf_gnu_build_id.c
+++ b/libdwelf/dwelf_elf_gnu_build_id.c
@@ -42,25 +42,29 @@ 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)
 {
-  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"))
-       {
-         *build_id_bits = data->d_buf + desc_pos;
-         *build_id_elfaddr = (data_elfaddr == NO_VADDR
-                              ? 0 : data_elfaddr + desc_pos);
-         *build_id_len = nhdr.n_descsz;
-         return 1;
-       }
-    return 0;
-  }
+#define check_notes(_data, _data_elfaddr) \
+  ( { \
+    Elf_Data *data = "" \
+    GElf_Addr data_elfaddr = _data_elfaddr;  \
+    int check_result = 0; \
+    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); \
+         *build_id_len = nhdr.n_descsz; \
+         check_result = 1; \
+         break; \
+       } \
+    check_result; \
+  } )

   size_t shstrndx = SHN_UNDEF;
   int result = 0;
--
2.6.0.rc0.131.gf624c3d



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