https://bugs.kde.org/show_bug.cgi?id=389412
Bug ID: 389412
Summary: Failed assertion in readelf.c, line 697 for clang
binaries with coverage information
Product: valgrind
Version: 3.13.0
Platform: Compiled Sources
OS: Linux
Status: UNCONFIRMED
Severity: normal
Priority: NOR
Component: memcheck
Assignee: [email protected]
Reporter: [email protected]
Target Milestone: ---
Approximately 1% of our internal regression tests show a failed assertion when
run with Valgrind 3.13.0:
"valgrind: m_debuginfo/readelf.c:697 (get_elf_symbol_info): Assertion 'in_rx'
failed."
This only happens if the code is compiled with clang (5.0.1 on RHEL 7 x86_64)
together with coverage information options ("-fprofile-instr-generate
-fcoverage-mapping"). Valgrind runs fine without the coverage options or if gcc
is used. The problem occurs with the Google gold linker and also with the LLVM
lld linker.
We tracked it down to a single find_rx_mapping() call that returns 0 (via the
"return NULL" at the end of the method).
Call: find_rx_mapping(DebugInfo=0x100287C470, lo=3ef0e8, hi=42a0f7)
In a "readelf -aW" output the symbol causing the assertion seems to be
"__llvm_coverage_mapping":
9458: 00000000003ef0e8 0x3b010 OBJECT LOCAL DEFAULT 33
__llvm_coverage_mapping
9459: 0000000000000000 0 FILE LOCAL DEFAULT ABS /.../SourceFile.cpp
Since variable "in_text" in get_elf_symbol_info() is true, the assertion
"vg_assert(in_rx);" fails.
Here a "--trace-symtab=yes" output from Valgrind:
----------------------
raw symbol [9453]: LOC FUN : svma 0x000042de90, sz 18
__cxx_global_var_init.68
rec(t) [9453]: val 0x000042de90, sz 18
__cxx_global_var_init.68
raw symbol [9454]: LOC FUN : svma 0x000042deb0, sz 18
__cxx_global_var_init.69
rec(t) [9454]: val 0x000042deb0, sz 18
__cxx_global_var_init.69
raw symbol [9455]: LOC FUN : svma 0x000042d6f0, sz 26
__cxx_global_var_init.7
rec(t) [9455]: val 0x000042d6f0, sz 26
__cxx_global_var_init.7
raw symbol [9456]: LOC FUN : svma 0x000042d710, sz 26
__cxx_global_var_init.8
rec(t) [9456]: val 0x000042d710, sz 26
__cxx_global_var_init.8
raw symbol [9457]: LOC FUN : svma 0x000042d730, sz 26
__cxx_global_var_init.9
rec(t) [9457]: val 0x000042d730, sz 26
__cxx_global_var_init.9
raw symbol [9458]: LOC OBJ : svma 0x00003ef0e8, sz 241680
__llvm_coverage_mapping
valgrind: m_debuginfo/readelf.c:697 (get_elf_symbol_info): Assertion 'in_rx'
failed.
----------------------
Please let me know, if any additional information or further testing is needed.
Regards, Peter.
--
You are receiving this mail because:
You are watching all bug changes.