forked from pool/glibc
Accepting request 84552 from Base:System
Various bugfixes OBS-URL: https://build.opensuse.org/request/show/84552 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/glibc?expand=0&rev=85
This commit is contained in:
parent
ce18ec6fba
commit
6e03c412ea
@ -1,14 +0,0 @@
|
|||||||
Index: glibc-2.14/libio/fileops.c
|
|
||||||
===================================================================
|
|
||||||
--- glibc-2.14.orig/libio/fileops.c
|
|
||||||
+++ glibc-2.14/libio/fileops.c
|
|
||||||
@@ -338,7 +338,8 @@ _IO_new_file_fopen (fp, filename, mode,
|
|
||||||
is32not64);
|
|
||||||
|
|
||||||
#ifndef __ASSUME_O_CLOEXEC
|
|
||||||
- if ((fp->_flags2 & _IO_FLAGS2_CLOEXEC) != 0 && __have_o_cloexec <= 0)
|
|
||||||
+ if ((result != NULL)
|
|
||||||
+ && (fp->_flags2 & _IO_FLAGS2_CLOEXEC) != 0 && __have_o_cloexec <= 0)
|
|
||||||
{
|
|
||||||
int fd = _IO_fileno (fp);
|
|
||||||
if (__have_o_cloexec == 0)
|
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:497c07f228208e8a0660ae5ee8919e4a6b5b59bb867891c7c02de8995310960e
|
|
||||||
size 15640100
|
|
3
glibc-2.14-69c1dfc1a796.tar.bz2
Normal file
3
glibc-2.14-69c1dfc1a796.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:e2455ca82dd99d898d8000fc0b6130d4ab80a5394fe3c1dfa6b5e9c894a73384
|
||||||
|
size 15640243
|
569
glibc-2.15-avoid-vsyscall.patch
Normal file
569
glibc-2.15-avoid-vsyscall.patch
Normal file
@ -0,0 +1,569 @@
|
|||||||
|
commit d53a73acdbf6ac6eb99cd06f5dd695da58d9e8f5
|
||||||
|
Author: Ulrich Drepper <drepper@gmail.com>
|
||||||
|
Date: Tue Sep 6 20:22:37 2011 -0400
|
||||||
|
|
||||||
|
Avoid gettimeofday vsyscall
|
||||||
|
|
||||||
|
2011-09-06 Ulrich Drepper <drepper@gmail.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/getsysstats.c (__get_nprocs): Don't use
|
||||||
|
gettimeofday vsyscall, just use time.
|
||||||
|
|
||||||
|
diff --git a/sysdeps/unix/sysv/linux/getsysstats.c b/sysdeps/unix/sysv/linux/getsysstats.c
|
||||||
|
index b9bae3d..7feb7a1 100644
|
||||||
|
--- a/sysdeps/unix/sysv/linux/getsysstats.c
|
||||||
|
+++ b/sysdeps/unix/sysv/linux/getsysstats.c
|
||||||
|
@@ -37,15 +37,6 @@
|
||||||
|
#include <not-cancel.h>
|
||||||
|
#include <kernel-features.h>
|
||||||
|
|
||||||
|
-#ifndef HAVE_CLOCK_GETTIME_VSYSCALL
|
||||||
|
-# undef INTERNAL_VSYSCALL
|
||||||
|
-# define INTERNAL_VSYSCALL INTERNAL_SYSCALL
|
||||||
|
-# undef INLINE_VSYSCALL
|
||||||
|
-# define INLINE_VSYSCALL INLINE_SYSCALL
|
||||||
|
-#else
|
||||||
|
-# include <bits/libc-vdso.h>
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
|
||||||
|
/* How we can determine the number of available processors depends on
|
||||||
|
the configuration. There is currently (as of version 2.0.21) no
|
||||||
|
@@ -141,17 +132,10 @@ __get_nprocs ()
|
||||||
|
static int cached_result;
|
||||||
|
static time_t timestamp;
|
||||||
|
|
||||||
|
-#ifdef __ASSUME_POSIX_TIMERS
|
||||||
|
- struct timespec ts;
|
||||||
|
- INTERNAL_SYSCALL_DECL (err);
|
||||||
|
- INTERNAL_VSYSCALL (clock_gettime, err, 2, CLOCK_REALTIME, &ts);
|
||||||
|
-#else
|
||||||
|
- struct timeval ts;
|
||||||
|
- __gettimeofday (&ts, NULL);
|
||||||
|
-#endif
|
||||||
|
+ time_t now = time (NULL);
|
||||||
|
time_t prev = timestamp;
|
||||||
|
atomic_read_barrier ();
|
||||||
|
- if (ts.tv_sec == prev)
|
||||||
|
+ if (now == prev)
|
||||||
|
return cached_result;
|
||||||
|
|
||||||
|
/* XXX Here will come a test for the new system call. */
|
||||||
|
@@ -243,7 +227,7 @@ __get_nprocs ()
|
||||||
|
out:
|
||||||
|
cached_result = result;
|
||||||
|
atomic_write_barrier ();
|
||||||
|
- timestamp = ts.tv_sec;
|
||||||
|
+ timestamp = now;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
commit a77d3c17dc6517636c1cf6ab9c6bb8c257772354
|
||||||
|
Author: Ulrich Drepper <drepper@gmail.com>
|
||||||
|
Date: Tue Sep 6 21:34:11 2011 -0400
|
||||||
|
|
||||||
|
Don't unconditionally use clock_gettime vsyscall on x86-64
|
||||||
|
|
||||||
|
2011-09-06 Ulrich Drepper <drepper@gmail.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/clock_gettime.c: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/clock_gettime.c (SYSCALL_GETTIME): Allow
|
||||||
|
already be defined. Change to take two parameters and don't assign
|
||||||
|
result to variable. Adjust all users.
|
||||||
|
Define INTERNAL_GETTIME if not already defined.
|
||||||
|
Use INTERNAL_GETTIME instead of INTERNAL_VSYSCALL got clock_gettime
|
||||||
|
call.
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/sysdep.h: Don't define
|
||||||
|
HAVE_CLOCK_GETTIME_VSYSCALL.
|
||||||
|
* sysdeps/unix/clock_gettime.c: Adjust use of SYSDEP_GETTIME_CPU.
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/sysdeps/unix/clock_gettime.c b/sysdeps/unix/clock_gettime.c
|
||||||
|
index fbaaf30..d467f2b 100644
|
||||||
|
--- a/sysdeps/unix/clock_gettime.c
|
||||||
|
+++ b/sysdeps/unix/clock_gettime.c
|
||||||
|
@@ -1,5 +1,5 @@
|
||||||
|
/* clock_gettime -- Get the current time from a POSIX clockid_t. Unix version.
|
||||||
|
- Copyright (C) 1999-2004, 2005, 2007 Free Software Foundation, Inc.
|
||||||
|
+ Copyright (C) 1999-2004, 2005, 2007, 2011 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
@@ -113,7 +113,7 @@ clock_gettime (clockid_t clock_id, struct timespec *tp)
|
||||||
|
|
||||||
|
default:
|
||||||
|
#ifdef SYSDEP_GETTIME_CPU
|
||||||
|
- SYSDEP_GETTIME_CPU;
|
||||||
|
+ retval = SYSDEP_GETTIME_CPU (clock_id, tp);
|
||||||
|
#endif
|
||||||
|
#if HP_TIMING_AVAIL
|
||||||
|
if ((clock_id & ((1 << CLOCK_IDFIELD_SIZE) - 1))
|
||||||
|
diff --git a/sysdeps/unix/sysv/linux/clock_gettime.c b/sysdeps/unix/sysv/linux/clock_gettime.c
|
||||||
|
index dd3755c..0ae45de 100644
|
||||||
|
--- a/sysdeps/unix/sysv/linux/clock_gettime.c
|
||||||
|
+++ b/sysdeps/unix/sysv/linux/clock_gettime.c
|
||||||
|
@@ -1,5 +1,5 @@
|
||||||
|
/* clock_gettime -- Get current time from a POSIX clockid_t. Linux version.
|
||||||
|
- Copyright (C) 2003,2004,2005,2006,2007,2010 Free Software Foundation, Inc.
|
||||||
|
+ Copyright (C) 2003,2004,2005,2006,2007,2010,2011 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
@@ -32,9 +32,14 @@
|
||||||
|
# include <bits/libc-vdso.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
-#define SYSCALL_GETTIME \
|
||||||
|
- retval = INLINE_VSYSCALL (clock_gettime, 2, clock_id, tp); \
|
||||||
|
- break
|
||||||
|
+#ifndef SYSCALL_GETTIME
|
||||||
|
+# define SYSCALL_GETTIME(id, tp) \
|
||||||
|
+ INLINE_VSYSCALL (clock_gettime, 2, id, tp)
|
||||||
|
+#endif
|
||||||
|
+#ifndef INTERNAL_GETTIME
|
||||||
|
+# define INTERNAL_GETTIME(id, tp) \
|
||||||
|
+ INTERNAL_VSYSCALL (clock_gettime, err, 2, id, tp)
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#ifdef __ASSUME_POSIX_TIMERS
|
||||||
|
|
||||||
|
@@ -44,7 +49,8 @@
|
||||||
|
SYSDEP_GETTIME_CPUTIME \
|
||||||
|
case CLOCK_REALTIME: \
|
||||||
|
case CLOCK_MONOTONIC: \
|
||||||
|
- SYSCALL_GETTIME
|
||||||
|
+ retval = SYSCALL_GETTIME (clock_id, tp); \
|
||||||
|
+ break
|
||||||
|
|
||||||
|
# define __libc_missing_posix_timers 0
|
||||||
|
#elif defined __NR_clock_gettime
|
||||||
|
@@ -59,7 +65,7 @@ maybe_syscall_gettime (clockid_t clock_id, struct timespec *tp)
|
||||||
|
if (!__libc_missing_posix_timers)
|
||||||
|
{
|
||||||
|
INTERNAL_SYSCALL_DECL (err);
|
||||||
|
- int r = INTERNAL_VSYSCALL (clock_gettime, err, 2, clock_id, tp);
|
||||||
|
+ int r = INTERNAL_GETTIME (clock_id, tp);
|
||||||
|
if (!INTERNAL_SYSCALL_ERROR_P (r, err))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
@@ -89,7 +95,7 @@ maybe_syscall_gettime (clockid_t clock_id, struct timespec *tp)
|
||||||
|
/* Fallback code. */ \
|
||||||
|
if (retval == EINVAL && clock_id == CLOCK_REALTIME) \
|
||||||
|
retval = realtime_gettime (tp); \
|
||||||
|
- else \
|
||||||
|
+ else \
|
||||||
|
{ \
|
||||||
|
__set_errno (retval); \
|
||||||
|
retval = -1; \
|
||||||
|
@@ -119,7 +125,7 @@ maybe_syscall_gettime_cpu (clockid_t clock_id, struct timespec *tp)
|
||||||
|
if (!__libc_missing_posix_cpu_timers)
|
||||||
|
{
|
||||||
|
INTERNAL_SYSCALL_DECL (err);
|
||||||
|
- int r = INTERNAL_VSYSCALL (clock_gettime, err, 2, clock_id, tp);
|
||||||
|
+ int r = INTERNAL_GETTIME (clock_id, tp);
|
||||||
|
if (!INTERNAL_SYSCALL_ERROR_P (r, err))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
diff --git a/sysdeps/unix/sysv/linux/x86_64/clock_gettime.c b/sysdeps/unix/sysv/linux/x86_64/clock_gettime.c
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..9d6cd23
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/sysdeps/unix/sysv/linux/x86_64/clock_gettime.c
|
||||||
|
@@ -0,0 +1,10 @@
|
||||||
|
+#include "bits/libc-vdso.h"
|
||||||
|
+
|
||||||
|
+#ifdef SHARED
|
||||||
|
+# define SYSCALL_GETTIME(id, tp) \
|
||||||
|
+ (*__vdso_clock_gettime) (id, tp)
|
||||||
|
+# define INTERNAL_GETTIME(id, tp) \
|
||||||
|
+ (*__vdso_clock_gettime) (id, tp)
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+#include "../clock_gettime.c"
|
||||||
|
diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep.h b/sysdeps/unix/sysv/linux/x86_64/sysdep.h
|
||||||
|
index 2b9ea85..a9821dc 100644
|
||||||
|
--- a/sysdeps/unix/sysv/linux/x86_64/sysdep.h
|
||||||
|
+++ b/sysdeps/unix/sysv/linux/x86_64/sysdep.h
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
-/* Copyright (C) 2001-2005, 2007 Free Software Foundation, Inc.
|
||||||
|
+/* Copyright (C) 2001-2005, 2007, 2011 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
@@ -279,8 +279,8 @@
|
||||||
|
if (INTERNAL_SYSCALL_ERROR_P (sc_ret, sc_err)) \
|
||||||
|
{ \
|
||||||
|
iserr: \
|
||||||
|
- __set_errno (INTERNAL_SYSCALL_ERRNO (sc_ret, sc_err)); \
|
||||||
|
- sc_ret = -1L; \
|
||||||
|
+ __set_errno (INTERNAL_SYSCALL_ERRNO (sc_ret, sc_err)); \
|
||||||
|
+ sc_ret = -1L; \
|
||||||
|
} \
|
||||||
|
out: \
|
||||||
|
sc_ret; \
|
||||||
|
@@ -304,9 +304,6 @@
|
||||||
|
v_ret; \
|
||||||
|
})
|
||||||
|
|
||||||
|
-/* List of system calls which are supported as vsyscalls. */
|
||||||
|
-# define HAVE_CLOCK_GETTIME_VSYSCALL 1
|
||||||
|
-
|
||||||
|
# else
|
||||||
|
# define INLINE_VSYSCALL(name, nr, args...) \
|
||||||
|
INLINE_SYSCALL (name, nr, ##args)
|
||||||
|
|
||||||
|
commit a0e1f41bd487d2202b6c1e0802c0e6c91630fbea
|
||||||
|
Author: Ulrich Drepper <drepper@gmail.com>
|
||||||
|
Date: Tue Sep 6 23:17:53 2011 -0400
|
||||||
|
|
||||||
|
Don't call gettimeofday vsyscall in x86-64 sem_timedwait
|
||||||
|
|
||||||
|
2011-09-06 Ulrich Drepper <drepper@gmail.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S (sem_timedwait): Don't
|
||||||
|
use gettimeofday vsyscall, just call gettimeofday.
|
||||||
|
|
||||||
|
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S
|
||||||
|
index ca49cb8..2926b36 100644
|
||||||
|
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S
|
||||||
|
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
-/* Copyright (C) 2002,2003,2005,2007,2009,2010 Free Software Foundation, Inc.
|
||||||
|
+/* Copyright (C) 2002,2003,2005,2007,2009,2010,2011 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
|
@@ -24,10 +24,6 @@
|
||||||
|
#include <pthread-errnos.h>
|
||||||
|
#include <structsem.h>
|
||||||
|
|
||||||
|
-
|
||||||
|
-/* For the calculation see asm/vsyscall.h. */
|
||||||
|
-#define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000
|
||||||
|
-
|
||||||
|
.text
|
||||||
|
|
||||||
|
.globl sem_timedwait
|
||||||
|
@@ -212,9 +208,10 @@ sem_timedwait:
|
||||||
|
addq $1, NWAITERS(%r12)
|
||||||
|
|
||||||
|
7: xorl %esi, %esi
|
||||||
|
- movq %rsp, %rdi
|
||||||
|
- movq $VSYSCALL_ADDR_vgettimeofday, %rax
|
||||||
|
- callq *%rax
|
||||||
|
+ movq %rsp,%rdi
|
||||||
|
+ /* This call works because we directly jump to a system call entry
|
||||||
|
+ which preserves all the registers. */
|
||||||
|
+ call JUMPTARGET(__gettimeofday)
|
||||||
|
|
||||||
|
/* Compute relative timeout. */
|
||||||
|
movq 8(%rsp), %rax
|
||||||
|
|
||||||
|
commit fc8bffcccf5821bca179486abef83a7f82526715
|
||||||
|
Author: Ulrich Drepper <drepper@gmail.com>
|
||||||
|
Date: Tue Sep 6 23:50:04 2011 -0400
|
||||||
|
|
||||||
|
Fix handling of __vdso_clock_gettime
|
||||||
|
|
||||||
|
2011-09-06 Ulrich Drepper <drepper@gmail.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/clock_gettime.c (INTERNAL_GETTIME):
|
||||||
|
Forgot to demangle the pointer.
|
||||||
|
|
||||||
|
diff --git a/sysdeps/unix/sysv/linux/x86_64/clock_gettime.c b/sysdeps/unix/sysv/linux/x86_64/clock_gettime.c
|
||||||
|
index 9d6cd23..7802701 100644
|
||||||
|
--- a/sysdeps/unix/sysv/linux/x86_64/clock_gettime.c
|
||||||
|
+++ b/sysdeps/unix/sysv/linux/x86_64/clock_gettime.c
|
||||||
|
@@ -2,9 +2,13 @@
|
||||||
|
|
||||||
|
#ifdef SHARED
|
||||||
|
# define SYSCALL_GETTIME(id, tp) \
|
||||||
|
- (*__vdso_clock_gettime) (id, tp)
|
||||||
|
+ ({ long int (*f) (clockid_t, struct timespec *) = __vdso_clock_gettime; \
|
||||||
|
+ PTR_DEMANGLE (f); \
|
||||||
|
+ f (id, tp); })
|
||||||
|
# define INTERNAL_GETTIME(id, tp) \
|
||||||
|
- (*__vdso_clock_gettime) (id, tp)
|
||||||
|
+ ({ long int (*f) (clockid_t, struct timespec *) = __vdso_clock_gettime; \
|
||||||
|
+ PTR_DEMANGLE (f); \
|
||||||
|
+ f (id, tp); })
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "../clock_gettime.c"
|
||||||
|
|
||||||
|
commit 9e5c9dcd57e80cd56c47fd2bf11de8d167176a0e
|
||||||
|
Author: Ulrich Drepper <drepper@gmail.com>
|
||||||
|
Date: Wed Sep 7 00:14:06 2011 -0400
|
||||||
|
|
||||||
|
Remove gettimeofday vsyscall use from x86-86 libpthread
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S:
|
||||||
|
Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S:
|
||||||
|
Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Likewise.
|
||||||
|
Simplify __vdso_clock_gettime use.
|
||||||
|
|
||||||
|
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
|
||||||
|
index 3195db2..018da0c 100644
|
||||||
|
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
|
||||||
|
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
-/* Copyright (C) 2002-2006, 2007, 2009, 2010 Free Software Foundation, Inc.
|
||||||
|
+/* Copyright (C) 2002-2007, 2009, 2010, 2011 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
|
@@ -68,10 +68,6 @@
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
-/* For the calculation see asm/vsyscall.h. */
|
||||||
|
-#define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000
|
||||||
|
-
|
||||||
|
-
|
||||||
|
.globl __lll_lock_wait_private
|
||||||
|
.type __lll_lock_wait_private,@function
|
||||||
|
.hidden __lll_lock_wait_private
|
||||||
|
@@ -250,10 +246,9 @@ __lll_timedlock_wait:
|
||||||
|
/* Get current time. */
|
||||||
|
movq %rsp, %rdi
|
||||||
|
xorl %esi, %esi
|
||||||
|
- movq $VSYSCALL_ADDR_vgettimeofday, %rax
|
||||||
|
- /* This is a regular function call, all caller-save registers
|
||||||
|
- might be clobbered. */
|
||||||
|
- callq *%rax
|
||||||
|
+ /* This call works because we directly jump to a system call entry
|
||||||
|
+ which preserves all the registers. */
|
||||||
|
+ call JUMPTARGET(__gettimeofday)
|
||||||
|
|
||||||
|
/* Compute relative timeout. */
|
||||||
|
movq 8(%rsp), %rax
|
||||||
|
@@ -402,8 +397,9 @@ __lll_timedwait_tid:
|
||||||
|
/* Get current time. */
|
||||||
|
2: movq %rsp, %rdi
|
||||||
|
xorl %esi, %esi
|
||||||
|
- movq $VSYSCALL_ADDR_vgettimeofday, %rax
|
||||||
|
- callq *%rax
|
||||||
|
+ /* This call works because we directly jump to a system call entry
|
||||||
|
+ which preserves all the registers. */
|
||||||
|
+ call JUMPTARGET(__gettimeofday)
|
||||||
|
|
||||||
|
/* Compute relative timeout. */
|
||||||
|
movq 8(%rsp), %rax
|
||||||
|
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S
|
||||||
|
index 5218a4f..b7b8b34 100644
|
||||||
|
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S
|
||||||
|
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
-/* Copyright (C) 2002=2007, 2009, 2010 Free Software Foundation, Inc.
|
||||||
|
+/* Copyright (C) 2002, 2011=2007, 2009, 2010 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
|
@@ -50,9 +50,6 @@
|
||||||
|
orl $FUTEX_WAIT_BITSET | FUTEX_CLOCK_REALTIME, reg
|
||||||
|
#endif
|
||||||
|
|
||||||
|
-/* For the calculation see asm/vsyscall.h. */
|
||||||
|
-#define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000
|
||||||
|
-
|
||||||
|
|
||||||
|
.globl __lll_robust_lock_wait
|
||||||
|
.type __lll_robust_lock_wait,@function
|
||||||
|
@@ -219,10 +216,9 @@ __lll_robust_timedlock_wait:
|
||||||
|
/* Get current time. */
|
||||||
|
movq %rsp, %rdi
|
||||||
|
xorl %esi, %esi
|
||||||
|
- movq $VSYSCALL_ADDR_vgettimeofday, %rax
|
||||||
|
- /* This is a regular function call, all caller-save registers
|
||||||
|
- might be clobbered. */
|
||||||
|
- callq *%rax
|
||||||
|
+ /* This call works because we directly jump to a system call entry
|
||||||
|
+ which preserves all the registers. */
|
||||||
|
+ call JUMPTARGET(__gettimeofday)
|
||||||
|
|
||||||
|
/* Compute relative timeout. */
|
||||||
|
movq 8(%rsp), %rax
|
||||||
|
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
|
||||||
|
index 48ea8b9..d11b297 100644
|
||||||
|
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
|
||||||
|
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
|
||||||
|
@@ -26,9 +26,6 @@
|
||||||
|
|
||||||
|
#include <kernel-features.h>
|
||||||
|
|
||||||
|
-/* For the calculation see asm/vsyscall.h. */
|
||||||
|
-#define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000
|
||||||
|
-
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
@@ -453,13 +450,11 @@ __pthread_cond_timedwait:
|
||||||
|
movq __vdso_clock_gettime@GOTPCREL(%rip), %rax
|
||||||
|
movq (%rax), %rax
|
||||||
|
PTR_DEMANGLE (%rax)
|
||||||
|
- jz 26f
|
||||||
|
call *%rax
|
||||||
|
- jmp 27f
|
||||||
|
-# endif
|
||||||
|
-26: movl $__NR_clock_gettime, %eax
|
||||||
|
+# else
|
||||||
|
+ movl $__NR_clock_gettime, %eax
|
||||||
|
syscall
|
||||||
|
-27:
|
||||||
|
+# endif
|
||||||
|
# ifndef __ASSUME_POSIX_TIMERS
|
||||||
|
cmpq $-ENOSYS, %rax
|
||||||
|
je 19f
|
||||||
|
@@ -473,8 +468,9 @@ __pthread_cond_timedwait:
|
||||||
|
# else
|
||||||
|
leaq 24(%rsp), %rdi
|
||||||
|
xorl %esi, %esi
|
||||||
|
- movq $VSYSCALL_ADDR_vgettimeofday, %rax
|
||||||
|
- callq *%rax
|
||||||
|
+ /* This call works because we directly jump to a system call entry
|
||||||
|
+ which preserves all the registers. */
|
||||||
|
+ call JUMPTARGET(__gettimeofday)
|
||||||
|
|
||||||
|
/* Compute relative timeout. */
|
||||||
|
movq 40(%rsp), %rax
|
||||||
|
@@ -611,8 +607,9 @@ __pthread_cond_timedwait:
|
||||||
|
/* clock_gettime not available. */
|
||||||
|
19: leaq 32(%rsp), %rdi
|
||||||
|
xorl %esi, %esi
|
||||||
|
- movq $VSYSCALL_ADDR_vgettimeofday, %rax
|
||||||
|
- callq *%rax
|
||||||
|
+ /* This call works because we directly jump to a system call entry
|
||||||
|
+ which preserves all the registers. */
|
||||||
|
+ call JUMPTARGET(__gettimeofday)
|
||||||
|
|
||||||
|
/* Compute relative timeout. */
|
||||||
|
movq 40(%rsp), %rax
|
||||||
|
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S
|
||||||
|
index f5d055c..0e6a6ee 100644
|
||||||
|
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S
|
||||||
|
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
-/* Copyright (C) 2002-2005, 2007, 2009, 2010 Free Software Foundation, Inc.
|
||||||
|
+/* Copyright (C) 2002-2005,2007,2009,2010,2011 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
|
@@ -23,10 +23,6 @@
|
||||||
|
#include <pthread-errnos.h>
|
||||||
|
#include <kernel-features.h>
|
||||||
|
|
||||||
|
-
|
||||||
|
-/* For the calculation see asm/vsyscall.h. */
|
||||||
|
-#define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000
|
||||||
|
-
|
||||||
|
.text
|
||||||
|
|
||||||
|
.globl pthread_rwlock_timedrdlock
|
||||||
|
@@ -123,8 +119,9 @@ pthread_rwlock_timedrdlock:
|
||||||
|
/* Get current time. */
|
||||||
|
movq %rsp, %rdi
|
||||||
|
xorl %esi, %esi
|
||||||
|
- movq $VSYSCALL_ADDR_vgettimeofday, %rax
|
||||||
|
- callq *%rax
|
||||||
|
+ /* This call works because we directly jump to a system call entry
|
||||||
|
+ which preserves all the registers. */
|
||||||
|
+ call JUMPTARGET(__gettimeofday)
|
||||||
|
|
||||||
|
/* Compute relative timeout. */
|
||||||
|
movq 8(%rsp), %rax
|
||||||
|
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S
|
||||||
|
index 6ed8b49..16bf920 100644
|
||||||
|
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S
|
||||||
|
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S
|
||||||
|
@@ -1,4 +1,5 @@
|
||||||
|
-/* Copyright (C) 2002, 2003, 2005, 2007, 2009, 2010 Free Software Foundation, Inc.
|
||||||
|
+/* Copyright (C) 2002, 2003, 2005, 2007, 2009, 2010, 2011
|
||||||
|
+ Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
|
@@ -23,10 +24,6 @@
|
||||||
|
#include <pthread-errnos.h>
|
||||||
|
#include <kernel-features.h>
|
||||||
|
|
||||||
|
-
|
||||||
|
-/* For the calculation see asm/vsyscall.h. */
|
||||||
|
-#define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000
|
||||||
|
-
|
||||||
|
.text
|
||||||
|
|
||||||
|
.globl pthread_rwlock_timedwrlock
|
||||||
|
@@ -120,8 +117,9 @@ pthread_rwlock_timedwrlock:
|
||||||
|
/* Get current time. */
|
||||||
|
movq %rsp, %rdi
|
||||||
|
xorl %esi, %esi
|
||||||
|
- movq $VSYSCALL_ADDR_vgettimeofday, %rax
|
||||||
|
- callq *%rax
|
||||||
|
+ /* This call works because we directly jump to a system call entry
|
||||||
|
+ which preserves all the registers. */
|
||||||
|
+ call JUMPTARGET(__gettimeofday)
|
||||||
|
|
||||||
|
/* Compute relative timeout. */
|
||||||
|
movq 8(%rsp), %rax
|
||||||
|
commit e38ba7ab6a56d53bde4fcff250f6928fb473bc3c
|
||||||
|
Author: Ulrich Drepper <drepper@gmail.com>
|
||||||
|
Date: Wed Sep 7 00:07:08 2011 -0400
|
||||||
|
|
||||||
|
Make sure __vdso_clock_gettime always contains a valid pointer
|
||||||
|
|
||||||
|
2011-09-07 Ulrich Drepper <drepper@gmail.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/init-first.c
|
||||||
|
(_libc_vdso_platform_setup): If vDSO is not present store pointer to
|
||||||
|
syscall wrapper around clock_gettime in __vdso_clock_gettime.
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/syscalls.list: Add entry for
|
||||||
|
clock_gettime.
|
||||||
|
|
||||||
|
diff --git a/sysdeps/unix/sysv/linux/x86_64/init-first.c b/sysdeps/unix/sysv/linux/x86_64/init-first.c
|
||||||
|
index 25cf08b..cb39aca 100644
|
||||||
|
--- a/sysdeps/unix/sysv/linux/x86_64/init-first.c
|
||||||
|
+++ b/sysdeps/unix/sysv/linux/x86_64/init-first.c
|
||||||
|
@@ -17,6 +17,8 @@
|
||||||
|
02111-1307 USA. */
|
||||||
|
|
||||||
|
#ifdef SHARED
|
||||||
|
+# include <time.h>
|
||||||
|
+# include <sysdep.h>
|
||||||
|
# include <dl-vdso.h>
|
||||||
|
# include <bits/libc-vdso.h>
|
||||||
|
|
||||||
|
@@ -27,12 +29,17 @@ strong_alias (__vdso_clock_gettime, __GI___vdso_clock_gettime attribute_hidden)
|
||||||
|
long int (*__vdso_getcpu) (unsigned *, unsigned *, void *) attribute_hidden;
|
||||||
|
|
||||||
|
|
||||||
|
+extern long int __syscall_clock_gettime (clockid_t, struct timespec *);
|
||||||
|
+
|
||||||
|
+
|
||||||
|
static inline void
|
||||||
|
_libc_vdso_platform_setup (void)
|
||||||
|
{
|
||||||
|
PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
|
||||||
|
|
||||||
|
void *p = _dl_vdso_vsym ("clock_gettime", &linux26);
|
||||||
|
+ if (p == NULL)
|
||||||
|
+ p = __syscall_clock_gettime;
|
||||||
|
PTR_MANGLE (p);
|
||||||
|
__GI___vdso_clock_gettime = p;
|
||||||
|
|
||||||
|
diff --git a/sysdeps/unix/sysv/linux/x86_64/syscalls.list b/sysdeps/unix/sysv/linux/x86_64/syscalls.list
|
||||||
|
index 3e231a0..ccddb84 100644
|
||||||
|
--- a/sysdeps/unix/sysv/linux/x86_64/syscalls.list
|
||||||
|
+++ b/sysdeps/unix/sysv/linux/x86_64/syscalls.list
|
||||||
|
@@ -14,6 +14,7 @@ semop - semop i:ipi __semop semop
|
||||||
|
semtimedop - semtimedop i:ipip semtimedop
|
||||||
|
semget - semget i:iii __semget semget
|
||||||
|
semctl - semctl i:iiii __semctl semctl
|
||||||
|
+syscall_clock_gettime EXTRA clock_gettime Ei:ip __syscall_clock_gettime
|
||||||
|
|
||||||
|
|
||||||
|
# proper socket implementations:
|
479
glibc-2.15-vsyscall.patch
Normal file
479
glibc-2.15-vsyscall.patch
Normal file
@ -0,0 +1,479 @@
|
|||||||
|
commit 91b392a4bab0c2dc90e7e3ff914dec20b97adca8
|
||||||
|
Author: Ulrich Drepper <drepper@gmail.com>
|
||||||
|
Date: Sun Aug 21 13:52:28 2011 -0400
|
||||||
|
|
||||||
|
Use ifuncs for time and gettimeofday on x86-64
|
||||||
|
|
||||||
|
2011-08-21 Ulrich Drepper <drepper@gmail.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/gettimeofday.S: Removed.
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/time.S: Removed.
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/gettimeofday.c: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/time.c: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h: Remove declaration
|
||||||
|
of __vdso_gettimeofday.
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/init-first.c: Remove definition of
|
||||||
|
__vdso_gettimeofday and __vdso_time. Define __vdso_getcpu with
|
||||||
|
attribute_hidden.
|
||||||
|
(_libc_vdso_platform_setup): Remove initialization of
|
||||||
|
__vdso_gettimeofday and __vdso_time.
|
||||||
|
|
||||||
|
diff --git a/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h b/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h
|
||||||
|
index d7123c9..f9bf84e 100644
|
||||||
|
--- a/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h
|
||||||
|
+++ b/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h
|
||||||
|
@@ -1,5 +1,5 @@
|
||||||
|
/* Resolve function pointers to VDSO functions.
|
||||||
|
- Copyright (C) 2005, 2007 Free Software Foundation, Inc.
|
||||||
|
+ Copyright (C) 2005, 2007, 2011 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
@@ -25,9 +25,6 @@
|
||||||
|
|
||||||
|
#ifdef SHARED
|
||||||
|
|
||||||
|
-extern long int (*__vdso_gettimeofday) (struct timeval *, void *)
|
||||||
|
- attribute_hidden;
|
||||||
|
-
|
||||||
|
extern long int (*__vdso_clock_gettime) (clockid_t, struct timespec *);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
diff --git a/sysdeps/unix/sysv/linux/x86_64/gettimeofday.S b/sysdeps/unix/sysv/linux/x86_64/gettimeofday.S
|
||||||
|
deleted file mode 100644
|
||||||
|
index f618e73..0000000
|
||||||
|
--- a/sysdeps/unix/sysv/linux/x86_64/gettimeofday.S
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,49 +0,0 @@
|
||||||
|
-/* Copyright (C) 2002, 2003, 2007 Free Software Foundation, Inc.
|
||||||
|
- This file is part of the GNU C Library.
|
||||||
|
-
|
||||||
|
- The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
- modify it under the terms of the GNU Lesser General Public
|
||||||
|
- License as published by the Free Software Foundation; either
|
||||||
|
- version 2.1 of the License, or (at your option) any later version.
|
||||||
|
-
|
||||||
|
- The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
- Lesser General Public License for more details.
|
||||||
|
-
|
||||||
|
- You should have received a copy of the GNU Lesser General Public
|
||||||
|
- License along with the GNU C Library; if not, write to the Free
|
||||||
|
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
- 02111-1307 USA. */
|
||||||
|
-
|
||||||
|
-#include <sysdep.h>
|
||||||
|
-#define _ERRNO_H 1
|
||||||
|
-#include <bits/errno.h>
|
||||||
|
-
|
||||||
|
-/* For the calculation see asm/vsyscall.h. */
|
||||||
|
-#define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000
|
||||||
|
-
|
||||||
|
-
|
||||||
|
-ENTRY (__gettimeofday)
|
||||||
|
- /* Align stack. */
|
||||||
|
- sub $0x8, %rsp
|
||||||
|
- cfi_adjust_cfa_offset(8)
|
||||||
|
-#ifdef SHARED
|
||||||
|
- movq __vdso_gettimeofday(%rip), %rax
|
||||||
|
- PTR_DEMANGLE (%rax)
|
||||||
|
-#else
|
||||||
|
- movq $VSYSCALL_ADDR_vgettimeofday, %rax
|
||||||
|
-#endif
|
||||||
|
- callq *%rax
|
||||||
|
- /* Check error return. */
|
||||||
|
- cmpl $-4095, %eax
|
||||||
|
- jae SYSCALL_ERROR_LABEL
|
||||||
|
-
|
||||||
|
-L(pseudo_end):
|
||||||
|
- add $0x8, %rsp
|
||||||
|
- cfi_adjust_cfa_offset(-8)
|
||||||
|
- ret
|
||||||
|
-PSEUDO_END(__gettimeofday)
|
||||||
|
-
|
||||||
|
-strong_alias (__gettimeofday, __gettimeofday_internal)
|
||||||
|
-weak_alias (__gettimeofday, gettimeofday)
|
||||||
|
diff --git a/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c b/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..1a773d6
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
|
||||||
|
@@ -0,0 +1,49 @@
|
||||||
|
+/* Copyright (C) 2002, 2003, 2007, 2011 Free Software Foundation, Inc.
|
||||||
|
+ This file is part of the GNU C Library.
|
||||||
|
+
|
||||||
|
+ The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
+ modify it under the terms of the GNU Lesser General Public
|
||||||
|
+ License as published by the Free Software Foundation; either
|
||||||
|
+ version 2.1 of the License, or (at your option) any later version.
|
||||||
|
+
|
||||||
|
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
+ Lesser General Public License for more details.
|
||||||
|
+
|
||||||
|
+ You should have received a copy of the GNU Lesser General Public
|
||||||
|
+ License along with the GNU C Library; if not, write to the Free
|
||||||
|
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
+ 02111-1307 USA. */
|
||||||
|
+
|
||||||
|
+#include <dl-vdso.h>
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000ul
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#ifdef SHARED
|
||||||
|
+void *gettimeofday_ifunc (void) __asm__ ("__gettimeofday");
|
||||||
|
+
|
||||||
|
+void *
|
||||||
|
+gettimeofday_ifunc (void)
|
||||||
|
+{
|
||||||
|
+ PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
|
||||||
|
+
|
||||||
|
+ /* If the vDSO is not available we fall back on the old vsyscall. */
|
||||||
|
+ return (_dl_vdso_vsym ("gettimeofday", &linux26)
|
||||||
|
+ ?: (void *) VSYSCALL_ADDR_vgettimeofday);
|
||||||
|
+}
|
||||||
|
+__asm (".type __gettimeofday, %gnu_indirect_function");
|
||||||
|
+#else
|
||||||
|
+# include <sys/time.h>
|
||||||
|
+
|
||||||
|
+int
|
||||||
|
+__gettimeofday (struct timeval *tv, struct timezone *tz)
|
||||||
|
+{
|
||||||
|
+ return ((int (*) (struct timeval *, struct timezone *)) VSYSCALL_ADDR_vgettimeofday) (tv, tz);
|
||||||
|
+}
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+weak_alias (__gettimeofday, gettimeofday)
|
||||||
|
+strong_alias (__gettimeofday, __gettimeofday_internal)
|
||||||
|
diff --git a/sysdeps/unix/sysv/linux/x86_64/init-first.c b/sysdeps/unix/sysv/linux/x86_64/init-first.c
|
||||||
|
index e676f62..25cf08b 100644
|
||||||
|
--- a/sysdeps/unix/sysv/linux/x86_64/init-first.c
|
||||||
|
+++ b/sysdeps/unix/sysv/linux/x86_64/init-first.c
|
||||||
|
@@ -20,15 +20,11 @@
|
||||||
|
# include <dl-vdso.h>
|
||||||
|
# include <bits/libc-vdso.h>
|
||||||
|
|
||||||
|
-long int (*__vdso_gettimeofday) (struct timeval *, void *) attribute_hidden;
|
||||||
|
-
|
||||||
|
long int (*__vdso_clock_gettime) (clockid_t, struct timespec *)
|
||||||
|
__attribute__ ((nocommon));
|
||||||
|
strong_alias (__vdso_clock_gettime, __GI___vdso_clock_gettime attribute_hidden)
|
||||||
|
|
||||||
|
-long int (*__vdso_getcpu) (unsigned *, unsigned *, void *);
|
||||||
|
-
|
||||||
|
-long int (*__vdso_time) (time_t *) attribute_hidden;
|
||||||
|
+long int (*__vdso_getcpu) (unsigned *, unsigned *, void *) attribute_hidden;
|
||||||
|
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
@@ -36,15 +32,7 @@ _libc_vdso_platform_setup (void)
|
||||||
|
{
|
||||||
|
PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
|
||||||
|
|
||||||
|
- void *p = _dl_vdso_vsym ("gettimeofday", &linux26);
|
||||||
|
- /* If the vDSO is not available we fall back on the old vsyscall. */
|
||||||
|
-#define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000ul
|
||||||
|
- if (p == NULL)
|
||||||
|
- p = (void *) VSYSCALL_ADDR_vgettimeofday;
|
||||||
|
- PTR_MANGLE (p);
|
||||||
|
- __vdso_gettimeofday = p;
|
||||||
|
-
|
||||||
|
- p = _dl_vdso_vsym ("clock_gettime", &linux26);
|
||||||
|
+ void *p = _dl_vdso_vsym ("clock_gettime", &linux26);
|
||||||
|
PTR_MANGLE (p);
|
||||||
|
__GI___vdso_clock_gettime = p;
|
||||||
|
|
||||||
|
@@ -55,14 +43,6 @@ _libc_vdso_platform_setup (void)
|
||||||
|
p = (void *) VSYSCALL_ADDR_vgetcpu;
|
||||||
|
PTR_MANGLE (p);
|
||||||
|
__vdso_getcpu = p;
|
||||||
|
-
|
||||||
|
- p = _dl_vdso_vsym ("time", &linux26);
|
||||||
|
- /* If the vDSO is not available we fall back on the old vsyscall. */
|
||||||
|
-#define VSYSCALL_ADDR_vtime 0xffffffffff600400
|
||||||
|
- if (p == NULL)
|
||||||
|
- p = (void *) VSYSCALL_ADDR_vtime;
|
||||||
|
- PTR_MANGLE (p);
|
||||||
|
- __vdso_time = p;
|
||||||
|
}
|
||||||
|
|
||||||
|
# define VDSO_SETUP _libc_vdso_platform_setup
|
||||||
|
diff --git a/sysdeps/unix/sysv/linux/x86_64/time.S b/sysdeps/unix/sysv/linux/x86_64/time.S
|
||||||
|
deleted file mode 100644
|
||||||
|
index 66d7498..0000000
|
||||||
|
--- a/sysdeps/unix/sysv/linux/x86_64/time.S
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,47 +0,0 @@
|
||||||
|
-/* Copyright (C) 2001,02, 2003, 2011 Free Software Foundation, Inc.
|
||||||
|
- This file is part of the GNU C Library.
|
||||||
|
-
|
||||||
|
- The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
- modify it under the terms of the GNU Lesser General Public
|
||||||
|
- License as published by the Free Software Foundation; either
|
||||||
|
- version 2.1 of the License, or (at your option) any later version.
|
||||||
|
-
|
||||||
|
- The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
- Lesser General Public License for more details.
|
||||||
|
-
|
||||||
|
- You should have received a copy of the GNU Lesser General Public
|
||||||
|
- License along with the GNU C Library; if not, write to the Free
|
||||||
|
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
- 02111-1307 USA. */
|
||||||
|
-
|
||||||
|
-#include <sysdep.h>
|
||||||
|
-#define _ERRNO_H 1
|
||||||
|
-#include <bits/errno.h>
|
||||||
|
-
|
||||||
|
-/* For the calculation see asm/vsyscall.h. */
|
||||||
|
-#define VSYSCALL_ADDR_vtime 0xffffffffff600400
|
||||||
|
-
|
||||||
|
-
|
||||||
|
-/* Return the current time as a `time_t' and also put it in *T if T is
|
||||||
|
- not NULL. Time is represented as seconds from Jan 1 00:00:00 1970. */
|
||||||
|
-
|
||||||
|
-ENTRY (time)
|
||||||
|
- /* Align stack. */
|
||||||
|
- sub $0x8, %rsp
|
||||||
|
- cfi_adjust_cfa_offset(8)
|
||||||
|
-
|
||||||
|
-#ifdef SHARED
|
||||||
|
- movq __vdso_time(%rip), %rax
|
||||||
|
- PTR_DEMANGLE (%rax)
|
||||||
|
-#else
|
||||||
|
- movq $VSYSCALL_ADDR_vtime, %rax
|
||||||
|
-#endif
|
||||||
|
- callq *%rax
|
||||||
|
-
|
||||||
|
- add $0x8, %rsp
|
||||||
|
- cfi_adjust_cfa_offset(-8)
|
||||||
|
- ret
|
||||||
|
-PSEUDO_END_NOERRNO(time)
|
||||||
|
-libc_hidden_def (time)
|
||||||
|
diff --git a/sysdeps/unix/sysv/linux/x86_64/time.c b/sysdeps/unix/sysv/linux/x86_64/time.c
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..698d561
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/sysdeps/unix/sysv/linux/x86_64/time.c
|
||||||
|
@@ -0,0 +1,47 @@
|
||||||
|
+/* Copyright (C) 2001,02, 2003, 2011 Free Software Foundation, Inc.
|
||||||
|
+ This file is part of the GNU C Library.
|
||||||
|
+
|
||||||
|
+ The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
+ modify it under the terms of the GNU Lesser General Public
|
||||||
|
+ License as published by the Free Software Foundation; either
|
||||||
|
+ version 2.1 of the License, or (at your option) any later version.
|
||||||
|
+
|
||||||
|
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
+ Lesser General Public License for more details.
|
||||||
|
+
|
||||||
|
+ You should have received a copy of the GNU Lesser General Public
|
||||||
|
+ License along with the GNU C Library; if not, write to the Free
|
||||||
|
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
+ 02111-1307 USA. */
|
||||||
|
+
|
||||||
|
+#include <dl-vdso.h>
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#define VSYSCALL_ADDR_vtime 0xffffffffff600400
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#ifdef SHARED
|
||||||
|
+void *time_ifunc (void) __asm__ ("time");
|
||||||
|
+
|
||||||
|
+void *
|
||||||
|
+time_ifunc (void)
|
||||||
|
+{
|
||||||
|
+ PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
|
||||||
|
+
|
||||||
|
+ /* If the vDSO is not available we fall back on the old vsyscall. */
|
||||||
|
+ return _dl_vdso_vsym ("time", &linux26) ?: (void *) VSYSCALL_ADDR_vtime;
|
||||||
|
+}
|
||||||
|
+__asm (".type time, %gnu_indirect_function");
|
||||||
|
+#else
|
||||||
|
+# include <time.h>
|
||||||
|
+
|
||||||
|
+time_t
|
||||||
|
+time (time_t *t)
|
||||||
|
+{
|
||||||
|
+ return ((time_t (*) (time_t *)) VSYSCALL_ADDR_vtime) (t);
|
||||||
|
+}
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+strong_alias (time, __GI_time)
|
||||||
|
|
||||||
|
commit 2bc174332ba6ddbd1b855dced33889bef56e8ba3
|
||||||
|
Author: Andreas Schwab <schwab@redhat.com>
|
||||||
|
Date: Tue Aug 30 15:37:54 2011 +0200
|
||||||
|
|
||||||
|
Relocate objects in dependency order
|
||||||
|
|
||||||
|
2011-08-30 Andreas Schwab <schwab@redhat.com>
|
||||||
|
|
||||||
|
* elf/rtld.c (dl_main): Relocate objects in dependency order.
|
||||||
|
|
||||||
|
diff --git a/elf/rtld.c b/elf/rtld.c
|
||||||
|
index 87bb5f0..4f6bbfd 100644
|
||||||
|
--- a/elf/rtld.c
|
||||||
|
+++ b/elf/rtld.c
|
||||||
|
@@ -2255,13 +2255,12 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
|
||||||
|
/* If we are profiling we also must do lazy reloaction. */
|
||||||
|
GLRO(dl_lazy) |= consider_profiling;
|
||||||
|
|
||||||
|
- struct link_map *l = main_map;
|
||||||
|
- while (l->l_next)
|
||||||
|
- l = l->l_next;
|
||||||
|
-
|
||||||
|
HP_TIMING_NOW (start);
|
||||||
|
- do
|
||||||
|
+ unsigned i = main_map->l_searchlist.r_nlist;
|
||||||
|
+ while (i-- > 0)
|
||||||
|
{
|
||||||
|
+ struct link_map *l = main_map->l_initfini[i];
|
||||||
|
+
|
||||||
|
/* While we are at it, help the memory handling a bit. We have to
|
||||||
|
mark some data structures as allocated with the fake malloc()
|
||||||
|
implementation in ld.so. */
|
||||||
|
@@ -2280,10 +2279,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
|
||||||
|
/* Add object to slot information data if necessasy. */
|
||||||
|
if (l->l_tls_blocksize != 0 && tls_init_tp_called)
|
||||||
|
_dl_add_to_slotinfo (l);
|
||||||
|
-
|
||||||
|
- l = l->l_prev;
|
||||||
|
}
|
||||||
|
- while (l);
|
||||||
|
HP_TIMING_NOW (stop);
|
||||||
|
|
||||||
|
HP_TIMING_DIFF (relocate_time, start, stop);
|
||||||
|
|
||||||
|
commit ef60624956e93df1da329a48570776ed963b1916
|
||||||
|
Author: Ulrich Drepper <drepper@gmail.com>
|
||||||
|
Date: Tue Sep 6 00:12:18 2011 -0400
|
||||||
|
|
||||||
|
Prefer real syscalls instead of vsyscalls on x86-64 outside libc.so
|
||||||
|
|
||||||
|
2011-09-06 Ulrich Drepper <drepper@gmail.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/kernel-features.h: Add entry for getcpu
|
||||||
|
syscall on x86-64.
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/gettimeofday.c [!SHARED]: Use real
|
||||||
|
syscall.
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/time.c: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/sched_getcpu.S [!SHARED]: Use real
|
||||||
|
syscall if possible.
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
|
||||||
|
index d91f581..58f833e 100644
|
||||||
|
--- a/sysdeps/unix/sysv/linux/kernel-features.h
|
||||||
|
+++ b/sysdeps/unix/sysv/linux/kernel-features.h
|
||||||
|
@@ -546,3 +546,8 @@
|
||||||
|
#if __LINUX_KERNEL_VERSION >= 0x020627
|
||||||
|
# define __ASSUME_SENDMMSG 1
|
||||||
|
#endif
|
||||||
|
+
|
||||||
|
+/* getcpu is a syscall for x86-64 since 3.1. */
|
||||||
|
+#if defined __x86_64__ && __LINUX_KERNEL_VERSION >= 0x030100
|
||||||
|
+# define __ASSUME_GETCPU_SYSCALL 1
|
||||||
|
+#endif
|
||||||
|
diff --git a/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c b/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
|
||||||
|
index 1a773d6..56171bc 100644
|
||||||
|
--- a/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
|
||||||
|
+++ b/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
|
||||||
|
@@ -37,11 +37,12 @@ gettimeofday_ifunc (void)
|
||||||
|
__asm (".type __gettimeofday, %gnu_indirect_function");
|
||||||
|
#else
|
||||||
|
# include <sys/time.h>
|
||||||
|
+# include <sysdep.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
__gettimeofday (struct timeval *tv, struct timezone *tz)
|
||||||
|
{
|
||||||
|
- return ((int (*) (struct timeval *, struct timezone *)) VSYSCALL_ADDR_vgettimeofday) (tv, tz);
|
||||||
|
+ return INLINE_SYSCALL (gettimeofday, 2, tv, tz);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
diff --git a/sysdeps/unix/sysv/linux/x86_64/sched_getcpu.S b/sysdeps/unix/sysv/linux/x86_64/sched_getcpu.S
|
||||||
|
index 8ec7d3f..246c955 100644
|
||||||
|
--- a/sysdeps/unix/sysv/linux/x86_64/sched_getcpu.S
|
||||||
|
+++ b/sysdeps/unix/sysv/linux/x86_64/sched_getcpu.S
|
||||||
|
@@ -20,6 +20,7 @@
|
||||||
|
#include <tls.h>
|
||||||
|
#define _ERRNO_H 1
|
||||||
|
#include <bits/errno.h>
|
||||||
|
+#include <kernel-features.h>
|
||||||
|
|
||||||
|
/* For the calculation see asm/vsyscall.h. */
|
||||||
|
#define VSYSCALL_ADDR_vgetcpu 0xffffffffff600800
|
||||||
|
@@ -38,10 +39,26 @@ ENTRY (sched_getcpu)
|
||||||
|
#ifdef SHARED
|
||||||
|
movq __vdso_getcpu(%rip), %rax
|
||||||
|
PTR_DEMANGLE (%rax)
|
||||||
|
+ callq *%rax
|
||||||
|
#else
|
||||||
|
+# ifdef __NR_getcpu
|
||||||
|
+ movl $__NR_getcpu, %eax
|
||||||
|
+ syscall
|
||||||
|
+# ifndef __ASSUME_GETCPU_SYSCALL
|
||||||
|
+ cmpq $-ENOSYS, %rax
|
||||||
|
+ jne 1f
|
||||||
|
+# endif
|
||||||
|
+# endif
|
||||||
|
+# ifndef __ASSUME_GETCPU_SYSCALL
|
||||||
|
movq $VSYSCALL_ADDR_vgetcpu, %rax
|
||||||
|
-#endif
|
||||||
|
callq *%rax
|
||||||
|
+1:
|
||||||
|
+# else
|
||||||
|
+# ifndef __NR_getcpu
|
||||||
|
+# error "cannot happen"
|
||||||
|
+# endif
|
||||||
|
+# endif
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
cmpq $-4095, %rax
|
||||||
|
jae SYSCALL_ERROR_LABEL
|
||||||
|
diff --git a/sysdeps/unix/sysv/linux/x86_64/time.c b/sysdeps/unix/sysv/linux/x86_64/time.c
|
||||||
|
index 698d561..c1c1a75 100644
|
||||||
|
--- a/sysdeps/unix/sysv/linux/x86_64/time.c
|
||||||
|
+++ b/sysdeps/unix/sysv/linux/x86_64/time.c
|
||||||
|
@@ -36,11 +36,13 @@ time_ifunc (void)
|
||||||
|
__asm (".type time, %gnu_indirect_function");
|
||||||
|
#else
|
||||||
|
# include <time.h>
|
||||||
|
+# include <sysdep.h>
|
||||||
|
|
||||||
|
time_t
|
||||||
|
time (time_t *t)
|
||||||
|
{
|
||||||
|
- return ((time_t (*) (time_t *)) VSYSCALL_ADDR_vtime) (t);
|
||||||
|
+ INTERNAL_SYSCALL_DECL (err);
|
||||||
|
+ return INTERNAL_SYSCALL (time, err, 1, t);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
2011-09-06 Andreas Jaeger <aj@suse.de>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/gettimeofday.c: Include <errno.h>
|
||||||
|
to fix build.
|
||||||
|
|
||||||
|
Index: glibc-2.14/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
|
||||||
|
===================================================================
|
||||||
|
--- glibc-2.14.orig/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
|
||||||
|
+++ glibc-2.14/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
|
||||||
|
@@ -36,6 +36,7 @@ gettimeofday_ifunc (void)
|
||||||
|
}
|
||||||
|
__asm (".type __gettimeofday, %gnu_indirect_function");
|
||||||
|
#else
|
||||||
|
+# include <errno.h>
|
||||||
|
# include <sys/time.h>
|
||||||
|
# include <sysdep.h>
|
||||||
|
|
59
glibc-resolv-assert.diff
Normal file
59
glibc-resolv-assert.diff
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
2011-07-21 Aurelien Jarno <aurel32@debian.org>
|
||||||
|
|
||||||
|
* resolv/res_query.c(__libc_res_nquery): Assign hp and hp2
|
||||||
|
depending n and resplen2 to catch cases where answer
|
||||||
|
equals answerp2.
|
||||||
|
|
||||||
|
diff --git a/resolv/res_query.c b/resolv/res_query.c
|
||||||
|
index 2f7cfaa..405fa68 100644
|
||||||
|
--- a/resolv/res_query.c
|
||||||
|
+++ b/resolv/res_query.c
|
||||||
|
@@ -122,6 +122,7 @@ __libc_res_nquery(res_state statp,
|
||||||
|
int *resplen2)
|
||||||
|
{
|
||||||
|
HEADER *hp = (HEADER *) answer;
|
||||||
|
+ HEADER *hp2;
|
||||||
|
int n, use_malloc = 0;
|
||||||
|
u_int oflags = statp->_flags;
|
||||||
|
|
||||||
|
@@ -239,26 +240,25 @@ __libc_res_nquery(res_state statp,
|
||||||
|
/* __libc_res_nsend might have reallocated the buffer. */
|
||||||
|
hp = (HEADER *) *answerp;
|
||||||
|
|
||||||
|
- /* We simplify the following tests by assigning HP to HP2. It
|
||||||
|
- is easy to verify that this is the same as ignoring all
|
||||||
|
- tests of HP2. */
|
||||||
|
- HEADER *hp2 = answerp2 ? (HEADER *) *answerp2 : hp;
|
||||||
|
-
|
||||||
|
- if (n < (int) sizeof (HEADER) && answerp2 != NULL
|
||||||
|
- && *resplen2 > (int) sizeof (HEADER))
|
||||||
|
+ /* We simplify the following tests by assigning HP to HP2 or
|
||||||
|
+ vice versa. It is easy to verify that this is the same as
|
||||||
|
+ ignoring all tests of HP or HP2. */
|
||||||
|
+ if (answerp2 == NULL || *resplen2 < (int) sizeof (HEADER))
|
||||||
|
{
|
||||||
|
- /* Special case of partial answer. */
|
||||||
|
- assert (hp != hp2);
|
||||||
|
- hp = hp2;
|
||||||
|
+ hp2 = hp;
|
||||||
|
}
|
||||||
|
- else if (answerp2 != NULL && *resplen2 < (int) sizeof (HEADER)
|
||||||
|
- && n > (int) sizeof (HEADER))
|
||||||
|
+ else
|
||||||
|
{
|
||||||
|
- /* Special case of partial answer. */
|
||||||
|
- assert (hp != hp2);
|
||||||
|
- hp2 = hp;
|
||||||
|
+ hp2 = (HEADER *) *answerp2;
|
||||||
|
+ if (n < (int) sizeof (HEADER))
|
||||||
|
+ {
|
||||||
|
+ hp = hp2;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* Make sure both hp and hp2 are defined */
|
||||||
|
+ assert((hp != NULL) && (hp2 != NULL));
|
||||||
|
+
|
||||||
|
if ((hp->rcode != NOERROR || ntohs(hp->ancount) == 0)
|
||||||
|
&& (hp2->rcode != NOERROR || ntohs(hp2->ancount) == 0)) {
|
||||||
|
#ifdef DEBUG
|
@ -1,7 +1,67 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Sep 22 21:07:43 CEST 2011 - dmueller@suse.de
|
||||||
|
|
||||||
|
- fix ports build
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Sep 22 13:10:02 UTC 2011 - adrian@suse.de
|
||||||
|
|
||||||
|
- add armv8l architecture
|
||||||
|
- don't enforce armv5tel for all arm architectures anymore
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Sep 19 08:09:40 UTC 2011 - opensuse@cboltz.de
|
||||||
|
|
||||||
|
- move usr.sbin.nscd apparmor profile back to apparmor-profiles package
|
||||||
|
(bnc#647718)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Sep 19 07:45:36 UTC 2011 - aj@suse.de
|
||||||
|
|
||||||
|
- Update to 2.14 git version 69c1dfc1a796, it contains backports from
|
||||||
|
glibc trunk:
|
||||||
|
+ Fix setxid race handling exiting threads
|
||||||
|
+ Fix cfi directives in x86-64 and i386 code
|
||||||
|
+ Fix scope handling during dl_close
|
||||||
|
+ Fix spurious nop at start of __strspn_ia32
|
||||||
|
+ Correct cycle detection during dependency sorting
|
||||||
|
+ Fix fopen (non-existing-file, "re") errno (Obsoletes patch
|
||||||
|
fopen-close-exec.patch)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Sep 16 11:20:29 UTC 2011 - mmarek@suse.cz
|
||||||
|
|
||||||
|
- Fix assertion error in res_query.c, triggered by Firefox
|
||||||
|
(bso#13013).
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Sep 7 07:17:16 UTC 2011 - aj@suse.de
|
||||||
|
|
||||||
|
- Avoid usage of vsyscalls inside glibc.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Sep 6 09:53:24 CEST 2011 - aj@suse.de
|
||||||
|
|
||||||
|
- Prefer real syscalls instead of vsyscalls on x86-64 outside
|
||||||
|
libc.so
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Sep 5 10:06:23 UTC 2011 - aj@suse.de
|
||||||
|
|
||||||
|
- Do not not trigger an abort when an i586 Intel CPU is running the
|
||||||
|
i686 library, as valgrind does. [bnc#681398]
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Sep 5 08:26:24 UTC 2011 - aj@suse.de
|
||||||
|
|
||||||
|
- Readd vdso support.
|
||||||
|
- Add patch to relocate objects in dependency order, this fixes the
|
||||||
|
vdso support.
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Sat Sep 3 19:39:03 UTC 2011 - aj@suse.de
|
Sat Sep 3 19:39:03 UTC 2011 - aj@suse.de
|
||||||
|
|
||||||
- Revert last change, it caused some breakage.
|
- Revert last change, it caused some breakage. [bnc#715854]
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Sep 1 20:49:16 UTC 2011 - aj@suse.de
|
Thu Sep 1 20:49:16 UTC 2011 - aj@suse.de
|
||||||
|
37
glibc.spec
37
glibc.spec
@ -82,11 +82,10 @@ Version: 2.14
|
|||||||
Release: 11
|
Release: 11
|
||||||
Url: http://www.gnu.org/software/libc/libc.html
|
Url: http://www.gnu.org/software/libc/libc.html
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
Source: glibc-%{version}-4eddf93f5cc2.tar.bz2
|
Source: glibc-%{version}-69c1dfc1a796.tar.bz2
|
||||||
Source2: http://ftp.gnu.org/gnu/glibc/glibc-ports-2.14.tar.bz2
|
Source2: http://ftp.gnu.org/gnu/glibc/glibc-ports-2.14.tar.bz2
|
||||||
Source3: noversion.tar.bz2
|
Source3: noversion.tar.bz2
|
||||||
Source4: manpages.tar.bz2
|
Source4: manpages.tar.bz2
|
||||||
Source5: usr.sbin.nscd
|
|
||||||
Source8: nsswitch.conf
|
Source8: nsswitch.conf
|
||||||
Source9: nscd.init
|
Source9: nscd.init
|
||||||
Source10: bindresvport.blacklist
|
Source10: bindresvport.blacklist
|
||||||
@ -198,8 +197,14 @@ Patch66: glibc2.14-revert-sunrpc-removal.patch
|
|||||||
Patch67: glibc-revert-fseek-on-fclose.diff
|
Patch67: glibc-revert-fseek-on-fclose.diff
|
||||||
# PATCH-FIX-OPENSUSE Fix crash (access-after-free) in dl_lookup_x bnc#703140 matz@suse.de
|
# PATCH-FIX-OPENSUSE Fix crash (access-after-free) in dl_lookup_x bnc#703140 matz@suse.de
|
||||||
Patch68: glibc-fix-lookup-crash.patch
|
Patch68: glibc-fix-lookup-crash.patch
|
||||||
# PATCH-FIX-UPSTREAM Fix fopen("non-existing-file", "re") errno bnc#713146 aj@suse.de
|
# PATCH-FIX-UPSTREAM Add vdso support to support Linux 3.1, fix order of relocations aj@suse.de
|
||||||
Patch69: fopen-close-exec.patch
|
Patch70: glibc-2.15-vsyscall.patch
|
||||||
|
# PATCH-FIX-OPENSUSE Do not trigger an abort when an i586 Intel CPU is running the i686 library, as valgrind does. bnc#681398 aj@suse.de
|
||||||
|
Patch71: x86-cpuid-level2.patch
|
||||||
|
# PATCH-FIX-UPSTREAM Avoid use of vsyscall aj@suse.de
|
||||||
|
Patch72: glibc-2.15-avoid-vsyscall.patch
|
||||||
|
# PATCH-FIX-UPSTREAM Fix assertion error in res_query.c (bso#13013)
|
||||||
|
Patch73: glibc-resolv-assert.diff
|
||||||
# PATCH-FEATURE-OPENSUSE -- add sha support to crypt_blowfish lnussel@suse.de
|
# PATCH-FEATURE-OPENSUSE -- add sha support to crypt_blowfish lnussel@suse.de
|
||||||
Patch80: crypt_blowfish-1.2-sha.diff
|
Patch80: crypt_blowfish-1.2-sha.diff
|
||||||
# PATCH-FEATURE-OPENSUSE -- use separate symbol version for Owl extensions - lnussel@suse.de
|
# PATCH-FEATURE-OPENSUSE -- use separate symbol version for Owl extensions - lnussel@suse.de
|
||||||
@ -317,7 +322,6 @@ library.
|
|||||||
|
|
||||||
%package devel-static
|
%package devel-static
|
||||||
|
|
||||||
|
|
||||||
Summary: C library static libraries for -static linking
|
Summary: C library static libraries for -static linking
|
||||||
Group: Development/Libraries/C and C++
|
Group: Development/Libraries/C and C++
|
||||||
Requires: %{name}-devel = %{version}
|
Requires: %{name}-devel = %{version}
|
||||||
@ -361,10 +365,8 @@ versions of your software.
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%ifarch %arm armv5tel armv7l
|
%ifarch %arm armv5tel armv7l armv8l
|
||||||
# add glibc-ports for arm
|
# add glibc-ports for arm
|
||||||
# this is CURRENTLY BROKEN (as of 2009-11-13); ARM-interested
|
|
||||||
# contributors need to provide new tested glibc-ports source
|
|
||||||
%setup -n glibc-%{version} -q -a 2 -a 3 -a 4
|
%setup -n glibc-%{version} -q -a 2 -a 3 -a 4
|
||||||
%else
|
%else
|
||||||
# any other leave out ports
|
# any other leave out ports
|
||||||
@ -434,7 +436,10 @@ rm nscd/s-stamp
|
|||||||
%patch66 -p1
|
%patch66 -p1
|
||||||
%patch67 -p1
|
%patch67 -p1
|
||||||
%patch68 -p1
|
%patch68 -p1
|
||||||
%patch69 -p1
|
%patch70 -p1
|
||||||
|
%patch71 -p1
|
||||||
|
%patch72 -p1
|
||||||
|
%patch73 -p1
|
||||||
|
|
||||||
#
|
#
|
||||||
# Inconsistency detected by ld.so: dl-close.c: 719: _dl_close: Assertion `map->l_init_called' failed!
|
# Inconsistency detected by ld.so: dl-close.c: 719: _dl_close: Assertion `map->l_init_called' failed!
|
||||||
@ -527,9 +532,9 @@ PARALLEL="%{?_smp_mflags}"
|
|||||||
%ifarch %ix86
|
%ifarch %ix86
|
||||||
add_ons=$add_ons,noversion
|
add_ons=$add_ons,noversion
|
||||||
%endif
|
%endif
|
||||||
%ifarch %arm armv5tel armv7l
|
%ifarch %arm armv5tel armv7l armv8l
|
||||||
add_ons=$add_ons,ports
|
add_ons=$add_ons,glibc-ports-%{version}
|
||||||
BuildFlags="-march=armv5te -O2 -Wall"
|
BuildFlags="$BuildFlags -fasynchronous-unwind-tables"
|
||||||
# fails to build otherwise - need to recheck and fix
|
# fails to build otherwise - need to recheck and fix
|
||||||
%define enable_stackguard_randomization 0
|
%define enable_stackguard_randomization 0
|
||||||
%endif
|
%endif
|
||||||
@ -548,7 +553,7 @@ configure_and_build_glibc() {
|
|||||||
%if %{enable_stackguard_randomization}
|
%if %{enable_stackguard_randomization}
|
||||||
--enable-stackguard-randomization \
|
--enable-stackguard-randomization \
|
||||||
%endif
|
%endif
|
||||||
%ifarch %arm armv5tel armv7l
|
%ifarch %arm armv5tel armv7l armv8l
|
||||||
--build=%{_target_cpu}-suse-linux-gnueabi \
|
--build=%{_target_cpu}-suse-linux-gnueabi \
|
||||||
%else
|
%else
|
||||||
--build=%{_target_cpu}-suse-linux \
|
--build=%{_target_cpu}-suse-linux \
|
||||||
@ -781,8 +786,6 @@ popd
|
|||||||
# nscd tools:
|
# nscd tools:
|
||||||
|
|
||||||
cp nscd/nscd.conf %{buildroot}/etc
|
cp nscd/nscd.conf %{buildroot}/etc
|
||||||
mkdir -p %{buildroot}/etc/apparmor.d
|
|
||||||
cp $RPM_SOURCE_DIR/usr.sbin.nscd %{buildroot}/etc/apparmor.d
|
|
||||||
mkdir -p %{buildroot}/etc/init.d
|
mkdir -p %{buildroot}/etc/init.d
|
||||||
install -m 755 $RPM_SOURCE_DIR/nscd.init %{buildroot}/etc/init.d/nscd
|
install -m 755 $RPM_SOURCE_DIR/nscd.init %{buildroot}/etc/init.d/nscd
|
||||||
ln -sf /etc/init.d/nscd %{buildroot}/usr/sbin/rcnscd
|
ln -sf /etc/init.d/nscd %{buildroot}/usr/sbin/rcnscd
|
||||||
@ -920,7 +923,7 @@ exit 0
|
|||||||
%ifarch x86_64
|
%ifarch x86_64
|
||||||
/%{_lib}/ld-linux-x86-64.so.2
|
/%{_lib}/ld-linux-x86-64.so.2
|
||||||
%else
|
%else
|
||||||
%ifarch %arm armv5tel armv7l
|
%ifarch %arm armv5tel armv7l armv8l
|
||||||
/%{_lib}/ld-linux.so.3
|
/%{_lib}/ld-linux.so.3
|
||||||
%else
|
%else
|
||||||
/%{_lib}/ld-linux.so.2
|
/%{_lib}/ld-linux.so.2
|
||||||
@ -1088,8 +1091,6 @@ exit 0
|
|||||||
%files -n nscd
|
%files -n nscd
|
||||||
%defattr(-,root,root)
|
%defattr(-,root,root)
|
||||||
%config(noreplace) /etc/nscd.conf
|
%config(noreplace) /etc/nscd.conf
|
||||||
%dir /etc/apparmor.d
|
|
||||||
%config /etc/apparmor.d/usr.sbin.nscd
|
|
||||||
%config /etc/init.d/nscd
|
%config /etc/init.d/nscd
|
||||||
%{_sbindir}/nscd
|
%{_sbindir}/nscd
|
||||||
%{_sbindir}/rcnscd
|
%{_sbindir}/rcnscd
|
||||||
|
@ -1,45 +0,0 @@
|
|||||||
# ------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# Copyright (C) 2002-2005 Novell/SUSE
|
|
||||||
# Copyright (C) 2009-2010 Canonical Ltd.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of version 2 of the GNU General Public
|
|
||||||
# License published by the Free Software Foundation.
|
|
||||||
#
|
|
||||||
# ------------------------------------------------------------------
|
|
||||||
|
|
||||||
#include <tunables/global>
|
|
||||||
/usr/sbin/nscd {
|
|
||||||
#include <abstractions/base>
|
|
||||||
#include <abstractions/consoles>
|
|
||||||
#include <abstractions/nameservice>
|
|
||||||
#include <abstractions/ssl_certs>
|
|
||||||
|
|
||||||
capability net_bind_service,
|
|
||||||
|
|
||||||
network inet dgram,
|
|
||||||
network inet stream,
|
|
||||||
|
|
||||||
/etc/netgroup r,
|
|
||||||
/etc/nscd.conf r,
|
|
||||||
/tmp/.winbindd/pipe rw,
|
|
||||||
/usr/sbin/nscd rmix,
|
|
||||||
/var/lib/samba/winbindd_privileged/pipe rw,
|
|
||||||
/{,var/}run/.nscd_socket wl,
|
|
||||||
/{,var/}run/avahi-daemon/socket w,
|
|
||||||
/{,var/}run/nscd/ rw,
|
|
||||||
/{,var/}run/nscd/db* wl,
|
|
||||||
/{,var/}run/nscd/socket wl,
|
|
||||||
/var/{cache,run}/nscd/{passwd,group,services,hosts} rw,
|
|
||||||
/{,var/}run/{nscd/,}nscd.pid rwl,
|
|
||||||
/var/log/nscd.log rw,
|
|
||||||
@{PROC}/[0-9]*/fd/ r,
|
|
||||||
@{PROC}/[0-9]*/fd/* r,
|
|
||||||
@{PROC}/[0-9]*/maps r,
|
|
||||||
@{PROC}/[0-9]*/mounts r,
|
|
||||||
@{PROC}/filesystems r,
|
|
||||||
|
|
||||||
# Site-specific additions and overrides. See local/README for details.
|
|
||||||
#include <local/usr.sbin.nscd>
|
|
||||||
}
|
|
27
x86-cpuid-level2.patch
Normal file
27
x86-cpuid-level2.patch
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
openSUSE bug report:
|
||||||
|
https://bugzilla.novell.com/show_bug.cgi?id=681398
|
||||||
|
|
||||||
|
Patch from Debian, see
|
||||||
|
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=584748
|
||||||
|
|
||||||
|
---
|
||||||
|
sysdeps/x86_64/cacheinfo.c | 8 +++++++-
|
||||||
|
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/sysdeps/x86_64/cacheinfo.c
|
||||||
|
+++ b/sysdeps/x86_64/cacheinfo.c
|
||||||
|
@@ -254,7 +254,13 @@
|
||||||
|
static long int __attribute__ ((noinline))
|
||||||
|
handle_intel (int name, unsigned int maxidx)
|
||||||
|
{
|
||||||
|
- assert (maxidx >= 2);
|
||||||
|
+ if (maxidx <= 2)
|
||||||
|
+ {
|
||||||
|
+ /* This should never happen as all Intel i686 CPU support a CPUID
|
||||||
|
+ level of 2 minimum. However valgrind sometimes load the i686
|
||||||
|
+ library with a P55C CPUID. Return 0 in that case. */
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
/* OK, we can use the CPUID instruction to get all info about the
|
||||||
|
caches. */
|
Loading…
Reference in New Issue
Block a user