1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-01 10:06:57 +03:00
2004-07-05  Ulrich Drepper  <drepper@redhat.com>

	* elf/dl-init.c: Don't define and use _dl_starting_up if
	HAVE_INLINED_SYSCALLS is defined and the variable is not used.
	* elf/dl-support.c: Likewise.
	* elf/rtld.c: Likewise.
	* elf/dl-misc.c (_dl_debug_vdprintf): Use writev syscall directly
	if HAVE_INLINED_SYSCALLS is defined.
	* sysdeps/powerpc/powerpc64/dl-machine.h: Don't rest _dl_starting_up
	here.
	* sysdeps/powerpc/powerpc32/dl-start.S: Likewise.
	* sysdeps/unix/sysv/linux/configure.in: Define HAVE_INLINED_SYSCALLS.
	* config.h.in: Add entry for HAVE_INLINED_SYSCALLS.

	* sysdeps/posix/profil.c: If compiled for ld.so, omit code which
	is needed to stop profiling.
	* elf/dl-open.c (dl_open_worker): If a newly opened object is to be
	profile make sure it cannot be unloaded.

	* sysdeps/unix/sysv/linux/dl-origin.c: Inline readlink syscall.

	* sysdeps/unix/sysv/linux/fcntl.c: If compiled without cancellation
	support, make sure the helper function is inlined.
	* sysdeps/unix/sysv/linux/pread.c: Likewise.
	* sysdeps/unix/sysv/linux/pwrite.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/fcntl.c: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c: Likewise.
This commit is contained in:
Ulrich Drepper
2004-07-06 04:26:42 +00:00
parent 2dd18ce2b2
commit ce6e047fbb
34 changed files with 295 additions and 122 deletions

View File

@ -43,7 +43,6 @@ if test "${libc_cv_linux2010+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
#line $LINENO "configure"
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@ -172,7 +171,6 @@ echo $ECHO_N "checking for kernel header at least $minimum_kernel... $ECHO_C" >&
decnum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/(\1 * 65536 + \2 * 256 + \3)/'`;
abinum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`;
cat >conftest.$ac_ext <<_ACEOF
#line $LINENO "configure"
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@ -379,3 +377,9 @@ ${ac_prefix}/include directory out of the way." >&2;}
echo "${ECHO_T}ok" >&6
fi
fi
# We have inlined syscalls.
cat >>confdefs.h <<\_ACEOF
#define HAVE_INLINED_SYSCALLS 1
_ACEOF

View File

@ -305,3 +305,6 @@ ${ac_prefix}/include directory out of the way.])
AC_MSG_RESULT(ok)
fi
fi
# We have inlined syscalls.
AC_DEFINE(HAVE_INLINED_SYSCALLS)

View File

@ -24,6 +24,7 @@
#include <unistd.h>
#include <sys/param.h>
#include <ldsodefs.h>
#include <sysdep.h>
#include <dl-dst.h>
@ -37,9 +38,11 @@ _dl_get_origin (void)
char linkval[PATH_MAX];
char *result;
int len;
INTERNAL_SYSCALL_DECL (err);
if ((len = __readlink ("/proc/self/exe", linkval, sizeof (linkval))) > 0
&& linkval[0] != '[')
len = INTERNAL_SYSCALL (readlink, err, 3, "/proc/self/exe", linkval,
sizeof (linkval));
if (! INTERNAL_SYSCALL_ERROR_P (len, err) && len > 0 && linkval[0] != '[')
{
/* We can use this value. */
assert (linkval[0] == '/');

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc.
/* Copyright (C) 2000, 2002, 2003, 2004 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
@ -26,6 +26,9 @@
int
#ifdef NO_CANCELLATION
static inline __attribute ((always_inline))
#endif
__fcntl_nocancel (int fd, int cmd, ...)
{
va_list ap;

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc.
/* Copyright (C) 2000, 2002, 2003, 2004 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,6 +32,9 @@ int __have_no_fcntl64;
int
#ifdef NO_CANCELLATION
static inline __attribute ((always_inline))
#endif
__fcntl_nocancel (int fd, int cmd, ...)
{
va_list ap;
@ -65,16 +68,15 @@ __fcntl_nocancel (int fd, int cmd, ...)
/* Check if we can represent the values with the smaller type. */
if ((off64_t) fl.l_start != fl64->l_start)
{
eoverflow:
__set_errno (EOVERFLOW);
return -1;
}
fl.l_len = (off_t) fl64->l_len;
/* Check if we can represent the values with the smaller type. */
if ((off64_t) fl.l_len != fl64->l_len)
{
__set_errno (EOVERFLOW);
return -1;
}
goto eoverflow:
fl.l_type = fl64->l_type;
fl.l_whence = fl64->l_whence;
fl.l_pid = fl64->l_pid;
@ -101,10 +103,8 @@ __fcntl_nocancel (int fd, int cmd, ...)
fl.l_start = (off_t) fl64->l_start;
/* Check if we can represent the values with the smaller type. */
if ((off64_t) fl.l_start != fl64->l_start)
{
__set_errno (EOVERFLOW);
return -1;
}
goto eoverflow:
fl.l_len = (off_t)fl64->l_len;
/* Check if we can represent the values with the smaller type. */
if ((off64_t) fl.l_len != fl64->l_len)

View File

@ -26,6 +26,9 @@
int
#ifdef NO_CANCELLATION
static inline __attribute ((always_inline))
#endif
__fcntl_nocancel (int fd, int cmd, ...)
{
va_list ap;

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1997,1998,1999,2000,2002,2003 Free Software Foundation, Inc.
/* Copyright (C) 1997-2000,2002,2003,2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -44,6 +44,9 @@ static ssize_t __emulate_pread (int fd, void *buf, size_t count,
static ssize_t
#ifdef NO_CANCELLATION
inline __attribute ((always_inline))
#endif
do_pread (int fd, void *buf, size_t count, off_t offset)
{
ssize_t result;

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1997,1998,1999,2000,2002,2003 Free Software Foundation, Inc.
/* Copyright (C) 1997-2000,2002,2003,2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -44,6 +44,9 @@ static ssize_t __emulate_pwrite (int fd, const void *buf, size_t count,
static ssize_t
#ifdef NO_CANCELLATION
inline __attribute ((always_inline))
#endif
do_pwrite (int fd, const void *buf, size_t count, off_t offset)
{
ssize_t result;