Message ID | 559A811D.6030406@linaro.org |
---|---|
State | Accepted |
Commit | 2aa6c8af26e65695e9daf382a6e508574a30cdf2 |
Headers | show |
Ping. On 06-07-2015 10:22, Adhemerval Zanella wrote: > This patch removes arm assembly implementation of mmap and mmap64. > The new implementation used is the wordsize-32 generic linux one. > > Tested on armhf. > > -- > > * sysdeps/unix/sysv/linux/arm/mmap.c: Add file. > * sysdeps/unix/sysv/linux/arm/mmap.S: Remove file. > * sysdeps/unix/sysv/linux/arm/mmap64.S: Likewise. > > -- > > diff --git a/sysdeps/unix/sysv/linux/arm/mmap.S b/sysdeps/unix/sysv/linux/arm/mmap.S > deleted file mode 100644 > index 4fb5bf4..0000000 > --- a/sysdeps/unix/sysv/linux/arm/mmap.S > +++ /dev/null > @@ -1,64 +0,0 @@ > -/* Copyright (C) 1998-2015 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/>. */ > - > -#include <sysdep.h> > - > -#define EINVAL 22 > - > - .text > - > -ENTRY (__mmap) > - /* shuffle args */ > - push { r5 } > - cfi_adjust_cfa_offset (4) > - cfi_rel_offset (r5, 0) > - ldr r5, [sp, #8] > - push { r4 } > - cfi_adjust_cfa_offset (4) > - cfi_rel_offset (r4, 0) > - cfi_remember_state > - ldr r4, [sp, #8] > - > - /* convert offset to pages */ > - movs ip, r5, lsl #20 > - bne .Linval > - mov r5, r5, lsr #12 > - > - /* do the syscall */ > - DO_CALL (mmap2, 0) > - > - /* restore registers */ > -2: > - pop { r4 } > - cfi_adjust_cfa_offset (-4) > - cfi_restore (r4) > - pop { r5 } > - cfi_adjust_cfa_offset (-4) > - cfi_restore (r5) > - > - cmn r0, $4096 > - it cc > - RETINSTR(cc, lr) > - b PLTJMP(syscall_error) > - > - cfi_restore_state > -.Linval: > - mov r0, #-EINVAL > - b 2b > -PSEUDO_END (__mmap) > - > -weak_alias (__mmap, mmap) > diff --git a/sysdeps/unix/sysv/linux/arm/mmap.c b/sysdeps/unix/sysv/linux/arm/mmap.c > new file mode 100644 > index 0000000..2cb4907 > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/arm/mmap.c > @@ -0,0 +1,18 @@ > +/* Copyright (C) 2015 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/>. */ > + > +#include <sysdeps/unix/sysv/linux/generic/wordsize-32/mmap.c> > diff --git a/sysdeps/unix/sysv/linux/arm/mmap64.S b/sysdeps/unix/sysv/linux/arm/mmap64.S > deleted file mode 100644 > index d574df0..0000000 > --- a/sysdeps/unix/sysv/linux/arm/mmap64.S > +++ /dev/null > @@ -1,72 +0,0 @@ > -/* Copyright (C) 2000-2015 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/>. */ > - > -#include <sysdep.h> > - > - .syntax unified > - > -#define EINVAL 22 > - > -#ifdef __ARMEB__ > -# define LOW_OFFSET 8 + 4 > -/* The initial + 4 is for the stack postdecrement. */ > -# define HIGH_OFFSET 4 + 8 + 0 > -#else > -# define LOW_OFFSET 8 + 0 > -# define HIGH_OFFSET 4 + 8 + 4 > -#endif > - > - /* The mmap2 system call takes six arguments, all in registers. */ > - .text > -ENTRY (__mmap64) > - ldr ip, [sp, $LOW_OFFSET] > - push { r5 } > - cfi_adjust_cfa_offset (4) > - cfi_rel_offset (r5, 0) > - ldr r5, [sp, $HIGH_OFFSET] > - push { r4 } > - cfi_adjust_cfa_offset (4) > - cfi_rel_offset (r4, 0) > - cfi_remember_state > - movs r4, ip, lsl $20 @ check that offset is page-aligned > - mov ip, ip, lsr $12 > - it eq > - movseq r4, r5, lsr $12 @ check for overflow > - bne .Linval > - ldr r4, [sp, $8] @ load fd > - orr r5, ip, r5, lsl $20 @ compose page offset > - DO_CALL (mmap2, 0) > - cmn r0, $4096 > - pop {r4, r5} > - cfi_adjust_cfa_offset (-8) > - cfi_restore (r4) > - cfi_restore (r5) > - it cc > - RETINSTR(cc, lr) > - b PLTJMP(syscall_error) > - > - cfi_restore_state > -.Linval: > - mov r0, $-EINVAL > - pop {r4, r5} > - cfi_adjust_cfa_offset (-8) > - cfi_restore (r4) > - cfi_restore (r5) > - b PLTJMP(syscall_error) > -PSEUDO_END (__mmap64) > - > -weak_alias (__mmap64, mmap64) >
Pushed upstream as 2aa6c8af26e65695e9daf382a6e508574a30cdf2. On 22-07-2015 10:43, Joseph Myers wrote: > On Mon, 6 Jul 2015, Adhemerval Zanella wrote: > >> This patch removes arm assembly implementation of mmap and mmap64. >> The new implementation used is the wordsize-32 generic linux one. >> >> Tested on armhf. >> >> -- >> >> * sysdeps/unix/sysv/linux/arm/mmap.c: Add file. >> * sysdeps/unix/sysv/linux/arm/mmap.S: Remove file. >> * sysdeps/unix/sysv/linux/arm/mmap64.S: Likewise. > > OK for 2.23 (once 2.22 has branched). >
diff --git a/sysdeps/unix/sysv/linux/arm/mmap.S b/sysdeps/unix/sysv/linux/arm/mmap.S deleted file mode 100644 index 4fb5bf4..0000000 --- a/sysdeps/unix/sysv/linux/arm/mmap.S +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (C) 1998-2015 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/>. */ - -#include <sysdep.h> - -#define EINVAL 22 - - .text - -ENTRY (__mmap) - /* shuffle args */ - push { r5 } - cfi_adjust_cfa_offset (4) - cfi_rel_offset (r5, 0) - ldr r5, [sp, #8] - push { r4 } - cfi_adjust_cfa_offset (4) - cfi_rel_offset (r4, 0) - cfi_remember_state - ldr r4, [sp, #8] - - /* convert offset to pages */ - movs ip, r5, lsl #20 - bne .Linval - mov r5, r5, lsr #12 - - /* do the syscall */ - DO_CALL (mmap2, 0) - - /* restore registers */ -2: - pop { r4 } - cfi_adjust_cfa_offset (-4) - cfi_restore (r4) - pop { r5 } - cfi_adjust_cfa_offset (-4) - cfi_restore (r5) - - cmn r0, $4096 - it cc - RETINSTR(cc, lr) - b PLTJMP(syscall_error) - - cfi_restore_state -.Linval: - mov r0, #-EINVAL - b 2b -PSEUDO_END (__mmap) - -weak_alias (__mmap, mmap) diff --git a/sysdeps/unix/sysv/linux/arm/mmap.c b/sysdeps/unix/sysv/linux/arm/mmap.c new file mode 100644 index 0000000..2cb4907 --- /dev/null +++ b/sysdeps/unix/sysv/linux/arm/mmap.c @@ -0,0 +1,18 @@ +/* Copyright (C) 2015 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/>. */ + +#include <sysdeps/unix/sysv/linux/generic/wordsize-32/mmap.c> diff --git a/sysdeps/unix/sysv/linux/arm/mmap64.S b/sysdeps/unix/sysv/linux/arm/mmap64.S deleted file mode 100644 index d574df0..0000000 --- a/sysdeps/unix/sysv/linux/arm/mmap64.S +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright (C) 2000-2015 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/>. */ - -#include <sysdep.h> - - .syntax unified - -#define EINVAL 22 - -#ifdef __ARMEB__ -# define LOW_OFFSET 8 + 4 -/* The initial + 4 is for the stack postdecrement. */ -# define HIGH_OFFSET 4 + 8 + 0 -#else -# define LOW_OFFSET 8 + 0 -# define HIGH_OFFSET 4 + 8 + 4 -#endif - - /* The mmap2 system call takes six arguments, all in registers. */ - .text -ENTRY (__mmap64) - ldr ip, [sp, $LOW_OFFSET] - push { r5 } - cfi_adjust_cfa_offset (4) - cfi_rel_offset (r5, 0) - ldr r5, [sp, $HIGH_OFFSET] - push { r4 } - cfi_adjust_cfa_offset (4) - cfi_rel_offset (r4, 0) - cfi_remember_state - movs r4, ip, lsl $20 @ check that offset is page-aligned - mov ip, ip, lsr $12 - it eq - movseq r4, r5, lsr $12 @ check for overflow - bne .Linval - ldr r4, [sp, $8] @ load fd - orr r5, ip, r5, lsl $20 @ compose page offset - DO_CALL (mmap2, 0) - cmn r0, $4096 - pop {r4, r5} - cfi_adjust_cfa_offset (-8) - cfi_restore (r4) - cfi_restore (r5) - it cc - RETINSTR(cc, lr) - b PLTJMP(syscall_error) - - cfi_restore_state -.Linval: - mov r0, $-EINVAL - pop {r4, r5} - cfi_adjust_cfa_offset (-8) - cfi_restore (r4) - cfi_restore (r5) - b PLTJMP(syscall_error) -PSEUDO_END (__mmap64) - -weak_alias (__mmap64, mmap64)