diff mbox series

[v2,20/23] linux: Use generic __syscall_error for nios2

Message ID 20201113165837.121629-21-adhemerval.zanella@linaro.org
State New
Headers show
Series Simplify internal Linux syscall | expand

Commit Message

Adhemerval Zanella Nov. 13, 2020, 4:58 p.m. UTC
The usage of __syscall_error function on dynamic objects only
increases the total size slightly:

--- sizes-nios2-linux-gnu.inline
+++ sizes-nios2-linux-gnu.outline
    text           data     bss     dec     hex filename
-1425296          78844    9224 1513364  171794 libc.so
- 143824           8138     184  152146   25252 elf/ld.so
- 101762           9260    8356  119378   1d252 nptl/libpthread.so
-  26183           2392     160   28735    703f rt/librt.so
+1425592          80724    9224 1515540  172014 libc.so
+ 143960           8142     184  152286   252de elf/ld.so
+ 102278          10552    8356  121186   1d962 nptl/libpthread.so
+  26175           2396     160   28731    703b rt/librt.so

And since the port already issues the function call for static
object it simplifies the implementation since it avoid add an
arch-specific syscall_error.c.

Checked with cross make check for nios2-linux-gnu.
---
 sysdeps/unix/sysv/linux/nios2/syscall_error.h | 25 ++++++++++
 sysdeps/unix/sysv/linux/nios2/sysdep.S        | 50 -------------------
 2 files changed, 25 insertions(+), 50 deletions(-)
 create mode 100644 sysdeps/unix/sysv/linux/nios2/syscall_error.h
 delete mode 100644 sysdeps/unix/sysv/linux/nios2/sysdep.S
diff mbox series

Patch

diff --git a/sysdeps/unix/sysv/linux/nios2/syscall_error.h b/sysdeps/unix/sysv/linux/nios2/syscall_error.h
new file mode 100644
index 0000000000..c13958a07d
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/nios2/syscall_error.h
@@ -0,0 +1,25 @@ 
+/* Linux wrappers for setting errno.  NIOS2 version.
+   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/>.  */
+
+#ifndef _SYSCALL_ERROR_H
+#define _SYSCALL_ERROR_H
+
+#define SYSCALL_ERROR_FUNC        1
+#define SYSCALL_ERROR_FUNC_ATTR
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/nios2/sysdep.S b/sysdeps/unix/sysv/linux/nios2/sysdep.S
deleted file mode 100644
index 6efbb5aff6..0000000000
--- a/sysdeps/unix/sysv/linux/nios2/sysdep.S
+++ /dev/null
@@ -1,50 +0,0 @@ 
-/* Static library error handling code fragment for Nios II.
-   Copyright (C) 2015-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 <sysdep.h>
-
-/* The following code is only used in the static library. In the shared
-   library, the error handling code is at the end of each function.  */
-
-#ifndef	PIC
-
-/* In the static library, the syscall stubs jump here when they detect
-   an error.  */
-
-# undef CALL_MCOUNT
-# define CALL_MCOUNT /* Don't insert the profiling call, it clobbers r2.  */
-
-# if IS_IN (libc)
-#  define SYSCALL_ERROR_ERRNO __libc_errno
-# else
-#  define SYSCALL_ERROR_ERRNO errno
-# endif
-	.text
-ENTRY (__syscall_error)
-	nextpc	r3
-1:
-	movhi	r8, %hiadj(_gp_got - 1b)
-	addi	r8, r8, %lo(_gp_got - 1b)
-	add	r3, r3, r8
-	ldw	r3, %tls_ie(SYSCALL_ERROR_ERRNO)(r3)
-	add	r3, r23, r3
-	stw	r2, 0(r3)
-	movi	r2, -1
-	ret
-END (__syscall_error)
-#endif