diff --git a/ChangeLog b/ChangeLog index 0d63eb53f0..289ac14f80 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,43 @@ +2000-03-29 Jes Sorensen + + * malloc/malloc.c: Declare bit flags UL so that they will not + default to int size when being inverted. + +2000-03-29 Andreas Jaeger + + * sysdeps/unix/sysv/linux/arm/errlist.c: Use shlib-compat macros. + * sysdeps/unix/sysv/linux/arm/siglist.c: Likewise. + +2000-03-29 Andreas Jaeger , + Ralf Baechle + + * Makeconfig: Introduce new variable SHARED to mark code used in + the shared library. + * elf/dl-close.c: Use it instead of PIC. + * elf/dl-load.c: Likewise. + * elf/dl-open.c: Likewise. + * hurd/geteuids.c: Likewise. + * include/libc-symbols.h: Likewise. + * include/shlib-compat.h: Likewise. + * libio/freopen.c: Likewise. + * linuxthreads/cancel.c: Likewise. + * linuxthreads/pthread.c: Likewise. + * linuxthreads/wrapsyscall.c: Likewise. + * nss/nsswitch.c: Likewise. + * stdio-common/vfprintf.c: Likewise. + * sysdeps/arm/init-first.c: Likewise. + * sysdeps/i386/init-first.c: Likewise + * sysdeps/generic/init-first.c: Likewise. + * sysdeps/generic/libc-start.c: Likewise. + * sysdeps/mips/init-first.c: Likewise. + * sysdeps/powerpc/elf/libc-start.c: Likewise. + * sysdeps/unix/sysv/linux/init-first.c: Likewise. + * sysdeps/unix/sysv/linux/arm/siglist.c: Likewise. + * sysdeps/unix/sysv/linux/arm/errlist.c: Likewise. + * sysdeps/unix/sysv/linux/i386/chown.c: Likewise. + + * sysdeps/mips/machine-gmon.h (asm): Use __PIC__ as check. + 2000-03-29 Andreas Jaeger * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_runtime_setup): diff --git a/Makeconfig b/Makeconfig index 56b5d3330b..70b933c5ec 100644 --- a/Makeconfig +++ b/Makeconfig @@ -604,7 +604,7 @@ ifeq (yes,$(build-shared)) # Under --enable-shared, we will build a shared library of PIC objects. # The PIC object files are named foo.os. object-suffixes += .os -CPPFLAGS-.os = -DPIC +CPPFLAGS-.os = -DPIC -DSHARED CFLAGS-.os = $(filter %frame-pointer,$(+cflags)) $(pic-ccflag) libtype.os := lib%_pic.a # This can be changed by a sysdep makefile diff --git a/elf/dl-close.c b/elf/dl-close.c index 7740787a40..a30147976d 100644 --- a/elf/dl-close.c +++ b/elf/dl-close.c @@ -145,7 +145,7 @@ _dl_close (void *_map) imap->l_map_end - imap->l_map_start); /* Finally, unlink the data structure and free it. */ -#ifdef PIC +#ifdef SHARED /* We will unlink the first object only if this is a statically linked program. */ assert (imap->l_prev != NULL); diff --git a/elf/dl-load.c b/elf/dl-load.c index 38922890d6..5d1463b48f 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -516,7 +516,7 @@ _dl_init_paths (const char *llp) const char *strp; struct r_search_path_elem *pelem, **aelem; size_t round_size; -#ifdef PIC +#ifdef SHARED struct link_map *l; #endif @@ -579,7 +579,7 @@ _dl_init_paths (const char *llp) max_dirnamelen = SYSTEM_DIRS_MAX_LEN; *aelem = NULL; -#ifdef PIC +#ifdef SHARED /* This points to the map of the main object. */ l = _dl_loaded; if (l != NULL) @@ -613,7 +613,7 @@ _dl_init_paths (const char *llp) l->l_rpath_dirs = NULL; } } -#endif /* PIC */ +#endif /* SHARED */ if (llp != NULL && *llp != '\0') { diff --git a/elf/dl-open.c b/elf/dl-open.c index b419219069..f110a512cc 100644 --- a/elf/dl-open.c +++ b/elf/dl-open.c @@ -166,7 +166,7 @@ dl_open_worker (void *a) { if (! l->l_relocated) { -#ifdef PIC +#ifdef SHARED if (_dl_profile != NULL) { /* If this here is the shared object which we want to profile diff --git a/hurd/geteuids.c b/hurd/geteuids.c index e37f9c27c2..0f3f7000ff 100644 --- a/hurd/geteuids.c +++ b/hurd/geteuids.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 94, 96, 97, 98 Free Software Foundation, Inc. +/* Copyright (C) 1993, 94, 96, 97, 98, 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 @@ -64,6 +64,6 @@ geteuids (int n, uid_t *uidset) /* XXX Remove this alias when we bump the libc soname. */ -#if defined PIC && DO_VERSIONING +#if defined SHARED && DO_VERSIONING weak_alias (geteuids, __getuids) #endif diff --git a/include/libc-symbols.h b/include/libc-symbols.h index 8073fca575..f0c7284d73 100644 --- a/include/libc-symbols.h +++ b/include/libc-symbols.h @@ -214,7 +214,7 @@ /* These are all done the same way in ELF. There is a new section created for each set. */ -# ifdef PIC +# ifdef SHARED /* When building a shared library, make the set section writable, because it will need to be relocated at run time anyway. */ # define _elf_set_element(set, symbol) \ diff --git a/include/shlib-compat.h b/include/shlib-compat.h index a95c1e0806..a1a4d9c15c 100644 --- a/include/shlib-compat.h +++ b/include/shlib-compat.h @@ -26,7 +26,7 @@ #include /* header generated by abi-versions.awk */ #endif -#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING +#if defined HAVE_ELF && defined SHARED && defined DO_VERSIONING /* The file abi-versions.h (generated by scripts/abi-versions.awk) defines symbols like `ABI_libm_GLIBC_2_0' for each version set in the source diff --git a/libio/freopen.c b/libio/freopen.c index 59b1726552..3f1e8f49e0 100644 --- a/libio/freopen.c +++ b/libio/freopen.c @@ -26,7 +26,7 @@ #include "libioP.h" #include "stdio.h" -#ifdef PIC +#ifdef SHARED extern void *_IO_stdin_used; weak_extern (_IO_stdin_used); #endif diff --git a/linuxthreads/cancel.c b/linuxthreads/cancel.c index 8fd8c1e60f..e1e887e0f9 100644 --- a/linuxthreads/cancel.c +++ b/linuxthreads/cancel.c @@ -162,7 +162,7 @@ void __pthread_perform_cleanup(void) c->__routine(c->__arg); } -#ifndef PIC +#ifndef SHARED /* We need a hook to force the cancelation wrappers to be linked in when static libpthread is used. */ extern const int __pthread_provide_wrappers; diff --git a/linuxthreads/pthread.c b/linuxthreads/pthread.c index 6ac7bc9170..f8df39db02 100644 --- a/linuxthreads/pthread.c +++ b/linuxthreads/pthread.c @@ -871,7 +871,7 @@ void __pthread_message(char * fmt, ...) #endif -#ifndef PIC +#ifndef SHARED /* We need a hook to force the cancelation wrappers to be linked in when static libpthread is used. */ extern const int __pthread_provide_wrappers; diff --git a/linuxthreads/wrapsyscall.c b/linuxthreads/wrapsyscall.c index a8ab857d8a..7d3f8ac483 100644 --- a/linuxthreads/wrapsyscall.c +++ b/linuxthreads/wrapsyscall.c @@ -31,7 +31,7 @@ #include -#ifndef PIC +#ifndef SHARED /* We need a hook to force this file to be linked in when static libpthread is used. */ const int __pthread_provide_wrappers = 0; diff --git a/malloc/malloc.c b/malloc/malloc.c index 645bcbe2dd..f674f4ebfe 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -1317,11 +1317,11 @@ static void free_atfork(); /* size field is or'ed with PREV_INUSE when previous adjacent chunk in use */ -#define PREV_INUSE 0x1 +#define PREV_INUSE 0x1UL /* size field is or'ed with IS_MMAPPED if the chunk was obtained with mmap() */ -#define IS_MMAPPED 0x2 +#define IS_MMAPPED 0x2UL /* Bits to mask off when extracting size */ diff --git a/nss/nsswitch.c b/nss/nsswitch.c index f1250262ff..b9e283eefb 100644 --- a/nss/nsswitch.c +++ b/nss/nsswitch.c @@ -27,7 +27,7 @@ #include #include -#if !defined DO_STATIC_NSS || defined PIC +#if !defined DO_STATIC_NSS || defined SHARED # include #endif @@ -65,7 +65,7 @@ static struct __libc_lock_define_initialized (static, lock) -#if !defined DO_STATIC_NSS || defined PIC +#if !defined DO_STATIC_NSS || defined SHARED /* String with revision number of the shared object files. */ static const char *const __nss_shlib_revision = LIBNSS_FILES_SO + 15; #endif @@ -314,7 +314,7 @@ __nss_lookup_function (service_user *ni, const char *fct_name) } } -#if !defined DO_STATIC_NSS || defined PIC +#if !defined DO_STATIC_NSS || defined SHARED if (ni->library->lib_handle == NULL) { /* Load the shared library. */ diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c index 51fd3115ee..a3f6754433 100644 --- a/stdio-common/vfprintf.c +++ b/stdio-common/vfprintf.c @@ -303,7 +303,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) #define NOT_IN_JUMP_RANGE(Ch) ((Ch) < L_(' ') || (Ch) > L_('z')) #define CHAR_CLASS(Ch) (jump_table[(INT_T) (Ch) - L_(' ')]) -#if defined HAVE_SUBTRACT_LOCAL_LABELS && defined PIC +#if defined HAVE_SUBTRACT_LOCAL_LABELS && defined SHARED /* 'int' is enough and it saves some space on 64 bit systems. */ # define JUMP_TABLE_TYPE const int # define JUMP(ChExpr, table) \ @@ -1258,7 +1258,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) /* Process whole format string. */ do { -#if defined HAVE_SUBTRACT_LOCAL_LABELS && defined PIC +#if defined HAVE_SUBTRACT_LOCAL_LABELS && defined SHARED # define REF(Name) &&do_##Name - &&do_form_unknown #else # define REF(Name) &&do_##Name @@ -1648,7 +1648,7 @@ do_positional: for (; (size_t) nspecs_done < nspecs; ++nspecs_done) { #undef REF -#if defined HAVE_SUBTRACT_LOCAL_LABELS && defined PIC +#if defined HAVE_SUBTRACT_LOCAL_LABELS && defined SHARED # define REF(Name) &&do2_##Name - &&do_form_unknown #else # define REF(Name) &&do2_##Name diff --git a/sysdeps/arm/init-first.c b/sysdeps/arm/init-first.c index 87f9f0a749..1e90c849a1 100644 --- a/sysdeps/arm/init-first.c +++ b/sysdeps/arm/init-first.c @@ -39,7 +39,7 @@ init (int *data) __getopt_clean_environment (envp); } -#ifdef PIC +#ifdef SHARED /* This function is called to initialize the shared C library. It is called just before the user _start code from i386/elf/start.S, with the stack set up as that code gets it. */ @@ -63,7 +63,7 @@ _init (int argc, ...) void __libc_init_first (int argc __attribute__ ((unused)), ...) { -#ifndef PIC +#ifndef SHARED init (&argc); #endif } diff --git a/sysdeps/generic/init-first.c b/sysdeps/generic/init-first.c index 76989d1351..2d7a078c43 100644 --- a/sysdeps/generic/init-first.c +++ b/sysdeps/generic/init-first.c @@ -25,14 +25,14 @@ int __libc_multiple_libcs = 1; extern void __libc_init (int, char **, char **); extern void __getopt_clean_environment (char **); -#ifdef PIC +#ifdef SHARED void __libc_init_first (void) { } #endif -#ifdef PIC +#ifdef SHARED /* NOTE! The linker notices the magical name `_init' and sets the DT_INIT pointer in the dynamic section based solely on that. It is convention for this function to be in the `.init' section, but the symbol name is diff --git a/sysdeps/generic/libc-start.c b/sysdeps/generic/libc-start.c index e3960ca818..6fabb7c41c 100644 --- a/sysdeps/generic/libc-start.c +++ b/sysdeps/generic/libc-start.c @@ -39,7 +39,7 @@ __libc_start_main (int (*main) (int, char **, char **), int argc, char **argv, void (*init) (void), void (*fini) (void), void (*rtld_fini) (void), void *stack_end) { -#ifndef PIC +#ifndef SHARED /* The next variable is only here to work around a bug in gcc <= 2.7.2.2. If the address would be taken inside the expression the optimizer would try to be too smart and throws it away. Grrr. */ @@ -66,7 +66,7 @@ __libc_start_main (int (*main) (int, char **, char **), int argc, /* Call the initializer of the libc. This is only needed here if we are compiling for the static library in which case we haven't run the constructors in `_dl_start_user'. */ -#ifndef PIC +#ifndef SHARED __libc_init_first (argc, argv, __environ); #endif @@ -75,14 +75,14 @@ __libc_start_main (int (*main) (int, char **, char **), int argc, atexit (fini); /* Call the initializer of the program, if any. */ -#ifdef PIC +#ifdef SHARED if (_dl_debug_impcalls) _dl_debug_message (1, "\ninitialize program: ", argv[0], "\n\n", NULL); #endif if (init) (*init) (); -#ifdef PIC +#ifdef SHARED if (_dl_debug_impcalls) _dl_debug_message (1, "\ntransferring control: ", argv[0], "\n\n", NULL); #endif diff --git a/sysdeps/i386/init-first.c b/sysdeps/i386/init-first.c index 118f84201f..1ed8495cbe 100644 --- a/sysdeps/i386/init-first.c +++ b/sysdeps/i386/init-first.c @@ -1,5 +1,5 @@ /* Initialization code run first thing by the ELF startup code. For i386/Unix. - Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 1997, 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 @@ -39,7 +39,7 @@ init (int *data) __getopt_clean_environment (envp); } -#ifdef PIC +#ifdef SHARED /* This function is called to initialize the shared C library. It is called just before the user _start code from i386/elf/start.S, with the stack set up as that code gets it. */ @@ -63,7 +63,7 @@ _init (int argc, ...) void __libc_init_first (int argc __attribute__ ((unused)), ...) { -#ifndef PIC +#ifndef SHARED init (&argc); #endif } diff --git a/sysdeps/mips/init-first.c b/sysdeps/mips/init-first.c index 3fc4b7bc04..309ff8bcf1 100644 --- a/sysdeps/mips/init-first.c +++ b/sysdeps/mips/init-first.c @@ -34,7 +34,7 @@ init (int *data) __libc_init (argc, argv, envp); } -#ifdef PIC +#ifdef SHARED /* This function is called to initialize the shared C library. It is called just before the user _start code from mips/elf/start.S, with the stack set up as that code gets it. */ @@ -58,7 +58,7 @@ _init (int argc, ...) void __libc_init_first (int argc __attribute__ ((unused)), ...) { -#ifndef PIC +#ifndef SHARED init (&argc); #endif } diff --git a/sysdeps/mips/machine-gmon.h b/sysdeps/mips/machine-gmon.h index a01b1746f4..8b35a9194d 100644 --- a/sysdeps/mips/machine-gmon.h +++ b/sysdeps/mips/machine-gmon.h @@ -1,5 +1,5 @@ /* Machine-specific calling sequence for `mcount' profiling function. MIPS - Copyright (C) 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 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 @@ /* Call __mcount with our the return PC for our caller, and the return PC our caller will return to. */ -#ifdef PIC +#ifdef __PIC__ #define CPLOAD ".cpload $25;" #else #define CPLOAD diff --git a/sysdeps/powerpc/elf/libc-start.c b/sysdeps/powerpc/elf/libc-start.c index 01d695bd93..31b3d050be 100644 --- a/sysdeps/powerpc/elf/libc-start.c +++ b/sysdeps/powerpc/elf/libc-start.c @@ -41,7 +41,7 @@ __libc_start_main (int argc, char **argv, char **envp, struct startup_info *stinfo, char **stack_on_entry) { -#ifndef PIC +#ifndef SHARED /* The next variable is only here to work around a bug in gcc <= 2.7.2.2. If the address would be taken inside the expression the optimizer would try to be too smart and throws it away. Grrr. */ @@ -80,7 +80,7 @@ __libc_start_main (int argc, char **argv, char **envp, atexit (rtld_fini); /* Call the initializer of the libc. */ -#ifdef PIC +#ifdef SHARED if (_dl_debug_impcalls) _dl_debug_message (1, "\ninitialize libc\n\n", NULL); #endif @@ -91,14 +91,14 @@ __libc_start_main (int argc, char **argv, char **envp, atexit (stinfo->fini); /* Call the initializer of the program, if any. */ -#ifdef PIC +#ifdef SHARED if (_dl_debug_impcalls) _dl_debug_message (1, "\ninitialize program: ", argv[0], "\n\n", NULL); #endif if (stinfo->init) stinfo->init (argc, argv, __environ, auxvec); -#ifdef PIC +#ifdef SHARED if (_dl_debug_impcalls) _dl_debug_message (1, "\ntransferring control: ", argv[0], "\n\n", NULL); #endif 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 + 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 -#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 +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 #include +#include -#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 +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 +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 #include +#include -#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 -#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 #include #include +#include -#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 #include - +#include #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 #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 +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 #include "kernel-features.h" +#include 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 +#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_2) #include #include @@ -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 #include "kernel-features.h" +#include 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 #include "kernel-features.h" +#include 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 #include "kernel-features.h" +#include 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 #include #include +#include #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 +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 #include #include +#include #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 #include #include +#include #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);