1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-08 17:42:12 +03:00
2003-01-20  Martin Schwidefsky  <schwidefsky@de.ibm.com>

	* sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h (INTERNAL_SYSCALL):
	Fix inline assembler constraints.
	* sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h (INTERNAL_SYSCALL):
	Likewise.

	* sysdeps/s390/s390-64/Makefile (pic-ccflag): Use -fpic instead of
	-fPIC.
This commit is contained in:
Ulrich Drepper
2003-01-20 18:59:08 +00:00
parent 4a9b34fe01
commit d5b6c81799
5 changed files with 45 additions and 90 deletions

View File

@@ -19,7 +19,7 @@
02111-1307 USA. */
#ifndef _LINUX_S390_SYSDEP_H
#define _LINUX_S390_SYSEDP_H
#define _LINUX_S390_SYSDEP_H
#include <sysdeps/s390/s390-64/sysdep.h>
#include <sysdeps/unix/sysdep.h>
@@ -126,15 +126,13 @@
#define INTERNAL_SYSCALL(name, err, nr, args...) \
({ \
DECLARGS_##nr(args) \
int _ret; \
register int _ret asm("2"); \
asm volatile ( \
LOADARGS_##nr \
"svc %b1\n\t" \
"lgr %0,%%r2\n\t" \
: "=d" (_ret) \
: "I" (__NR_##name) ASMFMT_##nr \
: "memory", "cc", "2", "3", "4", "5", "6"); \
(int) _ret; })
: "i" (__NR_##name) ASMFMT_##nr \
: "memory" ); \
_ret; })
#undef INTERNAL_SYSCALL_ERROR_P
#define INTERNAL_SYSCALL_ERROR_P(val, err) \
@@ -145,32 +143,25 @@
#define DECLARGS_0()
#define DECLARGS_1(arg1) \
unsigned long gpr2 = (unsigned long) (arg1);
register unsigned long gpr2 asm ("2") = (unsigned long)(arg1);
#define DECLARGS_2(arg1, arg2) \
DECLARGS_1(arg1) \
unsigned long gpr3 = (unsigned long) (arg2);
register unsigned long gpr3 asm ("3") = (unsigned long)(arg2);
#define DECLARGS_3(arg1, arg2, arg3) \
DECLARGS_2(arg1, arg2) \
unsigned long gpr4 = (unsigned long) (arg3);
register unsigned long gpr4 asm ("4") = (unsigned long)(arg3);
#define DECLARGS_4(arg1, arg2, arg3, arg4) \
DECLARGS_3(arg1, arg2, arg3) \
unsigned long gpr5 = (unsigned long) (arg4);
register unsigned long gpr5 asm ("5") = (unsigned long)(arg4);
#define DECLARGS_5(arg1, arg2, arg3, arg4, arg5) \
DECLARGS_4(arg1, arg2, arg3, arg4) \
unsigned long gpr6 = (unsigned long) (arg5);
#define LOADARGS_0
#define LOADARGS_1 "LG 2,%2\n\t"
#define LOADARGS_2 LOADARGS_1 "LG 3,%3\n\t"
#define LOADARGS_3 LOADARGS_2 "LG 4,%4\n\t"
#define LOADARGS_4 LOADARGS_3 "LG 5,%5\n\t"
#define LOADARGS_5 LOADARGS_4 "LG 6,%6\n\t"
register unsigned long gpr6 asm ("6") = (unsigned long)(arg5);
#define ASMFMT_0
#define ASMFMT_1 , "m" (gpr2)
#define ASMFMT_2 , "m" (gpr2), "m" (gpr3)
#define ASMFMT_3 , "m" (gpr2), "m" (gpr3), "m" (gpr4)
#define ASMFMT_4 , "m" (gpr2), "m" (gpr3), "m" (gpr4), "m" (gpr5)
#define ASMFMT_5 , "m" (gpr2), "m" (gpr3), "m" (gpr4), "m" (gpr5), "m" (gpr6)
#define ASMFMT_1 , "0" (gpr2)
#define ASMFMT_2 , "0" (gpr2), "d" (gpr3)
#define ASMFMT_3 , "0" (gpr2), "d" (gpr3), "d" (gpr4)
#define ASMFMT_4 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5)
#define ASMFMT_5 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6)
#endif /* _LINUX_S390_SYSDEP_H */