Skip to content

`check_pie_supported()` fails with Clang's source-based code coverage flags on FreeBSD

To compile code with Clang's Source-based Code Coverage enabled, the -fprofile-instr-generate -fcoverage-mapping options must be passed to the compiler. However, this causes the check_pie_supported() function to fail on FreeBSD 14.1:

$ env CXXFLAGS="-fprofile-instr-generate -fcoverage-mapping" cmake -B build
-- The CXX compiler identification is Clang 18.1.5
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Warning at CMakeLists.txt:6 (message):
  PIE is not supported at link time: PIE (CXX): Change Dir:
  '/home/hebasto/PIE_TEST/build/CMakeFiles/CMakeScratch/TryCompile-q84aom'



  Run Build Command(s): /usr/local/bin/cmake -E env VERBOSE=1
  /usr/local/bin/gmake -f Makefile cmTC_848c6/fast

  /usr/local/bin/gmake -f CMakeFiles/cmTC_848c6.dir/build.make
  CMakeFiles/cmTC_848c6.dir/build

  gmake[1]: Entering directory
  '/home/hebasto/PIE_TEST/build/CMakeFiles/CMakeScratch/TryCompile-q84aom'

  Building CXX object CMakeFiles/cmTC_848c6.dir/src.cxx.o

  /usr/bin/c++ -DCMAKE_CXX_LINK_PIE_SUPPORTED -fprofile-instr-generate
  -fcoverage-mapping -MD -MT CMakeFiles/cmTC_848c6.dir/src.cxx.o -MF
  CMakeFiles/cmTC_848c6.dir/src.cxx.o.d -o
  CMakeFiles/cmTC_848c6.dir/src.cxx.o -c
  /home/hebasto/PIE_TEST/build/CMakeFiles/CMakeScratch/TryCompile-q84aom/src.cxx


  Linking CXX executable cmTC_848c6

  /usr/local/bin/cmake -E cmake_link_script
  CMakeFiles/cmTC_848c6.dir/link.txt --verbose=1

  /usr/bin/c++ -fprofile-instr-generate -fcoverage-mapping -fPIE -pie
  CMakeFiles/cmTC_848c6.dir/src.cxx.o -o cmTC_848c6

  ld: error: relocation R_X86_64_32S cannot be used against local symbol;
  recompile with -fPIC

  >>> defined in CMakeFiles/cmTC_848c6.dir/src.cxx.o

  >>> referenced by src.cxx

  >>> CMakeFiles/cmTC_848c6.dir/src.cxx.o:(main)



  ld: error: relocation R_X86_64_32S cannot be used against local symbol;
  recompile with -fPIC

  >>> defined in CMakeFiles/cmTC_848c6.dir/src.cxx.o

  >>> referenced by src.cxx

  >>> CMakeFiles/cmTC_848c6.dir/src.cxx.o:(main)

  c++: error: linker command failed with exit code 1 (use -v to see
  invocation)

  gmake[1]: *** [CMakeFiles/cmTC_848c6.dir/build.make:100: cmTC_848c6] Error
  1

  gmake[1]: Leaving directory
  '/home/hebasto/PIE_TEST/build/CMakeFiles/CMakeScratch/TryCompile-q84aom'

  gmake: *** [Makefile:127: cmTC_848c6/fast] Error 2





  .


-- Configuring done (0.2s)
-- Generating done (0.0s)
-- Build files have been written to: /home/hebasto/PIE_TEST/build
$ cat CMakeLists.txt
cmake_minimum_required(VERSION 3.14)
project(test CXX)
include(CheckPIESupported)
check_pie_supported(OUTPUT_VARIABLE output LANGUAGES CXX)
if(NOT CMAKE_CXX_LINK_PIE_SUPPORTED)
  message(WARNING "PIE is not supported at link time: ${output}.")
endif()
Edited by Hennadii Stepanov
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information