aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux')
-rw-r--r--sysdeps/unix/sysv/linux/alpha/adjtime.c25
-rw-r--r--sysdeps/unix/sysv/linux/alpha/msgctl.c8
-rw-r--r--sysdeps/unix/sysv/linux/alpha/oldglob.c19
-rw-r--r--sysdeps/unix/sysv/linux/alpha/semctl.c7
-rw-r--r--sysdeps/unix/sysv/linux/alpha/shmctl.c7
-rw-r--r--sysdeps/unix/sysv/linux/arm/errlist.c27
-rw-r--r--sysdeps/unix/sysv/linux/arm/siglist.c38
-rw-r--r--sysdeps/unix/sysv/linux/i386/chown.c4
-rw-r--r--sysdeps/unix/sysv/linux/i386/getrlimit.c10
-rw-r--r--sysdeps/unix/sysv/linux/i386/getrlimit64.c9
-rw-r--r--sysdeps/unix/sysv/linux/i386/msgctl.c13
-rw-r--r--sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c7
-rw-r--r--sysdeps/unix/sysv/linux/i386/semctl.c13
-rw-r--r--sysdeps/unix/sysv/linux/i386/setrlimit.c9
-rw-r--r--sysdeps/unix/sysv/linux/i386/shmctl.c13
-rw-r--r--sysdeps/unix/sysv/linux/init-first.c8
-rw-r--r--sysdeps/unix/sysv/linux/msgctl.c13
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/chown.c9
-rw-r--r--sysdeps/unix/sysv/linux/semctl.c15
-rw-r--r--sysdeps/unix/sysv/linux/shmctl.c13
20 files changed, 119 insertions, 148 deletions
diff --git a/sysdeps/unix/sysv/linux/alpha/adjtime.c b/sysdeps/unix/sysv/linux/alpha/adjtime.c
index b695ece380..63cc66daf2 100644
--- a/sysdeps/unix/sysv/linux/alpha/adjtime.c
+++ b/sysdeps/unix/sysv/linux/alpha/adjtime.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 2000 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
@@ -16,6 +16,8 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+#include <shlib-compat.h>
+
struct timeval32
{
int tv_sec, tv_usec;
@@ -54,7 +56,7 @@ struct timex32 {
#define TIMEX timex32
#define ADJTIME __adjtime_tv32
#define ADJTIMEX(x) __adjtimex_tv32 (x)
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
#define LINKAGE
#else
#define LINKAGE static
@@ -65,8 +67,8 @@ extern int ADJTIMEX (struct TIMEX *);
#include <sysdeps/unix/sysv/linux/adjtime.c>
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
-symbol_version (__adjtime_tv32, adjtime, GLIBC_2.0);
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
+compat_symbol (libc, __adjtime_tv32, adjtime, GLIBC_2.0);
#endif
#undef TIMEVAL
@@ -117,11 +119,7 @@ __adjtime (itv, otv)
return ret;
}
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
-default_symbol_version (__adjtime, adjtime, GLIBC_2.1);
-#else
-weak_alias (__adjtime, adjtime);
-#endif
+versioned_symbol (libc, __adjtime, adjtime, GLIBC_2_1);
extern int __syscall_adjtimex_tv64 (struct timex *tx);
@@ -191,11 +189,6 @@ __adjtimex_tv64 (struct timex *tx)
return ret;
}
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
strong_alias (__adjtimex_tv64, __adjtimex_tv64p);
-default_symbol_version (__adjtimex_tv64, __adjtimex, GLIBC_2.1);
-default_symbol_version (__adjtimex_tv64p, adjtimex, GLIBC_2.1);
-#else
-weak_alias (__adjtimex_tv64, __adjtimex);
-weak_alias (__adjtimex_tv64, adjtimex);
-#endif
+versioned_symbol (libc, __adjtimex_tv64, __adjtimex, GLIBC_2_1);
+versioned_symbol (libc, __adjtimex_tv64p, adjtimex, GLIBC_2_1);
diff --git a/sysdeps/unix/sysv/linux/alpha/msgctl.c b/sysdeps/unix/sysv/linux/alpha/msgctl.c
index 93a9bf2618..693b4d4c2d 100644
--- a/sysdeps/unix/sysv/linux/alpha/msgctl.c
+++ b/sysdeps/unix/sysv/linux/alpha/msgctl.c
@@ -116,8 +116,6 @@ __new_msgctl (int msqid, int cmd, struct msqid_ds *buf)
#endif
}
-#if defined PIC && DO_VERSIONING
-default_symbol_version (__new_msgctl, msgctl, GLIBC_2.2);
-#else
-weak_alias (__new_msgctl, msgctl);
-#endif
+#include <shlib-compat.h>
+versioned_symbol (libc, __new_msgctl, msgctl, GLIBC_2_2);
+
diff --git a/sysdeps/unix/sysv/linux/alpha/oldglob.c b/sysdeps/unix/sysv/linux/alpha/oldglob.c
index f405fbf2bc..d85c50e769 100644
--- a/sysdeps/unix/sysv/linux/alpha/oldglob.c
+++ b/sysdeps/unix/sysv/linux/alpha/oldglob.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 2000 Free Software Foundation, Inc.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
@@ -19,8 +19,9 @@
became necessary since the glob_t structure changed. */
#include <sys/types.h>
#include <glob.h>
+#include <shlib-compat.h>
-#if defined PIC && DO_VERSIONING
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
/* This is the old structure. The difference is that the gl_pathc and
gl_offs elements have type `int'. */
@@ -33,11 +34,11 @@ typedef struct
/* If the GLOB_ALTDIRFUNC flag is set, the following functions
are used instead of the normal file access functions. */
- void (*gl_closedir) __P ((void *));
- struct dirent *(*gl_readdir) __P ((void *));
- __ptr_t (*gl_opendir) __P ((__const char *));
- int (*gl_lstat) __P ((__const char *, struct stat *));
- int (*gl_stat) __P ((__const char *, struct stat *));
+ void (*gl_closedir) (void *);
+ struct dirent *(*gl_readdir) (void *);
+ __ptr_t (*gl_opendir) (__const char *);
+ int (*gl_lstat) (__const char *, struct stat *);
+ int (*gl_stat) (__const char *, struct stat *);
} old_glob_t;
@@ -75,7 +76,7 @@ __old_glob (const char *pattern, int flags,
return result;
}
-symbol_version(__old_glob, glob, GLIBC_2.0);
+compat_symbol (libc, __old_glob, glob, GLIBC_2_0);
/* Free storage allocated in PGLOB by a previous `glob' call. */
@@ -90,6 +91,6 @@ __old_globfree (old_glob_t *pglob)
globfree (&correct);
}
-symbol_version(__old_globfree, globfree, GLIBC_2.0);
+compat_symbol (libc, __old_globfree, globfree, GLIBC_2_0);
#endif
diff --git a/sysdeps/unix/sysv/linux/alpha/semctl.c b/sysdeps/unix/sysv/linux/alpha/semctl.c
index 6281e44993..a4534744d3 100644
--- a/sysdeps/unix/sysv/linux/alpha/semctl.c
+++ b/sysdeps/unix/sysv/linux/alpha/semctl.c
@@ -125,8 +125,5 @@ __new_semctl (int semid, int semnum, int cmd, ...)
#endif
}
-#if defined PIC && DO_VERSIONING
-default_symbol_version (__new_semctl, semctl, GLIBC_2.2);
-#else
-weak_alias (__new_semctl, semctl);
-#endif
+#include <shlib-compat.h>
+versioned_symbol (libc, __new_semctl, semctl, GLIBC_2_2);
diff --git a/sysdeps/unix/sysv/linux/alpha/shmctl.c b/sysdeps/unix/sysv/linux/alpha/shmctl.c
index 162afeee3d..ebda160d32 100644
--- a/sysdeps/unix/sysv/linux/alpha/shmctl.c
+++ b/sysdeps/unix/sysv/linux/alpha/shmctl.c
@@ -130,8 +130,5 @@ __new_shmctl (int shmid, int cmd, struct shmid_ds *buf)
#endif
}
-#if defined PIC && DO_VERSIONING
-default_symbol_version (__new_shmctl, shmctl, GLIBC_2.2);
-#else
-weak_alias (__new_shmctl, shmctl);
-#endif
+#include <shlib-compat.h>
+versioned_symbol (libc, __new_shmctl, shmctl, GLIBC_2_2);
diff --git a/sysdeps/unix/sysv/linux/arm/errlist.c b/sysdeps/unix/sysv/linux/arm/errlist.c
index e249522514..c72ecd86fd 100644
--- a/sysdeps/unix/sysv/linux/arm/errlist.c
+++ b/sysdeps/unix/sysv/linux/arm/errlist.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 2000 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
@@ -18,18 +18,18 @@
#include <sizes.h>
#include <errlist.h>
+#include <shlib-compat.h>
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
-
-# define SYS_ERRLIST __new_sys_errlist
-# define SYS_NERR __new_sys_nerr
+#define SYS_ERRLIST __new_sys_errlist
+#define SYS_NERR __new_sys_nerr
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
asm (".data; .globl __old_sys_errlist; __old_sys_errlist:");
#endif
#include <sysdeps/gnu/errlist.c>
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
asm (".type __old_sys_errlist,%object;.size __old_sys_errlist,"
OLD_ERRLIST_SIZE_STR "*" PTR_SIZE_STR);
@@ -44,12 +44,11 @@ symbol_version (_old_sys_nerr, sys_nerr, GLIBC_2.0);
weak_alias (__old_sys_errlist, _old_sys_errlist);
symbol_version (__old_sys_errlist, _sys_errlist, GLIBC_2.0);
symbol_version (_old_sys_errlist, sys_errlist, GLIBC_2.0);
-
-weak_alias (__new_sys_nerr, _new_sys_nerr)
-default_symbol_version (__new_sys_nerr, _sys_nerr, GLIBC_2.1);
-default_symbol_version (_new_sys_nerr, sys_nerr, GLIBC_2.1);
-weak_alias (__new_sys_errlist, _new_sys_errlist)
-default_symbol_version (__new_sys_errlist, _sys_errlist, GLIBC_2.1);
-default_symbol_version (_new_sys_errlist, sys_errlist, GLIBC_2.1);
-
#endif
+
+strong_alias (__new_sys_nerr, _new_sys_nerr)
+versioned_symbol (libc, __new_sys_nerr, _sys_nerr, GLIBC_2_1);
+versioned_symbol (libc, _new_sys_nerr, sys_nerr, GLIBC_2_1);
+strong_alias (__new_sys_errlist, _new_sys_errlist)
+versioned_symbol (libc, __new_sys_errlist, _sys_errlist, GLIBC_2_1);
+versioned_symbol (libc, _new_sys_errlist, sys_errlist, GLIBC_2_1);
diff --git a/sysdeps/unix/sysv/linux/arm/siglist.c b/sysdeps/unix/sysv/linux/arm/siglist.c
index 5d3a9afc53..3d7464e3e4 100644
--- a/sysdeps/unix/sysv/linux/arm/siglist.c
+++ b/sysdeps/unix/sysv/linux/arm/siglist.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 2000 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
@@ -20,41 +20,34 @@
#include <signal.h>
#include <sizes.h>
#include <libintl.h>
+#include <shlib-compat.h>
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
-# define SYS_SIGLIST __new_sys_siglist
-# define SYS_SIGABBREV __new_sys_sigabbrev
-#else
-# define SYS_SIGLIST _sys_siglist
-# define SYS_SIGABBREV _sys_sigabbrev
-#endif
-
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
asm (".data; .globl __old_sys_siglist; __old_sys_siglist:");
#endif
-const char *const SYS_SIGLIST[NSIG] =
+const char *const __new_sys_siglist[NSIG] =
{
#define init_sig(sig, abbrev, desc) [sig] desc,
#include "siglist.h"
#undef init_sig
};
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
asm (".type __old_sys_siglist,%object;.size __old_sys_siglist,"
OLD_SIGLIST_SIZE_STR "*" PTR_SIZE_STR);
asm (".data; .globl __old_sys_sigabbrev; __old_sys_sigabbrev:");
#endif
-const char *const SYS_SIGABBREV[NSIG] =
+const char *const __new_sys_sigabbrev[NSIG] =
{
#define init_sig(sig, abbrev, desc) [sig] abbrev,
#include "siglist.h"
#undef init_sig
};
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
asm (".type __old_sys_sigabbrev,%object;.size __old_sys_sigabbrev,"
OLD_SIGLIST_SIZE_STR "*" PTR_SIZE_STR);
@@ -62,15 +55,12 @@ extern const char *const *__old_sys_siglist;
extern const char *const *__old_sys_sigabbrev;
strong_alias (__old_sys_siglist, _old_sys_siglist)
-symbol_version (__old_sys_siglist, _sys_siglist, GLIBC_2.0);
-symbol_version (_old_sys_siglist, sys_siglist, GLIBC_2.0);
-symbol_version (__old_sys_sigabbrev, sys_sigabbrev, GLIBC_2.0);
+compat_symbol (libc, __old_sys_siglist, _sys_siglist, GLIBC_2_0);
+compat_symbol (libc, _old_sys_siglist, sys_siglist, GLIBC_2_0);
+compat_symbol (libc, __old_sys_sigabbrev, sys_sigabbrev, GLIBC_2_0);
+#endif
strong_alias (__new_sys_siglist, _new_sys_siglist)
-default_symbol_version (__new_sys_siglist, _sys_siglist, GLIBC_2.1);
-default_symbol_version (_new_sys_siglist, sys_siglist, GLIBC_2.1);
-default_symbol_version (__new_sys_sigabbrev, sys_sigabbrev, GLIBC_2.1);
-#else
-weak_alias (_sys_siglist, sys_siglist)
-weak_alias (_sys_sigabbrev, sys_sigabbrev)
-#endif
+versioned_symbol (libc, __new_sys_siglist, _sys_siglist, GLIBC_2_1);
+versioned_symbol (libc, _new_sys_siglist, sys_siglist, GLIBC_2_1);
+versioned_symbol (libc, __new_sys_sigabbrev, sys_sigabbrev, GLIBC_2_1);
diff --git a/sysdeps/unix/sysv/linux/i386/chown.c b/sysdeps/unix/sysv/linux/i386/chown.c
index f6442a4ab6..5adeefb0ab 100644
--- a/sysdeps/unix/sysv/linux/i386/chown.c
+++ b/sysdeps/unix/sysv/linux/i386/chown.c
@@ -132,7 +132,7 @@ __chown_is_lchown (const char *file, uid_t owner, gid_t group)
{
return INLINE_SYSCALL (chown, 3, file, owner, group);
}
-#elif defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+#elif defined HAVE_ELF && defined SHARED && defined DO_VERSIONING
/* Compiling for compatibiity. */
int
__chown_is_lchown (const char *file, uid_t owner, gid_t group)
@@ -141,7 +141,7 @@ __chown_is_lchown (const char *file, uid_t owner, gid_t group)
}
#endif
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+#if defined HAVE_ELF && defined SHARED && defined DO_VERSIONING
strong_alias (__chown_is_lchown, _chown_is_lchown)
symbol_version (__chown_is_lchown, __chown, GLIBC_2.0);
symbol_version (_chown_is_lchown, chown, GLIBC_2.0);
diff --git a/sysdeps/unix/sysv/linux/i386/getrlimit.c b/sysdeps/unix/sysv/linux/i386/getrlimit.c
index 4fae122038..c1af81b312 100644
--- a/sysdeps/unix/sysv/linux/i386/getrlimit.c
+++ b/sysdeps/unix/sysv/linux/i386/getrlimit.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1999, 2000 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
@@ -21,7 +21,7 @@
#include <sysdep.h>
#include <sys/syscall.h>
-
+#include <shlib-compat.h>
#include "kernel-features.h"
extern int __syscall_ugetrlimit (unsigned int resource,
@@ -77,8 +77,4 @@ __new_getrlimit (enum __rlimit_resource resource, struct rlimit *rlimits)
}
weak_alias (__new_getrlimit, __getrlimit);
-#if defined PIC && DO_VERSIONING
-default_symbol_version (__new_getrlimit, getrlimit, GLIBC_2.2);
-#else
-weak_alias (__new_getrlimit, getrlimit);
-#endif
+versioned_symbol (libc, __new_getrlimit, getrlimit, GLIBC_2_2);
diff --git a/sysdeps/unix/sysv/linux/i386/getrlimit64.c b/sysdeps/unix/sysv/linux/i386/getrlimit64.c
index 8e7c9c6c1e..9c4605fd43 100644
--- a/sysdeps/unix/sysv/linux/i386/getrlimit64.c
+++ b/sysdeps/unix/sysv/linux/i386/getrlimit64.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1999, 2000 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
@@ -21,8 +21,5 @@
#include <sysdeps/generic/getrlimit64.c>
#undef getrlimit64
-#if defined PIC && defined DO_VERSIONING
-default_symbol_version (__new_getrlimit64, getrlimit64, GLIBC_2.2);
-#else
-weak_alias (__new_getrlimit64, getrlimit64);
-#endif
+#include <shlib-compat.h>
+versioned_symbol (libc, __new_getrlimit64, getrlimit64, GLIBC_2_2);
diff --git a/sysdeps/unix/sysv/linux/i386/msgctl.c b/sysdeps/unix/sysv/linux/i386/msgctl.c
index 07b5d0d720..684365a922 100644
--- a/sysdeps/unix/sysv/linux/i386/msgctl.c
+++ b/sysdeps/unix/sysv/linux/i386/msgctl.c
@@ -26,6 +26,7 @@
#include <sys/syscall.h>
#include "kernel-features.h"
+#include <shlib-compat.h>
struct __old_msqid_ds
{
@@ -46,7 +47,9 @@ struct __old_msqid_ds
/* Allows to control internal state and destruction of message queue
objects. */
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
int __old_msgctl (int, int, struct __old_msqid_ds *);
+#endif
int __new_msgctl (int, int, struct msqid_ds *);
#ifdef __NR_getuid32
@@ -57,11 +60,14 @@ extern int __libc_missing_32bit_uids;
# endif
#endif
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
int
__old_msgctl (int msqid, int cmd, struct __old_msqid_ds *buf)
{
return INLINE_SYSCALL (ipc, 5, IPCOP_msgctl, msqid, cmd, 0, buf);
}
+compat_symbol (libc, __old_msgctl, msgctl, GLIBC_2_0);
+#endif
int
__new_msgctl (int msqid, int cmd, struct msqid_ds *buf)
@@ -143,9 +149,4 @@ __new_msgctl (int msqid, int cmd, struct msqid_ds *buf)
#endif
}
-#if defined PIC && DO_VERSIONING
-default_symbol_version (__new_msgctl, msgctl, GLIBC_2.2);
-symbol_version (__old_msgctl, msgctl, GLIBC_2.0);
-#else
-weak_alias (__new_msgctl, msgctl);
-#endif
+versioned_symbol (libc, __new_msgctl, msgctl, GLIBC_2_2);
diff --git a/sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c b/sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c
index e77486494f..2f8a365d3e 100644
--- a/sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c
+++ b/sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c
@@ -18,7 +18,8 @@
/* This is a compatibility file. If we don't build the libc with
versioning don't compile this file. */
-#if defined PIC && DO_VERSIONING
+#include <shlib-compat.h>
+#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_2)
#include <errno.h>
#include <sys/resource.h>
@@ -48,6 +49,6 @@ __old_getrlimit64 (enum __rlimit_resource resource, struct rlimit64 *rlimits)
return 0;
}
-symbol_version (__old_getrlimit64, getrlimit64, GLIBC_2.1);
+compat_symbol (libc, __old_getrlimit64, getrlimit64, GLIBC_2_1);
-#endif /* PIC && DO_VERSIONING */
+#endif /* SHLIB_COMPAT */
diff --git a/sysdeps/unix/sysv/linux/i386/semctl.c b/sysdeps/unix/sysv/linux/i386/semctl.c
index 6eb64b3a64..b553c2aa8b 100644
--- a/sysdeps/unix/sysv/linux/i386/semctl.c
+++ b/sysdeps/unix/sysv/linux/i386/semctl.c
@@ -27,6 +27,7 @@
#include <sys/syscall.h>
#include "kernel-features.h"
+#include <shlib-compat.h>
struct __old_semid_ds
{
@@ -59,9 +60,12 @@ extern int __libc_missing_32bit_uids;
/* Return identifier for array of NSEMS semaphores associated with
KEY. */
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
int __old_semctl (int semid, int semnum, int cmd, ...);
+#endif
int __new_semctl (int semid, int semnum, int cmd, ...);
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
int
__old_semctl (int semid, int semnum, int cmd, ...)
{
@@ -77,6 +81,8 @@ __old_semctl (int semid, int semnum, int cmd, ...)
return INLINE_SYSCALL (ipc, 5, IPCOP_semctl, semid, semnum, cmd, &arg);
}
+compat_symbol (libc, __old_semctl, semctl, GLIBC_2_0);
+#endif
int
__new_semctl (int semid, int semnum, int cmd, ...)
@@ -165,9 +171,4 @@ __new_semctl (int semid, int semnum, int cmd, ...)
#endif
}
-#if defined PIC && DO_VERSIONING
-default_symbol_version (__new_semctl, semctl, GLIBC_2.2);
-symbol_version (__old_semctl, semctl, GLIBC_2.0);
-#else
-weak_alias (__new_semctl, semctl);
-#endif
+versioned_symbol (libc, __new_semctl, semctl, GLIBC_2_2);
diff --git a/sysdeps/unix/sysv/linux/i386/setrlimit.c b/sysdeps/unix/sysv/linux/i386/setrlimit.c
index f9fd23ef54..5ceae60eb1 100644
--- a/sysdeps/unix/sysv/linux/i386/setrlimit.c
+++ b/sysdeps/unix/sysv/linux/i386/setrlimit.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1999, 2000 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
@@ -24,6 +24,7 @@
#include <sys/syscall.h>
#include "kernel-features.h"
+#include <shlib-compat.h>
extern int __syscall_setrlimit (unsigned int resource,
const struct rlimit *rlimits);
@@ -75,8 +76,4 @@ __new_setrlimit (enum __rlimit_resource resource, const struct rlimit *rlimits)
}
weak_alias (__new_setrlimit, __setrlimit);
-#if defined PIC && DO_VERSIONING
-default_symbol_version (__new_setrlimit, setrlimit, GLIBC_2.2);
-#else
-weak_alias (__new_setrlimit, setrlimit);
-#endif
+versioned_symbol (libc, __new_setrlimit, setrlimit, GLIBC_2_2);
diff --git a/sysdeps/unix/sysv/linux/i386/shmctl.c b/sysdeps/unix/sysv/linux/i386/shmctl.c
index 957416113b..ca25ff0c7a 100644
--- a/sysdeps/unix/sysv/linux/i386/shmctl.c
+++ b/sysdeps/unix/sysv/linux/i386/shmctl.c
@@ -27,6 +27,7 @@
#include <bits/wordsize.h>
#include "kernel-features.h"
+#include <shlib-compat.h>
struct __old_shmid_ds
{
@@ -61,14 +62,19 @@ extern int __libc_missing_32bit_uids;
#endif
/* Provide operations to control over shared memory segments. */
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
int __old_shmctl (int, int, struct __old_shmid_ds *);
+#endif
int __new_shmctl (int, int, struct shmid_ds *);
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
int
__old_shmctl (int shmid, int cmd, struct __old_shmid_ds *buf)
{
return INLINE_SYSCALL (ipc, 5, IPCOP_shmctl, shmid, cmd, 0, buf);
}
+compat_symbol (libc, __old_shmctl, shmctl, GLIBC_2_0);
+#endif
int
__new_shmctl (int shmid, int cmd, struct shmid_ds *buf)
@@ -163,9 +169,4 @@ __new_shmctl (int shmid, int cmd, struct shmid_ds *buf)
#endif
}
-#if defined PIC && DO_VERSIONING
-default_symbol_version (__new_shmctl, shmctl, GLIBC_2.2);
-symbol_version (__old_shmctl, shmctl, GLIBC_2.0);
-#else
-weak_alias (__new_shmctl, shmctl);
-#endif
+versioned_symbol (libc, __new_shmctl, shmctl, GLIBC_2_2);
diff --git a/sysdeps/unix/sysv/linux/init-first.c b/sysdeps/unix/sysv/linux/init-first.c
index a04234864d..94d2749be7 100644
--- a/sysdeps/unix/sysv/linux/init-first.c
+++ b/sysdeps/unix/sysv/linux/init-first.c
@@ -128,7 +128,7 @@ init (int argc, char **argv, char **envp)
/* Set the FPU control word to the proper default value if the
kernel would use a different value. (In a static program we
don't have this information.) */
-#ifdef PIC
+#ifdef SHARED
if (__fpu_control != _dl_fpu_control)
#endif
__setfpucw (__fpu_control);
@@ -139,7 +139,7 @@ init (int argc, char **argv, char **envp)
__libc_argv = argv;
__environ = envp;
-#ifndef PIC
+#ifndef SHARED
__libc_init_secure ();
#endif
@@ -148,12 +148,12 @@ init (int argc, char **argv, char **envp)
/* This is a hack to make the special getopt in GNU libc working. */
__getopt_clean_environment (envp);
-#ifdef PIC
+#ifdef SHARED
__libc_global_ctors ();
#endif
}
-#ifdef PIC
+#ifdef SHARED
strong_alias (init, _init);
diff --git a/sysdeps/unix/sysv/linux/msgctl.c b/sysdeps/unix/sysv/linux/msgctl.c
index c1983c6691..2b2b411af0 100644
--- a/sysdeps/unix/sysv/linux/msgctl.c
+++ b/sysdeps/unix/sysv/linux/msgctl.c
@@ -24,6 +24,7 @@
#include <sysdep.h>
#include <string.h>
#include <sys/syscall.h>
+#include <shlib-compat.h>
#include "kernel-features.h"
@@ -46,14 +47,19 @@ struct __old_msqid_ds
/* Allows to control internal state and destruction of message queue
objects. */
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
int __old_msgctl (int, int, struct __old_msqid_ds *);
+#endif
int __new_msgctl (int, int, struct msqid_ds *);
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
int
__old_msgctl (int msqid, int cmd, struct __old_msqid_ds *buf)
{
return INLINE_SYSCALL (ipc, 5, IPCOP_msgctl, msqid, cmd, 0, buf);
}
+compat_symbol (libc, __old_msgctl, msgctl, GLIBC_2_0);
+#endif
int
__new_msgctl (int msqid, int cmd, struct msqid_ds *buf)
@@ -120,9 +126,4 @@ __new_msgctl (int msqid, int cmd, struct msqid_ds *buf)
#endif
}
-#if defined PIC && DO_VERSIONING
-default_symbol_version (__new_msgctl, msgctl, GLIBC_2.2);
-symbol_version (__old_msgctl, msgctl, GLIBC_2.0);
-#else
-weak_alias (__new_msgctl, msgctl);
-#endif
+versioned_symbol (libc, __new_msgctl, msgctl, GLIBC_2_2);
diff --git a/sysdeps/unix/sysv/linux/powerpc/chown.c b/sysdeps/unix/sysv/linux/powerpc/chown.c
index 5f6c3d29ce..9adbaee6bc 100644
--- a/sysdeps/unix/sysv/linux/powerpc/chown.c
+++ b/sysdeps/unix/sysv/linux/powerpc/chown.c
@@ -1,5 +1,5 @@
/* chown() compatibility.
- Copyright (C) 1998 Free Software Foundation, Inc.
+ Copyright (C) 1998, 2000 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
@@ -124,8 +124,5 @@ __chown (const char *file, uid_t owner, gid_t group)
return -1;
}
-#if defined PIC && defined DO_VERSIONING
-default_symbol_version (__chown, chown, GLIBC_2.1);
-#else
-weak_alias (__chown, chown)
-#endif
+#include <shlib-compat.h>
+versioned_symbol (libc, __chown, chown, GLIBC_2_1);
diff --git a/sysdeps/unix/sysv/linux/semctl.c b/sysdeps/unix/sysv/linux/semctl.c
index 5b28861244..cc8a5387e1 100644
--- a/sysdeps/unix/sysv/linux/semctl.c
+++ b/sysdeps/unix/sysv/linux/semctl.c
@@ -25,9 +25,11 @@
#include <sysdep.h>
#include <string.h>
#include <sys/syscall.h>
+#include <shlib-compat.h>
#include "kernel-features.h"
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
struct __old_semid_ds
{
struct __old_ipc_perm sem_perm; /* operation permission struct */
@@ -39,6 +41,7 @@ struct __old_semid_ds
struct sem_undo *__undo; /* ondo requests on this array */
unsigned short int sem_nsems; /* number of semaphores in set */
};
+#endif
/* Define a `union semun' suitable for Linux here. */
union semun
@@ -52,9 +55,12 @@ union semun
/* Return identifier for array of NSEMS semaphores associated with
KEY. */
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
int __old_semctl (int semid, int semnum, int cmd, ...);
+#endif
int __new_semctl (int semid, int semnum, int cmd, ...);
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
int
__old_semctl (int semid, int semnum, int cmd, ...)
{
@@ -70,6 +76,8 @@ __old_semctl (int semid, int semnum, int cmd, ...)
return INLINE_SYSCALL (ipc, 5, IPCOP_semctl, semid, semnum, cmd, &arg);
}
+compat_symbol (libc, __old_semctl, semctl, GLIBC_2_0);
+#endif
int
__new_semctl (int semid, int semnum, int cmd, ...)
@@ -142,9 +150,4 @@ __new_semctl (int semid, int semnum, int cmd, ...)
#endif
}
-#if defined PIC && DO_VERSIONING
-default_symbol_version (__new_semctl, semctl, GLIBC_2.2);
-symbol_version (__old_semctl, semctl, GLIBC_2.0);
-#else
-weak_alias (__new_semctl, semctl);
-#endif
+versioned_symbol (libc, __new_semctl, semctl, GLIBC_2_2);
diff --git a/sysdeps/unix/sysv/linux/shmctl.c b/sysdeps/unix/sysv/linux/shmctl.c
index 4e76794eff..7514f2a689 100644
--- a/sysdeps/unix/sysv/linux/shmctl.c
+++ b/sysdeps/unix/sysv/linux/shmctl.c
@@ -25,9 +25,11 @@
#include <string.h>
#include <sys/syscall.h>
#include <bits/wordsize.h>
+#include <shlib-compat.h>
#include "kernel-features.h"
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
struct __old_shmid_ds
{
struct __old_ipc_perm shm_perm; /* operation permission struct */
@@ -54,13 +56,17 @@ struct __old_shminfo
/* Provide operations to control over shared memory segments. */
int __old_shmctl (int, int, struct __old_shmid_ds *);
+#endif
int __new_shmctl (int, int, struct shmid_ds *);
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
int
__old_shmctl (int shmid, int cmd, struct __old_shmid_ds *buf)
{
return INLINE_SYSCALL (ipc, 5, IPCOP_shmctl, shmid, cmd, 0, buf);
}
+compat_symbol (libc, __old_shmctl, shmctl, GLIBC_2_0);
+#endif
int
__new_shmctl (int shmid, int cmd, struct shmid_ds *buf)
@@ -141,9 +147,4 @@ __new_shmctl (int shmid, int cmd, struct shmid_ds *buf)
#endif
}
-#if defined PIC && DO_VERSIONING
-default_symbol_version (__new_shmctl, shmctl, GLIBC_2.2);
-symbol_version (__old_shmctl, shmctl, GLIBC_2.0);
-#else
-weak_alias (__new_shmctl, shmctl);
-#endif
+versioned_symbol (libc, __new_shmctl, shmctl, GLIBC_2_2);