From: Tobias Brunner Date: Wed, 5 May 2021 09:37:21 +0000 (+0200) Subject: backtrace: The BFD API changed in newer versions X-Git-Tag: 5.9.3dr2~23 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f0a20dd2b879b8323b6690fe4d0679c1adc889a0;p=thirdparty%2Fstrongswan.git backtrace: The BFD API changed in newer versions --- diff --git a/configure.ac b/configure.ac index bc1099c948..61a6a9200d 100644 --- a/configure.ac +++ b/configure.ac @@ -1271,6 +1271,11 @@ if test x$bfd_backtraces = xtrue; then AC_CHECK_LIB([bfd],[bfd_init],[LIBS="$LIBS"],[AC_MSG_ERROR([binutils libbfd not found!])],[]) AC_CHECK_HEADER([bfd.h],[AC_DEFINE([HAVE_BFD_H],,[have binutils bfd.h])], [AC_MSG_ERROR([binutils bfd.h header not found!])]) + AC_CHECK_DECLS( + [bfd_section_flags, bfd_get_section_flags, + bfd_section_vma, bfd_get_section_vma, + bfd_section_size, bfd_get_section_size], [], [], + [[#include ]]) BFDLIB="-lbfd" AC_SUBST(BFDLIB) fi diff --git a/src/libstrongswan/utils/backtrace.c b/src/libstrongswan/utils/backtrace.c index 146f91c4a9..788fc6b6aa 100644 --- a/src/libstrongswan/utils/backtrace.c +++ b/src/libstrongswan/utils/backtrace.c @@ -144,6 +144,32 @@ void backtrace_deinit() #include #include +/* interface changes for newer BFD versions, note that older versions declared + * some of the new functions as macros but with different arguments */ +#if HAVE_DECL_BFD_GET_SECTION_FLAGS +#define get_section_flags(a, s) bfd_get_section_flags(a, s) +#elif HAVE_DECL_BFD_SECTION_FLAGS +#define get_section_flags(a, s) bfd_section_flags(s) +#else +#error Unknown BFD API +#endif + +#if HAVE_DECL_BFD_GET_SECTION_VMA +#define get_section_vma(a, s) bfd_get_section_vma(a, s) +#elif HAVE_DECL_BFD_SECTION_VMA +#define get_section_vma(a, s) bfd_section_vma(s) +#else +#error Unknown BFD API +#endif + +#if HAVE_DECL_BFD_GET_SECTION_SIZE +#define get_section_size bfd_get_section_size +#elif HAVE_DECL_BFD_SECTION_SIZE +#define get_section_size bfd_section_size +#else +#error Unknown BFD API +#endif + /** * Hashtable-cached bfd handle */ @@ -248,12 +274,12 @@ static void find_addr(bfd *abfd, asection *section, bfd_find_data_t *data) char fbuf[512] = "", sbuf[512] = ""; u_int line; - if (!data->found || (bfd_get_section_flags(abfd, section) & SEC_ALLOC) != 0) + if (!data->found || (get_section_flags(abfd, section) & SEC_ALLOC) != 0) { - vma = bfd_get_section_vma(abfd, section); + vma = get_section_vma(abfd, section); if (data->vma >= vma) { - size = bfd_get_section_size(section); + size = get_section_size(section); if (data->vma < vma + size) { data->found = bfd_find_nearest_line(abfd, section,