summaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/sparc/sparc64
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux/sparc/sparc64')
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/Dist1
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/bits/setjmp.h7
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/bits/statfs.h16
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/brk.S15
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/clone.S7
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/init-first.h7
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S2
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S2
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c3
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/sys/ucontext.h (renamed from sysdeps/unix/sysv/linux/sparc/sparc64/ucontext.h)6
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S2
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list2
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h53
13 files changed, 71 insertions, 52 deletions
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/Dist b/sysdeps/unix/sysv/linux/sparc/sparc64/Dist
index 50f83311cd..c22b73ebd2 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/Dist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/Dist
@@ -4,5 +4,4 @@ kernel_stat.h
getcontext.S
setcontext.S
sizes.h
-ucontext.h
init-first.h
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/bits/setjmp.h b/sysdeps/unix/sysv/linux/sparc/sparc64/bits/setjmp.h
index b200b718d2..e51f81a5a0 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/bits/setjmp.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/bits/setjmp.h
@@ -21,6 +21,11 @@
# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
#endif
-#include <ucontext.h>
+#include <sys/ucontext.h>
typedef ucontext_t __jmp_buf[1];
+
+/* Test if longjmp to JMPBUF would unwind the frame
+ containing a local variable at ADDRESS. */
+#define _JMPBUF_UNWINDS(jmpbuf, address) \
+ ((unsigned long int) (address) < (jmpbuf)->uc_mcontext.mc_fp)
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/bits/statfs.h b/sysdeps/unix/sysv/linux/sparc/sparc64/bits/statfs.h
index 9027eca2ac..b6178f5a8e 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/bits/statfs.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/bits/statfs.h
@@ -39,4 +39,20 @@ struct statfs
long int f_spare[6];
};
+/* We already use 64-bit types in the normal structure,
+ so this is the same as the above. */
+struct statfs64
+ {
+ long int f_type;
+ long int f_bsize;
+ long int f_blocks;
+ long int f_bfree;
+ long int f_bavail;
+ long int f_files;
+ long int f_ffree;
+ __fsid_t f_fsid;
+ long int f_namelen;
+ long int f_spare[6];
+ };
+
#endif /* bits/statfs.h */
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S b/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S
index 333f9916f8..e21b60d637 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S
@@ -38,7 +38,7 @@ __curbrk: .skip 8
.text
ENTRY(__brk)
- save %sp, -160, %sp
+ save %sp, -192, %sp
#ifdef PIC
1: call 2f
sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
@@ -49,24 +49,23 @@ ENTRY(__brk)
LOADSYSCALL(brk)
mov %i0, %o0
- ta 0x11
+ ta 0x6d
/* All the ways we can fail... */
bcs,pn %xcc, .Lerr1
nop
- brz %i0, .Lok
+ brz,pt %i0, .Lok
subcc %i0, %o0, %g0
bne,pn %xcc, .Lerr0
+ nop
/* Update __curbrk and return cleanly. */
.Lok: sethi %hi(__curbrk), %g1
or %g1, %lo(__curbrk), %g1
#ifdef PIC
ldx [%l7+%g1], %g1
- stx %o0, [%g1]
-#else
- stx %o0, [%g4+%g1]
#endif
+ stx %o0, [%g1]
mov %g0, %i0
/* Don't use "ret" cause the preprocessor will eat it. */
@@ -81,10 +80,8 @@ ENTRY(__brk)
or %g1, %lo(errno), %g1
#ifdef PIC
ldx [%l7+%g1], %g1
- st %o0, [%g1]
-#else
- st %o0, [%g4+%g1]
#endif
+ st %o0, [%g1]
#else
call __errno_location
mov %o0,%l1
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S
index 6c619fcdc3..d7506b7c72 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S
@@ -30,7 +30,7 @@
.type __clone,@function
__clone:
- save %sp,-160,%sp
+ save %sp, -192, %sp
/* sanity check arguments */
brz,pn %i0, 99f
@@ -42,10 +42,10 @@ __clone:
mov %i1, %o1
mov %i2, %o0
set __NR_clone, %g1
- ta 0x11
+ ta 0x6d
bcs,pn %xcc, 99f
nop
- brnz %o0, __thread_start
+ brnz,pn %o0, __thread_start
mov %o0, %i0
ret
restore
@@ -62,7 +62,6 @@ __clone:
st %i0, [%l7+%g2]
#else
sethi %hi(errno), %g2
- add %g2, %g4, %g2
set EINVAL, %i0
st %i0, [%g2+%lo(errno)]
#endif
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/init-first.h b/sysdeps/unix/sysv/linux/sparc/sparc64/init-first.h
index 955714dc4f..ece284ab44 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/init-first.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/init-first.h
@@ -33,7 +33,7 @@
.global " #NAME "
.type " #NAME ",@function
" #NAME ":
- save %sp, -128, %sp
+ save %sp, -192, %sp
1: call 11f
sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
11: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
@@ -73,11 +73,10 @@
or %g2, %lo(_dl_starting_up), %g2
brz,pt %g2, 3f
sethi %hi(__libc_multiple_libcs), %g3
- ld [%g4+%g2], %g1
+ ld [%g2], %g1
mov %g0, %g2
movrz %g1, 1, %g2
-3: or %g3, %lo(__libc_multiple_libcs), %g3
- st %g2, [%g3+%g4]
+3: st %g2, [%g3 + %lo(__libc_multiple_libcs)]
/* If so, argc et al are in %o0-%o2 already. Otherwise, load them. */
brnz,pn %g2, " #INIT "
nop
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S b/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S
index d63762cb15..963aa6d89d 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S
@@ -44,5 +44,7 @@ ENTRY(longjmp)
END(longjmp)
strong_alias(longjmp, __longjmp)
+strong_alias(longjmp, __libc_longjmp)
+strong_alias(longjmp, __libc_siglongjmp)
weak_alias(longjmp, _longjmp)
weak_alias(longjmp, siglongjmp)
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S b/sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S
index 82ff4eae3c..38a6f8f8b8 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S
@@ -22,7 +22,7 @@
ENTRY (__libc_pipe)
mov %o0, %o2 /* Save PIPEDES. */
LOADSYSCALL(pipe)
- ta 0x11
+ ta 0x6d
bcc,pn %xcc, 2f
nop
SYSCALL_ERROR_HANDLER
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c b/sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c
index 96a6a76945..300ebb2629 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c
@@ -1,4 +1,7 @@
#define readdir64 __no_readdir64_decl
+#define __readdir64 __no___readdir64_decl
#include <sysdeps/unix/readdir.c>
+#undef __readdir64
+strong_alias (__readdir, __readdir64)
#undef readdir64
weak_alias (__readdir, readdir64)
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/ucontext.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sys/ucontext.h
index 160e2fc43a..f62b542b2f 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/ucontext.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/sys/ucontext.h
@@ -1,5 +1,5 @@
-#ifndef _UCONTEXT_H
-#define _UCONTEXT_H
+#ifndef _SYS_UCONTEXT_H
+#define _SYS_UCONTEXT_H
#include <signal.h>
@@ -64,4 +64,4 @@ struct ucontext {
};
typedef struct ucontext ucontext_t;
-#endif /* ucontext.h */
+#endif /* sys/ucontext.h */
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S b/sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S
index 30dace5903..5864bfcbc3 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S
@@ -28,7 +28,7 @@ ENTRY (syscall)
mov %o4,%o3
mov %o5,%o4
- ta 0x11
+ ta 0x6d
bcc,pt %xcc,1f
nop
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list
index fcf556b818..1ec42fa42e 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list
@@ -6,7 +6,7 @@ pread - pread 4 __pread pread __pread64 pread64
pwrite - pwrite 4 __pwrite pwrite __pwrite64 pwrite64
fstatfs - fstatfs 2 __fstatfs fstatfs fstatfs64
statfs - statfs 2 __statfs statfs statfs64
-getrlimit - getrlimit 2 getrlimit getrlimit64
+getrlimit - getrlimit 2 __getrlimit getrlimit getrlimit64
setrlimit - setrlimit 2 setrlimit setrlimit64
ftruncate - ftruncate 2 __ftruncate ftruncate ftruncate64
truncate - truncate 2 truncate truncate64
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
index 2cc8547c1a..5a9a4e249b 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
@@ -46,49 +46,48 @@
#ifdef PIC
# ifdef _LIBC_REENTRANT
# define SYSCALL_ERROR_HANDLER \
- save %sp,-160,%sp; \
- call __errno_location; \
+ save %sp, -192, %sp; \
+ call __errno_location; \
nop; \
- st %i0,[%o0]; \
- sub %g0,1,%i0; \
- jmpl %i7+8, %g0; \
+ st %i0,[%o0]; \
+ sub %g0,1,%i0; \
+ jmpl %i7+8, %g0; \
restore
# else
# define SYSCALL_ERROR_HANDLER \
.global C_SYMBOL_NAME(errno); \
.type C_SYMBOL_NAME(errno),@object; \
- mov %o7,%g3; \
- 101: call 102f; \
- sethi %hi(_GLOBAL_OFFSET_TABLE_-(101b-.)),%g2; \
- 102: or %g2,%lo(_GLOBAL_OFFSET_TABLE_-(101b-.)),%g2; \
- sethi %hi(errno),%o1; \
- add %g2,%o7,%l7; \
- or %o1,%lo(errno),%o1; \
- mov %g3,%o7; \
- ldx [%l7+%o1],%g2; \
- st %o0,[%g2]; \
+ mov %o7, %g3; \
+ 101: call 102f; \
+ sethi %hi(_GLOBAL_OFFSET_TABLE_-(101b-.)), %g2; \
+ 102: or %g2,%lo(_GLOBAL_OFFSET_TABLE_-(101b-.)), %g2; \
+ sethi %hi(errno), %o1; \
+ add %g2, %o7, %l7; \
+ or %o1, %lo(errno), %o1; \
+ mov %g3,%o7; \
+ ldx [%l7+%o1], %g2; \
+ st %o0, [%g2]; \
retl; \
- sub %g0,1,%i0
+ sub %g0, 1, %i0
# endif
#else
# ifdef _LIBC_REENTRANT
# define SYSCALL_ERROR_HANDLER \
- save %sp,-160,%sp; \
- call __errno_location; \
+ save %sp, -192, %sp; \
+ call __errno_location; \
nop; \
- st %i0,[%o0]; \
- sub %g0,1,%i0; \
- jmpl %i7+8, %g0; \
+ st %i0, [%o0]; \
+ sub %g0, 1, %i0; \
+ jmpl %i7+8, %g0; \
restore
# else
# define SYSCALL_ERROR_HANDLER \
.global C_SYMBOL_NAME(errno); \
.type C_SYMBOL_NAME(errno),@object; \
- sethi %hi(errno),%g1; \
- or %g1,%lo(errno),%g1; \
- st %i0,[%g1+%g4]; \
+ sethi %hi(errno), %g1; \
+ st %i0, [%g1 + %lo(errno)]; \
retl; \
- sub %g0,1,%i0
+ sub %g0, 1, %i0
# endif
#endif
@@ -96,8 +95,8 @@
.text; \
ENTRY(name); \
LOADSYSCALL(syscall_name); \
- ta 0x11; \
- bcc,pt %xcc,1f; \
+ ta 0x6d; \
+ bcc,pt %xcc, 1f; \
nop; \
SYSCALL_ERROR_HANDLER; \
1: