Patchwork [0/4] Fix getrlimit/setrlimit/prlimit on Alpha and 32-bit machines

login
register
mail settings
Submitter Aurelien Jarno
Date Jan. 6, 2018, 11:01 a.m.
Message ID <20180106110104.GC22048@aurel32.net>
Download mbox | patch
Permalink /patch/25251/
State New
Headers show

Comments

Aurelien Jarno - Jan. 6, 2018, 11:01 a.m.
On 2018-01-06 11:00, Aurelien Jarno wrote:
> On 2018-01-05 23:55, Joseph Myers wrote:
> > One of these patches breaks the testsuite build for various (but not all) 
> > 32-bit configurations.
> > 
> > https://sourceware.org/ml/libc-testresults/2018-q1/msg00035.html
> > 
> > The failures are all of the form:
> > 
> > /scratch/jmyers/glibc-bot/build/glibcs/arm-linux-gnueabi/glibc/io/test-lfs.o: In function `do_prepare':
> > /scratch/jmyers/glibc-bot/build/glibcs/arm-linux-gnueabi/glibc-src/io/test-lfs.c:75: undefined reference to `getrlimit64'
> > collect2: error: ld returned 1 exit status
> > ../Rules:202: recipe for target '/scratch/jmyers/glibc-bot/build/glibcs/arm-linux-gnueabi/glibc/io/test-lfs' failed
> > make[3]: *** [/scratch/jmyers/glibc-bot/build/glibcs/arm-linux-gnueabi/glibc/io/test-lfs] Error 1
> 
> Sorry about that. The issue happens on 32-bit configurations which have
> a minimum version >= 2.2, and thus which don't need the 2GiB limited
> compat getrlimit64. I wrongly moved one case under the #ifdef
> __RLIM_T_MATCHES_RLIM64_T case, while it should have been copied
> instead.
> 
> I am currently testing the following patch:

It worked fine on arm-linux-gnueabihf with no regression. Here is the
full patch.


From 5551e9755c3bbcd0c6682a1626eb869596d201c6 Mon Sep 17 00:00:00 2001
From: Aurelien Jarno <aurelien@aurel32.net>
Date: Sat, 6 Jan 2018 11:48:16 +0100
Subject: [PATCH] getrlimit64: fix for 32-bit configurations with default
 version >= 2.2

Commit 24731685 ("prlimit: Translate old_rlimit from RLIM64_INFINITY to
RLIM_INFINITY") broken the getrlimit64 for 32-bit configurations which
do no need the 2GiB limited compat getrlimit (default version >= 2.2).

This patch fixes that by restoring the weak alias in that case.

Changelog:
	* sysdeps/unix/sysv/linux/getrlimit64 (getrlimit64)
	[!__RLIM_T_MATCHES_RLIM64_T]
	[!SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_2)]: Define as weak alias of
	__getrlimit64. Add libc_hidden_weak.
---
 ChangeLog                             | 7 +++++++
 sysdeps/unix/sysv/linux/getrlimit64.c | 3 +++
 2 files changed, 10 insertions(+)
Aurelien Jarno - Jan. 7, 2018, 9:44 p.m.
On 2018-01-06 12:01, Aurelien Jarno wrote:
> On 2018-01-06 11:00, Aurelien Jarno wrote:
> > On 2018-01-05 23:55, Joseph Myers wrote:
> > > One of these patches breaks the testsuite build for various (but not all) 
> > > 32-bit configurations.
> > > 
> > > https://sourceware.org/ml/libc-testresults/2018-q1/msg00035.html
> > > 
> > > The failures are all of the form:
> > > 
> > > /scratch/jmyers/glibc-bot/build/glibcs/arm-linux-gnueabi/glibc/io/test-lfs.o: In function `do_prepare':
> > > /scratch/jmyers/glibc-bot/build/glibcs/arm-linux-gnueabi/glibc-src/io/test-lfs.c:75: undefined reference to `getrlimit64'
> > > collect2: error: ld returned 1 exit status
> > > ../Rules:202: recipe for target '/scratch/jmyers/glibc-bot/build/glibcs/arm-linux-gnueabi/glibc/io/test-lfs' failed
> > > make[3]: *** [/scratch/jmyers/glibc-bot/build/glibcs/arm-linux-gnueabi/glibc/io/test-lfs] Error 1
> > 
> > Sorry about that. The issue happens on 32-bit configurations which have
> > a minimum version >= 2.2, and thus which don't need the 2GiB limited
> > compat getrlimit64. I wrongly moved one case under the #ifdef
> > __RLIM_T_MATCHES_RLIM64_T case, while it should have been copied
> > instead.
> > 
> > I am currently testing the following patch:
> 
> It worked fine on arm-linux-gnueabihf with no regression. Here is the
> full patch.

I have now committed it, as I don't want to leave things broken for too
long.

Aurelien

Patch

diff --git a/ChangeLog b/ChangeLog
index 8833b1da33..303ded4877 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@ 
+2018-01-06  Aurelien Jarno  <aurelien@aurel32.net>
+
+	* sysdeps/unix/sysv/linux/getrlimit64 (getrlimit64)
+	[!__RLIM_T_MATCHES_RLIM64_T]
+	[!SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_2)]: Define as weak alias of
+	__getrlimit64. Add libc_hidden_weak.
+
 2018-01-06  Samuel Thibault  <samuel.thibault@ens-lyon.org>
 
 	* sysdeps/mach/hurd/i386/jmp_buf-macros.h: New file.
diff --git a/sysdeps/unix/sysv/linux/getrlimit64.c b/sysdeps/unix/sysv/linux/getrlimit64.c
index 1cc82e364d..a14ca58096 100644
--- a/sysdeps/unix/sysv/linux/getrlimit64.c
+++ b/sysdeps/unix/sysv/linux/getrlimit64.c
@@ -81,4 +81,7 @@  __old_getrlimit64 (enum __rlimit_resource resource, struct rlimit64 *rlimits)
 }
 versioned_symbol (libc, __getrlimit64, getrlimit64, GLIBC_2_2);
 compat_symbol (libc, __old_getrlimit64, getrlimit64, GLIBC_2_1);
+#else
+weak_alias (__getrlimit64, getrlimit64)
+libc_hidden_weak (getrlimit64)
 #endif /* __RLIM_T_MATCHES_RLIM64_T  */