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