On 22/06/17 12:14, Florian Weimer wrote:
glibc performs a quick test run using valgrind as part of the build
process.
Lately, this started crashing:
+ elf/ld.so --library-path .:elf:nptl:dlfcn /usr/bin/valgrind elf/ld.so
--library-path .:elf:nptl:dlfcn /usr/bin/true
==924== Memcheck, a memory error detector
==924== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==924== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==924== Command: elf/ld.so --library-path .:elf:nptl:dlfcn /usr/bin/true
==924==
ARM64 front end: branch_etc
disInstr(arm64): unhandled instruction 0xD5380000
disInstr(arm64): 1101'0101 0011'1000 0000'0000 0000'0000
==924== valgrind: Unrecognised instruction at address 0x11f548.
==924== at 0x11F548: init_cpu_features (cpu-features.c:32)
==924== by 0x11F548: dl_platform_init (dl-machine.h:241)
==924== by 0x11F548: _dl_sysdep_start (dl-sysdep.c:231)
==924== by 0x10981B: _dl_start_final (rtld.c:412)
==924== by 0x109AAB: _dl_start (rtld.c:520)
==924== by 0x108F47: ??? (in
/builddir/build/BUILD/glibc-2.25-545-g9649350/build-aarch64-redhat-linux/elf/ld.so)
The line in question is:
asm volatile ("mrs %0, midr_el1" : "=r"(id));
note that this is an instruction that is emulated by the
kernel now (the register read is not available to userspace)
so it's understandable that valgrind does not understand it yet.
That seems to match the instruction bit pattern, too. There is a
check
around it:
if (hwcap & HWCAP_CPUID)
{
register uint64_t id = 0;
asm volatile ("mrs %0, midr_el1" : "=r"(id));
cpu_features->midr_el1 = id;
}
else
cpu_features->midr_el1 = 0;
I think this code is fine. Unfortunately, I don't know if I'll be able
to get a disassembly or debug this any further. There are a couple of
potential causes (GLRO (dl_hwcap) is not initialized correctly in glibc,
HWCAP_CPUID is not masked by the kernel or valgrind despite the lack of
support, GCC schedule the volatile asm statement before the condition).
Is anyone else seeing this?
I will disable the valgrind sanity test during the Fedora build for the
time being.
Thanks,
Florian