[08/23] linux: Use generic __syscall_error for arc
Commit Message
Moving to intra DSO calls generates slight better code and avoid
a GLIBC_PRIVATE symbol (only librt increases because it issues
syscalls only in specific places).
--- sizes-arc-linux-gnuhf.before
+++ sizes-arc-linux-gnuhf.after
text data bss dec hex filename
- 962196 9400 8116 979712 ef300 libc.so
- 110145 3724 192 114061 1bd8d elf/ld.so
- 75099 796 8348 84243 14913 nptl/libpthread.so
- 18882 600 156 19638 4cb6 rt/librt.so
+ 961186 9400 8116 978702 eef0e libc.so
+ 109745 3724 192 113661 1bbfd elf/ld.so
+ 75463 796 8348 84607 14a7f nptl/libpthread.so
+ 18704 596 156 19456 4c00 rt/librt.so
Checked with build for arc-linux-gnuabihf.
---
sysdeps/arc/Versions | 3 ---
sysdeps/unix/sysv/linux/arc/sysdep.c | 33 ----------------------------
sysdeps/unix/sysv/linux/arc/sysdep.h | 14 +++---------
3 files changed, 3 insertions(+), 47 deletions(-)
delete mode 100644 sysdeps/unix/sysv/linux/arc/sysdep.c
@@ -2,7 +2,4 @@ libc {
GLIBC_2.32 {
__mcount;
}
- GLIBC_PRIVATE {
- __syscall_error;
- }
}
deleted file mode 100644
@@ -1,33 +0,0 @@
-/* ARC wrapper for setting errno.
- Copyright (C) 2020 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
- <https://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-
-extern long int __syscall_error (long int);
-libc_hidden_proto (__syscall_error)
-
-/* All syscall handlers land here to avoid generated code bloat due to
- GOT reference to errno_location or it's equivalent. */
-long int
-__syscall_error (long int err_no)
-{
- __set_errno (-err_no);
- return -1;
-}
-
-libc_hidden_def (__syscall_error)
@@ -19,6 +19,8 @@
#ifndef _LINUX_ARC_SYSDEP_H
#define _LINUX_ARC_SYSDEP_H 1
+#define SYSCALL_ERROR_FUNC
+
#include <sysdeps/arc/sysdep.h>
#include <sysdeps/unix/sysv/linux/generic/sysdep.h>
@@ -103,22 +105,12 @@
# define PSEUDO_END_ERRVAL(name) \
END (name)
-
-/* To reduce the code footprint, we confine the actual errno access
- to single place in __syscall_error().
- This takes raw kernel error value, sets errno and returns -1. */
-# if IS_IN (libc)
-# define CALL_ERRNO_SETTER_C bl PLTJMP(HIDDEN_JUMPTARGET(__syscall_error))
-# else
-# define CALL_ERRNO_SETTER_C bl PLTJMP(__syscall_error)
-# endif
-
# define SYSCALL_ERROR_HANDLER \
L (call_syscall_err): ASM_LINE_SEP \
push_s blink ASM_LINE_SEP \
cfi_adjust_cfa_offset (4) ASM_LINE_SEP \
cfi_rel_offset (blink, 0) ASM_LINE_SEP \
- CALL_ERRNO_SETTER_C ASM_LINE_SEP \
+ bl __syscall_error ASM_LINE_SEP \
pop_s blink ASM_LINE_SEP \
cfi_adjust_cfa_offset (-4) ASM_LINE_SEP \
cfi_restore (blink) ASM_LINE_SEP \