This is the mail archive of the glibc-bugs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug time/19363] x32: times() return value wrongly truncates/sign extends from 32bit


https://sourceware.org/bugzilla/show_bug.cgi?id=19363

--- Comment #5 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, hjl/pr19363 has been created
        at  bed04d2261bded5888f96a618ed770a4de6dc69a (commit)

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=bed04d2261bded5888f96a618ed770a4de6dc69a

commit bed04d2261bded5888f96a618ed770a4de6dc69a
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Mon Dec 14 20:35:51 2015 -0800

    Use REGISTERS_CLOBBERED_BY_SYSCALL

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=d4f465df65a5723ede4cf933afee5582312fc603

commit d4f465df65a5723ede4cf933afee5582312fc603
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Mon Dec 14 20:35:40 2015 -0800

    Add REGISTERS_CLOBBERED_BY_SYSCALL

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=8a4f1e5889edc41f97c861af81d0f0354d0bc75a

commit 8a4f1e5889edc41f97c861af81d0f0354d0bc75a
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Mon Dec 14 19:09:13 2015 -0800

    Use INTERNAL_SYSCALL_TIMES for Linux times

    The Linux times function, which returns clock_t, is implemented with
    INTERNAL_SYSCALL.  Since INTERNAL_SYSCALL returns 32-bit integer and
    and clock_t is 64-bit on x32, this is a mismatch on x32.  times is the
    only such function.  This patch replaces INTERNAL_SYSCALL in Linux
    times.c with INTERNAL_SYSCALL_TIMES which is default to INTERNAL_SYSCALL
    and provides x32 times.c with proper INTERNAL_SYSCALL_TIMES.

    There is no code change on times for i686 nor x86-64.  For x32, before
    this patch, there are

    0000000 <__times>:
       0:       b8 64 00 00 40          mov    $0x40000064,%eax
       5:       0f 05                   syscall
       7:       48 63 d0                movslq %eax,%rdx
                                    ^^^^^^^^^^ Incorrect signed extension
       a:       48 83 fa f2             cmp    $0xfffffffffffffff2,%rdx
       e:       75 07                   jne    17 <__times+0x17>
      10:       3d 00 f0 ff ff          cmp    $0xfffff000,%eax
      15:       77 11                   ja     28 <__times+0x28>
      17:       48 83 fa ff             cmp    $0xffffffffffffffff,%rdx
      1b:       b8 00 00 00 00          mov    $0x0,%eax
      20:       48 0f 45 c2             cmovne %rdx,%rax
      24:       c3                      retq

    After this patch, there are

    00000000 <__times>:
       0:       b8 64 00 00 40          mov    $0x40000064,%eax
       5:       0f 05                   syscall
       7:       48 83 f8 f2             cmp    $0xfffffffffffffff2,%rax
       b:       75 07                   jne    14 <__times+0x14>
       d:       3d 00 f0 ff ff          cmp    $0xfffff000,%eax
      12:       77 14                   ja     28 <__times+0x28>
      14:       48 83 f8 ff             cmp    $0xffffffffffffffff,%rax
      18:       ba 00 00 00 00          mov    $0x0,%edx
      1d:       48 0f 44 c2             cmove  %rdx,%rax
      21:       c3                      retq

    The incorrect signed extension is gone.

        [BZ #19363]
        * sysdeps/unix/sysv/linux/times.c (INTERNAL_SYSCALL_TIMES): New.
        (__times): Replace INTERNAL_SYSCALL with INTERNAL_SYSCALL_TIMES.
        * sysdeps/unix/sysv/linux/x86_64/x32/times.c: New file.

    xxx

-----------------------------------------------------------------------

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]