This is the mail archive of the
glibc-bugs@sourceware.org
mailing list for the glibc project.
[Bug time/19363] x32: times() return value wrongly truncates/sign extends from 32bit
- From: "cvs-commit at gcc dot gnu.org" <sourceware-bugzilla at sourceware dot org>
- To: glibc-bugs at sourceware dot org
- Date: Mon, 04 Jan 2016 16:16:22 +0000
- Subject: [Bug time/19363] x32: times() return value wrongly truncates/sign extends from 32bit
- Auto-submitted: auto-generated
- References: <bug-19363-131 at http dot sourceware dot org/bugzilla/>
https://sourceware.org/bugzilla/show_bug.cgi?id=19363
--- Comment #12 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/2.22 has been created
at 7c1c303f4ffa7eafe704c13d4f4549f007e3075d (commit)
- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=7c1c303f4ffa7eafe704c13d4f4549f007e3075d
commit 7c1c303f4ffa7eafe704c13d4f4549f007e3075d
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Thu Dec 17 11:46:49 2015 -0800
Provide x32 times
Since times returns 64-bit clock_t on x32, we need to provide x32 times
by redefining INTERNAL_SYSCALL_NCS and INTERNAL_SYSCALL_ERROR_P with
64-bit return type for syscall. All system calls returning 64-bit
integer, which are lseek, time and times, must be handled specially for
x32. lseek is handled by x32 lseek.S and time doesn't check syscall
return. times is the only missed one. 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
^^^^^^^^^^^^^^^^^^^^^ 32-bit compare
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 08 jne 15 <__times+0x15>
d: 48 3d 00 f0 ff ff cmp $0xfffffffffffff000,%rax
13: 77 13 ja 28 <__times+0x28>
15: 48 83 f8 ff cmp $0xffffffffffffffff,%rax
19: ba 00 00 00 00 mov $0x0,%edx
1e: 48 0f 44 c2 cmove %rdx,%rax
22: c3 retq
The incorrect signed extension and 32-bit compare are gone.
[BZ #19363]
* sysdeps/unix/sysv/linux/x86_64/x32/times.c: New file.
-----------------------------------------------------------------------
--
You are receiving this mail because:
You are on the CC list for the bug.