Comment 9 for bug 1344320

Revision history for this message
Riku Voipio (riku-voipio) wrote : Re: [Qemu-devel] [Bug 1344320] Re: qemu-aarch64 cannot execute glibc

On Tue, Jul 22, 2014 at 10:22:15PM -0000, Peter Maydell wrote:
> On 22 July 2014 20:46, Richard Henderson <email address hidden> wrote:
> > On 07/21/2014 10:37 AM, Peter Maydell wrote:
> >>> It's trying to measure clock cycles required to perform the startup
> >>> relocations.
> >>
> >> That's a neat trick, given that the generic timers are not cycle
> >> counters! They're a fixed frequency counter which is generally
> >> unrelated and rather slower than the CPU frequency (and
> >> which doesn't scale up and down with CPU frequency either).
> >
> > Even better.
>
> In any case the kernel guys say you can't guarantee they
> exist unless you get them to define an ELF hwcap for
> "timers exist and have a sane value in the 'what frequency
> are they' register". So this is a glibc bug and I'm
> not fixing QEMU...

It's used by openssl for rdtsc emulation as well:

http://git.openssl.org/gitweb/?p=openssl.git;a=blob;f=crypto/arm64cpuid.S#l17

Riku

> -- PMM
>
> Title:
> qemu-aarch64 cannot execute glibc
>
> Status in QEMU:
> New
>
> Bug description:
> $ aarch64-linux-user/qemu-aarch64 -version
> qemu-aarch64 version 2.0.92, Copyright (c) 2003-2008 Fabrice Bellard
> $ aarch64-linux-user/qemu-aarch64 -d in_asm /daten/build/build-root/home/abuild/rpmbuild/BUILD/glibc-2.19.90/cc-base/elf/ld-linux-aarch64.so.1
> host mmap_min_addr=0x10000
> guest_base 0x0
> start end size prot
> 0000004000000000-000000400001e000 000000000001e000 r-x
> 000000400001e000-000000400002e000 0000000000010000 ---
> 000000400002e000-0000004000031000 0000000000003000 rw-
> 0000004000031000-0000004000032000 0000000000001000 ---
> 0000004000032000-0000004000832000 0000000000800000 rw-
> start_brk 0x0000000000000000
> end_code 0x000000400001dbe0
> start_code 0x0000004000000000
> start_data 0x000000400002eba8
> end_data 0x0000004000030008
> start_stack 0x0000004000830a10
> brk 0x0000004000030170
> entry 0x00000040000012c0
> ----------------
> IN:
> 0x00000040000012c0: 910003e0 mov x0, sp
> 0x00000040000012c4: 94000d4f bl #+0x353c (addr 0x7fffb5bdad68)
>
> ----------------
> IN: _dl_start
> 0x0000004000004800: d11243ff sub sp, sp, #0x490 (1168)
> 0x0000004000004804: a9ba7bfd stp x29, x30, [sp, #-96]!
> 0x0000004000004808: 910003fd mov x29, sp
> 0x000000400000480c: a9046bf9 stp x25, x26, [sp, #64]
> 0x0000004000004810: a90153f3 stp x19, x20, [sp, #16]
> 0x0000004000004814: a9025bf5 stp x21, x22, [sp, #32]
> 0x0000004000004818: a90363f7 stp x23, x24, [sp, #48]
> 0x000000400000481c: a90573fb stp x27, x28, [sp, #80]
> 0x0000004000004820: aa0003fa mov x26, x0
> 0x0000004000004824: d5033fdf isb
> 0x0000004000004828: d53be040 mrs x0, (unknown)
>
> qemu: uncaught target signal 4 (Illegal instruction) - core dumped
> Illegal instruction
> $ objdump -d /daten/build/build-root/home/abuild/rpmbuild/BUILD/glibc-2.19.90/cc-base/elf/ld-linux-aarch64.so.1 | grep ' 4828:'
> 4828: d53be040 mrs x0, cntvct_el0
>
> To manage notifications about this bug go to:
> https://bugs.launchpad.net/qemu/+bug/1344320/+subscriptions