From 2aa6c8af26e65695e9daf382a6e508574a30cdf2 Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Mon, 6 Jul 2015 13:00:29 +0000 Subject: [PATCH] arm: Assembly implementation cleanup This patch removes arm assembly implementation of mmap and mmap64. The new implementation used is the wordsize-32 generic linux one. Tested on armhf. --- ChangeLog | 6 +++ sysdeps/unix/sysv/linux/arm/mmap.S | 64 -------------------------------- sysdeps/unix/sysv/linux/arm/mmap.c | 18 +++++++++ sysdeps/unix/sysv/linux/arm/mmap64.S | 72 ------------------------------------ 4 files changed, 24 insertions(+), 136 deletions(-) delete mode 100644 sysdeps/unix/sysv/linux/arm/mmap.S create mode 100644 sysdeps/unix/sysv/linux/arm/mmap.c delete mode 100644 sysdeps/unix/sysv/linux/arm/mmap64.S diff --git a/ChangeLog b/ChangeLog index a228926..fd0fd74 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2015-08-05 Adhemerval Zanella + + * 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. + 2015-08-05 Marko Myllynen [BZ #18525] 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 - . */ - -#include - -#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 + . */ + +#include 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 - . */ - -#include - - .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) -- 2.7.4