aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/sparc/sysdep.h50
-rw-r--r--sysdeps/unix/sparc/brk.S50
-rw-r--r--sysdeps/unix/sparc/dl-brk.S1
-rw-r--r--sysdeps/unix/sparc/pipe.S29
-rw-r--r--sysdeps/unix/sparc/sysdep.S41
-rw-r--r--sysdeps/unix/sparc/sysdep.h95
-rw-r--r--sysdeps/unix/sparc/vfork.S34
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h28
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h25
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sysdep.h19
10 files changed, 73 insertions, 299 deletions
diff --git a/sysdeps/sparc/sysdep.h b/sysdeps/sparc/sysdep.h
index 8a7546bec9..2702620be6 100644
--- a/sysdeps/sparc/sysdep.h
+++ b/sysdeps/sparc/sysdep.h
@@ -42,3 +42,53 @@
#define HWCAP_SPARC_IMA 0x00400000
#define HWCAP_SPARC_ASI_CACHE_SPARING \
0x00800000
+
+#ifdef __ASSEMBLER__
+
+#define SPARC_PIC_THUNK(reg) \
+ .ifndef __sparc_get_pc_thunk.reg; \
+ .section .text.__sparc_get_pc_thunk.reg,"axG",@progbits,__sparc_get_pc_thunk.reg,comdat; \
+ .align 32; \
+ .weak __sparc_get_pc_thunk.reg; \
+ .hidden __sparc_get_pc_thunk.reg; \
+ .type __sparc_get_pc_thunk.reg, #function; \
+__sparc_get_pc_thunk.reg: \
+ jmp %o7 + 8; \
+ add %o7, %reg, %##reg; \
+ .previous; \
+ .endif;
+
+/* Even when v9 we use a call sequence instead of using "rd %pc" because
+ RDPC is extremely expensive and incurs a full pipeline flush. */
+
+#define SETUP_PIC_REG(reg) \
+ SPARC_PIC_THUNK(reg) \
+ sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %##reg; \
+ call __sparc_get_pc_thunk.reg; \
+ or %##reg, %lo(_GLOBAL_OFFSET_TABLE_+4), %##reg;
+
+#define SETUP_PIC_REG_LEAF(reg, tmp) \
+ SPARC_PIC_THUNK(reg) \
+ sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %##reg; \
+ mov %o7, %##tmp; \
+ call __sparc_get_pc_thunk.reg; \
+ or %##reg, %lo(_GLOBAL_OFFSET_TABLE_+4), %##reg; \
+ mov %##tmp, %o7;
+
+#undef ENTRY
+#define ENTRY(name) \
+ .align 4; \
+ .global C_SYMBOL_NAME(name); \
+ .type name, @function; \
+C_LABEL(name) \
+ cfi_startproc;
+
+#undef END
+#define END(name) \
+ cfi_endproc; \
+ .size name, . - name
+
+#undef LOC
+#define LOC(name) .L##name
+
+#endif /* __ASSEMBLER__ */
diff --git a/sysdeps/unix/sparc/brk.S b/sysdeps/unix/sparc/brk.S
deleted file mode 100644
index 6b5d147242..0000000000
--- a/sysdeps/unix/sparc/brk.S
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright (C) 1993, 1995, 1997, 2005 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>
-
-#ifndef SYS_brk
-#define SYS_brk 17
-#endif
-
-#ifndef C_SYMBOL_NAME
-#define C_SYMBOL_NAME(name) _##name
-#endif
-
-.data
-.global C_SYMBOL_NAME(__curbrk)
-C_LABEL(__curbrk)
- .long C_SYMBOL_NAME(_end)
-
-.text
-ENTRY (__brk)
- add %o0, 7, %o0
- andn %o0, 7, %o0
- mov SYS_brk, %g1
- mov %o0, %o1 /* Save rounded value. */
- ta %g0
- bcs error
- sethi %hi(C_SYMBOL_NAME(__curbrk)), %g1
- st %o1, [%g1 + %lo(C_SYMBOL_NAME(__curbrk))]
- ret
-error: sethi %hi(C_SYMBOL_NAME(errno)), %g1
- st %o0, [%g1 + %lo(C_SYMBOL_NAME(errno))]
- sub %g0, 1, %o0
- retl
- nop /* Fill the delay slot. */
-
-weak_alias (__brk, brk)
diff --git a/sysdeps/unix/sparc/dl-brk.S b/sysdeps/unix/sparc/dl-brk.S
deleted file mode 100644
index eeb96544e3..0000000000
--- a/sysdeps/unix/sparc/dl-brk.S
+++ /dev/null
@@ -1 +0,0 @@
-#include <brk.S>
diff --git a/sysdeps/unix/sparc/pipe.S b/sysdeps/unix/sparc/pipe.S
deleted file mode 100644
index 2513641774..0000000000
--- a/sysdeps/unix/sparc/pipe.S
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Copyright (C) 1991, 1992, 1995, 1997, 2002 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>
-
-ENTRY (__pipe)
- mov %o0, %o2 /* Save PIPEDES. */
-PSEUDO (__Spipe, pipe, 1)
- st %o0, [%o2] /* PIPEDES[0] = %o0; */
- st %o1, [%o2 + 4] /* PIPEDES[1] = %o1; */
- retl /* return 0; */
- clr %o0
-
-libc_hidden_def (__pipe)
-weak_alias (__pipe, pipe)
diff --git a/sysdeps/unix/sparc/sysdep.S b/sysdeps/unix/sparc/sysdep.S
deleted file mode 100644
index 706a276a85..0000000000
--- a/sysdeps/unix/sparc/sysdep.S
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (C) 1994, 1997, 2012 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 _ERRNO_H
-#include <bits/errno.h>
-
-.global C_SYMBOL_NAME(errno)
-.global syscall_error
-
-.text
-.align 2
-__syscall_error:
-#if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN
- /* We translate the system's EWOULDBLOCK error into EAGAIN.
- The GNU C library always defines EWOULDBLOCK==EAGAIN.
- EWOULDBLOCK_sys is the original number. */
- cmp %o0, EWOULDBLOCK_sys
- be,a notblock
- mov EAGAIN, %o0
-#endif
-notblock: /* Store the error code in `errno'. */
- sethi %hi(C_SYMBOL_NAME(errno)), %g1
- st %o0, [%g1 + %lo(C_SYMBOL_NAME(errno))]
- /* And return -1. */
- retl
- mov -1, %o0
diff --git a/sysdeps/unix/sparc/sysdep.h b/sysdeps/unix/sparc/sysdep.h
deleted file mode 100644
index 1a095cc6c2..0000000000
--- a/sysdeps/unix/sparc/sysdep.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/* Copyright (C) 1993, 1994, 1995, 1997, 2003, 2011, 2012
- 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/sysdep.h>
-#include <sysdeps/sparc/sysdep.h>
-
-#ifdef __ASSEMBLER__
-
-/* Since C identifiers are not normally prefixed with an underscore
- on this system, the asm identifier `syscall_error' intrudes on the
- C name space. Make sure we use an innocuous name. */
-#define syscall_error C_SYMBOL_NAME(__syscall_error)
-
-#define SPARC_PIC_THUNK(reg) \
- .ifndef __sparc_get_pc_thunk.reg; \
- .section .text.__sparc_get_pc_thunk.reg,"axG",@progbits,__sparc_get_pc_thunk.reg,comdat; \
- .align 32; \
- .weak __sparc_get_pc_thunk.reg; \
- .hidden __sparc_get_pc_thunk.reg; \
- .type __sparc_get_pc_thunk.reg, #function; \
-__sparc_get_pc_thunk.reg: \
- jmp %o7 + 8; \
- add %o7, %reg, %##reg; \
- .previous; \
- .endif;
-
-/* Even when v9 we use a call sequence instead of using "rd %pc" because
- RDPC is extremely expensive and incurs a full pipeline flush. */
-
-#define SETUP_PIC_REG(reg) \
- SPARC_PIC_THUNK(reg) \
- sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %##reg; \
- call __sparc_get_pc_thunk.reg; \
- or %##reg, %lo(_GLOBAL_OFFSET_TABLE_+4), %##reg;
-
-#define SETUP_PIC_REG_LEAF(reg, tmp) \
- SPARC_PIC_THUNK(reg) \
- sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %##reg; \
- mov %o7, %##tmp; \
- call __sparc_get_pc_thunk.reg; \
- or %##reg, %lo(_GLOBAL_OFFSET_TABLE_+4), %##reg; \
- mov %##tmp, %o7;
-
-#define ENTRY(name) \
- .global C_SYMBOL_NAME(name); \
- .type name,@function; \
- .align 4; \
- C_LABEL(name)
-
-
-#define PSEUDO(name, syscall_name, args) \
- .global syscall_error; \
- ENTRY (name) \
- mov SYS_ify(syscall_name), %g1; \
- ta 0; \
- bcc 1f; \
- sethi %hi(syscall_error), %g1; \
- jmp %g1 + %lo(syscall_error); nop; \
-1:
-
-#define PSEUDO_NOERRNO(name, syscall_name, args) \
- .global syscall_error; \
- ENTRY (name) \
- mov SYS_ify(syscall_name), %g1; \
- ta 0
-
-#define PSEUDO_ERRVAL(name, syscall_name, args) \
- .global syscall_error; \
- ENTRY (name) \
- mov SYS_ify(syscall_name), %g1; \
- ta 0
-
-#define ret retl; nop
-#define ret_NOERRNO retl; nop
-#define ret_ERRVAL retl; nop
-#define r0 %o0
-#define r1 %o1
-#define MOVE(x,y) mov x, y
-
-#endif /* __ASSEMBLER__ */
diff --git a/sysdeps/unix/sparc/vfork.S b/sysdeps/unix/sparc/vfork.S
deleted file mode 100644
index c8c2d51df4..0000000000
--- a/sysdeps/unix/sparc/vfork.S
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Copyright (C) 1991, 92, 94, 95, 97, 99, 2002 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>
-
-#ifndef SYS_vfork
-#define SYS_vfork 66
-#endif
-
-SYSCALL__ (vfork, 0)
- /* %o1 is now 0 for the parent and 1 for the child. Decrement it to
- make it -1 (all bits set) for the parent, and 0 (no bits set)
- for the child. Then AND it with %o0, so the parent gets
- %o0&-1==pid, and the child gets %o0&0==0. */
- sub %o1, 1, %o1
- retl
- and %o0, %o1, %o0
-libc_hidden_def (__vfork)
-
-weak_alias (__vfork, vfork)
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
index 3424598566..3a1b35909c 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
@@ -20,7 +20,7 @@
#ifndef _LINUX_SPARC32_SYSDEP_H
#define _LINUX_SPARC32_SYSDEP_H 1
-#include <sysdeps/unix/sparc/sysdep.h>
+#include <sysdeps/unix/sysv/linux/sparc/sysdep.h>
#ifdef IS_IN_rtld
# include <dl-sysdep.h> /* Defines RTLD_PRIVATE_ERRNO. */
@@ -34,28 +34,7 @@
#define LOADSYSCALL(x) mov __NR_##x, %g1
-/* Linux/SPARC uses a different trap number */
#undef PSEUDO
-#undef PSEUDO_NOERRNO
-#undef PSEUDO_ERRVAL
-#undef PSEUDO_END
-#undef ENTRY
-#undef END
-#undef LOC
-
-#define ENTRY(name) \
- .align 4; \
- .global C_SYMBOL_NAME(name); \
- .type name, @function; \
-C_LABEL(name) \
- cfi_startproc;
-
-#define END(name) \
- cfi_endproc; \
- .size name, . - name
-
-#define LOC(name) .L##name
-
#define PSEUDO(name, syscall_name, args) \
.text; \
ENTRY(name); \
@@ -66,18 +45,21 @@ ENTRY(name); \
SYSCALL_ERROR_HANDLER \
1:
+#undef PSEUDO_NOERRNO
#define PSEUDO_NOERRNO(name, syscall_name, args)\
.text; \
ENTRY(name); \
LOADSYSCALL(syscall_name); \
ta 0x10;
+#undef PSEUDO_ERRVAL
#define PSEUDO_ERRVAL(name, syscall_name, args) \
.text; \
ENTRY(name); \
LOADSYSCALL(syscall_name); \
ta 0x10;
+#undef PSEUDO_END
#define PSEUDO_END(name) \
END(name)
@@ -141,8 +123,6 @@ ENTRY(name); \
"f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", \
"cc", "memory"
-#include <sysdeps/unix/sysv/linux/sparc/sysdep.h>
-
#endif /* __ASSEMBLER__ */
/* Pointer mangling support. */
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
index 1bf75973fc..214ab5b257 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
@@ -20,7 +20,7 @@
#ifndef _LINUX_SPARC64_SYSDEP_H
#define _LINUX_SPARC64_SYSDEP_H 1
-#include <sysdeps/unix/sparc/sysdep.h>
+#include <sysdeps/unix/sysv/linux/sparc/sysdep.h>
#ifdef IS_IN_rtld
# include <dl-sysdep.h> /* Defines RTLD_PRIVATE_ERRNO. */
@@ -44,25 +44,7 @@
#define LOADSYSCALL(x) mov __NR_##x, %g1
-/* Linux/SPARC uses a different trap number */
#undef PSEUDO
-#undef PSEUDO_NOERRNO
-#undef PSEUDO_ERRVAL
-#undef PSEUDO_END
-#undef ENTRY
-#undef END
-
-#define ENTRY(name) \
- .align 4; \
- .global C_SYMBOL_NAME(name); \
- .type name, @function; \
-C_LABEL(name) \
- cfi_startproc;
-
-#define END(name) \
- cfi_endproc; \
- .size name, . - name
-
#define PSEUDO(name, syscall_name, args) \
.text; \
ENTRY(name); \
@@ -73,18 +55,21 @@ ENTRY(name); \
SYSCALL_ERROR_HANDLER \
1:
+#undef PSEUDO_NOERRNO
#define PSEUDO_NOERRNO(name, syscall_name, args)\
.text; \
ENTRY(name); \
LOADSYSCALL(syscall_name); \
ta 0x6d;
+#undef PSEUDO_ERRVAL
#define PSEUDO_ERRVAL(name, syscall_name, args) \
.text; \
ENTRY(name); \
LOADSYSCALL(syscall_name); \
ta 0x6d;
+#undef PSEUDO_END
#define PSEUDO_END(name) \
END(name)
@@ -149,8 +134,6 @@ ENTRY(name); \
"f48", "f50", "f52", "f54", "f56", "f58", "f60", "f62", \
"cc", "memory"
-#include <sysdeps/unix/sysv/linux/sparc/sysdep.h>
-
#endif /* __ASSEMBLER__ */
/* This is the offset from the %sp to the backing store above the
diff --git a/sysdeps/unix/sysv/linux/sparc/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sysdep.h
index fc955c236c..a8cd82a70b 100644
--- a/sysdeps/unix/sysv/linux/sparc/sysdep.h
+++ b/sysdeps/unix/sysv/linux/sparc/sysdep.h
@@ -19,6 +19,20 @@
#ifndef _LINUX_SPARC_SYSDEP_H
#define _LINUX_SPARC_SYSDEP_H 1
+#include <sysdeps/unix/sysdep.h>
+#include <sysdeps/sparc/sysdep.h>
+
+#ifdef __ASSEMBLER__
+
+#define ret retl; nop
+#define ret_NOERRNO retl; nop
+#define ret_ERRVAL retl; nop
+#define r0 %o0
+#define r1 %o1
+#define MOVE(x,y) mov x, y
+
+#else /* __ASSEMBLER__ */
+
#undef INLINE_SYSCALL
#define INLINE_SYSCALL(name, nr, args...) \
({ INTERNAL_SYSCALL_DECL(err); \
@@ -165,9 +179,6 @@
__o0; \
})
-
-#ifdef __ASSEMBLER__
-# define JUMPTARGET(sym) sym
-#endif
+#endif /* __ASSEMBLER__ */
#endif /* _LINUX_SPARC_SYSDEP_H */