From 0a9401e9c5afd3504162aab918ad84fa279a140b Mon Sep 17 00:00:00 2001 From: Alexander Golubev Date: Sat, 9 Aug 2025 08:49:12 +0300 Subject: [PATCH] Fix build WITH_LIBBFD and libbfd 2.34+ Closes: https://mirror.git.trinitydesktop.org/gitea/TDE/tdelibs/issues/368 Signed-off-by: Alexander Golubev --- CMakeLists.txt | 10 ++++++++++ config.h.cmake | 4 ++++ tdecore/kdebug.cpp | 7 ++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 505977a9c..baecceb88 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1102,6 +1102,16 @@ if( WITH_LIBBFD ) endif( NOT HAVE_LIBBFD ) set( LIBBFD_LIBRARIES bfd ) check_include_file( "demangle.h" HAVE_DEMANGLE_H ) + + tde_save_and_set( CMAKE_REQUIRED_LIBRARIES "${LIBBFD_LIBRARIES}" ) + check_c_source_compiles(" + #define PACKAGE tdelibs + #define PACKAGE_VERSION \"${TDE_VERSION}\" + #include + int main() {bfd_section_flags((asection *)0); return 0;} " + HAVE_LIBBFD_2_34_API + ) + tde_restore( CMAKE_REQUIRED_LIBRARIES ) endif( WITH_LIBBFD ) diff --git a/config.h.cmake b/config.h.cmake index cd2ec1c96..7aaf0a23f 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -108,6 +108,10 @@ /* Define to 1 if libbfd provides demangle.h header */ #cmakedefine HAVE_DEMANGLE_H 1 +/* Define to 1 if libbfd have API of version 2.34+ (i.e. + * bfd_section_flags() has only one paremater) */ +#cmakedefine HAVE_LIBBFD_2_34_API 1 + /* Define if getaddrinfo is broken and should be replaced */ #cmakedefine HAVE_BROKEN_GETADDRINFO 1 diff --git a/tdecore/kdebug.cpp b/tdecore/kdebug.cpp index 43b50880d..e30ebeae0 100644 --- a/tdecore/kdebug.cpp +++ b/tdecore/kdebug.cpp @@ -693,10 +693,15 @@ void bfdFillAdditionalFunctionsInfo(BacktraceFunctionInfo &func) { // found source file and line for given address for (asection *sect = abfd->sections; sect != NULL; sect = sect->next) { - +#ifdef HAVE_LIBBFD_2_34_API + if (bfd_section_flags(sect) & SEC_ALLOC) { + bfd_vma sectStart = bfd_section_vma(sect); + bfd_vma sectEnd = sectStart + bfd_section_size(sect); +#else // HAVE_LIBBFD_2_34_API if (bfd_get_section_flags(abfd, sect) & SEC_ALLOC) { bfd_vma sectStart = bfd_get_section_vma(abfd, sect); bfd_vma sectEnd = sectStart + bfd_section_size(abfd, sect); +#endif // HAVE_LIBBFD_2_34_API if (sectStart <= func.offset && func.offset < sectEnd) { bfd_vma sectOffset = func.offset - sectStart; const char* functionName;