diff --git a/cmake/modules/FindDWARF.cmake b/cmake/modules/FindDWARF.cmake index c72026c4..17adc7e1 100644 --- a/cmake/modules/FindDWARF.cmake +++ b/cmake/modules/FindDWARF.cmake @@ -5,6 +5,7 @@ # DWARF_LIBRARIES - List of libraries when using elf utils. # DWARF_FOUND - True if fdo found. +INCLUDE(CheckLibraryExists) if (DWARF_INCLUDE_DIR AND LIBDW_INCLUDE_DIR AND DWARF_LIBRARY AND ELF_LIBRARY) # Already in cache, be silent @@ -42,6 +43,9 @@ find_library(EBL_LIBRARY if (DWARF_INCLUDE_DIR AND LIBDW_INCLUDE_DIR AND DWARF_LIBRARY AND ELF_LIBRARY AND EBL_LIBRARY) set(DWARF_FOUND TRUE) set(DWARF_LIBRARIES ${DWARF_LIBRARY} ${ELF_LIBRARY} ${EBL_LIBRARY}) + + set(CMAKE_REQUIRED_LIBRARIES ${DWARF_LIBRARIES}) + check_library_exists(elf dwfl_module_build_id "" HAVE_DWFL_MODULE_BUILD_ID) else (DWARF_INCLUDE_DIR AND LIBDW_INCLUDE_DIR AND DWARF_LIBRARY AND ELF_LIBRARY AND EBL_LIBRARY) set(DWARF_FOUND FALSE) set(DWARF_LIBRARIES) @@ -77,3 +81,4 @@ endif (DWARF_FOUND) mark_as_advanced(DWARF_INCLUDE_DIR LIBDW_INCLUDE_DIR DWARF_LIBRARY ELF_LIBRARY EBL_LIBRARY) include_directories(${DWARF_INCLUDE_DIR} ${LIBDW_INCLUDE_DIR}) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_SOURCE_DIR}/config.h) diff --git a/config.h.cmake b/config.h.cmake new file mode 100644 index 00000000..1b57acdd --- /dev/null +++ b/config.h.cmake @@ -0,0 +1,9 @@ +/* + Copyright (C) 2007 Arnaldo Carvalho de Melo + + This program is free software; you can redistribute it and/or modify it + under the terms of version 2 of the GNU General Public License as + published by the Free Software Foundation. +*/ + +#cmakedefine HAVE_DWFL_MODULE_BUILD_ID diff --git a/dwarves.c b/dwarves.c index b8f16c42..6d9690e2 100644 --- a/dwarves.c +++ b/dwarves.c @@ -24,6 +24,7 @@ #include #include +#include "config.h" #include "list.h" #include "dwarves.h" #include "dutil.h" @@ -3482,11 +3483,8 @@ static int cus__load_module(Dwfl_Module *mod, void **userdata __unused, size_t cuhl; GElf_Addr vaddr; const unsigned char *build_id = NULL; - /* - * FIXME: check how to do this properly using cmake to test for - * the existence of dwfl_module_build_id in the elfutils libraries. - */ -#if 1 + +#ifdef HAVE_DWFL_MODULE_BUILD_ID int build_id_len = dwfl_module_build_id(mod, &build_id, &vaddr); #else int build_id_len = 0;