mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-30 22:43:12 +03:00
PowerPC: Fix gettimeofday ifunc selection
The IFUNC selector for gettimeofday runs before _libc_vdso_platform_setup where __vdso_gettimeofday is set. The selector then sets __gettimeofday (the internal version used within GLIBC) to use the system call version instead of the vDSO one. This patch changes the check if vDSO is available to get its value directly instead of rely on __vdso_gettimeofday. This patch changes it by getting the vDSO value directly. It fixes BZ#16431.
This commit is contained in:
@ -1,3 +1,10 @@
|
|||||||
|
2014-01-20 Adhemerval Zanella <azanella@linux.vnet.ibm.com>
|
||||||
|
|
||||||
|
[BZ#16431]
|
||||||
|
* sysdeps/unix/sysv/linux/powerpc/gettimeofday.c (__gettimeofday):
|
||||||
|
Adjust the vDSO correctly for internal calls.
|
||||||
|
* sysdeps/unix/sysv/linux/powerpc/time.c (time): Likewise.
|
||||||
|
|
||||||
2014-01-20 Allan McRae <allan@archlinux.org>
|
2014-01-20 Allan McRae <allan@archlinux.org>
|
||||||
|
|
||||||
* po/ca.po: Update Catalan translation from translation project.
|
* po/ca.po: Update Catalan translation from translation project.
|
||||||
|
2
NEWS
2
NEWS
@ -25,7 +25,7 @@ Version 2.19
|
|||||||
16151, 16153, 16167, 16169, 16172, 16195, 16214, 16245, 16271, 16274,
|
16151, 16153, 16167, 16169, 16172, 16195, 16214, 16245, 16271, 16274,
|
||||||
16283, 16289, 16293, 16314, 16316, 16330, 16337, 16338, 16356, 16365,
|
16283, 16289, 16293, 16314, 16316, 16330, 16337, 16338, 16356, 16365,
|
||||||
16366, 16369, 16372, 16375, 16379, 16384, 16385, 16386, 16387, 16390,
|
16366, 16369, 16372, 16375, 16379, 16384, 16385, 16386, 16387, 16390,
|
||||||
16394, 16400, 16407, 16408, 16414, 16430, 16453.
|
16394, 16400, 16407, 16408, 16414, 16430, 16431, 16453.
|
||||||
|
|
||||||
* Slovenian translations for glibc messages have been contributed by the
|
* Slovenian translations for glibc messages have been contributed by the
|
||||||
Translation Project's Slovenian team of translators.
|
Translation Project's Slovenian team of translators.
|
||||||
|
@ -35,9 +35,12 @@ __gettimeofday_syscall (struct timeval *tv, struct timezone *tz)
|
|||||||
void *
|
void *
|
||||||
gettimeofday_ifunc (void)
|
gettimeofday_ifunc (void)
|
||||||
{
|
{
|
||||||
|
PREPARE_VERSION (linux2615, "LINUX_2.6.15", 123718565);
|
||||||
|
|
||||||
/* If the vDSO is not available we fall back syscall. */
|
/* If the vDSO is not available we fall back syscall. */
|
||||||
return (__vdso_gettimeofday ? VDSO_IFUNC_RET (__vdso_gettimeofday)
|
void *vdso_gettimeofday = _dl_vdso_vsym ("__kernel_gettimeofday", &linux2615);
|
||||||
: __gettimeofday_syscall);
|
return (vdso_gettimeofday ? VDSO_IFUNC_RET (vdso_gettimeofday)
|
||||||
|
: (void*)__gettimeofday_syscall);
|
||||||
}
|
}
|
||||||
asm (".type __gettimeofday, %gnu_indirect_function");
|
asm (".type __gettimeofday, %gnu_indirect_function");
|
||||||
|
|
||||||
|
@ -45,9 +45,12 @@ time_syscall (time_t *t)
|
|||||||
void *
|
void *
|
||||||
time_ifunc (void)
|
time_ifunc (void)
|
||||||
{
|
{
|
||||||
|
PREPARE_VERSION (linux2615, "LINUX_2.6.15", 123718565);
|
||||||
|
|
||||||
/* If the vDSO is not available we fall back to the syscall. */
|
/* If the vDSO is not available we fall back to the syscall. */
|
||||||
return (__vdso_time ? VDSO_IFUNC_RET (__vdso_time)
|
void *vdso_time = _dl_vdso_vsym ("__kernel_time", &linux2615);
|
||||||
: time_syscall);
|
return (vdso_time ? VDSO_IFUNC_RET (vdso_time)
|
||||||
|
: (void*)time_syscall);
|
||||||
}
|
}
|
||||||
asm (".type time, %gnu_indirect_function");
|
asm (".type time, %gnu_indirect_function");
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user