From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16709 invoked by alias); 26 Jul 2012 22:06:20 -0000 Received: (qmail 16639 invoked by uid 22791); 26 Jul 2012 22:06:18 -0000 X-SWARE-Spam-Status: No, hits=-2.9 required=5.0 tests=AWL,BAYES_00,KHOP_THREADED,TW_TP X-Spam-Check-By: sourceware.org Received: from toast.topped-with-meat.com (HELO topped-with-meat.com) (204.197.218.159) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 26 Jul 2012 22:06:04 +0000 Received: by topped-with-meat.com (Postfix, from userid 5281) id 930B22C0FE; Thu, 26 Jul 2012 15:06:03 -0700 (PDT) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit From: Roland McGrath To: "Joseph S. Myers" Cc: Andreas Jaeger , , Subject: Re: [PATCH roland/getrlimit] Re: Bug 14138 - Move some functions to syscalls.list In-Reply-To: Joseph S. Myers's message of Thursday, 26 July 2012 20:24:07 +0000 References: <50103612.3050308@suse.com> <20120725203222.AF6452C0E2@topped-with-meat.com> <5296462.88fGOZ3lSr@byrd> <20120726185950.D07662C064@topped-with-meat.com> Message-Id: <20120726220603.930B22C0FE@topped-with-meat.com> Date: Thu, 26 Jul 2012 22:06:00 -0000 X-CMAE-Score: 0 X-CMAE-Analysis: v=2.0 cv=e8d9udV/ c=1 sm=1 a=FMzGWu7IsJsA:10 a=Z6MIti7PxpgA:10 a=kj9zAlcOel0A:10 a=hOe2yjtxAAAA:8 a=14OXPxybAAAA:8 a=mDV3o1hIAAAA:8 a=QKf51gnodZJFek5MWPUA:9 a=CjuIK1q_8ugA:10 a=WkljmVdYkabdwxfqvArNOQ==:117 X-IsSubscribed: yes Mailing-List: contact libc-ports-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: libc-ports-owner@sourceware.org X-SW-Source: 2012-07/txt/msg00065.txt.bz2 > The build fails for ARM with a linker error "libc.so: version node not > found for symbol getrlimit@@GLIBC_2.2". (Previously the 2.2 version would > get automatically converted to 2.4, the minimum symbol version for ARM > specified in shlib-versions.) Please try the new version of the branch, patch also below. Thanks, Roland 2012-07-26 Roland McGrath [BZ #14138] * sysdeps/unix/sysv/linux/syscalls.list: Add getrlimit/ugetrlimit line. * sysdeps/unix/sysv/linux/i386/getrlimit.c: File removed. * sysdeps/unix/sysv/linux/powerpc/getrlimit.c: File removed. * sysdeps/unix/sysv/linux/sh/getrlimit.c: File removed. * sysdeps/unix/make-syscalls.sh: Emit uses of the versioned_symbol and compat_symbol macros from rather than the underlying default_symbol_version and symbol_version macros, so that DEFAULT lines in shlib-versions are respected. ports/ChangeLog.am33 2012-07-26 Roland McGrath [BZ #14138] * sysdeps/unix/sysv/linux/am33/getrlimit.c: File removed. ports/ChangeLog.arm 2012-07-26 Roland McGrath [BZ #14138] * sysdeps/unix/sysv/linux/arm/getrlimit.c: File removed. ports/ChangeLog.m68k 2012-07-26 Roland McGrath [BZ #14138] * sysdeps/unix/sysv/linux/m68k/getrlimit.c: File removed. diff --git a/ports/sysdeps/unix/sysv/linux/am33/getrlimit.c b/ports/sysdeps/unix/sysv/linux/am33/getrlimit.c deleted file mode 100644 index fc06dbd..0000000 --- a/ports/sysdeps/unix/sysv/linux/am33/getrlimit.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/ports/sysdeps/unix/sysv/linux/arm/getrlimit.c b/ports/sysdeps/unix/sysv/linux/arm/getrlimit.c deleted file mode 100644 index fc06dbd..0000000 --- a/ports/sysdeps/unix/sysv/linux/arm/getrlimit.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/ports/sysdeps/unix/sysv/linux/m68k/getrlimit.c b/ports/sysdeps/unix/sysv/linux/m68k/getrlimit.c deleted file mode 100644 index fc06dbd..0000000 --- a/ports/sysdeps/unix/sysv/linux/m68k/getrlimit.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/make-syscalls.sh b/sysdeps/unix/make-syscalls.sh index 2bc7cc0..7e7de65 100644 --- a/sysdeps/unix/make-syscalls.sh +++ b/sysdeps/unix/make-syscalls.sh @@ -64,18 +64,30 @@ done` # Any calls left? test -n "$calls" || exit 0 -# This uses variables $weak and $strong. +# This uses variables $weak, $strong, and $any_versioned. emit_weak_aliases() { # A shortcoming in the current gas is that it will only allow one # version-alias per symbol. So we create new strong aliases as needed. vcount="" + # We use the macros to generate the versioned aliases + # so that the version sets can be mapped to the configuration's + # minimum version set as per shlib-versions DEFAULT lines. But note + # we don't generate any "#if SHLIB_COMPAT (...)" conditionals. To do + # that we'd need to change the syscalls.list format so that it can + # list the "obsoleted" version set too. If it ever arises that we + # have a syscall entry point that is obsoleted by a newer version set, + # we'll have to revamp all this. + if [ $any_versioned = t ]; then + echo " echo '#include '; \\" + fi + for name in $weak; do case $name in *@@*) base=`echo $name | sed 's/@@.*//'` - ver=`echo $name | sed 's/.*@@//'` + ver=`echo $name | sed 's/.*@@//;s/\./_/g'` echo " echo '#ifndef NOT_IN_libc'; \\" if test -z "$vcount" ; then source=$strong @@ -85,14 +97,14 @@ emit_weak_aliases() vcount=`expr $vcount + 1` echo " echo 'strong_alias ($strong, $source)'; \\" fi - echo " echo 'default_symbol_version($source, $base, $ver)'; \\" + echo " echo 'versioned_symbol (libc, $source, $base, $ver)'; \\" echo " echo '#else'; \\" echo " echo 'strong_alias ($strong, $base)'; \\" echo " echo '#endif'; \\" ;; *@*) base=`echo $name | sed 's/@.*//'` - ver=`echo $name | sed 's/.*@//'` + ver=`echo $name | sed 's/.*@//;s/\./_/g'` echo " echo '#ifndef NOT_IN_libc'; \\" if test -z "$vcount" ; then source=$strong @@ -102,7 +114,7 @@ emit_weak_aliases() vcount=`expr $vcount + 1` echo " echo 'strong_alias ($strong, $source)'; \\" fi - echo " echo 'symbol_version ($source, $base, $ver)'; \\" + echo " echo 'compat_symbol (libc, $source, $base, $ver)'; \\" echo " echo '#endif'; \\" ;; !*) @@ -175,10 +187,11 @@ while read file srcfile caller syscall args strong weak; do # If there are versioned aliases the entry is only generated for the # shared library, unless it is a default version. + any_versioned=f shared_only=f case $weak in - *@@*) ;; - *@*) shared_only=t;; + *@@*) any_versioned=t ;; + *@*) any_versioned=t shared_only=t ;; esac case x$srcfile"$callnum" in diff --git a/sysdeps/unix/sysv/linux/i386/getrlimit.c b/sysdeps/unix/sysv/linux/i386/getrlimit.c deleted file mode 100644 index e18f9de..0000000 --- a/sysdeps/unix/sysv/linux/i386/getrlimit.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 1999-2012 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, see - . */ - -#include -#include - -#include -#include -#include -#include - -extern int __new_getrlimit (enum __rlimit_resource resource, - struct rlimit *__unbounded rlimits); - -/* Consider moving to syscalls.list. */ - -int -__new_getrlimit (enum __rlimit_resource resource, struct rlimit *rlimits) -{ - return INLINE_SYSCALL (ugetrlimit, 2, resource, CHECK_1 (rlimits)); -} - -weak_alias (__new_getrlimit, __getrlimit); -versioned_symbol (libc, __new_getrlimit, getrlimit, GLIBC_2_2); diff --git a/sysdeps/unix/sysv/linux/powerpc/getrlimit.c b/sysdeps/unix/sysv/linux/powerpc/getrlimit.c deleted file mode 100644 index fc06dbd..0000000 --- a/sysdeps/unix/sysv/linux/powerpc/getrlimit.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sh/getrlimit.c b/sysdeps/unix/sysv/linux/sh/getrlimit.c deleted file mode 100644 index fc06dbd..0000000 --- a/sysdeps/unix/sysv/linux/sh/getrlimit.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list index 9ec0028..6343272 100644 --- a/sysdeps/unix/sysv/linux/syscalls.list +++ b/sysdeps/unix/sysv/linux/syscalls.list @@ -25,6 +25,7 @@ getpmsg - getpmsg i:ipppp getpmsg getppid - getppid Ei: __getppid getppid getresuid - getresuid i:ppp getresuid getresgid - getresgid i:ppp getresgid +getrlimit - ugetrlimit i:ip __new_getrlimit __getrlimit getrlimit@@GLIBC_2.2 getsid - getsid i:i getsid init_module EXTRA init_module 5 init_module inotify_add_watch EXTRA inotify_add_watch i:isi inotify_add_watch