Skip to content

undefined reference to debuginfod_get_url and debuginfod_set_progressfn while linking perfparser #9

@xhub

Description

@xhub

The compilation of hotspot 1.5.1 fails with

FAILED: libexec/hotspot-perfparser bin/perfparser /dev/shm/portage/dev-util/hotspot-1.5.1/work/hotspot_build/bin/perfparser 
: && /usr/bin/x86_64-pc-linux-gnu-g++ -O2 -march=native -pipe -Wl,-O1 -Wl,--as-needed -Wl,-z,pack-relative-relocs 3rdparty/CMakeFiles/hotspot-perfparser.dir/hotspot-perfparser_autogen/mocs_compilation.cpp.o 3rdparty/CMakeFiles/hotspot-perfparser.dir/perfparser/app/main.cpp.o -o libexec/hotspot-perfparser  3rdparty/liblibhotspot-perfparser.a  /usr/lib64/libQt6Network.so.6.8.1  /usr/lib64/libQt6Core.so.6.8.1  /usr/lib64/libdw.so  /usr/lib64/libelf.so  /usr/lib64/libzstd.so && cd /dev/shm/portage/dev-util/hotspot-1.5.1/work/hotspot_build/3rdparty && /usr/bin/cmake -E create_symlink /dev/shm/portage/dev-util/hotspot-1.5.1/work/hotspot_build/libexec/hotspot-perfparser /dev/shm/portage/dev-util/hotspot-1.5.1/work/hotspot_build/bin/perfparser
/usr/lib/gcc/x86_64-pc-linux-gnu/14/../../../../x86_64-pc-linux-gnu/bin/ld: 3rdparty/liblibhotspot-perfparser.a(perfsymboltable.cpp.o): in function `PerfSymbolTable::PerfSymbolTable(int, Dwfl_Callbacks*, PerfUnwind*)::{lambda(debuginfod_client*, long, long)#1}::_FUN(debuginfod_client*, long, long)':
perfsymboltable.cpp:(.text+0x12f8): undefined reference to `debuginfod_get_user_data'
/usr/lib/gcc/x86_64-pc-linux-gnu/14/../../../../x86_64-pc-linux-gnu/bin/ld: perfsymboltable.cpp:(.text+0x130a): undefined reference to `debuginfod_get_url'
/usr/lib/gcc/x86_64-pc-linux-gnu/14/../../../../x86_64-pc-linux-gnu/bin/ld: 3rdparty/liblibhotspot-perfparser.a(perfsymboltable.cpp.o): in function `PerfSymbolTable::PerfSymbolTable(int, Dwfl_Callbacks*, PerfUnwind*)':
perfsymboltable.cpp:(.text+0x51df): undefined reference to `debuginfod_set_user_data'
/usr/lib/gcc/x86_64-pc-linux-gnu/14/../../../../x86_64-pc-linux-gnu/bin/ld: perfsymboltable.cpp:(.text+0x51ee): undefined reference to `debuginfod_set_progressfn'
collect2: error: ld returned 1 exit status

The two symbols are exported in libdebuginfod.so, but this library is not provided to the linker. Also, neither libdw nor libelf link to it on my build.

At the start of the compilation, I noticed the following:

 * SED: the following did not cause any changes
 *     sed -i '/target_compile_definitions(libhotspot-perfparser PRIVATE HAVE_DWFL_GET_DEBUGINFOD_CLIENT=1)/d' 3rdparty/perfparser.cmake || die "sed failed for perfparser";
 * no-op: -e /target_compile_definitions(libhotspot-perfparser PRIVATE HAVE_DWFL_GET_DEBUGINFOD_CLIENT=1)/d
 * Source directory (CMAKE_USE_DIR): "/dev/shm/portage/dev-util/hotspot-1.5.1/work/hotspot"
 * Build directory  (BUILD_DIR):     "/dev/shm/portage/dev-util/hotspot-1.5.1/work/hotspot_build"
 * Hardcoded definition(s) removed in tests/test-clients/CMakeLists.txt:
 *  set(CMAKE_BUILD_TYPE RelWithDebInfo)
>>> Source prepared.
>>> Configuring source in /dev/shm/portage/dev-util/hotspot-1.5.1/work/hotspot ...
 * Source directory (CMAKE_USE_DIR): "/dev/shm/portage/dev-util/hotspot-1.5.1/work/hotspot"
 * Build directory  (BUILD_DIR):     "/dev/shm/portage/dev-util/hotspot-1.5.1/work/hotspot_build"

and one can see that HAVE_DWFL_GET_DEBUGINFOD_CLIENT is set to 1.

$ rg HAVE_DWFL_GET_DEBUGINFOD_CLIENT  hotspot_build/
hotspot_build/CMakeFiles/CMakeConfigureLog.yaml
797:      variable: "HAVE_DWFL_GET_DEBUGINFOD_CLIENT_SYMBOL"

hotspot_build/3rdparty/perfparser/app/config-perfparser.h
21:#define HAVE_DWFL_GET_DEBUGINFOD_CLIENT 1

hotspot_build/CMakeCache.txt
1476:HAVE_DWFL_GET_DEBUGINFOD_CLIENT_SYMBOL:INTERNAL=1

Version Info (please complete the following information):

  • Linux Kernel version: 6.13.2
  • perf version: 6.13.1
  • hotspot version (appimage? selfcompiled?): 1.5.1
  • if self-compiled hotspot, what version of elfutils: 0.192

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions