aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/s390/s390-32
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-12-06 00:20:16 +0000
committerUlrich Drepper <drepper@redhat.com>2003-12-06 00:20:16 +0000
commit844a34a2ae4b493f86ed1e79c5992329b54a5511 (patch)
tree4c28fbeb9a311bd9acfa4a7a7d11f133ae516603 /sysdeps/unix/sysv/linux/s390/s390-32
parentdd17514ce7a10d785b977586224d31563888cb9d (diff)
downloadglibc-844a34a2ae4b493f86ed1e79c5992329b54a5511.tar
glibc-844a34a2ae4b493f86ed1e79c5992329b54a5511.tar.gz
glibc-844a34a2ae4b493f86ed1e79c5992329b54a5511.tar.bz2
glibc-844a34a2ae4b493f86ed1e79c5992329b54a5511.zip
Update.
2003-12-05 Martin Schwidefsky <schwidefsky@de.ibm.com> * sysdeps/s390/s390-32/elf/setjmp.S (setjmp, __setjmp): Add END statements. * sysdeps/s390/s390-64/elf/setjmp.S (setjmp, __setjmp): Likewise. * sysdeps/s390/s390-32/sysdep.h (ENTRY): Add cfi_startproc directive. (END): Add cfi_endproc directive. * sysdeps/s390/s390-64/sysdep.h (ENTRY, END): Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/socket.S (__socket): Remove cfi_startproc and cfi_endproc directive. * sysdeps/unix/sysv/linux/s390/s390-64/socket.S (__socket): Likewise. * sysdeps/s390/s390-32/addmul_1.S (__mpn_addmul_1): Add CFI directives. * sysdeps/s390/s390-32/add_n.S (__mpn_add_n): Likewise. * sysdeps/s390/s390-64/add_n.S (__mpn_add_n): Likewise. * sysdeps/s390/s390-32/dl-machine.h (ELF_MACHINE_RUNTIME_TRAMPOLINE): Likewise. * sysdeps/s390/s390-64/dl-machine.h (ELF_MACHINE_RUNTIME_TRAMPOLINE): Likewise. * sysdeps/s390/s390-32/mul_1.S (__mpn_mul_1): Likewise. * sysdeps/s390/s390-32/sub_n.S (__mpn_sub_n): Likewise. * sysdeps/s390/s390-64/sub_n.S (__mpn_sub_n): Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S (__mmap64): Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/mmap.S (__mmap): Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/mmap.S (__mmap): Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/syscall.S (syscall): Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/syscall.S (syscall): Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S (__syscall_error): Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S (__syscall_error): Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/clone.S (__clone): Add CFI directives. Move thread_start out of ENTRY/PSEUDO_END block to make backchain terminate. * sysdeps/unix/sysv/linux/s390/s390-64/clone.S (__clone): Likewise. * sysdeps/s390/s390-32/backtrace.c (trace_arg): New structure. (unwind_backtrace, unwind_getip): New variables. (init, __backchain_backtrace, backtrace_helper): New functions. (__backtrace): Use unwind info for backtrace instead of backchain walking if the unwind functions can be found. * sysdeps/s390/s390-64/backtrace.c: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/posix_fadvise64.c: New file. * sysdeps/unix/sysv/linux/s390/sys/procfs.h (ELF_NGREG32): New #define. (elf_greg_t32, elf_gregset_t32, elf_fpregset_t32): New types. (elf_prstatus32, elf_prpsinfo32): New structures. (prgregset32_t, prfpregset32_t, prstatus32_t, prpsinfo32_t): New types. * scripts/data/c++-types-s390-linux-gnu.data: New file. * scripts/data/c++-types-s390x-linux-gnu.data: New file.
Diffstat (limited to 'sysdeps/unix/sysv/linux/s390/s390-32')
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/clone.S3
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/mmap.S12
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S12
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/posix_fadvise64.c90
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/socket.S3
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/syscall.S12
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S12
7 files changed, 140 insertions, 4 deletions
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/clone.S b/sysdeps/unix/sysv/linux/s390/s390-32/clone.S
index 650384cbc9..f01433ff0f 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/clone.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/clone.S
@@ -32,6 +32,7 @@
.text
ENTRY(__clone)
st %r6,24(%r15) /* store %r6 to save area */
+ cfi_offset (%r6, -72)
lr %r0,%r5 /* move *arg out of the way */
ltr %r1,%r2 /* check fn and move to %r1 */
jz error /* no NULL function pointers */
@@ -50,6 +51,7 @@ ENTRY(__clone)
error:
lhi %r2,-EINVAL
j SYSCALL_ERROR_LABEL
+PSEUDO_END (__clone)
thread_start:
/* fn is in gpr 1, arg in gpr 0 */
@@ -71,5 +73,4 @@ thread_start:
br %r1 /* branch to _exit -> thread termination */
.L1: .long _exit - .L0
#endif
-PSEUDO_END (__clone)
weak_alias (__clone, clone)
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/mmap.S b/sysdeps/unix/sysv/linux/s390/s390-32/mmap.S
index 28fa2006da..c0d7cd4590 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/mmap.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/mmap.S
@@ -25,8 +25,19 @@
ENTRY(__mmap)
/* Save registers and setup stack frame. */
stm %r6,%r15,24(%r15)
+ cfi_offset (%r15, -36)
+ cfi_offset (%r14, -40)
+ cfi_offset (%r13, -44)
+ cfi_offset (%r12, -48)
+ cfi_offset (%r11, -52)
+ cfi_offset (%r10, -56)
+ cfi_offset (%r9, -60)
+ cfi_offset (%r8, -64)
+ cfi_offset (%r7, -68)
+ cfi_offset (%r6, -72)
lr %r1,%r15
ahi %r15,-120 /* buy stack space */
+ cfi_adjust_cfa_offset (120)
st %r1,0(%r15) /* store back chain */
/* Store parameters on stack, because old_mmap/mmap2
@@ -57,6 +68,7 @@ ENTRY(__mmap)
#endif
1: l %r15,0(%r15) /* Load back chain. */
+ cfi_adjust_cfa_offset (-120)
lm %r6,%r15,24(%r15) /* Load registers. */
/* check gpr 2 for error */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S b/sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S
index c0652cae83..aba4ac34e3 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S
@@ -26,8 +26,19 @@
ENTRY(__mmap64)
/* Save registers and setup stack frame. */
stm %r6,%r15,24(%r15)
+ cfi_offset (%r15, -36)
+ cfi_offset (%r14, -40)
+ cfi_offset (%r13, -44)
+ cfi_offset (%r12, -48)
+ cfi_offset (%r11, -52)
+ cfi_offset (%r10, -56)
+ cfi_offset (%r9, -60)
+ cfi_offset (%r8, -64)
+ cfi_offset (%r7, -68)
+ cfi_offset (%r6, -72)
lr %r1,%r15
ahi %r15,-120 /* Buy stack space. */
+ cfi_adjust_cfa_offset (120)
st %r1,0(%r15) /* Store back chain. */
/* Store parameters on stack, because mmap2 and old_mmap
@@ -56,6 +67,7 @@ ENTRY(__mmap64)
#endif
l %r15,0(%r15) /* Load back chain. */
+ cfi_adjust_cfa_offset (-120)
lm %r6,%r15,24(%r15) /* Load registers. */
/* Check gpr 2 for error. */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/posix_fadvise64.c b/sysdeps/unix/sysv/linux/s390/s390-32/posix_fadvise64.c
new file mode 100644
index 0000000000..6c539cd700
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/posix_fadvise64.c
@@ -0,0 +1,90 @@
+/* Copyright (C) 2003 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, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <sysdep.h>
+#include <kernel-features.h>
+
+int __posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise);
+int __posix_fadvise64_l32 (int fd, off64_t offset, size_t len, int advise);
+
+/* Advice the system about the expected behaviour of the application with
+ respect to the file associated with FD. */
+
+struct fadvise64_64_layout
+{
+ int fd;
+ off64_t offset;
+ off64_t len;
+ int advise;
+};
+
+int
+__posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise)
+{
+#ifdef __NR_fadvise64_64
+ struct fadvise64_64_layout parameters;
+ INTERNAL_SYSCALL_DECL (err);
+
+ parameters.fd = fd;
+ parameters.offset = offset;
+ parameters.len = len;
+ parameters.advise = advise;
+ int ret = INTERNAL_SYSCALL (fadvise64_64, err, 1, &parameters);
+ if (!INTERNAL_SYSCALL_ERROR_P (ret, err))
+ return 0;
+# ifndef __ASSUME_FADVISE64_64_SYSCALL
+ if (INTERNAL_SYSCALL_ERRNO (ret, err) != ENOSYS)
+# endif
+ return INTERNAL_SYSCALL_ERRNO (ret, err);
+#endif
+#ifndef __ASSUME_FADVISE64_64_SYSCALL
+# ifdef __NR_fadvise64
+ if (len != (off_t) len)
+ return EOVERFLOW;
+
+ INTERNAL_SYSCALL_DECL (err2);
+ int ret2 = INTERNAL_SYSCALL (fadvise64, err2, 5, fd,
+ __LONG_LONG_PAIR ((long) (offset >> 32),
+ (long) offset),
+ (off_t) len, advise);
+ if (!INTERNAL_SYSCALL_ERROR_P (ret2, err2))
+ return 0;
+ return INTERNAL_SYSCALL_ERRNO (ret2, err2);
+# else
+ return ENOSYS;
+# endif
+#endif
+}
+
+#include <shlib-compat.h>
+
+#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3)
+
+int
+__posix_fadvise64_l32 (int fd, off64_t offset, size_t len, int advise)
+{
+ return __posix_fadvise64_l64 (fd, offset, len, advise);
+}
+
+versioned_symbol (libc, __posix_fadvise64_l64, posix_fadvise64, GLIBC_2_3_3);
+compat_symbol (libc, __posix_fadvise64_l32, posix_fadvise64, GLIBC_2_2);
+#else
+strong_alias (__posix_fadvise64_l64, posix_fadvise64);
+#endif
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/socket.S b/sysdeps/unix/sysv/linux/s390/s390-32/socket.S
index 2047709647..bc0153324c 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/socket.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/socket.S
@@ -47,8 +47,6 @@
.globl __socket
ENTRY(__socket)
- cfi_startproc
-
/* Save registers and setup stack. */
stm %r6,%r15,24(%r15) /* save registers */
cfi_offset (%r15, -36)
@@ -136,7 +134,6 @@ L(socket_cancel):
2: .long CENABLE-1b
3: .long CDISABLE-1b
#endif
- cfi_endproc
SYSCALL_ERROR_HANDLER
END (__socket)
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S b/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S
index 5455ec832d..d1ce925ac3 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S
@@ -25,9 +25,20 @@
ENTRY (syscall)
/* Save registers and setup stack. */
stm %r6,%r15,24(%r15) /* save registers */
+ cfi_offset (%r15, -36)
+ cfi_offset (%r14, -40)
+ cfi_offset (%r13, -44)
+ cfi_offset (%r12, -48)
+ cfi_offset (%r11, -52)
+ cfi_offset (%r10, -56)
+ cfi_offset (%r9, -60)
+ cfi_offset (%r8, -64)
+ cfi_offset (%r7, -68)
+ cfi_offset (%r6, -72)
lr %r1,%r15
l %r0,4(0,%r15) /* load eos */
ahi %r15,-96 /* buy stack space */
+ cfi_adjust_cfa_offset (96)
st %r1,0(0,%r15) /* store back chain */
st %r0,4(0,%r15) /* store eos */
@@ -45,6 +56,7 @@ ENTRY (syscall)
j 3f
2: ex %r1,1b-0b(%r7) /* lsb of R1 is subsituted as SVC number */
3: l %r15,0(%r15) /* load back chain */
+ cfi_adjust_cfa_offset (-96)
lm %r6,15,24(%r15) /* load registers */
lhi %r0,-4095
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S
index 94d772f67e..b1f17335f7 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S
@@ -55,8 +55,12 @@ ENTRY(__syscall_error)
1: .long errno
# else
stm %r13,%r15,52(%r15)
+ cfi_offset (%r15, -36)
+ cfi_offset (%r14, -40)
+ cfi_offset (%r13, -44)
lr %r0,%r15
ahi %r15,-96
+ cfi_adjust_cfa_offset (96)
lcr %r13,%r2
st %r0,0(%r15)
basr %r1,0
@@ -64,6 +68,7 @@ ENTRY(__syscall_error)
basr %r14,%r1
st %r13,0(%r2)
lm %r13,%r15,148(%r15)
+ cfi_adjust_cfa_offset (-96)
lhi %r2,-1
br %r14
1: .long __errno_location
@@ -103,8 +108,14 @@ ENTRY(__syscall_error)
1: .long _GLOBAL_OFFSET_TABLE_-0b
# else
stm %r11,%r15,44(%r15)
+ cfi_offset (%r15, -36)
+ cfi_offset (%r14, -40)
+ cfi_offset (%r13, -44)
+ cfi_offset (%r12, -48)
+ cfi_offset (%r11, -52)
lr %r0,%r15
ahi %r15,-96
+ cfi_adjust_cfa_offset (96)
lcr %r11,%r2
st %r0,0(%r15)
basr %r13,0
@@ -114,6 +125,7 @@ ENTRY(__syscall_error)
bas %r14,0(%r1,%r13)
st %r11,0(%r2)
lm %r11,%r15,140(%r15)
+ cfi_adjust_cfa_offset (-96)
lhi %r2,-1
br %r14
1: .long _GLOBAL_OFFSET_TABLE_-0b