mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-30 08:40:07 +00:00
linux: Remove shmmax check from tst-sysvshm-linux
The shmmax expected value is tricky to check because kernel clamps it to INT_MAX in two cases: 1. Compat symbols with IPC_64, i.e, 32-bit binaries running on 64-bit kernels. 2. Default symbol without IPC_64 (defined as IPC_OLD within Linux) and glibc always use IPC_64 for 32-bit ABIs (to support 64-bit time_t). It means that 32-bit binaries running on 32-bit kernels will not see shmmax being clamped. And finding out whether the compat symbol is used would require checking the underlying kernel against the current ABI. The shmall and shmmni already provided enough coverage. Checked on x86_64-linux-gnu and i686-linux-gnu. It should fix the tst-sysvshm-linux failures on 32-bit kernels.
This commit is contained in:
parent
6e02b3e932
commit
9132010785
@ -122,18 +122,21 @@ do_test (void)
|
|||||||
if (shmid == -1)
|
if (shmid == -1)
|
||||||
FAIL_EXIT1 ("shmget failed: %m");
|
FAIL_EXIT1 ("shmget failed: %m");
|
||||||
|
|
||||||
|
/* It does not check shmmax because kernel clamp its value to INT_MAX for:
|
||||||
|
|
||||||
|
1. Compat symbols with IPC_64, i.e, 32-bit binaries running on 64-bit
|
||||||
|
kernels.
|
||||||
|
|
||||||
|
2. Default symbol without IPC_64 (defined as IPC_OLD within Linux) and
|
||||||
|
glibc always use IPC_64 for 32-bit ABIs (to support 64-bit time_t).
|
||||||
|
It means that 32-bit binaries running on 32-bit kernels will not see
|
||||||
|
shmmax being clamped.
|
||||||
|
|
||||||
|
And finding out whether the compat symbol is used would require checking
|
||||||
|
the underlying kernel against the current ABI. The shmall and shmmni
|
||||||
|
already provided enough coverage. */
|
||||||
|
|
||||||
struct test_shminfo tipcinfo;
|
struct test_shminfo tipcinfo;
|
||||||
{
|
|
||||||
uint64_t v = read_proc_file ("/proc/sys/kernel/shmmax");
|
|
||||||
#if LONG_MAX == INT_MAX
|
|
||||||
/* Kernel explicit clamp the value for shmmax on compat symbol (32-bit
|
|
||||||
binaries running on 64-bit kernels). */
|
|
||||||
if (sizeof (__syscall_ulong_t) == sizeof (unsigned long int)
|
|
||||||
&& v > INT_MAX)
|
|
||||||
v = INT_MAX;
|
|
||||||
#endif
|
|
||||||
tipcinfo.shmmax = v;
|
|
||||||
}
|
|
||||||
tipcinfo.shmall = read_proc_file ("/proc/sys/kernel/shmall");
|
tipcinfo.shmall = read_proc_file ("/proc/sys/kernel/shmall");
|
||||||
tipcinfo.shmmni = read_proc_file ("/proc/sys/kernel/shmmni");
|
tipcinfo.shmmni = read_proc_file ("/proc/sys/kernel/shmmni");
|
||||||
|
|
||||||
@ -152,7 +155,6 @@ do_test (void)
|
|||||||
FAIL_EXIT1 ("shmctl with IPC_INFO failed: %m");
|
FAIL_EXIT1 ("shmctl with IPC_INFO failed: %m");
|
||||||
|
|
||||||
TEST_COMPARE (ipcinfo.shmall, tipcinfo.shmall);
|
TEST_COMPARE (ipcinfo.shmall, tipcinfo.shmall);
|
||||||
TEST_COMPARE (ipcinfo.shmmax, tipcinfo.shmmax);
|
|
||||||
TEST_COMPARE (ipcinfo.shmmni, tipcinfo.shmmni);
|
TEST_COMPARE (ipcinfo.shmmni, tipcinfo.shmmni);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user