Movatterモバイル変換
[0]ホーム
This is the mail archive of thelibc-alpha@sourceware.orgmailing list for theglibc project.
Re: [PATCH] posix: Fix mmap for m68k and ia64 (BZ#21908)
I will commit this shortly if no one opposes it.On 11/08/2017 16:22, Adhemerval Zanella wrote:> Ping.> > On 06/08/2017 11:30, Adhemerval Zanella wrote:>> Default semantic for mmap2 syscall is to take the offset in 4096-byte>> units. However m68k and ia64 mmap2 implementation take in the>> configured pagesize units and for both architecture it can be>> different values based on how kernel was built.>>>> This patch fixes the m68k runtime discover of mmap2 offset unit>> and adds the ia64 definition to find it at runtime.>>>> Checked the basic tst-mmap and tst-mmap-offset on m68k (the system>> is configured with 4k, so current code is already passing on this>> system) and a sanity check on x86_64-linux-gnu (which should not be>> affected by this change). Sergei also states that ia64 loader now>> work correctly with this change.>>>> Adhemerval Zanella <adhemerval.zanella@linaro.org>>> Sergei Trofimovich <slyfox@inbox.ru>>>>> * sysdeps/unix/sysv/linux/m68k/mmap_internal.h (MMAP2_PAGE_SHIFT):>> Rename to MMAP2_PAGE_UNIT.>> * sysdeps/unix/sysv/linux/mmap.c: Include mmap_internal iff>> __OFF_T_MATCHES_OFF64_T is not defined.>> * sysdeps/unix/sysv/linux/mmap_internal.h (page_unit): Declare as>> uint64_t.>> (MMAP2_PAGE_UNIT) [MMAP2_PAGE_UNIT == -1]: Redefine to page_unit.>> (page_unit) [MMAP2_PAGE_UNIT != -1]: Remove definition.>> --->> ChangeLog | 12 ++++++++++++>> sysdeps/unix/sysv/linux/ia64/mmap_internal.h | 29 ++++++++++++++++++++++++++++>> sysdeps/unix/sysv/linux/m68k/mmap_internal.h | 2 +->> sysdeps/unix/sysv/linux/mmap.c | 2 +->> sysdeps/unix/sysv/linux/mmap_internal.h | 6 +++--->> 5 files changed, 46 insertions(+), 5 deletions(-)>> create mode 100644 sysdeps/unix/sysv/linux/ia64/mmap_internal.h>>>> diff --git a/sysdeps/unix/sysv/linux/ia64/mmap_internal.h b/sysdeps/unix/sysv/linux/ia64/mmap_internal.h>> new file mode 100644>> index 0000000..dbaaa3f>> --- /dev/null>> +++ b/sysdeps/unix/sysv/linux/ia64/mmap_internal.h>> @@ -0,0 +1,29 @@>> +/* Common mmap definition for Linux implementation. Linux/ia64 version.>> + Copyright (C) 2017 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>> + <http://www.gnu.org/licenses/>. */>> +>> +#ifndef MMAP_IA64_INTERNAL_LINUX_H>> +#define MMAP_IA64_INTERNAL_LINUX_H>> +>> +/* Linux allows PAGE_SHIFT in range of [12-16] and expect>> + mmap2 offset to be provided in based on the configured pagesize.>> + Determine the shift dynamically with getpagesize. */>> +#define MMAP2_PAGE_UNIT -1>> +>> +#include_next <mmap_internal.h>>> +>> +#endif>> diff --git a/sysdeps/unix/sysv/linux/m68k/mmap_internal.h b/sysdeps/unix/sysv/linux/m68k/mmap_internal.h>> index bd8bd38..9fe9d91 100644>> --- a/sysdeps/unix/sysv/linux/m68k/mmap_internal.h>> +++ b/sysdeps/unix/sysv/linux/m68k/mmap_internal.h>> @@ -22,7 +22,7 @@>> /* ColdFire and Sun 3 kernels have PAGE_SHIFT set to 13 and expect>> mmap2 offset to be provided in 8K pages. Determine the shift>> dynamically with getpagesize. */>> -#define MMAP2_PAGE_SHIFT -1>> +#define MMAP2_PAGE_UNIT -1>> >> #include_next <mmap_internal.h>>> >> diff --git a/sysdeps/unix/sysv/linux/mmap.c b/sysdeps/unix/sysv/linux/mmap.c>> index 98c2f88..59292b6 100644>> --- a/sysdeps/unix/sysv/linux/mmap.c>> +++ b/sysdeps/unix/sysv/linux/mmap.c>> @@ -21,9 +21,9 @@>> #include <sys/mman.h>>> #include <sysdep.h>>> #include <stdint.h>>> -#include <mmap_internal.h>>> >> #ifndef __OFF_T_MATCHES_OFF64_T>> +# include <mmap_internal.h>>> >> /* An architecture may override this. */>> # ifndef MMAP_ADJUST_OFFSET>> diff --git a/sysdeps/unix/sysv/linux/mmap_internal.h b/sysdeps/unix/sysv/linux/mmap_internal.h>> index 499e389..47c0991 100644>> --- a/sysdeps/unix/sysv/linux/mmap_internal.h>> +++ b/sysdeps/unix/sysv/linux/mmap_internal.h>> @@ -27,13 +27,13 @@>> #endif>> >> #if MMAP2_PAGE_UNIT == -1>> -static int page_unit;>> ->> +static uint64_t page_unit;>> # define MMAP_CHECK_PAGE_UNIT()\>> if (page_unit == 0)\>> page_unit = __getpagesize ();>> +# undef MMAP2_PAGE_UNIT>> +# define MMAP2_PAGE_UNIT page_unit>> #else>> -# define page_unit MMAP2_PAGE_UNIT>> # define MMAP_CHECK_PAGE_UNIT()>> #endif>> >>
[8]ページ先頭