https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77630

            Bug ID: 77630
           Summary: lcov fails to write files when relative paths are used
                    but works with absolute paths
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: gcov-profile
          Assignee: unassigned at gcc dot gnu.org
          Reporter: philipp.classen at gmx dot net
  Target Milestone: ---

I run into a problem with lcov 1.12. It fails when writing files when the
output file is a relative path but works when instead an absolute path is used,
for instance:

lcov -d /home/phil/ghost -a test_fast_cxxtest_gcov__base.info -a
test_fast_cxxtest_gcov__test.info       -o test_fast_cxxtest_gcov__total.info
Combining tracefiles.
Reading tracefile test_fast_cxxtest_gcov__base.info
Reading tracefile test_fast_cxxtest_gcov__test.info
lcov: WARNING: function data mismatch at /home/phil/ghost/constants.h:1862
Writing data to test_fast_cxxtest_gcov__total.info
lcov: ERROR: cannot write to test_fast_cxxtest_gcov__total.info!

Running the command with strace reveals that it changes the directory to '/'.
Not sure why but it, at least, explains why it fails to write the file. Here is
part of the strace output:

brk(0x32c8000)                          = 0x32c8000
read(4, "2Ev\nFN:202,_ZN6Output8AutoLockD2"..., 8192) = 8192
read(4, "cxx1112basic_stringIcSt11char_tr"..., 8192) = 8192
read(4, "DA:1865,0\nDA:1866,0\nDA:1877,0\nDA"..., 8192) = 8192
read(4, ",_ZNK9__gnu_cxx17__normal_iterat"..., 8192) = 8192
read(4, "goryISt13move_iteratorIN9__gnu_c"..., 8192) = 8192
read(4, ":118,0\nDA:121,0\nDA:122,0\nDA:127,"..., 8192) = 8192
read(4, "\nDA:993,5\nDA:994,5\nDA:995,5\nDA:9"..., 8192) = 8192
read(4, "r_traitsIcESaIcEEEENSt9enable_if"..., 8192) = 8192
read(4, ",0\nDA:81,0\nDA:83,0\nDA:84,0\nDA:85"..., 8192) = 8192
read(4, "gnu_cxx17__normal_iteratorIPNSt7"..., 8192) = 8192
read(4, "DA:138,0\nDA:139,0\nLF:5\nLH:0\nend_"..., 8192) = 8192
read(4, "9_M_range_initializeISt13move_it"..., 8192) = 8192
read(4, "000,_Z22Build_R0_Occupied_ByteiR"..., 8192) = 8192
read(4, "DA:527,5\nDA:528,5\nDA:529,5\nDA:53"..., 8192) = 8192
read(4, "EEC2Ev\nFNDA:0,_ZNSaINSt7__cxx111"..., 8192) = 8192
read(4, "ZSt27__unguarded_partition_pivot"..., 8192) = 8192
read(4, "49,0\nDA:577,0\nDA:582,0\nDA:590,0\n"..., 8192) = 8192
read(4, "K9__gnu_cxx17__normal_iteratorIP"..., 8192) = 8192
read(4, "N:167,_ZNSt12_Vector_baseINSt7__"..., 8192) = 8192
read(4, "2basic_stringIcSt11char_traitsIc"..., 8192) = 8192
read(4, "iantEv\nFNDA:13395,_ZN10GhostUtil"..., 8192) = 1903
read(4, "", 8192)                       = 0
close(4)                                = 0
brk(0x32e9000)                          = 0x32e9000
brk(0x330a000)                          = 0x330a000
brk(0x332b000)                          = 0x332b000
chdir("/")                              = 0
write(2, "lcov: WARNING: function data mis"..., 75lcov: WARNING: function data
mismatch at /home/phil/ghost/constants.h:1862
) = 75
brk(0x334c000)                          = 0x334c000
brk(0x336d000)                          = 0x336d000
brk(0x338e000)                          = 0x338e000
brk(0x33af000)                          = 0x33af000
brk(0x33d0000)                          = 0x33d0000
brk(0x33f1000)                          = 0x33f1000
brk(0x3412000)                          = 0x3412000
brk(0x3433000)                          = 0x3433000
brk(0x3454000)                          = 0x3454000
brk(0x3475000)                          = 0x3475000
brk(0x3496000)                          = 0x3496000
brk(0x34b7000)                          = 0x34b7000
brk(0x34d8000)                          = 0x34d8000
brk(0x34f9000)                          = 0x34f9000
brk(0x351a000)                          = 0x351a000
brk(0x353c000)                          = 0x353c000
brk(0x3560000)                          = 0x3560000
brk(0x3584000)                          = 0x3584000
brk(0x35a5000)                          = 0x35a5000
brk(0x35c6000)                          = 0x35c6000
brk(0x35e7000)                          = 0x35e7000
brk(0x3608000)                          = 0x3608000
brk(0x3629000)                          = 0x3629000
brk(0x364a000)                          = 0x364a000
brk(0x366b000)                          = 0x366b000
brk(0x368c000)                          = 0x368c000
brk(0x36ad000)                          = 0x36ad000
brk(0x36ce000)                          = 0x36ce000
brk(0x36ef000)                          = 0x36ef000
brk(0x3711000)                          = 0x3711000
brk(0x3732000)                          = 0x3732000
brk(0x3753000)                          = 0x3753000
brk(0x3774000)                          = 0x3774000
brk(0x3795000)                          = 0x3795000
brk(0x37b6000)                          = 0x37b6000
brk(0x37d7000)                          = 0x37d7000
brk(0x37f8000)                          = 0x37f8000
brk(0x3819000)                          = 0x3819000
brk(0x383a000)                          = 0x383a000
brk(0x385b000)                          = 0x385b000
brk(0x387c000)                          = 0x387c000
brk(0x389d000)                          = 0x389d000
brk(0x38be000)                          = 0x38be000
brk(0x38df000)                          = 0x38df000
brk(0x3900000)                          = 0x3900000
brk(0x3921000)                          = 0x3921000
brk(0x3942000)                          = 0x3942000
brk(0x3963000)                          = 0x3963000
brk(0x3984000)                          = 0x3984000
brk(0x39a5000)                          = 0x39a5000
brk(0x39c8000)                          = 0x39c8000
brk(0x39e9000)                          = 0x39e9000
brk(0x3a0a000)                          = 0x3a0a000
brk(0x3a2b000)                          = 0x3a2b000
brk(0x3a4c000)                          = 0x3a4c000
brk(0x3a6d000)                          = 0x3a6d000
brk(0x3a8e000)                          = 0x3a8e000
brk(0x3ab0000)                          = 0x3ab0000
brk(0x3ad1000)                          = 0x3ad1000
brk(0x3af2000)                          = 0x3af2000
brk(0x3b13000)                          = 0x3b13000
brk(0x3b34000)                          = 0x3b34000
brk(0x3b55000)                          = 0x3b55000
brk(0x3b76000)                          = 0x3b76000
brk(0x3b97000)                          = 0x3b97000
brk(0x3bb8000)                          = 0x3bb8000
brk(0x3bd9000)                          = 0x3bd9000
brk(0x3bfa000)                          = 0x3bfa000
brk(0x3c1b000)                          = 0x3c1b000
brk(0x3c3c000)                          = 0x3c3c000
brk(0x3c5d000)                          = 0x3c5d000
brk(0x3c7e000)                          = 0x3c7e000
brk(0x3c9f000)                          = 0x3c9f000
brk(0x3cc0000)                          = 0x3cc0000
brk(0x3ce3000)                          = 0x3ce3000
brk(0x3d04000)                          = 0x3d04000
brk(0x3d25000)                          = 0x3d25000
brk(0x3d46000)                          = 0x3d46000
brk(0x3d67000)                          = 0x3d67000
brk(0x3d88000)                          = 0x3d88000
brk(0x3da9000)                          = 0x3da9000
brk(0x3dca000)                          = 0x3dca000
brk(0x3deb000)                          = 0x3deb000
brk(0x3e0c000)                          = 0x3e0c000
brk(0x3e2d000)                          = 0x3e2d000
brk(0x3e4e000)                          = 0x3e4e000
write(1, "Writing data to test_fast_cxxtes"..., 51Writing data to
test_fast_cxxtest_gcov__total.info
) = 51
open("test_fast_cxxtest_gcov__total.info", O_WRONLY|O_CREAT|O_TRUNC, 0666) = -1
EACCES (Permission denied)
chdir("/")                              = 0
write(2, "lcov: ERROR: cannot write to tes"..., 65lcov: ERROR: cannot write to
test_fast_cxxtest_gcov__total.info!
) = 65
rt_sigaction(SIGHUP, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGINT, NULL, {0x7f7bd9aa5850, [], SA_RESTORER, 0x7f7bd967e0b0},
8) = 0


When using absolute paths, it succeeds. Trying to set the directory
"--base-directory" or "--directory" option did not make a difference, though.

There is also a related question with some background on stackoverflow:
http://stackoverflow.com/q/37675961/783510

It could be a regression introduced with 1.12.

I am using lcov 1.12 from the AUR on Arch Linux. Ubuntu seems to be affected,
too.

Reply via email to