Skip to content

Commit 65bb39c

Browse files
committed
extract-gcov: Fix tag lengths
Starting with GCC 12, gcov cannot parse the .gcda files we generate: $ powerpc64le-linux-gcov-dump platforms/qemu/qemu.gcda platforms/qemu/qemu.gcda:data:magic `adcg':version `B23*' (swapped endianness) platforms/qemu/qemu.gcda:stamp 1742688024 platforms/qemu/qemu.gcda:checksum 2623079854 platforms/qemu/qemu.gcda: 01000000: 3:FUNCTION ident=1191288390, lineno_checksum=0xdb12f55c, cfg_checksum=0xf9e50e8f platforms/qemu/qemu.gcda:tag `46db12f5' is incorrectly nested platforms/qemu/qemu.gcda: 46db12f5:1559880974:UNKNOWN This is due to gcc commit 23eb66d1d46a ("gcov: Use system IO buffering"), where the length field of tags in the file changed to represent total bytes, not a count of words. Change what we write accordingly. Signed-off-by: Reza Arbab <[email protected]>
1 parent 1d14de8 commit 65bb39c

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

extract-gcov.c

+10-3
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,15 @@ static size_t write_u64(int fd, u64 v)
9797
#define GCOV_TAG_FOR_COUNTER(count) \
9898
(GCOV_TAG_COUNTER_BASE + ((unsigned int) (count) << 17))
9999

100-
// gcc 4.7/4.8 specific
101-
#define GCOV_TAG_FUNCTION_LENGTH 3
100+
#define GCOV_WORD_SIZE 4
101+
102+
#if TARGET__GNUC__ >= 12
103+
#define GCOV_TAG_FUNCTION_LENGTH (3 * GCOV_WORD_SIZE)
104+
#define GCOV_TAG_COUNTER_LENGTH(num) ((num) * 2 * GCOV_WORD_SIZE)
105+
#else
106+
#define GCOV_TAG_FUNCTION_LENGTH 3
107+
#define GCOV_TAG_COUNTER_LENGTH(num) ((num) * 2)
108+
#endif
102109

103110
size_t skiboot_dump_size = 0x240000;
104111

@@ -163,7 +170,7 @@ static void write_gcda(char *addr, struct gcov_info* gi)
163170
continue;
164171

165172
write_u32(fd, (GCOV_TAG_FOR_COUNTER(ctr)));
166-
write_u32(fd, be32toh(ctr_info->num)*2);
173+
write_u32(fd, GCOV_TAG_COUNTER_LENGTH(be32toh(ctr_info->num)));
167174
printf(" ctr %d gcov_ctr_info->num %u\n",
168175
ctr, be32toh(ctr_info->num));
169176

0 commit comments

Comments
 (0)