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 <c...@google.com> wrote: > To be compiled without gnu99 extension. > > Signed-off-by: Chih-Hung Hsieh <c...@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 <c...@google.com> > + > + * dwelf_elf_gnu_build_id.c (find_elf_build_id): Replace nested > function > + with macro. > + > 2014-11-14 Mark Wielaard <m...@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 > >