valgrind support for glibc master

Szabolcs Nagy szabolcs.nagy@arm.com
Thu Jun 22 11:17:00 GMT 2017


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
> 



More information about the Libc-alpha mailing list