aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/s390/s390-64
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/s390/s390-64')
-rw-r--r--sysdeps/s390/s390-64/Implies1
-rw-r--r--sysdeps/s390/s390-64/Makefile9
-rw-r--r--sysdeps/s390/s390-64/__longjmp.c89
-rw-r--r--sysdeps/s390/s390-64/add_n.S63
-rw-r--r--sysdeps/s390/s390-64/backtrace.c147
-rw-r--r--sysdeps/s390/s390-64/bcopy.S71
-rw-r--r--sysdeps/s390/s390-64/bits/wordsize.h11
-rw-r--r--sysdeps/s390/s390-64/bsd-_setjmp.S1
-rw-r--r--sysdeps/s390/s390-64/bsd-setjmp.S1
-rw-r--r--sysdeps/s390/s390-64/bzero.S41
-rw-r--r--sysdeps/s390/s390-64/crti.S91
-rw-r--r--sysdeps/s390/s390-64/crtn.S50
-rw-r--r--sysdeps/s390/s390-64/dl-machine.h476
-rw-r--r--sysdeps/s390/s390-64/dl-trampoline.S33
-rw-r--r--sysdeps/s390/s390-64/dl-trampoline.h225
-rw-r--r--sysdeps/s390/s390-64/memchr.S40
-rw-r--r--sysdeps/s390/s390-64/memcmp.S64
-rw-r--r--sysdeps/s390/s390-64/memcpy.S88
-rw-r--r--sysdeps/s390/s390-64/memset.S64
-rw-r--r--sysdeps/s390/s390-64/multiarch/Makefile4
-rw-r--r--sysdeps/s390/s390-64/multiarch/memchr.c21
-rw-r--r--sysdeps/s390/s390-64/multiarch/memcmp-s390x.S104
-rw-r--r--sysdeps/s390/s390-64/multiarch/memcmp.c27
-rw-r--r--sysdeps/s390/s390-64/multiarch/memcpy-s390x.S122
-rw-r--r--sysdeps/s390/s390-64/multiarch/memcpy.c27
-rw-r--r--sysdeps/s390/s390-64/multiarch/memset-s390x.S112
-rw-r--r--sysdeps/s390/s390-64/multiarch/memset.c26
-rw-r--r--sysdeps/s390/s390-64/multiarch/strcmp.c21
-rw-r--r--sysdeps/s390/s390-64/multiarch/strcpy.c21
-rw-r--r--sysdeps/s390/s390-64/multiarch/strncpy.c21
-rw-r--r--sysdeps/s390/s390-64/s390x-mcount.S77
-rw-r--r--sysdeps/s390/s390-64/setjmp.S118
-rw-r--r--sysdeps/s390/s390-64/stackguard-macros.h18
-rw-r--r--sysdeps/s390/s390-64/start.S100
-rw-r--r--sysdeps/s390/s390-64/strcmp.S41
-rw-r--r--sysdeps/s390/s390-64/strcpy.S35
-rw-r--r--sysdeps/s390/s390-64/strncpy.S90
-rw-r--r--sysdeps/s390/s390-64/sub_n.S60
-rw-r--r--sysdeps/s390/s390-64/sysdep.h94
-rw-r--r--sysdeps/s390/s390-64/tls-macros.h88
-rw-r--r--sysdeps/s390/s390-64/tst-audit.h25
41 files changed, 0 insertions, 2817 deletions
diff --git a/sysdeps/s390/s390-64/Implies b/sysdeps/s390/s390-64/Implies
deleted file mode 100644
index a8cae95f9d..0000000000
--- a/sysdeps/s390/s390-64/Implies
+++ /dev/null
@@ -1 +0,0 @@
-wordsize-64
diff --git a/sysdeps/s390/s390-64/Makefile b/sysdeps/s390/s390-64/Makefile
deleted file mode 100644
index b4d793bb3d..0000000000
--- a/sysdeps/s390/s390-64/Makefile
+++ /dev/null
@@ -1,9 +0,0 @@
-ifeq ($(subdir),gmon)
-sysdep_routines += s390x-mcount
-endif
-
-ifeq ($(subdir),elf)
-CFLAGS-rtld.c += -Wno-uninitialized -Wno-unused
-CFLAGS-dl-load.c += -Wno-unused
-CFLAGS-dl-reloc.c += -Wno-unused
-endif
diff --git a/sysdeps/s390/s390-64/__longjmp.c b/sysdeps/s390/s390-64/__longjmp.c
deleted file mode 100644
index f7be9ddb18..0000000000
--- a/sysdeps/s390/s390-64/__longjmp.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/* Copyright (C) 2001-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
-
- 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 <errno.h>
-#include <sysdep.h>
-#include <setjmp.h>
-#include <bits/setjmp.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <stap-probe.h>
-
-/* Jump to the position specified by ENV, causing the
- setjmp call there to return VAL, or 1 if VAL is 0. */
-void
-__longjmp (__jmp_buf env, int val)
-{
-#ifdef PTR_DEMANGLE
- uintptr_t guard = THREAD_GET_POINTER_GUARD ();
-# ifdef CHECK_SP
- CHECK_SP (env, guard);
-# endif
-#elif defined CHECK_SP
- CHECK_SP (env, 0);
-#endif
- register long int r2 __asm__ ("%r2") = val == 0 ? 1 : val;
-#ifdef PTR_DEMANGLE
- register uintptr_t r3 __asm__ ("%r3") = guard;
- register void *r1 __asm__ ("%r1") = (void *) env;
-#endif
- /* Restore registers and jump back. */
- __asm__ __volatile__ (
- /* longjmp probe expects longjmp first argument, second
- argument and target address. */
-#ifdef PTR_DEMANGLE
- "lmg %%r4,%%r5,64(%1)\n\t"
- "xgr %%r4,%2\n\t"
- "xgr %%r5,%2\n\t"
- LIBC_PROBE_ASM (longjmp, 8@%1 -4@%0 8@%%r4)
-#else
- LIBC_PROBE_ASM (longjmp, 8@%1 -4@%0 8@%%r14)
-#endif
-
- /* restore fpregs */
- "ld %%f8,80(%1)\n\t"
- "ld %%f9,88(%1)\n\t"
- "ld %%f10,96(%1)\n\t"
- "ld %%f11,104(%1)\n\t"
- "ld %%f12,112(%1)\n\t"
- "ld %%f13,120(%1)\n\t"
- "ld %%f14,128(%1)\n\t"
- "ld %%f15,136(%1)\n\t"
-
- /* restore gregs and return to jmp_buf target */
-#ifdef PTR_DEMANGLE
- "lmg %%r6,%%r13,0(%1)\n\t"
- "lgr %%r15,%%r5\n\t"
- LIBC_PROBE_ASM (longjmp_target, 8@%1 -4@%0 8@%%r4)
- "br %%r4"
-#else
- "lmg %%r6,%%r15,0(%1)\n\t"
- LIBC_PROBE_ASM (longjmp_target, 8@%1 -4@%0 8@%%r14)
- "br %%r14"
-#endif
- : : "r" (r2),
-#ifdef PTR_DEMANGLE
- "r" (r1), "r" (r3)
-#else
- "a" (env)
-#endif
- );
-
- /* Avoid `volatile function does return' warnings. */
- for (;;);
-}
diff --git a/sysdeps/s390/s390-64/add_n.S b/sysdeps/s390/s390-64/add_n.S
deleted file mode 100644
index 89197b2dbf..0000000000
--- a/sysdeps/s390/s390-64/add_n.S
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Add two limb vectors of the same length > 0 and store sum in a third
- limb vector.
- Copyright (C) 2001-2017 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
- This file is part of the GNU MP Library.
-
- The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB. If not,
- see <http://www.gnu.org/licenses/>. */
-
-/*
- INPUT PARAMETERS
- res_ptr %r2
- s1_ptr %r3
- s2_ptr %r4
- size %r5
-*/
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
- .text
-ENTRY(__mpn_add_n)
- stg %r6,48(%r15) # save register 6
- cfi_offset (%r6,-112)
- slgr %r1,%r1
- lghi %r0,1 # cannot use ahi to add carry, use alr
-.L0: lg %r6,0(%r1,%r3) # .L0 -> no carry from last add
- alg %r6,0(%r1,%r4)
- stg %r6,0(%r1,%r2)
- la %r1,8(%r1)
- brc 3,.L3
-.L1: brct %r5,.L0
- slgr %r2,%r2 # no last carry to return
- j .Lexit
-.L2: lg %r6,0(%r1,%r3) # .L2 -> carry from last add
- alg %r6,0(%r1,%r4)
- brc 3,.L4
- algr %r6,%r0 # no carry yet, add carry from last add
- stg %r6,0(%r1,%r2)
- la %r1,8(%r1)
- brc 12,.L1 # new carry ?
-.L3: brct %r5,.L2
- lgr %r2,%r0 # return last carry
- j .Lexit
-.L4: algr %r6,%r0 # already a carry, add carry from last add
- stg %r6,0(%r1,%r2)
- la %r1,8(%r1)
- brct %r5,.L2
- lgr %r2,%r0 # return last carry
-.Lexit: lg %r6,48(%r15) # restore register 6
- br %r14
-END(__mpn_add_n)
diff --git a/sysdeps/s390/s390-64/backtrace.c b/sysdeps/s390/s390-64/backtrace.c
deleted file mode 100644
index 4843db623a..0000000000
--- a/sysdeps/s390/s390-64/backtrace.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/* Return backtrace of current program state. 64 bit S/390 version.
- Copyright (C) 2001-2017 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>.
- 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 <libc-lock.h>
-#include <dlfcn.h>
-#include <execinfo.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <unwind.h>
-
-
-/* This is a global variable set at program start time. It marks the
- highest used stack address. */
-extern void *__libc_stack_end;
-
-
-/* This is the stack layout we see for every non-leaf function.
- size offset
- %r15 -> +------------------+
- 8 | back chain | 0
- 8 | end of stack | 8
- 32 | scratch | 16
- 80 | save area r6-r15 | 48
- 16 | save area f4,f6 | 128
- 16 | empty | 144
- +------------------+
- r14 in the save area holds the return address.
-*/
-
-struct layout
-{
- long back_chain;
- long end_of_stack;
- long scratch[4];
- long save_grps[10];
- long save_fp[2];
- long empty[2];
-};
-
-struct trace_arg
-{
- void **array;
- int cnt, size;
-};
-
-#ifdef SHARED
-static _Unwind_Reason_Code (*unwind_backtrace) (_Unwind_Trace_Fn, void *);
-static _Unwind_Ptr (*unwind_getip) (struct _Unwind_Context *);
-
-static void
-init (void)
-{
- void *handle = __libc_dlopen ("libgcc_s.so.1");
-
- if (handle == NULL)
- return;
-
- unwind_backtrace = __libc_dlsym (handle, "_Unwind_Backtrace");
- unwind_getip = __libc_dlsym (handle, "_Unwind_GetIP");
- if (unwind_getip == NULL)
- unwind_backtrace = NULL;
-}
-
-static int
-__backchain_backtrace (void **array, int size)
-{
- /* We assume that all the code is generated with frame pointers set. */
- struct layout *stack;
- int cnt = 0;
-
- __asm__ ("LGR %0,%%r15" : "=d" (stack) );
- /* We skip the call to this function, it makes no sense to record it. */
- stack = (struct layout *) stack->back_chain;
- while (cnt < size)
- {
- if (stack == NULL || (void *) stack > __libc_stack_end)
- /* This means the address is out of range. Note that for the
- toplevel we see a frame pointer with value NULL which clearly is
- out of range. */
- break;
-
- array[cnt++] = (void *) stack->save_grps[8];
-
- stack = (struct layout *) stack->back_chain;
- }
-
- return cnt;
-}
-#else
-# define unwind_backtrace _Unwind_Backtrace
-# define unwind_getip _Unwind_GetIP
-#endif
-
-static _Unwind_Reason_Code
-backtrace_helper (struct _Unwind_Context *ctx, void *a)
-{
- struct trace_arg *arg = a;
-
- /* We are first called with address in the __backtrace function.
- Skip it. */
- if (arg->cnt != -1)
- arg->array[arg->cnt] = (void *) unwind_getip (ctx);
- if (++arg->cnt == arg->size)
- return _URC_END_OF_STACK;
- return _URC_NO_REASON;
-}
-
-int
-__backtrace (void **array, int size)
-{
- struct trace_arg arg = { .array = array, .size = size, .cnt = -1 };
-
- if (size <= 0)
- return 0;
-
-#ifdef SHARED
- __libc_once_define (static, once);
-
- __libc_once (once, init);
-
- if (unwind_backtrace == NULL)
- return __backchain_backtrace (array, size);
-#endif
-
- unwind_backtrace (backtrace_helper, &arg);
-
- return arg.cnt != -1 ? arg.cnt : 0;
-}
-
-weak_alias (__backtrace, backtrace)
-libc_hidden_def (__backtrace)
diff --git a/sysdeps/s390/s390-64/bcopy.S b/sysdeps/s390/s390-64/bcopy.S
deleted file mode 100644
index 235fc85568..0000000000
--- a/sysdeps/s390/s390-64/bcopy.S
+++ /dev/null
@@ -1,71 +0,0 @@
-/* bcopy -- copy a block from source to destination. 64 bit S/390 version.
- This file is part of the GNU C Library.
- Copyright (C) 2000-2017 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
-
- 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/>. */
-
-/* INPUT PARAMETERS
- %r2 = address of source
- %r3 = address of destination
- %r4 = number of bytes to copy. */
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
- .text
-ENTRY(__bcopy)
- ltgr %r1,%r4 # zero bcopy ?
- jz .L4
- clgr %r2,%r3 # check against destructive overlap
- jnl .L0
- algr %r1,%r2
- clgr %r1,%r3
- jh .L7
-.L0: aghi %r4,-1 # length - 1
- srlg %r1,%r4,8
- ltgr %r1,%r1 # < 256 bytes to move ?
- jz .L2
- cghi %r1,255 # > 1MB to move ?
- jh .L5
-.L1: mvc 0(256,%r3),0(%r2) # move in 256 byte chunks
- la %r2,256(%r2)
- la %r3,256(%r3)
- brctg %r1,.L1
-.L2: bras %r1,.L3 # setup base pointer for execute
- mvc 0(1,%r3),0(%r2) # instruction for execute
-.L3: ex %r4,0(%r1) # execute mvc with length ((%r4)&255)+1
-.L4: br %r14
- # data copies > 1MB are faster with mvcle.
-.L5: aghi %r4,1 # length + 1
- lgr %r5,%r4 # source length
- lgr %r4,%r2 # source address
- lgr %r2,%r3 # set destination
- lgr %r3,%r5 # destination length = source length
-.L6: mvcle %r2,%r4,0 # thats it, MVCLE is your friend
- jo .L6
- br %r14
-.L7: # destructive overlay, can not use mvcle
- lgr %r1,%r2 # bcopy is called with source,dest
- lgr %r2,%r3 # memmove with dest,source! Oh, well...
- lgr %r3,%r1
- jg HIDDEN_BUILTIN_JUMPTARGET(memmove)
-
-END(__bcopy)
-
-#ifndef NO_WEAK_ALIAS
-weak_alias (__bcopy, bcopy)
-#endif
-
diff --git a/sysdeps/s390/s390-64/bits/wordsize.h b/sysdeps/s390/s390-64/bits/wordsize.h
deleted file mode 100644
index 00e88b0628..0000000000
--- a/sysdeps/s390/s390-64/bits/wordsize.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Determine the wordsize from the preprocessor defines. */
-
-#if defined __s390x__
-# define __WORDSIZE 64
-#else
-# define __WORDSIZE 32
-# define __WORDSIZE32_SIZE_ULONG 1
-# define __WORDSIZE32_PTRDIFF_LONG 0
-#endif
-
-#define __WORDSIZE_TIME64_COMPAT32 0
diff --git a/sysdeps/s390/s390-64/bsd-_setjmp.S b/sysdeps/s390/s390-64/bsd-_setjmp.S
deleted file mode 100644
index 1417270201..0000000000
--- a/sysdeps/s390/s390-64/bsd-_setjmp.S
+++ /dev/null
@@ -1 +0,0 @@
-/* We don't need any code here since the setjmp.S file contains it. */
diff --git a/sysdeps/s390/s390-64/bsd-setjmp.S b/sysdeps/s390/s390-64/bsd-setjmp.S
deleted file mode 100644
index 1417270201..0000000000
--- a/sysdeps/s390/s390-64/bsd-setjmp.S
+++ /dev/null
@@ -1 +0,0 @@
-/* We don't need any code here since the setjmp.S file contains it. */
diff --git a/sysdeps/s390/s390-64/bzero.S b/sysdeps/s390/s390-64/bzero.S
deleted file mode 100644
index 119c20dcb9..0000000000
--- a/sysdeps/s390/s390-64/bzero.S
+++ /dev/null
@@ -1,41 +0,0 @@
-/* bzero -- set a block of memory to zero. 64 bit S/390 version.
- This file is part of the GNU C Library.
- Copyright (C) 2001-2017 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
-
- 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/>. */
-
-/* INPUT PARAMETERS
- %r2 = address of memory area
- %r3 = number of bytes to fill. */
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
- .text
-ENTRY(__bzero)
- ltgr %r3,%r3
- jz .L1
- sgr %r1,%r1 # set pad byte to zero
- sgr %r4,%r4 # no source for MVCLE, only a pad byte
- sgr %r5,%r5
-.L0: mvcle %r2,%r4,0(%r1) # thats it, MVCLE is your friend
- jo .L0
-.L1: br %r14
-END(__bzero)
-
-#ifndef NO_WEAK_ALIAS
-weak_alias (__bzero, bzero)
-#endif
diff --git a/sysdeps/s390/s390-64/crti.S b/sysdeps/s390/s390-64/crti.S
deleted file mode 100644
index c9583bb9c9..0000000000
--- a/sysdeps/s390/s390-64/crti.S
+++ /dev/null
@@ -1,91 +0,0 @@
-/* Special .init and .fini section support for 64 bit S/390.
- Copyright (C) 2001-2017 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
- 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.
-
- In addition to the permissions in the GNU Lesser General Public
- License, the Free Software Foundation gives you unlimited
- permission to link the compiled version of this file with other
- programs, and to distribute those programs without any restriction
- coming from the use of this file. (The GNU Lesser General Public
- License restrictions do apply in other respects; for example, they
- cover modification of the file, and distribution when not linked
- into another program.)
-
- Note that people who make modified versions of this file are not
- obligated to grant this special exception for their modified
- versions; it is their choice whether to do so. The GNU Lesser
- General Public License gives permission to release a modified
- version without this exception; this exception also makes it
- possible to release a modified version which carries forward this
- exception.
-
- 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/>. */
-
-/* crti.S puts a function prologue at the beginning of the .init and
- .fini sections and defines global symbols for those addresses, so
- they can be called as functions. The symbols _init and _fini are
- magic and cause the linker to emit DT_INIT and DT_FINI. */
-
-#include <libc-symbols.h>
-#include <sysdep.h>
-
-#ifndef PREINIT_FUNCTION
-# define PREINIT_FUNCTION __gmon_start__
-#endif
-
-#ifndef PREINIT_FUNCTION_WEAK
-# define PREINIT_FUNCTION_WEAK 1
-#endif
-
-#if PREINIT_FUNCTION_WEAK
- weak_extern (PREINIT_FUNCTION)
-#else
- .hidden PREINIT_FUNCTION
-#endif
-
- .section .init,"ax",@progbits
- .align 4
- .globl _init
- .type _init,@function
-_init:
- stmg %r6,%r15,48(%r15)
- lgr %r1,%r15
- aghi %r15,-160
- stg %r1,0(%r15)
- larl %r12,_GLOBAL_OFFSET_TABLE_
-#if PREINIT_FUNCTION_WEAK
- larl %r1,PREINIT_FUNCTION@GOTENT
- lg %r1,0(%r1)
- ltgr %r1,%r1
- je 1f
- basr %r14,%r1
-#else
- brasl %r14,PREINIT_FUNCTION
-#endif
- .align 4,0x07
-1:
-
- .section .fini,"ax",@progbits
- .align 4
- .globl _fini
- .type _fini,@function
-_fini:
- stmg %r6,%r15,48(%r15)
- lgr %r1,%r15
- aghi %r15,-160
- stg %r1,0(%r15)
- larl %r12,_GLOBAL_OFFSET_TABLE_
- .align 4,0x07
diff --git a/sysdeps/s390/s390-64/crtn.S b/sysdeps/s390/s390-64/crtn.S
deleted file mode 100644
index 2bb3211e57..0000000000
--- a/sysdeps/s390/s390-64/crtn.S
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Special .init and .fini section support for 64 bit S/390.
- Copyright (C) 2001-2017 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
- 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.
-
- In addition to the permissions in the GNU Lesser General Public
- License, the Free Software Foundation gives you unlimited
- permission to link the compiled version of this file with other
- programs, and to distribute those programs without any restriction
- coming from the use of this file. (The GNU Lesser General Public
- License restrictions do apply in other respects; for example, they
- cover modification of the file, and distribution when not linked
- into another program.)
-
- Note that people who make modified versions of this file are not
- obligated to grant this special exception for their modified
- versions; it is their choice whether to do so. The GNU Lesser
- General Public License gives permission to release a modified
- version without this exception; this exception also makes it
- possible to release a modified version which carries forward this
- exception.
-
- 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/>. */
-
-/* crtn.S puts function epilogues in the .init and .fini sections
- corresponding to the prologues in crti.S. */
-
- .section .init
- .align 4
- lg %r4,272(%r15)
- lmg %r6,%r15,208(%r15)
- br %r4
-
- .section .fini
- .align 4
- lg %r4,272(%r15)
- lmg %r6,%r15,208(%r15)
- br %r4
diff --git a/sysdeps/s390/s390-64/dl-machine.h b/sysdeps/s390/s390-64/dl-machine.h
deleted file mode 100644
index f2aeb1e78e..0000000000
--- a/sysdeps/s390/s390-64/dl-machine.h
+++ /dev/null
@@ -1,476 +0,0 @@
-/* Machine-dependent ELF dynamic relocation inline functions.
- 64 bit S/390 Version.
- Copyright (C) 2001-2017 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
- 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/>. */
-
-#ifndef dl_machine_h
-#define dl_machine_h
-
-#define ELF_MACHINE_NAME "s390x"
-
-#include <sys/param.h>
-#include <string.h>
-#include <link.h>
-#include <sysdeps/s390/dl-procinfo.h>
-#include <dl-irel.h>
-
-#define ELF_MACHINE_IRELATIVE R_390_IRELATIVE
-
-/* This is an older, now obsolete value. */
-#define EM_S390_OLD 0xA390
-
-/* Return nonzero iff E_MACHINE is compatible with the running host. */
-static inline int
-elf_machine_matches_host (const Elf64_Ehdr *ehdr)
-{
- return (ehdr->e_machine == EM_S390 || ehdr->e_machine == EM_S390_OLD)
- && ehdr->e_ident[EI_CLASS] == ELFCLASS64;
-}
-
-/* Return the link-time address of _DYNAMIC. Conveniently, this is the
- first element of the GOT. This must be inlined in a function which
- uses global data. */
-
-static inline Elf64_Addr
-elf_machine_dynamic (void)
-{
- register Elf64_Addr *got;
-
- __asm__ ( " larl %0,_GLOBAL_OFFSET_TABLE_\n"
- : "=&a" (got) : : "0" );
-
- return *got;
-}
-
-/* Return the run-time load address of the shared object. */
-static inline Elf64_Addr
-elf_machine_load_address (void)
-{
- Elf64_Addr addr;
-
- __asm__( " larl %0,_dl_start\n"
- " larl 1,_GLOBAL_OFFSET_TABLE_\n"
- " lghi 2,_dl_start@GOT\n"
- " slg %0,0(2,1)"
- : "=&d" (addr) : : "1", "2" );
- return addr;
-}
-
-/* Set up the loaded object described by L so its unrelocated PLT
- entries will jump to the on-demand fixup code in dl-runtime.c. */
-
-static inline int __attribute__ ((unused))
-elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
-{
- extern void _dl_runtime_resolve (Elf64_Word);
- extern void _dl_runtime_profile (Elf64_Word);
-#if defined HAVE_S390_VX_ASM_SUPPORT
- extern void _dl_runtime_resolve_vx (Elf64_Word);
- extern void _dl_runtime_profile_vx (Elf64_Word);
-#endif
-
- if (l->l_info[DT_JMPREL] && lazy)
- {
- /* The GOT entries for functions in the PLT have not yet been filled
- in. Their initial contents will arrange when called to push an
- offset into the .rela.plt section, push _GLOBAL_OFFSET_TABLE_[1],
- and then jump to _GLOBAL_OFFSET_TABLE[2]. */
- Elf64_Addr *got;
- got = (Elf64_Addr *) D_PTR (l, l_info[DT_PLTGOT]);
- /* If a library is prelinked but we have to relocate anyway,
- we have to be able to undo the prelinking of .got.plt.
- The prelinker saved us here address of .plt + 0x2e. */
- if (got[1])
- {
- l->l_mach.plt = got[1] + l->l_addr;
- l->l_mach.jmprel = (const Elf64_Rela *) D_PTR (l, l_info[DT_JMPREL]);
- }
- got[1] = (Elf64_Addr) l; /* Identify this shared object. */
-
- /* The got[2] entry contains the address of a function which gets
- called to get the address of a so far unresolved function and
- jump to it. The profiling extension of the dynamic linker allows
- to intercept the calls to collect information. In this case we
- don't store the address in the GOT so that all future calls also
- end in this function. */
- if (__glibc_unlikely (profile))
- {
-#if defined HAVE_S390_VX_ASM_SUPPORT
- if (GLRO(dl_hwcap) & HWCAP_S390_VX)
- got[2] = (Elf64_Addr) &_dl_runtime_profile_vx;
- else
- got[2] = (Elf64_Addr) &_dl_runtime_profile;
-#else
- got[2] = (Elf64_Addr) &_dl_runtime_profile;
-#endif
-
- if (GLRO(dl_profile) != NULL
- && _dl_name_match_p (GLRO(dl_profile), l))
- /* This is the object we are looking for. Say that we really
- want profiling and the timers are started. */
- GL(dl_profile_map) = l;
- }
- else
- {
- /* This function will get called to fix up the GOT entry indicated by
- the offset on the stack, and then jump to the resolved address. */
-#if defined HAVE_S390_VX_ASM_SUPPORT
- if (GLRO(dl_hwcap) & HWCAP_S390_VX)
- got[2] = (Elf64_Addr) &_dl_runtime_resolve_vx;
- else
- got[2] = (Elf64_Addr) &_dl_runtime_resolve;
-#else
- got[2] = (Elf64_Addr) &_dl_runtime_resolve;
-#endif
- }
- }
-
- return lazy;
-}
-
-/* Initial entry point code for the dynamic linker.
- The C function `_dl_start' is the real entry point;
- its return value is the user program's entry point. */
-
-#define RTLD_START __asm__ ("\n\
-.text\n\
-.align 4\n\
-.globl _start\n\
-.globl _dl_start_user\n\
-_start:\n\
- lgr %r2,%r15\n\
- # Alloc stack frame\n\
- aghi %r15,-160\n\
- # Set the back chain to zero\n\
- xc 0(8,%r15),0(%r15)\n\
- # Call _dl_start with %r2 pointing to arg on stack\n\
- brasl %r14,_dl_start # call _dl_start\n\
-_dl_start_user:\n\
- # Save the user entry point address in %r8.\n\
- lgr %r8,%r2\n\
- # Point %r12 at the GOT.\n\
- larl %r12,_GLOBAL_OFFSET_TABLE_\n\
- # See if we were run as a command with the executable file\n\
- # name as an extra leading argument.\n\
- lghi %r1,_dl_skip_args@GOT\n\
- lg %r1,0(%r1,%r12)\n\
- lgf %r1,0(%r1) # load _dl_skip_args\n\
- # Get the original argument count.\n\
- lg %r0,160(%r15)\n\
- # Subtract _dl_skip_args from it.\n\
- sgr %r0,%r1\n\
- # Adjust the stack pointer to skip _dl_skip_args words.\n\
- sllg %r1,%r1,3\n\
- agr %r15,%r1\n\
- # Set the back chain to zero again\n\
- xc 0(8,%r15),0(%r15)\n\
- # Store back the modified argument count.\n\
- stg %r0,160(%r15)\n\
- # The special initializer gets called with the stack just\n\
- # as the application's entry point will see it; it can\n\
- # switch stacks if it moves these contents over.\n\
-" RTLD_START_SPECIAL_INIT "\n\
- # Call the function to run the initializers.\n\
- # Load the parameters:\n\
- # (%r2, %r3, %r4, %r5) = (_dl_loaded, argc, argv, envp)\n\
- lghi %r2,_rtld_local@GOT\n\
- lg %r2,0(%r2,%r12)\n\
- lg %r2,0(%r2)\n\
- lg %r3,160(%r15)\n\
- la %r4,168(%r15)\n\
- lgr %r5,%r3\n\
- sllg %r5,%r5,3\n\
- la %r5,176(%r5,%r15)\n\
- brasl %r14,_dl_init@PLT\n\
- # Pass our finalizer function to the user in %r14, as per ELF ABI.\n\
- lghi %r14,_dl_fini@GOT\n\
- lg %r14,0(%r14,%r12)\n\
- # Free stack frame\n\
- aghi %r15,160\n\
- # Jump to the user's entry point (saved in %r8).\n\
- br %r8\n\
-");
-
-#ifndef RTLD_START_SPECIAL_INIT
-#define RTLD_START_SPECIAL_INIT /* nothing */
-#endif
-
-/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or
- TLS variable, so undefined references should not be allowed to
- define the value.
- ELF_RTYPE_CLASS_COPY iff TYPE should not be allowed to resolve to one
- of the main executable's symbols, as for a COPY reloc. */
-#define elf_machine_type_class(type) \
- ((((type) == R_390_JMP_SLOT || (type) == R_390_TLS_DTPMOD \
- || (type) == R_390_TLS_DTPOFF || (type) == R_390_TLS_TPOFF) \
- * ELF_RTYPE_CLASS_PLT) \
- | (((type) == R_390_COPY) * ELF_RTYPE_CLASS_COPY))
-
-/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */
-#define ELF_MACHINE_JMP_SLOT R_390_JMP_SLOT
-
-/* The 64 bit S/390 never uses Elf64_Rel relocations. */
-#define ELF_MACHINE_NO_REL 1
-#define ELF_MACHINE_NO_RELA 0
-
-/* We define an initialization functions. This is called very early in
- _dl_sysdep_start. */
-#define DL_PLATFORM_INIT dl_platform_init ()
-
-static inline void __attribute__ ((unused))
-dl_platform_init (void)
-{
- if (GLRO(dl_platform) != NULL && *GLRO(dl_platform) == '\0')
- /* Avoid an empty string which would disturb us. */
- GLRO(dl_platform) = NULL;
-}
-
-static inline Elf64_Addr
-elf_machine_fixup_plt (struct link_map *map, lookup_t t,
- const Elf64_Rela *reloc,
- Elf64_Addr *reloc_addr, Elf64_Addr value)
-{
- return *reloc_addr = value;
-}
-
-/* Return the final value of a plt relocation. */
-static inline Elf64_Addr
-elf_machine_plt_value (struct link_map *map, const Elf64_Rela *reloc,
- Elf64_Addr value)
-{
- return value;
-}
-
-/* Names of the architecture-specific auditing callback functions. */
-#define ARCH_LA_PLTENTER s390_64_gnu_pltenter
-#define ARCH_LA_PLTEXIT s390_64_gnu_pltexit
-
-#endif /* !dl_machine_h */
-
-#ifdef RESOLVE_MAP
-
-/* Perform the relocation specified by RELOC and SYM (which is fully resolved).
- MAP is the object containing the reloc. */
-
-auto inline void
-__attribute__ ((always_inline))
-elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
- const Elf64_Sym *sym, const struct r_found_version *version,
- void *const reloc_addr_arg, int skip_ifunc)
-{
- Elf64_Addr *const reloc_addr = reloc_addr_arg;
- const unsigned int r_type = ELF64_R_TYPE (reloc->r_info);
-
-#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC
- if (__glibc_unlikely (r_type == R_390_RELATIVE))
- {
-# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC
- /* This is defined in rtld.c, but nowhere in the static libc.a;
- make the reference weak so static programs can still link.
- This declaration cannot be done when compiling rtld.c
- (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the
- common defn for _dl_rtld_map, which is incompatible with a
- weak decl in the same file. */
-# ifndef SHARED
- weak_extern (GL(dl_rtld_map));
-# endif
- if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */
-# endif
- *reloc_addr = map->l_addr + reloc->r_addend;
- }
- else
-#endif
- if (__glibc_unlikely (r_type == R_390_NONE))
- return;
- else
- {
-#if !defined RTLD_BOOTSTRAP && !defined RESOLVE_CONFLICT_FIND_MAP
- /* Only needed for R_390_COPY below. */
- const Elf64_Sym *const refsym = sym;
-#endif
- struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type);
- Elf64_Addr value = sym == NULL ? 0 : sym_map->l_addr + sym->st_value;
-
- if (sym != NULL
- && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC,
- 0)
- && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1)
- && __builtin_expect (!skip_ifunc, 1))
- value = elf_ifunc_invoke (value);
-
- switch (r_type)
- {
- case R_390_IRELATIVE:
- value = map->l_addr + reloc->r_addend;
- if (__glibc_likely (!skip_ifunc))
- value = elf_ifunc_invoke (value);
- *reloc_addr = value;
- break;
- case R_390_GLOB_DAT:
- case R_390_JMP_SLOT:
- *reloc_addr = value + reloc->r_addend;
- break;
-
-#ifndef RESOLVE_CONFLICT_FIND_MAP
- case R_390_TLS_DTPMOD:
-# ifdef RTLD_BOOTSTRAP
- /* During startup the dynamic linker is always the module
- with index 1.
- XXX If this relocation is necessary move before RESOLVE
- call. */
- *reloc_addr = 1;
-# else
- /* Get the information from the link map returned by the
- resolv function. */
- if (sym_map != NULL)
- *reloc_addr = sym_map->l_tls_modid;
-# endif
- break;
- case R_390_TLS_DTPOFF:
-# ifndef RTLD_BOOTSTRAP
- /* During relocation all TLS symbols are defined and used.
- Therefore the offset is already correct. */
- if (sym != NULL)
- *reloc_addr = sym->st_value + reloc->r_addend;
-# endif
- break;
- case R_390_TLS_TPOFF:
- /* The offset is negative, forward from the thread pointer. */
-# ifdef RTLD_BOOTSTRAP
- *reloc_addr = sym->st_value + reloc->r_addend - map->l_tls_offset;
-# else
- /* We know the offset of the object the symbol is contained in.
- It is a negative value which will be added to the
- thread pointer. */
- if (sym != NULL)
- {
- CHECK_STATIC_TLS (map, sym_map);
- *reloc_addr = (sym->st_value + reloc->r_addend
- - sym_map->l_tls_offset);
- }
-#endif
- break;
-#endif /* use TLS */
-
-#ifndef RTLD_BOOTSTRAP
-# ifndef RESOLVE_CONFLICT_FIND_MAP
- /* Not needed for dl-conflict.c. */
- case R_390_COPY:
- if (sym == NULL)
- /* This can happen in trace mode if an object could not be
- found. */
- break;
- if (__builtin_expect (sym->st_size > refsym->st_size, 0)
- || (__builtin_expect (sym->st_size < refsym->st_size, 0)
- && __builtin_expect (GLRO(dl_verbose), 0)))
- {
- const char *strtab;
-
- strtab = (const char *) D_PTR (map,l_info[DT_STRTAB]);
- _dl_error_printf ("\
-%s: Symbol `%s' has different size in shared object, consider re-linking\n",
- RTLD_PROGNAME, strtab + refsym->st_name);
- }
- memcpy (reloc_addr_arg, (void *) value,
- MIN (sym->st_size, refsym->st_size));
- break;
-# endif
- case R_390_64:
- *reloc_addr = value + reloc->r_addend;
- break;
- case R_390_32:
- *(unsigned int *) reloc_addr = value + reloc->r_addend;
- break;
- case R_390_16:
- *(unsigned short *) reloc_addr = value + reloc->r_addend;
- break;
- case R_390_8:
- *(char *) reloc_addr = value + reloc->r_addend;
- break;
-# ifndef RESOLVE_CONFLICT_FIND_MAP
- case R_390_PC64:
- *reloc_addr = value +reloc->r_addend - (Elf64_Addr) reloc_addr;
- break;
- case R_390_PC32DBL:
- *(unsigned int *) reloc_addr = (unsigned int)
- ((int) (value + reloc->r_addend - (Elf64_Addr) reloc_addr) >> 1);
- break;
- case R_390_PC32:
- *(unsigned int *) reloc_addr =
- value + reloc->r_addend - (Elf64_Addr) reloc_addr;
- break;
- case R_390_PC16DBL:
- *(unsigned short *) reloc_addr = (unsigned short)
- ((short) (value + reloc->r_addend - (Elf64_Addr) reloc_addr) >> 1);
- break;
- case R_390_PC16:
- *(unsigned short *) reloc_addr =
- value + reloc->r_addend - (Elf64_Addr) reloc_addr;
- break;
- case R_390_NONE:
- break;
-# endif
-#endif
-#if !defined(RTLD_BOOTSTRAP) || defined(_NDEBUG)
- default:
- /* We add these checks in the version to relocate ld.so only
- if we are still debugging. */
- _dl_reloc_bad_type (map, r_type, 0);
- break;
-#endif
- }
- }
-}
-
-auto inline void
-__attribute__ ((always_inline))
-elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc,
- void *const reloc_addr_arg)
-{
- Elf64_Addr *const reloc_addr = reloc_addr_arg;
- *reloc_addr = l_addr + reloc->r_addend;
-}
-
-auto inline void
-__attribute__ ((always_inline))
-elf_machine_lazy_rel (struct link_map *map,
- Elf64_Addr l_addr, const Elf64_Rela *reloc,
- int skip_ifunc)
-{
- Elf64_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset);
- const unsigned int r_type = ELF64_R_TYPE (reloc->r_info);
- /* Check for unexpected PLT reloc type. */
- if (__glibc_likely (r_type == R_390_JMP_SLOT))
- {
- if (__builtin_expect (map->l_mach.plt, 0) == 0)
- *reloc_addr += l_addr;
- else
- *reloc_addr = map->l_mach.plt + (reloc - map->l_mach.jmprel) * 32;
- }
- else if (__glibc_likely (r_type == R_390_IRELATIVE))
- {
- Elf64_Addr value = map->l_addr + reloc->r_addend;
- if (__glibc_likely (!skip_ifunc))
- value = elf_ifunc_invoke (value);
- *reloc_addr = value;
- }
- else
- _dl_reloc_bad_type (map, r_type, 1);
-}
-
-#endif /* RESOLVE_MAP */
diff --git a/sysdeps/s390/s390-64/dl-trampoline.S b/sysdeps/s390/s390-64/dl-trampoline.S
deleted file mode 100644
index 2e3b141e30..0000000000
--- a/sysdeps/s390/s390-64/dl-trampoline.S
+++ /dev/null
@@ -1,33 +0,0 @@
-/* PLT trampolines. s390x version.
- Copyright (C) 2005-2017 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>
-
- .text
-/* Create variant of _dl_runtime_resolve/profile for machines before z13.
- No vector registers are saved/restored. */
-#include <dl-trampoline.h>
-
-#if defined HAVE_S390_VX_ASM_SUPPORT
-/* Create variant of _dl_runtime_resolve/profile for z13 and newer.
- The vector registers are saved/restored, too.*/
-# define _dl_runtime_resolve _dl_runtime_resolve_vx
-# define _dl_runtime_profile _dl_runtime_profile_vx
-# define RESTORE_VRS
-# include <dl-trampoline.h>
-#endif
diff --git a/sysdeps/s390/s390-64/dl-trampoline.h b/sysdeps/s390/s390-64/dl-trampoline.h
deleted file mode 100644
index e1f95e2ecd..0000000000
--- a/sysdeps/s390/s390-64/dl-trampoline.h
+++ /dev/null
@@ -1,225 +0,0 @@
-/* PLT trampolines. s390x version.
- Copyright (C) 2016-2017 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/>. */
-
-/* The PLT stubs will call _dl_runtime_resolve/_dl_runtime_profile
- * with the following linkage:
- * r2 - r6 : parameter registers
- * f0, f2, f4, f6 : floating point parameter registers
- * v24, v26, v28, v30, v25, v27, v29, v31 : vector parameter registers
- * 48(r15), 56(r15) : PLT arguments PLT1, PLT2
- * 160(r15) : additional stack parameters
- * The normal clobber rules for function calls apply:
- * r0 - r5 : call clobbered
- * r6 - r13 : call saved
- * r14 : return address (call clobbered)
- * r15 : stack pointer (call saved)
- * f0 - f7 : call clobbered
- * f8 - f15 : call saved
- * v0 - v7 : bytes 0-7 overlap with f0-f7: call clobbered
- bytes 8-15: call clobbered
- * v8 - v15 : bytes 0-7 overlap with f8-f15: call saved
- bytes 8-15: call clobbered
- * v16 - v31 : call clobbered
- */
-
- .globl _dl_runtime_resolve
- .type _dl_runtime_resolve, @function
- cfi_startproc
- .align 16
-_dl_runtime_resolve:
- stmg %r2,%r5,64(%r15) # save call-clobbered argument registers
- cfi_offset (r2, -96)
- cfi_offset (r3, -88)
- cfi_offset (r4, -80)
- cfi_offset (r5, -72)
- std %f0,104(%r15)
- cfi_offset (f0, -56)
- std %f2,112(%r15)
- cfi_offset (f2, -48)
- std %f4,120(%r15)
- cfi_offset (f4, -40)
- std %f6,128(%r15)
- cfi_offset (f6, -32)
- stg %r14,96(15)
- cfi_offset (r14, -64)
- lmg %r2,%r3,48(%r15) # load args for fixup saved by PLT
- lgr %r0,%r15
-#ifdef RESTORE_VRS
- aghi %r15,-288 # create stack frame
- cfi_adjust_cfa_offset (288)
- .machine push
- .machine "z13"
- vstm %v24,%v31,160(%r15)# store call-clobbered vector argument registers
- cfi_offset (v24, -288)
- cfi_offset (v25, -272)
- cfi_offset (v26, -256)
- cfi_offset (v27, -240)
- cfi_offset (v28, -224)
- cfi_offset (v29, -208)
- cfi_offset (v30, -192)
- cfi_offset (v31, -176)
- .machine pop
-#else
- aghi %r15,-160 # create stack frame
- cfi_adjust_cfa_offset (160)
-#endif
- stg %r0,0(%r15) # write backchain
- brasl %r14,_dl_fixup # call _dl_fixup
- lgr %r1,%r2 # function addr returned in r2
-#ifdef RESTORE_VRS
- .machine push
- .machine "z13"
- vlm %v24,%v31,160(%r15)# restore vector registers
- .machine pop
- aghi %r15,288 # remove stack frame
- cfi_adjust_cfa_offset (-288)
-#else
- aghi %r15,160 # remove stack frame
- cfi_adjust_cfa_offset (-160)
-#endif
- lg %r14,96(%r15) # restore registers
- ld %f0,104(%r15)
- ld %f2,112(%r15)
- ld %f4,120(%r15)
- ld %f6,128(%r15)
- lmg %r2,%r5,64(%r15)
- br %r1
- cfi_endproc
- .size _dl_runtime_resolve, .-_dl_runtime_resolve
-
-
-#ifndef PROF
- .globl _dl_runtime_profile
- .type _dl_runtime_profile, @function
- cfi_startproc
- .align 16
-_dl_runtime_profile:
- stg %r12,24(%r15) # r12 is used as backup of r15
- cfi_offset (r12, -136)
- stg %r14,32(%r15)
- cfi_offset (r14, -128)
- lgr %r12,%r15 # backup stack pointer
- cfi_def_cfa_register (12)
- aghi %r15,-360 # create stack frame:
- # 160 + sizeof(La_s390_64_regs)
- stg %r12,0(%r15) # save backchain
-
- stmg %r2,%r6,160(%r15) # save call-clobbered arg regs
- cfi_offset (r2, -360) # + r6 needed as arg for
- cfi_offset (r3, -352) # _dl_profile_fixup
- cfi_offset (r4, -344)
- cfi_offset (r5, -336)
- cfi_offset (r6, -328)
- std %f0,200(%r15)
- cfi_offset (f0, -320)
- std %f2,208(%r15)
- cfi_offset (f2, -312)
- std %f4,216(%r15)
- cfi_offset (f4, -304)
- std %f6,224(%r15)
- cfi_offset (f6, -296)
-#ifdef RESTORE_VRS
- .machine push
- .machine "z13"
- vstm %v24,%v31,232(%r15) # store call-clobbered vector arguments
- cfi_offset (v24, -288)
- cfi_offset (v25, -272)
- cfi_offset (v26, -256)
- cfi_offset (v27, -240)
- cfi_offset (v28, -224)
- cfi_offset (v29, -208)
- cfi_offset (v30, -192)
- cfi_offset (v31, -176)
- .machine pop
-#endif
- lmg %r2,%r3,48(%r12) # load arguments saved by PLT
- lgr %r4,%r14 # return address as third parameter
- la %r5,160(%r15) # pointer to struct La_s390_64_regs
- la %r6,40(%r12) # long int * framesize
- brasl %r14,_dl_profile_fixup # call resolver
- lgr %r1,%r2 # function addr returned in r2
- ld %f0,200(%r15) # restore call-clobbered arg fprs
- ld %f2,208(%r15)
- ld %f4,216(%r15)
- ld %f6,224(%r15)
-#ifdef RESTORE_VRS
- .machine push
- .machine "z13"
- vlm %v24,%v31,232(%r15) # restore call-clobbered arg vrs
- .machine pop
-#endif
- lg %r0,40(%r12) # load framesize
- ltgr %r0,%r0
- jnm 1f
-
- lmg %r2,%r6,160(%r15) # framesize < 0 means no pltexit call
- # so we can do a tail call without
- # copying the arg overflow area
- lgr %r15,%r12 # remove stack frame
- cfi_def_cfa_register (15)
- lg %r14,32(%r15) # restore registers
- lg %r12,24(%r15)
- br %r1 # tail-call to resolved function
-
- cfi_def_cfa_register (12)
-1: la %r4,160(%r15) # pointer to struct La_s390_64_regs
- stg %r4,64(%r12)
- jz 4f # framesize == 0 ?
- aghi %r0,7 # align framesize to 8
- nill %r0,0xfff8
- slgr %r15,%r0 # make room for framesize bytes
- stg %r12,0(%r15) # save backchain
- la %r2,160(%r15)
- la %r3,160(%r12)
- srlg %r0,%r0,3
-3: mvc 0(8,%r2),0(%r3) # copy additional parameters
- la %r2,8(%r2) # depending on framesize
- la %r3,8(%r3)
- brctg %r0,3b
-4: lmg %r2,%r6,0(%r4) # restore call-clobbered arg gprs
- basr %r14,%r1 # call resolved function
- stg %r2,72(%r12) # store return values r2, f0
- std %f0,80(%r12) # to struct La_s390_64_retval
-#ifdef RESTORE_VRS
- .machine push
- .machine "z13"
- vst %v24,88(%r12) # store return value v24
- .machine pop
-#endif
- lmg %r2,%r4,48(%r12) # r2, r3: load arguments saved by PLT
- # r4: pointer to struct La_s390_64_regs
- la %r5,72(%r12) # pointer to struct La_s390_64_retval
- brasl %r14,_dl_call_pltexit
-
- lgr %r15,%r12 # remove stack frame
- cfi_def_cfa_register (15)
- lg %r14,32(%r15) # restore registers
- lg %r12,24(%r15)
- lg %r2,72(%r15) # restore return values
- ld %f0,80(%r15)
-#ifdef RESTORE_VRS
- .machine push
- .machine "z13"
- vl %v24,88(%r15) # restore return value v24
- .machine pop
-#endif
- br %r14 # Jump back to caller
-
- cfi_endproc
- .size _dl_runtime_profile, .-_dl_runtime_profile
-#endif
diff --git a/sysdeps/s390/s390-64/memchr.S b/sysdeps/s390/s390-64/memchr.S
deleted file mode 100644
index 7deee3d6f3..0000000000
--- a/sysdeps/s390/s390-64/memchr.S
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Search a character in a block of memory. 64 bit S/390 version.
- Copyright (C) 2001-2017 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
- 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/>. */
-
-/* INPUT PARAMETERS
- %r2 = address to memory area
- %r3 = character to find
- %r4 = number of bytes to search. */
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
- .text
-ENTRY(memchr)
- lghi %r0,0xff
- ngr %r0,%r3
- lgr %r1,%r2
- la %r2,0(%r4,%r1)
-0: srst %r2,%r1
- jo 0b
- brc 13,1f
- slgr %r2,%r2
-1: br %r14
-END(memchr)
-libc_hidden_builtin_def (memchr)
diff --git a/sysdeps/s390/s390-64/memcmp.S b/sysdeps/s390/s390-64/memcmp.S
deleted file mode 100644
index cecffc39f9..0000000000
--- a/sysdeps/s390/s390-64/memcmp.S
+++ /dev/null
@@ -1,64 +0,0 @@
-/* memcmp - compare two memory blocks. 64 bit S/390 version.
- Copyright (C) 2012-2017 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>
-#include "asm-syntax.h"
-
-/* INPUT PARAMETERS
- %r2 = address of first memory area
- %r3 = address of second memory area
- %r4 = number of bytes to compare. */
-
- .text
-#ifdef USE_MULTIARCH
-ENTRY(__memcmp_default)
-#else
-ENTRY(memcmp)
-#endif
- .machine "z900"
- ltgr %r4,%r4
- je .L_Z900_4
- aghi %r4,-1
- srlg %r1,%r4,8
- ltgr %r1,%r1
- jne .L_Z900_12
-.L_Z900_3:
- larl %r1,.L_Z900_15
- ex %r4,0(%r1)
-.L_Z900_4:
- ipm %r2
- sllg %r2,%r2,34
- srag %r2,%r2,62
- br %r14
-.L_Z900_12:
- clc 0(256,%r3),0(%r2)
- jne .L_Z900_4
- la %r3,256(%r3)
- la %r2,256(%r2)
- brctg %r1,.L_Z900_12
- j .L_Z900_3
-.L_Z900_15:
- clc 0(1,%r3),0(%r2)
-#ifdef USE_MULTIARCH
-END(__memcmp_default)
-#else
-END(memcmp)
-libc_hidden_builtin_def (memcmp)
-weak_alias (memcmp, bcmp)
-#endif
diff --git a/sysdeps/s390/s390-64/memcpy.S b/sysdeps/s390/s390-64/memcpy.S
deleted file mode 100644
index 3df07b5e23..0000000000
--- a/sysdeps/s390/s390-64/memcpy.S
+++ /dev/null
@@ -1,88 +0,0 @@
-/* memcpy - copy a block from source to destination. 64 bit S/390 version.
- Copyright (C) 2012-2017 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>
-#include "asm-syntax.h"
-
-/* INPUT PARAMETERS
- %r2 = address of destination memory area
- %r3 = address of source memory area
- %r4 = number of bytes to copy. */
-
-
- .text
-ENTRY(__mempcpy)
- .machine "z900"
- lgr %r1,%r2 # Use as dest
- la %r2,0(%r4,%r2) # Return dest + n
- j .L_Z900_start
-END(__mempcpy)
-#ifndef USE_MULTIARCH
-libc_hidden_def (__mempcpy)
-weak_alias (__mempcpy, mempcpy)
-libc_hidden_builtin_def (mempcpy)
-#endif
-
-ENTRY(memcpy)
- .machine "z900"
- lgr %r1,%r2 # r1: Use as dest ; r2: Return dest
-.L_Z900_start:
- ltgr %r4,%r4
- je .L_Z900_4
- aghi %r4,-1
- srlg %r5,%r4,8
- ltgr %r5,%r5
- jne .L_Z900_13
-.L_Z900_3:
- larl %r5,.L_Z900_15
- ex %r4,0(%r5)
-.L_Z900_4:
- br %r14
-.L_Z900_13:
- cghi %r5,4096 # Switch to mvcle for copies >1MB
- jh __memcpy_mvcle
-.L_Z900_12:
- mvc 0(256,%r1),0(%r3)
- la %r1,256(%r1)
- la %r3,256(%r3)
- brctg %r5,.L_Z900_12
- j .L_Z900_3
-.L_Z900_15:
- mvc 0(1,%r1),0(%r3)
-END(memcpy)
-#ifndef USE_MULTIARCH
-libc_hidden_builtin_def (memcpy)
-#endif
-
-ENTRY(__memcpy_mvcle)
- # Using as standalone function will result in unexpected
- # results since the length field is incremented by 1 in order to
- # compensate the changes already done in the functions above.
- lgr %r0,%r2 # backup return dest [ + n ]
- aghi %r4,1 # length + 1
- lgr %r5,%r4 # source length
- lgr %r4,%r3 # source address
- lgr %r2,%r1 # destination address
- lgr %r3,%r5 # destination length = source length
-.L_MVCLE_1:
- mvcle %r2,%r4,0 # thats it, MVCLE is your friend
- jo .L_MVCLE_1
- lgr %r2,%r0 # return destination address
- br %r14
-END(__memcpy_mvcle)
diff --git a/sysdeps/s390/s390-64/memset.S b/sysdeps/s390/s390-64/memset.S
deleted file mode 100644
index e653f12134..0000000000
--- a/sysdeps/s390/s390-64/memset.S
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Set a block of memory to some byte value. 64 bit S/390 version.
- Copyright (C) 2001-2017 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
- 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>
-#include "asm-syntax.h"
-
-/* INPUT PARAMETERS
- %r2 = address of memory area
- %r3 = byte to fill memory with
- %r4 = number of bytes to fill. */
-
- .text
-
-#ifdef USE_MULTIARCH
-ENTRY(__memset_default)
-#else
-ENTRY(memset)
-#endif
- .machine "z900"
- ltgr %r4,%r4
- je .L_Z900_4
- stc %r3,0(%r2)
- cghi %r4,1
- lgr %r1,%r2
- je .L_Z900_4
- aghi %r4,-2
- srlg %r3,%r4,8
- ltgr %r3,%r3
- jne .L_Z900_14
-.L_Z900_3:
- larl %r3,.L_Z900_18
- ex %r4,0(%r3)
-.L_Z900_4:
- br %r14
-.L_Z900_14:
- mvc 1(256,%r1),0(%r1)
- la %r1,256(%r1)
- brctg %r3,.L_Z900_14
- j .L_Z900_3
-.L_Z900_18:
- mvc 1(1,%r1),0(%r1)
-#ifdef USE_MULTIARCH
-END(__memset_default)
-#else
-END(memset)
-libc_hidden_builtin_def (memset)
-#endif
diff --git a/sysdeps/s390/s390-64/multiarch/Makefile b/sysdeps/s390/s390-64/multiarch/Makefile
deleted file mode 100644
index 91053b5364..0000000000
--- a/sysdeps/s390/s390-64/multiarch/Makefile
+++ /dev/null
@@ -1,4 +0,0 @@
-ifeq ($(subdir),string)
-sysdep_routines += memset memset-s390x memcpy memcpy-s390x \
- memcmp memcmp-s390x
-endif
diff --git a/sysdeps/s390/s390-64/multiarch/memchr.c b/sysdeps/s390/s390-64/multiarch/memchr.c
deleted file mode 100644
index 808c3b837a..0000000000
--- a/sysdeps/s390/s390-64/multiarch/memchr.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Multiple versions of memchr.
- Copyright (C) 2015-2017 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/>. */
-
-/* This wrapper-file is needed, because otherwise file
- sysdeps/s390/s390-[32|64]/memchr.S will be used. */
-#include <sysdeps/s390/multiarch/memchr.c>
diff --git a/sysdeps/s390/s390-64/multiarch/memcmp-s390x.S b/sysdeps/s390/s390-64/multiarch/memcmp-s390x.S
deleted file mode 100644
index da956d2568..0000000000
--- a/sysdeps/s390/s390-64/multiarch/memcmp-s390x.S
+++ /dev/null
@@ -1,104 +0,0 @@
-/* CPU specific memcmp implementations. 64 bit S/390 version.
- Copyright (C) 2012-2017 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"
-#include "asm-syntax.h"
-
-/* INPUT PARAMETERS
- %r2 = address of first memory area
- %r3 = address of second memory area
- %r4 = number of bytes to compare. */
-
- .text
-
-#if IS_IN (libc)
-
-ENTRY(__memcmp_z196)
- .machine "z196"
- ltgr %r4,%r4
- je .L_Z196_4
- aghi %r4,-1
- srlg %r1,%r4,8
- ltgr %r1,%r1
- jne .L_Z196_2
-.L_Z196_3:
- exrl %r4,.L_Z196_14
-.L_Z196_4:
- ipm %r2
- sllg %r2,%r2,34
- srag %r2,%r2,62
- br %r14
-.L_Z196_17:
- la %r3,256(%r3)
- la %r2,256(%r2)
- aghi %r1,-1
- je .L_Z196_3
-.L_Z196_2:
- pfd 1,512(%r3)
- pfd 1,512(%r2)
- clc 0(256,%r3),0(%r2)
- je .L_Z196_17
- ipm %r2
- sllg %r2,%r2,34
- srag %r2,%r2,62
- br %r14
-.L_Z196_14:
- clc 0(1,%r3),0(%r2)
-END(__memcmp_z196)
-
-ENTRY(__memcmp_z10)
- .machine "z10"
- ltgr %r4,%r4
- je .L_Z10_4
- aghi %r4,-1
- srlg %r1,%r4,8
- cgijlh %r1,0,.L_Z10_12
-.L_Z10_3:
- exrl %r4,.L_Z10_15
-.L_Z10_4:
- ipm %r2
- sllg %r2,%r2,34
- srag %r2,%r2,62
- br %r14
-.L_Z10_12:
- pfd 1,512(%r3)
- pfd 1,512(%r2)
- clc 0(256,%r3),0(%r2)
- jne .L_Z10_4
- la %r3,256(%r3)
- la %r2,256(%r2)
- brctg %r1,.L_Z10_12
- j .L_Z10_3
-.L_Z10_15:
- clc 0(1,%r3),0(%r2)
-END(__memcmp_z10)
-
-#endif /* IS_IN (libc) */
-
-#include "../memcmp.S"
-
-#if !IS_IN (libc)
-.globl memcmp
-.set memcmp,__memcmp_default
-.weak bcmp
-.set bcmp,__memcmp_default
-#elif defined SHARED && IS_IN (libc)
-.globl __GI_memcmp
-.set __GI_memcmp,__memcmp_default
-#endif
diff --git a/sysdeps/s390/s390-64/multiarch/memcmp.c b/sysdeps/s390/s390-64/multiarch/memcmp.c
deleted file mode 100644
index 2d8d8f4d50..0000000000
--- a/sysdeps/s390/s390-64/multiarch/memcmp.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Multiple versions of memcmp.
- Copyright (C) 2015-2017 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/>. */
-
-#if IS_IN (libc)
-# define memcmp __redirect_memcmp
-# include <string.h>
-# undef memcmp
-# include <ifunc-resolve.h>
-
-s390_libc_ifunc (__redirect_memcmp, __memcmp, memcmp)
-weak_alias (memcmp, bcmp);
-#endif
diff --git a/sysdeps/s390/s390-64/multiarch/memcpy-s390x.S b/sysdeps/s390/s390-64/multiarch/memcpy-s390x.S
deleted file mode 100644
index a9ffa9cc98..0000000000
--- a/sysdeps/s390/s390-64/multiarch/memcpy-s390x.S
+++ /dev/null
@@ -1,122 +0,0 @@
-/* CPU specific memcpy implementations. 64 bit S/390 version.
- Copyright (C) 2012-2017 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"
-#include "asm-syntax.h"
-
-/* INPUT PARAMETERS
- %r2 = target operands address
- %r3 = source operands address
- %r4 = number of bytes to copy. */
-
- .text
-
-#if defined SHARED && IS_IN (libc)
-
-ENTRY(____mempcpy_z196)
- .machine "z196"
- lgr %r1,%r2 # Use as dest
- la %r2,0(%r4,%r2) # Return dest + n
- j .L_Z196_start
-END(____mempcpy_z196)
-
-ENTRY(__memcpy_z196)
- .machine "z196"
- lgr %r1,%r2 # r1: Use as dest ; r2: Return dest
-.L_Z196_start:
- ltgr %r4,%r4
- je .L_Z196_4
- aghi %r4,-1
- srlg %r5,%r4,8
- ltgr %r5,%r5
- jne .L_Z196_5
-.L_Z196_3:
- exrl %r4,.L_Z196_14
-.L_Z196_4:
- br %r14
-.L_Z196_5:
- cgfi %r5,262144 # Switch to mvcle for copies >64MB
- jh __memcpy_mvcle
-.L_Z196_2:
- pfd 1,768(%r3)
- pfd 2,768(%r1)
- mvc 0(256,%r1),0(%r3)
- aghi %r5,-1
- la %r1,256(%r1)
- la %r3,256(%r3)
- jne .L_Z196_2
- j .L_Z196_3
-.L_Z196_14:
- mvc 0(1,%r1),0(%r3)
-END(__memcpy_z196)
-
-ENTRY(____mempcpy_z10)
- .machine "z10"
- lgr %r1,%r2 # Use as dest
- la %r2,0(%r4,%r2) # Return dest + n
- j .L_Z10_start
-END(____mempcpy_z10)
-
-ENTRY(__memcpy_z10)
- .machine "z10"
- lgr %r1,%r2 # r1: Use as dest ; r2: Return dest
-.L_Z10_start:
- cgije %r4,0,.L_Z10_4
- aghi %r4,-1
- srlg %r5,%r4,8
- cgijlh %r5,0,.L_Z10_13
-.L_Z10_3:
- exrl %r4,.L_Z10_15
-.L_Z10_4:
- br %r14
-.L_Z10_13:
- cgfi %r5,65535 # Switch to mvcle for copies >16MB
- jh __memcpy_mvcle
-.L_Z10_12:
- pfd 1,768(%r3)
- pfd 2,768(%r1)
- mvc 0(256,%r1),0(%r3)
- la %r1,256(%r1)
- la %r3,256(%r3)
- brctg %r5,.L_Z10_12
- j .L_Z10_3
-.L_Z10_15:
- mvc 0(1,%r1),0(%r3)
-END(__memcpy_z10)
-
-# define __mempcpy ____mempcpy_default
-#endif /* SHARED && IS_IN (libc) */
-
-#define memcpy __memcpy_default
-#include "../memcpy.S"
-#undef memcpy
-
-#if defined SHARED && IS_IN (libc)
-.globl __GI_memcpy
-.set __GI_memcpy,__memcpy_default
-.globl __GI_mempcpy
-.set __GI_mempcpy,____mempcpy_default
-.globl __GI___mempcpy
-.set __GI___mempcpy,____mempcpy_default
-#else
-.globl memcpy
-.set memcpy,__memcpy_default
-.weak mempcpy
-.set mempcpy,__mempcpy
-#endif
diff --git a/sysdeps/s390/s390-64/multiarch/memcpy.c b/sysdeps/s390/s390-64/multiarch/memcpy.c
deleted file mode 100644
index 4b8e546fb0..0000000000
--- a/sysdeps/s390/s390-64/multiarch/memcpy.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Multiple versions of memcpy.
- Copyright (C) 2015-2017 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/>. */
-
-/* In the static lib memcpy is needed before the reloc is resolved. */
-#if defined SHARED && IS_IN (libc)
-# define memcpy __redirect_memcpy
-# include <string.h>
-# undef memcpy
-# include <ifunc-resolve.h>
-
-s390_libc_ifunc (__redirect_memcpy, __memcpy, memcpy)
-#endif
diff --git a/sysdeps/s390/s390-64/multiarch/memset-s390x.S b/sysdeps/s390/s390-64/multiarch/memset-s390x.S
deleted file mode 100644
index ca0c4326b1..0000000000
--- a/sysdeps/s390/s390-64/multiarch/memset-s390x.S
+++ /dev/null
@@ -1,112 +0,0 @@
-/* Set a block of memory to some byte value. 64 bit S/390 version.
- Copyright (C) 2012-2017 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"
-#include "asm-syntax.h"
-
-/* INPUT PARAMETERS
- %r2 = address of memory area
- %r3 = byte to fill memory with
- %r4 = number of bytes to fill. */
-
- .text
-
-#if IS_IN (libc)
-
-ENTRY(__memset_z196)
- .machine "z196"
- ltgr %r4,%r4
- je .L_Z196_4
- stc %r3,0(%r2)
- lgr %r1,%r2
- cghi %r4,1
- je .L_Z196_4
- aghi %r4,-2
- srlg %r5,%r4,8
- ltgr %r5,%r5
- jne .L_Z196_1
-.L_Z196_3:
- exrl %r4,.L_Z196_17
-.L_Z196_4:
- br %r14
-.L_Z196_1:
- cgfi %r5,1048576
- jh __memset_mvcle # Switch to mvcle for >256MB
-.L_Z196_2:
- pfd 2,1024(%r1)
- mvc 1(256,%r1),0(%r1)
- aghi %r5,-1
- la %r1,256(%r1)
- jne .L_Z196_2
- j .L_Z196_3
-.L_Z196_17:
- mvc 1(1,%r1),0(%r1)
-END(__memset_z196)
-
-ENTRY(__memset_z10)
- .machine "z10"
- cgije %r4,0,.L_Z10_4
- stc %r3,0(%r2)
- lgr %r1,%r2
- cgije %r4,1,.L_Z10_4
- aghi %r4,-2
- srlg %r5,%r4,8
- cgijlh %r5,0,.L_Z10_15
-.L_Z10_3:
- exrl %r4,.L_Z10_18
-.L_Z10_4:
- br %r14
-.L_Z10_15:
- cgfi %r5,163840 # Switch to mvcle for >40MB
- jh __memset_mvcle
-.L_Z10_14:
- pfd 2,1024(%r1)
- mvc 1(256,%r1),0(%r1)
- la %r1,256(%r1)
- brctg %r5,.L_Z10_14
- j .L_Z10_3
-.L_Z10_18:
- mvc 1(1,%r1),0(%r1)
-END(__memset_z10)
-
-ENTRY(__memset_mvcle)
- aghi %r4,2 # take back the change done by the caller
- lgr %r0,%r2 # save source address
- lgr %r1,%r3 # move pad byte to R1
- lgr %r3,%r4 # move length to r3
- sgr %r4,%r4 # no source for MVCLE, only a pad byte
- sgr %r5,%r5
-.L0: mvcle %r2,%r4,0(%r1) # thats it, MVCLE is your friend
- jo .L0
- lgr %r2,%r0 # return value is source address
-.L1:
- br %r14
-END(__memset_mvcle)
-
-#endif /* IS_IN (libc) */
-
-#include "../memset.S"
-
-#if !IS_IN (libc)
-.globl memset
-.set memset,__memset_default
-#elif defined SHARED && IS_IN (libc)
-.globl __GI_memset
-.set __GI_memset,__memset_default
-#endif
diff --git a/sysdeps/s390/s390-64/multiarch/memset.c b/sysdeps/s390/s390-64/multiarch/memset.c
deleted file mode 100644
index 421c0854a0..0000000000
--- a/sysdeps/s390/s390-64/multiarch/memset.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Multiple versions of memset.
- Copyright (C) 2015-2017 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/>. */
-
-#if IS_IN (libc)
-# define memset __redirect_memset
-# include <string.h>
-# undef memset
-# include <ifunc-resolve.h>
-
-s390_libc_ifunc (__redirect_memset, __memset, memset)
-#endif
diff --git a/sysdeps/s390/s390-64/multiarch/strcmp.c b/sysdeps/s390/s390-64/multiarch/strcmp.c
deleted file mode 100644
index 6a20a304cc..0000000000
--- a/sysdeps/s390/s390-64/multiarch/strcmp.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Multiple versions of strcmp.
- Copyright (C) 2015-2017 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/>. */
-
-/* This wrapper-file is needed, because otherwise file
- sysdeps/s390/s390-[32|64]/strcmp.S will be used. */
-#include <sysdeps/s390/multiarch/strcmp.c>
diff --git a/sysdeps/s390/s390-64/multiarch/strcpy.c b/sysdeps/s390/s390-64/multiarch/strcpy.c
deleted file mode 100644
index 7f380a471d..0000000000
--- a/sysdeps/s390/s390-64/multiarch/strcpy.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Multiple versions of strcpy.
- Copyright (C) 2015-2017 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/>. */
-
-/* This wrapper-file is needed, because otherwise file
- sysdeps/s390/s390-[32|64]/strcpy.S will be used. */
-#include <sysdeps/s390/multiarch/strcpy.c>
diff --git a/sysdeps/s390/s390-64/multiarch/strncpy.c b/sysdeps/s390/s390-64/multiarch/strncpy.c
deleted file mode 100644
index 15dacec974..0000000000
--- a/sysdeps/s390/s390-64/multiarch/strncpy.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Multiple versions of strncpy.
- Copyright (C) 2015-2017 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/>. */
-
-/* This wrapper-file is needed, because otherwise file
- sysdeps/s390/s390-[32|64]/strncpy.S will be used. */
-#include <sysdeps/s390/multiarch/strncpy.c>
diff --git a/sysdeps/s390/s390-64/s390x-mcount.S b/sysdeps/s390/s390-64/s390x-mcount.S
deleted file mode 100644
index 510834aa05..0000000000
--- a/sysdeps/s390/s390-64/s390x-mcount.S
+++ /dev/null
@@ -1,77 +0,0 @@
-/* 64 bit S/390-specific implementation of profiling support.
- Copyright (C) 2001-2017 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com)
- 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>
-
-/* How profiling works on 64 bit S/390:
- On the start of each function _mcount is called with the address of a
- data word in %r1 (initialized to 0, used for counting). The compiler
- with the option -p generates code of the form:
-
- STM 6,15,24(15)
- BRAS 13,.LTN0_0
- .LT0_0:
- .LC13: .long .LP0
- .data
- .align 4
- .LP0: .long 0
- .text
- # function profiler
- stg 14,4(15)
- lg 1,.LC13-.LT0_0(13)
- brasl 14,_mcount
- lg 14,4(15)
-
- The _mcount implementation now has to call __mcount_internal with the
- address of .LP0 as first parameter and the return address as second
- parameter. &.LP0 was loaded to %r1 and the return address is in %r14.
- _mcount may not modify any register. */
-
- .globl C_SYMBOL_NAME(_mcount)
- .type C_SYMBOL_NAME(_mcount), @function
- cfi_startproc
- .align ALIGNARG(4)
-C_LABEL(_mcount)
- /* Save the caller-clobbered registers. */
- aghi %r15,-224
- cfi_adjust_cfa_offset (224)
- stmg %r14,%r5,160(%r15)
- cfi_offset (r14, 0)
- cfi_offset (r15, 8)
- lg %r2,232(%r15) # callers address = first parameter
- la %r2,0(%r2) # clear bit 0
- la %r3,0(%r14) # callees address = second parameter
-
-#ifdef PIC
- brasl %r14,__mcount_internal@PLT
-#else
- brasl %r14,__mcount_internal
-#endif
-
- /* Pop the saved registers. Please note that `mcount' has no
- return value. */
- lmg %r14,%r5,160(%r15)
- aghi %r15,224
- cfi_adjust_cfa_offset (-224)
- br %r14
- cfi_endproc
- ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(_mcount))
-
-#undef mcount
-weak_alias (_mcount, mcount)
diff --git a/sysdeps/s390/s390-64/setjmp.S b/sysdeps/s390/s390-64/setjmp.S
deleted file mode 100644
index ac9c878346..0000000000
--- a/sysdeps/s390/s390-64/setjmp.S
+++ /dev/null
@@ -1,118 +0,0 @@
-/* setjmp for 64 bit S/390, ELF version.
- Copyright (C) 2001-2017 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
- 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 _ASM
-#define _SETJMP_H
-#include <bits/setjmp.h>
-#include <shlib-compat.h>
-#include <stap-probe.h>
-
-#if !IS_IN (rtld) && defined SHARED \
- && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20)
-# define NEED_COMPAT_SYMBOLS 1
-/* We need a unique name in case of symbol versioning. */
-# define setjmp __v1setjmp
-# define _setjmp __v1_setjmp
-# define __sigsetjmp __v1__sigsetjmp
-#else
-# define NEED_COMPAT_SYMBOLS 0
-#endif
-
- /* We include the BSD entry points here as well. */
-ENTRY (setjmp)
- lghi %r3,1 /* Second argument of one. */
- j .Linternal_sigsetjmp /* Branch relativ to __sigsetjmp. */
-END (setjmp)
-
- /* Binary compatibility entry point. */
-ENTRY(_setjmp)
- slgr %r3,%r3 /* Second argument of zero. */
- j .Linternal_sigsetjmp /* Branch relativ to __sigsetjmp. */
-END (_setjmp)
-#if NEED_COMPAT_SYMBOLS
-strong_alias (_setjmp, __GI__setjmp)
-#else
-libc_hidden_def (_setjmp)
-#endif
-
-ENTRY(__setjmp)
- slgr %r3,%r3 /* Second argument of zero. */
- j .Linternal_sigsetjmp /* Branch relativ to __sigsetjmp. */
-END (__setjmp)
-
-ENTRY(__sigsetjmp)
-.Linternal_sigsetjmp:
- /* setjmp probe expects sig/setjmp first argument (8@%r2), second
- argument (-8@%r3) and target address (8@%r14). */
- LIBC_PROBE (setjmp, 3, 8@%r2, -4@%r3, 8@%r14)
-#ifdef PTR_MANGLE
- stmg %r6,%r13,0(%r2) /* Store registers in jmp_buf. */
- lgr %r4,%r14
- lgr %r5,%r15
- PTR_MANGLE (%r4, %r1)
- PTR_MANGLE2 (%r5, %r1)
- stmg %r4,%r5,64(%r2)
-#else
- stmg %r6,%r15,0(%r2) /* Store registers in jmp_buf. */
-#endif
- std %f8,80(%r2)
- std %f9,88(%r2)
- std %f10,96(%r2)
- std %f11,104(%r2)
- std %f12,112(%r2)
- std %f13,120(%r2)
- std %f14,128(%r2)
- std %f15,136(%r2)
-#if IS_IN (rtld)
- /* In ld.so we never save the signal mask. */
- lghi %r2,0
- br %r14
-#elif defined PIC
- jg __sigjmp_save@PLT /* Branch to PLT of __sigsetjmp. */
-#else
- jg __sigjmp_save
-#endif
-END (__sigsetjmp)
-#if NEED_COMPAT_SYMBOLS
-strong_alias (__sigsetjmp, __GI___sigsetjmp)
-#else
-libc_hidden_def (__sigsetjmp)
-#endif
-
-#if NEED_COMPAT_SYMBOLS
-/* In glibc release 2.19 new versions of setjmp-functions were introduced,
- but were reverted before 2.20. Thus both versions are the same function. */
-
-# undef setjmp
-# undef _setjmp
-# undef __sigsetjmp
-
-strong_alias (__v1setjmp, __v2setjmp);
-versioned_symbol (libc, __v1setjmp, setjmp, GLIBC_2_0);
-compat_symbol (libc, __v2setjmp, setjmp, GLIBC_2_19);
-
-strong_alias (__v1_setjmp, __v2_setjmp);
-versioned_symbol (libc, __v1_setjmp, _setjmp, GLIBC_2_0);
-compat_symbol (libc, __v2_setjmp, _setjmp, GLIBC_2_19);
-
-strong_alias (__v1__sigsetjmp, __v2__sigsetjmp);
-versioned_symbol (libc, __v1__sigsetjmp, __sigsetjmp, GLIBC_2_0);
-compat_symbol (libc, __v2__sigsetjmp, __sigsetjmp, GLIBC_2_19);
-#endif /* NEED_COMPAT_SYMBOLS */
diff --git a/sysdeps/s390/s390-64/stackguard-macros.h b/sysdeps/s390/s390-64/stackguard-macros.h
deleted file mode 100644
index 2c97d3824f..0000000000
--- a/sysdeps/s390/s390-64/stackguard-macros.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <stdint.h>
-
-#define STACK_CHK_GUARD \
- ({ uintptr_t x; __asm__ ("ear %0,%%a0; sllg %0,%0,32; ear %0,%%a1; lg %0,0x28(%0)" : "=a" (x)); x; })
-
-/* On s390/s390x there is no unique pointer guard, instead we use the
- same value as the stack guard. */
-#define POINTER_CHK_GUARD \
- ({ \
- uintptr_t x; \
- __asm__ ("ear %0,%%a0;" \
- "sllg %0,%0,32;" \
- "ear %0,%%a1;" \
- "lg %0,%1(%0)" \
- : "=a" (x) \
- : "i" (offsetof (tcbhead_t, stack_guard))); \
- x; \
- })
diff --git a/sysdeps/s390/s390-64/start.S b/sysdeps/s390/s390-64/start.S
deleted file mode 100644
index d8e65450d8..0000000000
--- a/sysdeps/s390/s390-64/start.S
+++ /dev/null
@@ -1,100 +0,0 @@
-/* Startup code compliant to the 64 bit S/390 ELF ABI.
- Copyright (C) 2001-2017 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
- 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.
-
- In addition to the permissions in the GNU Lesser General Public
- License, the Free Software Foundation gives you unlimited
- permission to link the compiled version of this file with other
- programs, and to distribute those programs without any restriction
- coming from the use of this file. (The GNU Lesser General Public
- License restrictions do apply in other respects; for example, they
- cover modification of the file, and distribution when not linked
- into another program.)
-
- Note that people who make modified versions of this file are not
- obligated to grant this special exception for their modified
- versions; it is their choice whether to do so. The GNU Lesser
- General Public License gives permission to release a modified
- version without this exception; this exception also makes it
- possible to release a modified version which carries forward this
- exception.
-
- 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/>. */
-
-/*
- This is the canonical entry point, usually the first thing in the text
- segment. Most registers' values are unspecified, except for:
-
- %r14 Contains a function pointer to be registered with `atexit'.
- This is how the dynamic linker arranges to have DT_FINI
- functions called for shared libraries that have been loaded
- before this code runs.
-
- %r15 The stack contains the arguments and environment:
- 0(%r15) argc
- 8(%r15) argv[0]
- ...
- (8*argc)(%r15) NULL
- (8*(argc+1))(%r15) envp[0]
- ...
- NULL
-*/
-
- .text
- .globl _start
- .type _start,@function
-_start:
- /* Load argc and argv from stack. */
- la %r4,8(%r15) # get argv
- lg %r3,0(%r15) # get argc
-
- /* Align the stack to a double word boundary. */
- lghi %r0,-16
- ngr %r15,%r0
-
- /* Setup a stack frame and a parameter area. */
- aghi %r15,-176 # make room on stack
- xc 0(8,%r15),0(%r15) # clear back-chain
-
- /* Set up arguments for __libc_start_main:
- main, argc, argv, envp, _init, _fini, rtld_fini, stack_end
- Note that envp will be determined later in __libc_start_main.
- */
- stmg %r14,%r15,160(%r15) # store rtld_fini/stack_end to parameter area
- la %r7,160(%r15)
- larl %r6,__libc_csu_fini # load pointer to __libc_csu_fini
- larl %r5,__libc_csu_init # load pointer to __libc_csu_init
-
- /* Ok, now branch to the libc main routine. */
-#ifdef PIC
- larl %r2,main@GOTENT # load pointer to main
- lg %r2,0(%r2)
- brasl %r14,__libc_start_main@plt
-#else
- larl %r2,main # load pointer to main
- brasl %r14,__libc_start_main
-#endif
-
- /* Crash if __libc_start_main returns. */
- .word 0
-
- /* Define a symbol for the first piece of initialized data. */
- .data
- .globl __data_start
-__data_start:
- .long 0
- .weak data_start
- data_start = __data_start
diff --git a/sysdeps/s390/s390-64/strcmp.S b/sysdeps/s390/s390-64/strcmp.S
deleted file mode 100644
index 640493b4df..0000000000
--- a/sysdeps/s390/s390-64/strcmp.S
+++ /dev/null
@@ -1,41 +0,0 @@
-/* strcmp - compare two string. 64 bit S/390 version.
- This file is part of the GNU C Library.
- Copyright (C) 2001-2017 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
-
- 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/>. */
-
-/* INPUT PARAMETERS
- %r2 = address of string 1
- %r3 = address of string 2. */
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
- .text
-ENTRY(strcmp)
- slr %r0,%r0
-0: clst %r2,%r3
- jo 0b
- jp 1f
- jm 2f
- slgr %r2,%r2
- br %r14
-1: lghi %r2,1
- br %r14
-2: lghi %r2,-1
- br %r14
-END(strcmp)
-libc_hidden_builtin_def (strcmp)
diff --git a/sysdeps/s390/s390-64/strcpy.S b/sysdeps/s390/s390-64/strcpy.S
deleted file mode 100644
index fee1d3ede6..0000000000
--- a/sysdeps/s390/s390-64/strcpy.S
+++ /dev/null
@@ -1,35 +0,0 @@
-/* strcpy - copy a string from source to destination. 64 bit S/390 version.
- Copyright (C) 2001-2017 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
- 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/>. */
-
-/* INPUT PARAMETERS
- %r2 = address of destination
- %r3 = address of source. */
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
- .text
-ENTRY(strcpy)
- slgr %r0,%r0
- lgr %r1,%r2
-0: mvst %r1,%r3
- jo 0b
- br %r14
-END(strcpy)
-libc_hidden_builtin_def (strcpy)
diff --git a/sysdeps/s390/s390-64/strncpy.S b/sysdeps/s390/s390-64/strncpy.S
deleted file mode 100644
index 80aee312e4..0000000000
--- a/sysdeps/s390/s390-64/strncpy.S
+++ /dev/null
@@ -1,90 +0,0 @@
-/* strncpy - copy at most n characters from a string from source to
- destination. 64 bit S/390 version
- Copyright (C) 2001-2017 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
- 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/>. */
-
-/* INPUT PARAMETERS
- %r2 = address of destination (dst)
- %r3 = address of source (src)
- %r4 = max of bytes to copy. */
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-ENTRY(strncpy)
- .text
- stg %r2,48(%r15) # save dst pointer
- slgr %r2,%r3 # %r3 points to src, %r2+%r3 to dst
- lghi %r1,7
- ngr %r1,%r4 # last 3 bits of # bytes
- srlg %r4,%r4,3
- ltgr %r4,%r4 # less than 8 bytes to copy ?
- jz .L1
- bras %r5,.L0 # enter loop & load address of a 0
- .long 0
-.L0: icmh %r0,8,0(%r3) # first byte
- jz .L3
- icmh %r0,4,1(%r3) # second byte
- jz .L4
- icmh %r0,2,2(%r3) # third byte
- jz .L5
- icmh %r0,1,3(%r3) # fourth byte
- jz .L6
- icm %r0,8,4(%r3) # fifth byte
- jz .L7
- icm %r0,4,5(%r3) # sixth byte
- jz .L8
- icm %r0,2,6(%r3) # seventh byte
- jz .L9
- icm %r0,1,7(%r3) # eigth byte
- jz .L10
- stg %r0,0(%r2,%r3) # store all eight to dest.
- la %r3,8(%r3)
- brct %r4,.L0
-.L1: ltgr %r1,%r1
- jz .Lexit
-.L2: icm %r0,1,0(%r3)
- stc %r0,0(%r2,%r3)
- la %r3,1(%r3)
- jz .L11
- brct %r1,.L2
- j .Lexit
-.L3: icmh %r0,4,0(%r5)
-.L4: icmh %r0,2,0(%r5)
-.L5: icmh %r0,1,0(%r5)
-.L6: icm %r0,8,0(%r5)
-.L7: icm %r0,4,0(%r5)
-.L8: icm %r0,2,0(%r5)
-.L9: icm %r0,1,0(%r5)
-.L10: stg %r0,0(%r2,%r3)
- la %r3,8(%r3)
- aghi %r4,-1
- j .L12
-.L11: aghi %r1,-1
-.L12: sllg %r4,%r4,3
- algr %r4,%r1
- algr %r2,%r3 # start of dst area to be zeroed
- lgr %r3,%r4
- slgr %r4,%r4
- slgr %r5,%r5
-.L13: mvcle %r2,%r4,0 # pad dst with zeroes
- jo .L13
-.Lexit: lg %r2,48(%r15) # return dst pointer
- br %r14
-END(strncpy)
-libc_hidden_builtin_def (strncpy)
diff --git a/sysdeps/s390/s390-64/sub_n.S b/sysdeps/s390/s390-64/sub_n.S
deleted file mode 100644
index dc6572ca36..0000000000
--- a/sysdeps/s390/s390-64/sub_n.S
+++ /dev/null
@@ -1,60 +0,0 @@
-/* __mpn_sub_n -- Add two limb vectors of the same length > 0 and store
- sum in a third limb vector. 64 bit S/390 version.
- Copyright (C) 2001-2017 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
- This file is part of the GNU MP 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; see the file COPYING.LIB. If not,
- see <http://www.gnu.org/licenses/>. */
-
-/* INPUT PARAMETERS
- %r2 = res_ptr
- %r3 = s1_ptr
- %r4 = s2_ptr
- %r5 = size. */
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-ENTRY(__mpn_sub_n)
- stg %r6,48(%r15) # save register 6
- cfi_offset (%r6,-112)
- sgr %r1,%r1
- lghi %r0,1 # cannot use ahi to add carry, use slr
-.L0: lg %r6,0(%r1,%r3) # .L0 -> no carry from last sub
- slg %r6,0(%r1,%r4)
- stg %r6,0(%r1,%r2)
- la %r1,8(%r1)
- brc 4,.L3
-.L1: brct %r5,.L0
- slgr %r2,%r2 # no last carry to return
- j .Lexit
-.L2: lg %r6,0(%r1,%r3) # .L2 -> carry from last sub
- slg %r6,0(%r1,%r4)
- brc 4,.L4
- slgr %r6,%r0 # no carry yet, add carry from last sub
- stg %r6,0(%r1,%r2)
- la %r1,8(%r1)
- brc 11,.L1 # new carry ?
-.L3: brct %r5,.L2
- lgr %r2,%r0 # return last carry
- j .Lexit
-.L4: slgr %r6,%r0 # already a carry, add carry from last sub
- stg %r6,0(%r1,%r2)
- la %r1,8(%r1)
- brct %r5,.L2
- lgr %r2,%r0 # return last carry
-.Lexit: lg %r6,48(%r15) # restore register 6
- br %r14
-END(__mpn_sub_n)
diff --git a/sysdeps/s390/s390-64/sysdep.h b/sysdeps/s390/s390-64/sysdep.h
deleted file mode 100644
index a4dfc67178..0000000000
--- a/sysdeps/s390/s390-64/sysdep.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/* Assembler macros for 64 bit S/390.
- Copyright (C) 2001-2017 Free Software Foundation, Inc.
- Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
- 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/generic/sysdep.h>
-
-#ifdef __ASSEMBLER__
-
-/* Syntactic details of assembler. */
-
-/* ELF uses byte-counts for .align, most others use log2 of count of bytes. */
-#define ALIGNARG(log2) 1<<log2
-#define ASM_SIZE_DIRECTIVE(name) .size name,.-name;
-
-
-/* Define an entry point visible from C. */
-#define ENTRY(name) \
- .globl C_SYMBOL_NAME(name); \
- .type C_SYMBOL_NAME(name),@function; \
- .align ALIGNARG(2); \
- C_LABEL(name) \
- cfi_startproc; \
- CALL_MCOUNT
-
-#undef END
-#define END(name) \
- cfi_endproc; \
- ASM_SIZE_DIRECTIVE(name) \
-
-/* If compiled for profiling, call `mcount' at the start of each function. */
-#ifdef PROF
-#ifdef PIC
-#define CALL_MCOUNT \
- lgr 0,14 ; larl 1,0f ; brasl 14,_mcount@PLT ; lgr 14,0 ; \
- .data ; .align 4 ; 0: .long 0 ; .text ;
-#else
-#define CALL_MCOUNT \
- lgr 0,14 ; larl 1,0f ; brasl 14,_mcount ; lgr 14,0 ; \
- .data ; .align 4 ; 0: .long 0 ; .text ;
-#endif
-#else
-#define CALL_MCOUNT /* Do nothing. */
-#endif
-
-/* 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 __syscall_error
-#define mcount _mcount
-
-#undef PSEUDO
-#define PSEUDO(name, syscall_name, args) \
-lose: SYSCALL_PIC_SETUP \
- jg JUMPTARGET(syscall_error); \
- .globl syscall_error; \
- ENTRY (name) \
- DO_CALL (syscall_name, args); \
- jm lose
-
-#undef PSEUDO_END
-#define PSEUDO_END(name) \
- END (name)
-
-#undef JUMPTARGET
-#ifdef PIC
-#define JUMPTARGET(name) name##@PLT
-#define SYSCALL_PIC_SETUP \
- larl %r12,_GLOBAL_OFFSET_TABLE_
-#else
-#define JUMPTARGET(name) name
-#define SYSCALL_PIC_SETUP /* Nothing. */
-#endif
-
-/* Local label name for asm code. */
-#ifndef L
-#define L(name) .L##name
-#endif
-
-#endif /* __ASSEMBLER__ */
diff --git a/sysdeps/s390/s390-64/tls-macros.h b/sysdeps/s390/s390-64/tls-macros.h
deleted file mode 100644
index d70ea6ce0c..0000000000
--- a/sysdeps/s390/s390-64/tls-macros.h
+++ /dev/null
@@ -1,88 +0,0 @@
-#define TLS_LE(x) \
- ({ unsigned long __offset; \
- __asm__ ("bras %0,1f\n" \
- "0:\t.quad " #x "@ntpoff\n" \
- "1:\tlg %0,0(%0)" \
- : "=a" (__offset) : : "cc" ); \
- (int *) (__builtin_thread_pointer() + __offset); })
-
-#ifdef PIC
-# define TLS_IE(x) \
- ({ unsigned long __offset, __got; \
- __asm__ ("bras %0,0f\n\t" \
- ".quad " #x "@gotntpoff\n" \
- "0:\tlarl %1,_GLOBAL_OFFSET_TABLE_\n\t" \
- "lg %0,0(%0)\n\t" \
- "lg %0,0(%0,%1):tls_load:" #x "\n" \
- : "=&a" (__offset), "=&a" (__got) : : "cc" ); \
- (int *) (__builtin_thread_pointer() + __offset); })
-#else
-# define TLS_IE(x) \
- ({ unsigned long __offset; \
- __asm__ ("bras %0,1f\n" \
- "0:\t.quad " #x "@indntpoff\n" \
- "1:\t lg %0,0(%0)\n\t" \
- "lg %0,0(%0):tls_load:" #x \
- : "=&a" (__offset) : : "cc" ); \
- (int *) (__builtin_thread_pointer() + __offset); })
-#endif
-
-#ifdef PIC
-# define TLS_LD(x) \
- ({ unsigned long __offset, __save12; \
- __asm__ ("bras %0,1f\n" \
- "0:\t.quad " #x "@tlsldm\n\t" \
- ".quad " #x "@dtpoff\n" \
- "1:\tlgr %1,%%r12\n\t" \
- "larl %%r12,_GLOBAL_OFFSET_TABLE_\n\t" \
- "lg %%r2,0(%0)\n\t" \
- "brasl %%r14,__tls_get_offset@plt:tls_ldcall:" #x "\n\t" \
- "lg %0,8(%0)\n\t" \
- "algr %0,%%r2\n\t" \
- "lgr %%r12,%1" \
- : "=&a" (__offset), "=&a" (__save12) \
- : : "cc", "0", "1", "2", "3", "4", "5", "14" ); \
- (int *) (__builtin_thread_pointer() + __offset); })
-#else
-# define TLS_LD(x) \
- ({ unsigned long __offset; \
- __asm__ ("bras %0,1f\n" \
- "0:\t.quad " #x "@tlsldm\n\t" \
- ".quad " #x "@dtpoff\n" \
- "1:\tlarl %%r12,_GLOBAL_OFFSET_TABLE_\n\t" \
- "lg %%r2,0(%0)\n\t" \
- "brasl %%r14,__tls_get_offset@plt:tls_ldcall:" #x "\n\t" \
- "lg %0,8(%0)\n\t" \
- "algr %0,%%r2" \
- : "=&a" (__offset) \
- : : "cc", "0", "1", "2", "3", "4", "5", "12", "14" ); \
- (int *) (__builtin_thread_pointer() + __offset); })
-#endif
-
-#ifdef PIC
-# define TLS_GD(x) \
- ({ unsigned long __offset, __save12; \
- __asm__ ("bras %0,1f\n" \
- "0:\t.quad " #x "@tlsgd\n" \
- "1:\tlgr %1,%%r12\n\t" \
- "larl %%r12,_GLOBAL_OFFSET_TABLE_\n\t" \
- "lg %%r2,0(%0)\n\t" \
- "brasl %%r14,__tls_get_offset@plt:tls_gdcall:" #x "\n\t" \
- "lgr %0,%%r2\n\t" \
- "lgr %%r12,%1" \
- : "=&a" (__offset), "=&a" (__save12) \
- : : "cc", "0", "1", "2", "3", "4", "5", "14" ); \
- (int *) (__builtin_thread_pointer() + __offset); })
-#else
-# define TLS_GD(x) \
- ({ unsigned long __offset; \
- __asm__ ("bras %0,1f\n" \
- "0:\t.quad " #x "@tlsgd\n" \
- "1:\tlarl %%r12,_GLOBAL_OFFSET_TABLE_\n\t" \
- "lg %%r2,0(%0)\n\t" \
- "brasl %%r14,__tls_get_offset@plt:tls_gdcall:" #x "\n\t" \
- "lgr %0,%%r2" \
- : "=&a" (__offset) \
- : : "cc", "0", "1", "2", "3", "4", "5", "12", "14" ); \
- (int *) (__builtin_thread_pointer() + __offset); })
-#endif
diff --git a/sysdeps/s390/s390-64/tst-audit.h b/sysdeps/s390/s390-64/tst-audit.h
deleted file mode 100644
index 67a93f51f1..0000000000
--- a/sysdeps/s390/s390-64/tst-audit.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Definitions for testing PLT entry/exit auditing. S/390 64-bit version.
-
- Copyright (C) 2012-2017 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/>. */
-
-#define pltenter la_s390_64_gnu_pltenter
-#define pltexit la_s390_64_gnu_pltexit
-#define La_regs La_s390_64_regs
-#define La_retval La_s390_64_retval
-#define int_retval lrv_r2