• L
    linux-user, ppc: mftbl can be used by user application · 7d6b1dae
    Laurent Vivier 提交于
    In qemu-linux-user, when calling gethostbyname2(),
    it was hanging in .__res_nmkquery.
    
    (gdb) bt
    0 in .__res_nmkquery () from /lib64/libresolv.so.2
    1 in .__libc_res_nquery () from /lib64/libresolv.so.2
    2 in .__libc_res_nsearch () from /lib64/libresolv.so.2
    3 in ._nss_dns_gethostbyname3_r () from /lib64/libnss_dns.so.2
    4 in ._nss_dns_gethostbyname2_r () from /lib64/libnss_dns.so.2
    5 in .gethostbyname2_r () from /lib64/libc.so.6
    6 in .gethostbyname2 () from /lib64/libc.so.6
    
    .__res_nmkquery() is:
    
    ...
    do { RANDOM_BITS (randombits); } while ((randombits & 0xffff) == 0);
    ...
    
    <.__res_nmkquery+112>:	mftbl   r11
    <.__res_nmkquery+116>:	clrlwi  r10,r11,16
    <.__res_nmkquery+120>:	cmpwi   cr7,r10,0
    <.__res_nmkquery+124>:	beq     cr7,<.__res_nmkquery+112>
    
    but as mftbl (Move From Time Base Lower) is not implemented,
    r11 is always 0, so we have an infinite loop.
    
    This patch fills the Time Base register with cpu_get_real_ticks().
    Signed-off-by: NLaurent Vivier <laurent@vivier.eu>
    Signed-off-by: NAlexander Graf <agraf@suse.de>
    7d6b1dae
main.c 138.1 KB