diff options
author | Seemant Kulleen <seemant@gentoo.org> | 2002-10-29 09:17:34 +0000 |
---|---|---|
committer | Seemant Kulleen <seemant@gentoo.org> | 2002-10-29 09:17:34 +0000 |
commit | bc9c775cac335a6156c92c910414b4b7b1f86bae (patch) | |
tree | 609395e20261577a58de6ad20e8ca4eb7c328634 /sys-libs/glibc | |
parent | new package: CLN, a class library (C++) for numbers (diff) | |
download | gentoo-2-bc9c775cac335a6156c92c910414b4b7b1f86bae.tar.gz gentoo-2-bc9c775cac335a6156c92c910414b4b7b1f86bae.tar.bz2 gentoo-2-bc9c775cac335a6156c92c910414b4b7b1f86bae.zip |
added nall's sparc32-semctl patch
Diffstat (limited to 'sys-libs/glibc')
-rw-r--r-- | sys-libs/glibc/ChangeLog | 8 | ||||
-rw-r--r-- | sys-libs/glibc/files/2.2.5/glibc-2.2.5-sparc32-semctl.patch | 209 | ||||
-rw-r--r-- | sys-libs/glibc/glibc-2.2.5-r7.ebuild | 9 |
3 files changed, 224 insertions, 2 deletions
diff --git a/sys-libs/glibc/ChangeLog b/sys-libs/glibc/ChangeLog index 817daaa0638d..31fcf3e13379 100644 --- a/sys-libs/glibc/ChangeLog +++ b/sys-libs/glibc/ChangeLog @@ -1,6 +1,6 @@ # ChangeLog for sys-libs/glibc # Copyright 2002 Gentoo Technologies, Inc.; Distributed under the GPL -# $Header: /var/cvsroot/gentoo-x86/sys-libs/glibc/ChangeLog,v 1.21 2002/10/26 00:53:09 azarah Exp $ +# $Header: /var/cvsroot/gentoo-x86/sys-libs/glibc/ChangeLog,v 1.22 2002/10/29 09:17:34 seemant Exp $ *glibc-2.3.1-r1 (26 Oct 2002) @@ -15,6 +15,12 @@ *glibc-2.2.5-r7 (13 Oct 2002) + 29 Oct 2002; Seemant Kulleen <seemant@gentoo.org> glibc-2.2.5-r7.ebuild : + + Added semctl patch for sparc. Thanks to nall <nall@gentoo.org> for + finding this at: + http://sources.redhat.com/ml/libc-hacker/2002-04/msg00071.html + 13 Oct 2002; Martin Schlemmer <azarah@gentoo.org> glibc-2.2.5-r7.ebuild : Some cleanups. Tidy ebuild. Move all patches to ${FILESDIR}/${PV/. diff --git a/sys-libs/glibc/files/2.2.5/glibc-2.2.5-sparc32-semctl.patch b/sys-libs/glibc/files/2.2.5/glibc-2.2.5-sparc32-semctl.patch new file mode 100644 index 000000000000..9a83b0971e0a --- /dev/null +++ b/sys-libs/glibc/files/2.2.5/glibc-2.2.5-sparc32-semctl.patch @@ -0,0 +1,209 @@ +--- libc/sysdeps/unix/sysv/linux/sparc/sparc32/semctl.c.jj Fri Feb 11 20:44:42 2000 ++++ libc/sysdeps/unix/sysv/linux/sparc/sparc32/semctl.c Thu Apr 25 22:52:00 2002 +@@ -1 +1,205 @@ +-#include <sysdeps/unix/sysv/linux/i386/semctl.c> ++/* Semctl for architectures where word sized unions are passed indirectly ++ Copyright (C) 1995, 1997, 1998, 2000, 2002 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. ++ ++ 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 <errno.h> ++#include <stdarg.h> ++#include <sys/sem.h> ++#include <ipc_priv.h> ++ ++#include <sysdep.h> ++#include <string.h> ++#include <sys/syscall.h> ++ ++#include "kernel-features.h" ++#include <shlib-compat.h> ++ ++struct __old_semid_ds ++{ ++ struct __old_ipc_perm sem_perm; /* operation permission struct */ ++ __time_t sem_otime; /* last semop() time */ ++ __time_t sem_ctime; /* last time changed by semctl() */ ++ struct sem *__sembase; /* ptr to first semaphore in array */ ++ struct sem_queue *__sem_pending; /* pending operations */ ++ struct sem_queue *__sem_pending_last; /* last pending operation */ ++ struct sem_undo *__undo; /* ondo requests on this array */ ++ unsigned short int sem_nsems; /* number of semaphores in set */ ++}; ++ ++/* Define a `union semun' suitable for Linux here. */ ++union semun ++{ ++ int val; /* value for SETVAL */ ++ struct semid_ds *buf; /* buffer for IPC_STAT & IPC_SET */ ++ unsigned short int *array; /* array for GETALL & SETALL */ ++ struct seminfo *__buf; /* buffer for IPC_INFO */ ++}; ++ ++#include <bp-checks.h> ++#include <bp-semctl.h> /* definition of CHECK_SEMCTL needs union semum */ ++ ++#ifdef __NR_getuid32 ++# if __ASSUME_32BITUIDS == 0 ++/* This variable is shared with all files that need to check for 32bit ++ uids. */ ++extern int __libc_missing_32bit_uids; ++# endif ++#endif ++ ++/* 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, ...) ++{ ++ union semun arg; ++ va_list ap; ++ ++ /* Get the argument only if required. */ ++ arg.buf = NULL; ++ switch (cmd) ++ { ++ case SETVAL: /* arg.val */ ++ case GETALL: /* arg.array */ ++ case SETALL: ++ case IPC_STAT: /* arg.buf */ ++ case IPC_SET: ++ case SEM_STAT: ++ case IPC_INFO: /* arg.__buf */ ++ case SEM_INFO: ++ va_start (ap, cmd); ++ arg = va_arg (ap, union semun); ++ va_end (ap); ++ break; ++ } ++ ++ return INLINE_SYSCALL (ipc, 5, IPCOP_semctl, semid, semnum, cmd, ++ CHECK_SEMCTL (&arg, semid, cmd)); ++} ++compat_symbol (libc, __old_semctl, semctl, GLIBC_2_0); ++#endif ++ ++int ++__new_semctl (int semid, int semnum, int cmd, ...) ++{ ++ union semun arg; ++ va_list ap; ++ ++ /* Get the argument only if required. */ ++ arg.buf = NULL; ++ switch (cmd) ++ { ++ case SETVAL: /* arg.val */ ++ case GETALL: /* arg.array */ ++ case SETALL: ++ case IPC_STAT: /* arg.buf */ ++ case IPC_SET: ++ case SEM_STAT: ++ case IPC_INFO: /* arg.__buf */ ++ case SEM_INFO: ++ va_start (ap, cmd); ++ arg = va_arg (ap, union semun); ++ va_end (ap); ++ break; ++ } ++ ++#if __ASSUME_32BITUIDS > 0 ++ return INLINE_SYSCALL (ipc, 5, IPCOP_semctl, semid, semnum, cmd | __IPC_64, ++ CHECK_SEMCTL (&arg, semid, cmd | __IPC_64)); ++#else ++ switch (cmd) { ++ case SEM_STAT: ++ case IPC_STAT: ++ case IPC_SET: ++ break; ++ default: ++ return INLINE_SYSCALL (ipc, 5, IPCOP_semctl, semid, semnum, cmd, ++ CHECK_SEMCTL (&arg, semid, cmd)); ++ } ++ ++ { ++ int result; ++ struct __old_semid_ds old; ++ struct semid_ds *buf; ++ ++#ifdef __NR_getuid32 ++ if (__libc_missing_32bit_uids <= 0) ++ { ++ if (__libc_missing_32bit_uids < 0) ++ { ++ int save_errno = errno; ++ ++ /* Test presence of new IPC by testing for getuid32 syscall. */ ++ result = INLINE_SYSCALL (getuid32, 0); ++ if (result == -1 && errno == ENOSYS) ++ __libc_missing_32bit_uids = 1; ++ else ++ __libc_missing_32bit_uids = 0; ++ __set_errno(save_errno); ++ } ++ if (__libc_missing_32bit_uids <= 0) ++ { ++ result = INLINE_SYSCALL (ipc, 5, IPCOP_semctl, semid, semnum, cmd | __IPC_64, ++ CHECK_SEMCTL (&arg, semid, cmd | __IPC_64)); ++ return result; ++ } ++ } ++#endif ++ ++ buf = arg.buf; ++ arg.buf = (struct semid_ds *)&old; ++ if (cmd == IPC_SET) ++ { ++ old.sem_perm.uid = buf->sem_perm.uid; ++ old.sem_perm.gid = buf->sem_perm.gid; ++ old.sem_perm.mode = buf->sem_perm.mode; ++ if (old.sem_perm.uid != buf->sem_perm.uid || ++ old.sem_perm.gid != buf->sem_perm.gid) ++ { ++ __set_errno (EINVAL); ++ return -1; ++ } ++ } ++ result = INLINE_SYSCALL (ipc, 5, IPCOP_semctl, semid, semnum, cmd, ++ CHECK_SEMCTL (&arg, semid, cmd)); ++ if (result != -1 && cmd != IPC_SET) ++ { ++ memset(buf, 0, sizeof(*buf)); ++ buf->sem_perm.__key = old.sem_perm.__key; ++ buf->sem_perm.uid = old.sem_perm.uid; ++ buf->sem_perm.gid = old.sem_perm.gid; ++ buf->sem_perm.cuid = old.sem_perm.cuid; ++ buf->sem_perm.cgid = old.sem_perm.cgid; ++ buf->sem_perm.mode = old.sem_perm.mode; ++ buf->sem_perm.__seq = old.sem_perm.__seq; ++ buf->sem_otime = old.sem_otime; ++ buf->sem_ctime = old.sem_ctime; ++ buf->sem_nsems = old.sem_nsems; ++ } ++ return result; ++ } ++#endif ++} ++ ++versioned_symbol (libc, __new_semctl, semctl, GLIBC_2_2); diff --git a/sys-libs/glibc/glibc-2.2.5-r7.ebuild b/sys-libs/glibc/glibc-2.2.5-r7.ebuild index 2fdde482cfa0..c8b3d4987d58 100644 --- a/sys-libs/glibc/glibc-2.2.5-r7.ebuild +++ b/sys-libs/glibc/glibc-2.2.5-r7.ebuild @@ -1,6 +1,6 @@ # Copyright 1999-2002 Gentoo Technologies, Inc. # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/sys-libs/glibc/glibc-2.2.5-r7.ebuild,v 1.18 2002/10/20 05:45:34 azarah Exp $ +# $Header: /var/cvsroot/gentoo-x86/sys-libs/glibc/glibc-2.2.5-r7.ebuild,v 1.19 2002/10/29 09:17:34 seemant Exp $ IUSE="nls pic build" @@ -138,6 +138,13 @@ src_unpack() { einfo "Applying seemant's sparc64-fixups patch..." cd ${S}; patch -p1 < ${FILESDIR}/${PV}/${P}-sparc64-fixups.diff > /dev/null || die fi + + if use sparc > /dev/null + then + einfo "Applying nall's sparc32-semctl patch..." + cd ${S} + patch -p1 < ${FILESDIR}/${PV}${P}-sparc32-semctl.patch > /dev/null || die + fi } src_compile() { |