diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2015-07-06 13:00:29 +0000 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.com> | 2015-08-05 10:41:03 -0300 |
commit | 2aa6c8af26e65695e9daf382a6e508574a30cdf2 (patch) | |
tree | 575e036dbf8add5890c1af7b829f8add45b5b65f /sysdeps | |
parent | 42eaa27fac748edc54b780539fbd9a18921454ba (diff) | |
download | glibc-2aa6c8af26e65695e9daf382a6e508574a30cdf2.zip glibc-2aa6c8af26e65695e9daf382a6e508574a30cdf2.tar.gz glibc-2aa6c8af26e65695e9daf382a6e508574a30cdf2.tar.bz2 |
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.
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/mmap.S | 64 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/mmap.c | 18 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/mmap64.S | 72 |
3 files changed, 18 insertions, 136 deletions
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) |