aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'arch/s390/kernel')
-rw-r--r--arch/s390/kernel/.gitignore1
-rw-r--r--arch/s390/kernel/asm-offsets.c15
-rw-r--r--arch/s390/kernel/base.S61
-rw-r--r--arch/s390/kernel/compat_signal.c43
-rw-r--r--arch/s390/kernel/compat_wrapper.S840
-rw-r--r--arch/s390/kernel/dis.c2
-rw-r--r--arch/s390/kernel/early.c14
-rw-r--r--arch/s390/kernel/entry.S60
-rw-r--r--arch/s390/kernel/entry.h7
-rw-r--r--arch/s390/kernel/entry64.S137
-rw-r--r--arch/s390/kernel/head.S7
-rw-r--r--arch/s390/kernel/head31.S13
-rw-r--r--arch/s390/kernel/head64.S13
-rw-r--r--arch/s390/kernel/ipl.c50
-rw-r--r--arch/s390/kernel/irq.c83
-rw-r--r--arch/s390/kernel/mcount.S16
-rw-r--r--arch/s390/kernel/mcount64.S16
-rw-r--r--arch/s390/kernel/module.c20
-rw-r--r--arch/s390/kernel/ptrace.c48
-rw-r--r--arch/s390/kernel/reipl.S5
-rw-r--r--arch/s390/kernel/reipl64.S85
-rw-r--r--arch/s390/kernel/relocate_kernel.S6
-rw-r--r--arch/s390/kernel/relocate_kernel64.S6
-rw-r--r--arch/s390/kernel/s390_ksyms.c4
-rw-r--r--arch/s390/kernel/sclp.S5
-rw-r--r--arch/s390/kernel/setup.c25
-rw-r--r--arch/s390/kernel/signal.c61
-rw-r--r--arch/s390/kernel/smp.c21
-rw-r--r--arch/s390/kernel/switch_cpu.S8
-rw-r--r--arch/s390/kernel/switch_cpu64.S8
-rw-r--r--arch/s390/kernel/swsusp_asm64.S8
-rw-r--r--arch/s390/kernel/syscalls.S2
-rw-r--r--arch/s390/kernel/traps.c38
-rw-r--r--arch/s390/kernel/vdso32/.gitignore1
-rw-r--r--arch/s390/kernel/vdso64/.gitignore1
35 files changed, 832 insertions, 898 deletions
diff --git a/arch/s390/kernel/.gitignore b/arch/s390/kernel/.gitignore
new file mode 100644
index 00000000000..c5f676c3c22
--- /dev/null
+++ b/arch/s390/kernel/.gitignore
@@ -0,0 +1 @@
vmlinux.lds
diff --git a/arch/s390/kernel/asm-offsets.c b/arch/s390/kernel/asm-offsets.c
index edfbd17d708..2b45591e158 100644
--- a/arch/s390/kernel/asm-offsets.c
+++ b/arch/s390/kernel/asm-offsets.c
@@ -10,6 +10,7 @@
10#include <linux/sched.h> 10#include <linux/sched.h>
11#include <asm/vdso.h> 11#include <asm/vdso.h>
12#include <asm/sigp.h> 12#include <asm/sigp.h>
13#include <asm/pgtable.h>
13 14
14/* 15/*
15 * Make sure that the compiler is new enough. We want a compiler that 16 * Make sure that the compiler is new enough. We want a compiler that
@@ -27,12 +28,9 @@ int main(void)
27 BLANK(); 28 BLANK();
28 DEFINE(__TASK_pid, offsetof(struct task_struct, pid)); 29 DEFINE(__TASK_pid, offsetof(struct task_struct, pid));
29 BLANK(); 30 BLANK();
30 DEFINE(__THREAD_per_cause, 31 DEFINE(__THREAD_per_cause, offsetof(struct task_struct, thread.per_event.cause));
31 offsetof(struct task_struct, thread.per_event.cause)); 32 DEFINE(__THREAD_per_address, offsetof(struct task_struct, thread.per_event.address));
32 DEFINE(__THREAD_per_address, 33 DEFINE(__THREAD_per_paid, offsetof(struct task_struct, thread.per_event.paid));
33 offsetof(struct task_struct, thread.per_event.address));
34 DEFINE(__THREAD_per_paid,
35 offsetof(struct task_struct, thread.per_event.paid));
36 BLANK(); 34 BLANK();
37 DEFINE(__TI_task, offsetof(struct thread_info, task)); 35 DEFINE(__TI_task, offsetof(struct thread_info, task));
38 DEFINE(__TI_domain, offsetof(struct thread_info, exec_domain)); 36 DEFINE(__TI_domain, offsetof(struct thread_info, exec_domain));
@@ -129,6 +127,7 @@ int main(void)
129 DEFINE(__LC_KERNEL_STACK, offsetof(struct _lowcore, kernel_stack)); 127 DEFINE(__LC_KERNEL_STACK, offsetof(struct _lowcore, kernel_stack));
130 DEFINE(__LC_ASYNC_STACK, offsetof(struct _lowcore, async_stack)); 128 DEFINE(__LC_ASYNC_STACK, offsetof(struct _lowcore, async_stack));
131 DEFINE(__LC_PANIC_STACK, offsetof(struct _lowcore, panic_stack)); 129 DEFINE(__LC_PANIC_STACK, offsetof(struct _lowcore, panic_stack));
130 DEFINE(__LC_USER_ASCE, offsetof(struct _lowcore, user_asce));
132 DEFINE(__LC_INT_CLOCK, offsetof(struct _lowcore, int_clock)); 131 DEFINE(__LC_INT_CLOCK, offsetof(struct _lowcore, int_clock));
133 DEFINE(__LC_MCCK_CLOCK, offsetof(struct _lowcore, mcck_clock)); 132 DEFINE(__LC_MCCK_CLOCK, offsetof(struct _lowcore, mcck_clock));
134 DEFINE(__LC_MACHINE_FLAGS, offsetof(struct _lowcore, machine_flags)); 133 DEFINE(__LC_MACHINE_FLAGS, offsetof(struct _lowcore, machine_flags));
@@ -142,6 +141,7 @@ int main(void)
142 DEFINE(__LC_FPREGS_SAVE_AREA, offsetof(struct _lowcore, floating_pt_save_area)); 141 DEFINE(__LC_FPREGS_SAVE_AREA, offsetof(struct _lowcore, floating_pt_save_area));
143 DEFINE(__LC_GPREGS_SAVE_AREA, offsetof(struct _lowcore, gpregs_save_area)); 142 DEFINE(__LC_GPREGS_SAVE_AREA, offsetof(struct _lowcore, gpregs_save_area));
144 DEFINE(__LC_CREGS_SAVE_AREA, offsetof(struct _lowcore, cregs_save_area)); 143 DEFINE(__LC_CREGS_SAVE_AREA, offsetof(struct _lowcore, cregs_save_area));
144 DEFINE(__LC_SAVE_AREA_64, offsetof(struct _lowcore, save_area_64));
145#ifdef CONFIG_32BIT 145#ifdef CONFIG_32BIT
146 DEFINE(SAVE_AREA_BASE, offsetof(struct _lowcore, extended_save_area_addr)); 146 DEFINE(SAVE_AREA_BASE, offsetof(struct _lowcore, extended_save_area_addr));
147#else /* CONFIG_32BIT */ 147#else /* CONFIG_32BIT */
@@ -151,8 +151,9 @@ int main(void)
151 DEFINE(__LC_FP_CREG_SAVE_AREA, offsetof(struct _lowcore, fpt_creg_save_area)); 151 DEFINE(__LC_FP_CREG_SAVE_AREA, offsetof(struct _lowcore, fpt_creg_save_area));
152 DEFINE(__LC_LAST_BREAK, offsetof(struct _lowcore, breaking_event_addr)); 152 DEFINE(__LC_LAST_BREAK, offsetof(struct _lowcore, breaking_event_addr));
153 DEFINE(__LC_VDSO_PER_CPU, offsetof(struct _lowcore, vdso_per_cpu_data)); 153 DEFINE(__LC_VDSO_PER_CPU, offsetof(struct _lowcore, vdso_per_cpu_data));
154 DEFINE(__LC_SIE_HOOK, offsetof(struct _lowcore, sie_hook)); 154 DEFINE(__LC_GMAP, offsetof(struct _lowcore, gmap));
155 DEFINE(__LC_CMF_HPP, offsetof(struct _lowcore, cmf_hpp)); 155 DEFINE(__LC_CMF_HPP, offsetof(struct _lowcore, cmf_hpp));
156 DEFINE(__GMAP_ASCE, offsetof(struct gmap, asce));
156#endif /* CONFIG_32BIT */ 157#endif /* CONFIG_32BIT */
157 return 0; 158 return 0;
158} 159}
diff --git a/arch/s390/kernel/base.S b/arch/s390/kernel/base.S
index 15e46ca9433..255435663bf 100644
--- a/arch/s390/kernel/base.S
+++ b/arch/s390/kernel/base.S
@@ -6,13 +6,13 @@
6 * Michael Holzheu <holzheu@de.ibm.com> 6 * Michael Holzheu <holzheu@de.ibm.com>
7 */ 7 */
8 8
9#include <linux/linkage.h>
9#include <asm/asm-offsets.h> 10#include <asm/asm-offsets.h>
10#include <asm/ptrace.h> 11#include <asm/ptrace.h>
11 12
12#ifdef CONFIG_64BIT 13#ifdef CONFIG_64BIT
13 14
14 .globl s390_base_mcck_handler 15ENTRY(s390_base_mcck_handler)
15s390_base_mcck_handler:
16 basr %r13,0 16 basr %r13,0
170: lg %r15,__LC_PANIC_STACK # load panic stack 170: lg %r15,__LC_PANIC_STACK # load panic stack
18 aghi %r15,-STACK_FRAME_OVERHEAD 18 aghi %r15,-STACK_FRAME_OVERHEAD
@@ -26,13 +26,13 @@ s390_base_mcck_handler:
26 lpswe __LC_MCK_OLD_PSW 26 lpswe __LC_MCK_OLD_PSW
27 27
28 .section .bss 28 .section .bss
29 .align 8
29 .globl s390_base_mcck_handler_fn 30 .globl s390_base_mcck_handler_fn
30s390_base_mcck_handler_fn: 31s390_base_mcck_handler_fn:
31 .quad 0 32 .quad 0
32 .previous 33 .previous
33 34
34 .globl s390_base_ext_handler 35ENTRY(s390_base_ext_handler)
35s390_base_ext_handler:
36 stmg %r0,%r15,__LC_SAVE_AREA 36 stmg %r0,%r15,__LC_SAVE_AREA
37 basr %r13,0 37 basr %r13,0
380: aghi %r15,-STACK_FRAME_OVERHEAD 380: aghi %r15,-STACK_FRAME_OVERHEAD
@@ -46,13 +46,13 @@ s390_base_ext_handler:
46 lpswe __LC_EXT_OLD_PSW 46 lpswe __LC_EXT_OLD_PSW
47 47
48 .section .bss 48 .section .bss
49 .align 8
49 .globl s390_base_ext_handler_fn 50 .globl s390_base_ext_handler_fn
50s390_base_ext_handler_fn: 51s390_base_ext_handler_fn:
51 .quad 0 52 .quad 0
52 .previous 53 .previous
53 54
54 .globl s390_base_pgm_handler 55ENTRY(s390_base_pgm_handler)
55s390_base_pgm_handler:
56 stmg %r0,%r15,__LC_SAVE_AREA 56 stmg %r0,%r15,__LC_SAVE_AREA
57 basr %r13,0 57 basr %r13,0
580: aghi %r15,-STACK_FRAME_OVERHEAD 580: aghi %r15,-STACK_FRAME_OVERHEAD
@@ -70,15 +70,51 @@ disabled_wait_psw:
70 .quad 0x0002000180000000,0x0000000000000000 + s390_base_pgm_handler 70 .quad 0x0002000180000000,0x0000000000000000 + s390_base_pgm_handler
71 71
72 .section .bss 72 .section .bss
73 .align 8
73 .globl s390_base_pgm_handler_fn 74 .globl s390_base_pgm_handler_fn
74s390_base_pgm_handler_fn: 75s390_base_pgm_handler_fn:
75 .quad 0 76 .quad 0
76 .previous 77 .previous
77 78
79#
80# Calls diag 308 subcode 1 and continues execution
81#
82# The following conditions must be ensured before calling this function:
83# * Prefix register = 0
84# * Lowcore protection is disabled
85#
86ENTRY(diag308_reset)
87 larl %r4,.Lctlregs # Save control registers
88 stctg %c0,%c15,0(%r4)
89 larl %r4,.Lrestart_psw # Setup restart PSW at absolute 0
90 lghi %r3,0
91 lg %r4,0(%r4) # Save PSW
92 sturg %r4,%r3 # Use sturg, because of large pages
93 lghi %r1,1
94 diag %r1,%r1,0x308
95.Lrestart_part2:
96 lhi %r0,0 # Load r0 with zero
97 lhi %r1,2 # Use mode 2 = ESAME (dump)
98 sigp %r1,%r0,0x12 # Switch to ESAME mode
99 sam64 # Switch to 64 bit addressing mode
100 larl %r4,.Lctlregs # Restore control registers
101 lctlg %c0,%c15,0(%r4)
102 br %r14
103.align 16
104.Lrestart_psw:
105 .long 0x00080000,0x80000000 + .Lrestart_part2
106
107 .section .bss
108.align 8
109.Lctlregs:
110 .rept 16
111 .quad 0
112 .endr
113 .previous
114
78#else /* CONFIG_64BIT */ 115#else /* CONFIG_64BIT */
79 116
80 .globl s390_base_mcck_handler 117ENTRY(s390_base_mcck_handler)
81s390_base_mcck_handler:
82 basr %r13,0 118 basr %r13,0
830: l %r15,__LC_PANIC_STACK # load panic stack 1190: l %r15,__LC_PANIC_STACK # load panic stack
84 ahi %r15,-STACK_FRAME_OVERHEAD 120 ahi %r15,-STACK_FRAME_OVERHEAD
@@ -93,13 +129,13 @@ s390_base_mcck_handler:
932: .long s390_base_mcck_handler_fn 1292: .long s390_base_mcck_handler_fn
94 130
95 .section .bss 131 .section .bss
132 .align 4
96 .globl s390_base_mcck_handler_fn 133 .globl s390_base_mcck_handler_fn
97s390_base_mcck_handler_fn: 134s390_base_mcck_handler_fn:
98 .long 0 135 .long 0
99 .previous 136 .previous
100 137
101 .globl s390_base_ext_handler 138ENTRY(s390_base_ext_handler)
102s390_base_ext_handler:
103 stm %r0,%r15,__LC_SAVE_AREA 139 stm %r0,%r15,__LC_SAVE_AREA
104 basr %r13,0 140 basr %r13,0
1050: ahi %r15,-STACK_FRAME_OVERHEAD 1410: ahi %r15,-STACK_FRAME_OVERHEAD
@@ -115,13 +151,13 @@ s390_base_ext_handler:
1152: .long s390_base_ext_handler_fn 1512: .long s390_base_ext_handler_fn
116 152
117 .section .bss 153 .section .bss
154 .align 4
118 .globl s390_base_ext_handler_fn 155 .globl s390_base_ext_handler_fn
119s390_base_ext_handler_fn: 156s390_base_ext_handler_fn:
120 .long 0 157 .long 0
121 .previous 158 .previous
122 159
123 .globl s390_base_pgm_handler 160ENTRY(s390_base_pgm_handler)
124s390_base_pgm_handler:
125 stm %r0,%r15,__LC_SAVE_AREA 161 stm %r0,%r15,__LC_SAVE_AREA
126 basr %r13,0 162 basr %r13,0
1270: ahi %r15,-STACK_FRAME_OVERHEAD 1630: ahi %r15,-STACK_FRAME_OVERHEAD
@@ -142,6 +178,7 @@ disabled_wait_psw:
142 .long 0x000a0000,0x00000000 + s390_base_pgm_handler 178 .long 0x000a0000,0x00000000 + s390_base_pgm_handler
143 179
144 .section .bss 180 .section .bss
181 .align 4
145 .globl s390_base_pgm_handler_fn 182 .globl s390_base_pgm_handler_fn
146s390_base_pgm_handler_fn: 183s390_base_pgm_handler_fn:
147 .long 0 184 .long 0
diff --git a/arch/s390/kernel/compat_signal.c b/arch/s390/kernel/compat_signal.c
index eee999853a7..a9a285b8c4a 100644
--- a/arch/s390/kernel/compat_signal.c
+++ b/arch/s390/kernel/compat_signal.c
@@ -380,20 +380,13 @@ asmlinkage long sys32_sigreturn(void)
380 goto badframe; 380 goto badframe;
381 if (__copy_from_user(&set.sig, &frame->sc.oldmask, _SIGMASK_COPY_SIZE32)) 381 if (__copy_from_user(&set.sig, &frame->sc.oldmask, _SIGMASK_COPY_SIZE32))
382 goto badframe; 382 goto badframe;
383
384 sigdelsetmask(&set, ~_BLOCKABLE); 383 sigdelsetmask(&set, ~_BLOCKABLE);
385 spin_lock_irq(&current->sighand->siglock); 384 set_current_blocked(&set);
386 current->blocked = set;
387 recalc_sigpending();
388 spin_unlock_irq(&current->sighand->siglock);
389
390 if (restore_sigregs32(regs, &frame->sregs)) 385 if (restore_sigregs32(regs, &frame->sregs))
391 goto badframe; 386 goto badframe;
392 if (restore_sigregs_gprs_high(regs, frame->gprs_high)) 387 if (restore_sigregs_gprs_high(regs, frame->gprs_high))
393 goto badframe; 388 goto badframe;
394
395 return regs->gprs[2]; 389 return regs->gprs[2];
396
397badframe: 390badframe:
398 force_sig(SIGSEGV, current); 391 force_sig(SIGSEGV, current);
399 return 0; 392 return 0;
@@ -413,31 +406,22 @@ asmlinkage long sys32_rt_sigreturn(void)
413 goto badframe; 406 goto badframe;
414 if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) 407 if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
415 goto badframe; 408 goto badframe;
416
417 sigdelsetmask(&set, ~_BLOCKABLE); 409 sigdelsetmask(&set, ~_BLOCKABLE);
418 spin_lock_irq(&current->sighand->siglock); 410 set_current_blocked(&set);
419 current->blocked = set;
420 recalc_sigpending();
421 spin_unlock_irq(&current->sighand->siglock);
422
423 if (restore_sigregs32(regs, &frame->uc.uc_mcontext)) 411 if (restore_sigregs32(regs, &frame->uc.uc_mcontext))
424 goto badframe; 412 goto badframe;
425 if (restore_sigregs_gprs_high(regs, frame->gprs_high)) 413 if (restore_sigregs_gprs_high(regs, frame->gprs_high))
426 goto badframe; 414 goto badframe;
427
428 err = __get_user(ss_sp, &frame->uc.uc_stack.ss_sp); 415 err = __get_user(ss_sp, &frame->uc.uc_stack.ss_sp);
429 st.ss_sp = compat_ptr(ss_sp); 416 st.ss_sp = compat_ptr(ss_sp);
430 err |= __get_user(st.ss_size, &frame->uc.uc_stack.ss_size); 417 err |= __get_user(st.ss_size, &frame->uc.uc_stack.ss_size);
431 err |= __get_user(st.ss_flags, &frame->uc.uc_stack.ss_flags); 418 err |= __get_user(st.ss_flags, &frame->uc.uc_stack.ss_flags);
432 if (err) 419 if (err)
433 goto badframe; 420 goto badframe;
434
435 set_fs (KERNEL_DS); 421 set_fs (KERNEL_DS);
436 do_sigaltstack((stack_t __force __user *)&st, NULL, regs->gprs[15]); 422 do_sigaltstack((stack_t __force __user *)&st, NULL, regs->gprs[15]);
437 set_fs (old_fs); 423 set_fs (old_fs);
438
439 return regs->gprs[2]; 424 return regs->gprs[2];
440
441badframe: 425badframe:
442 force_sig(SIGSEGV, current); 426 force_sig(SIGSEGV, current);
443 return 0; 427 return 0;
@@ -605,10 +589,10 @@ give_sigsegv:
605 * OK, we're invoking a handler 589 * OK, we're invoking a handler
606 */ 590 */
607 591
608int 592int handle_signal32(unsigned long sig, struct k_sigaction *ka,
609handle_signal32(unsigned long sig, struct k_sigaction *ka, 593 siginfo_t *info, sigset_t *oldset, struct pt_regs *regs)
610 siginfo_t *info, sigset_t *oldset, struct pt_regs * regs)
611{ 594{
595 sigset_t blocked;
612 int ret; 596 int ret;
613 597
614 /* Set up the stack frame */ 598 /* Set up the stack frame */
@@ -616,15 +600,12 @@ handle_signal32(unsigned long sig, struct k_sigaction *ka,
616 ret = setup_rt_frame32(sig, ka, info, oldset, regs); 600 ret = setup_rt_frame32(sig, ka, info, oldset, regs);
617 else 601 else
618 ret = setup_frame32(sig, ka, oldset, regs); 602 ret = setup_frame32(sig, ka, oldset, regs);
619 603 if (ret)
620 if (ret == 0) { 604 return ret;
621 spin_lock_irq(&current->sighand->siglock); 605 sigorsets(&blocked, &current->blocked, &ka->sa.sa_mask);
622 sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask); 606 if (!(ka->sa.sa_flags & SA_NODEFER))
623 if (!(ka->sa.sa_flags & SA_NODEFER)) 607 sigaddset(&blocked, sig);
624 sigaddset(&current->blocked,sig); 608 set_current_blocked(&blocked);
625 recalc_sigpending(); 609 return 0;
626 spin_unlock_irq(&current->sighand->siglock);
627 }
628 return ret;
629} 610}
630 611
diff --git a/arch/s390/kernel/compat_wrapper.S b/arch/s390/kernel/compat_wrapper.S
index 1f5eb789c3a..7526db6bf50 100644
--- a/arch/s390/kernel/compat_wrapper.S
+++ b/arch/s390/kernel/compat_wrapper.S
@@ -7,86 +7,74 @@
7* Thomas Spatzier (tspat@de.ibm.com) 7* Thomas Spatzier (tspat@de.ibm.com)
8*/ 8*/
9 9
10 .globl sys32_exit_wrapper 10#include <linux/linkage.h>
11sys32_exit_wrapper: 11
12ENTRY(sys32_exit_wrapper)
12 lgfr %r2,%r2 # int 13 lgfr %r2,%r2 # int
13 jg sys_exit # branch to sys_exit 14 jg sys_exit # branch to sys_exit
14 15
15 .globl sys32_read_wrapper 16ENTRY(sys32_read_wrapper)
16sys32_read_wrapper:
17 llgfr %r2,%r2 # unsigned int 17 llgfr %r2,%r2 # unsigned int
18 llgtr %r3,%r3 # char * 18 llgtr %r3,%r3 # char *
19 llgfr %r4,%r4 # size_t 19 llgfr %r4,%r4 # size_t
20 jg sys32_read # branch to sys_read 20 jg sys32_read # branch to sys_read
21 21
22 .globl sys32_write_wrapper 22ENTRY(sys32_write_wrapper)
23sys32_write_wrapper:
24 llgfr %r2,%r2 # unsigned int 23 llgfr %r2,%r2 # unsigned int
25 llgtr %r3,%r3 # const char * 24 llgtr %r3,%r3 # const char *
26 llgfr %r4,%r4 # size_t 25 llgfr %r4,%r4 # size_t
27 jg sys32_write # branch to system call 26 jg sys32_write # branch to system call
28 27
29 .globl sys32_open_wrapper 28ENTRY(sys32_open_wrapper)
30sys32_open_wrapper:
31 llgtr %r2,%r2 # const char * 29 llgtr %r2,%r2 # const char *
32 lgfr %r3,%r3 # int 30 lgfr %r3,%r3 # int
33 lgfr %r4,%r4 # int 31 lgfr %r4,%r4 # int
34 jg sys_open # branch to system call 32 jg sys_open # branch to system call
35 33
36 .globl sys32_close_wrapper 34ENTRY(sys32_close_wrapper)
37sys32_close_wrapper:
38 llgfr %r2,%r2 # unsigned int 35 llgfr %r2,%r2 # unsigned int
39 jg sys_close # branch to system call 36 jg sys_close # branch to system call
40 37
41 .globl sys32_creat_wrapper 38ENTRY(sys32_creat_wrapper)
42sys32_creat_wrapper:
43 llgtr %r2,%r2 # const char * 39 llgtr %r2,%r2 # const char *
44 lgfr %r3,%r3 # int 40 lgfr %r3,%r3 # int
45 jg sys_creat # branch to system call 41 jg sys_creat # branch to system call
46 42
47 .globl sys32_link_wrapper 43ENTRY(sys32_link_wrapper)
48sys32_link_wrapper:
49 llgtr %r2,%r2 # const char * 44 llgtr %r2,%r2 # const char *
50 llgtr %r3,%r3 # const char * 45 llgtr %r3,%r3 # const char *
51 jg sys_link # branch to system call 46 jg sys_link # branch to system call
52 47
53 .globl sys32_unlink_wrapper 48ENTRY(sys32_unlink_wrapper)
54sys32_unlink_wrapper:
55 llgtr %r2,%r2 # const char * 49 llgtr %r2,%r2 # const char *
56 jg sys_unlink # branch to system call 50 jg sys_unlink # branch to system call
57 51
58 .globl sys32_chdir_wrapper 52ENTRY(sys32_chdir_wrapper)
59sys32_chdir_wrapper:
60 llgtr %r2,%r2 # const char * 53 llgtr %r2,%r2 # const char *
61 jg sys_chdir # branch to system call 54 jg sys_chdir # branch to system call
62 55
63 .globl sys32_time_wrapper 56ENTRY(sys32_time_wrapper)
64sys32_time_wrapper:
65 llgtr %r2,%r2 # int * 57 llgtr %r2,%r2 # int *
66 jg compat_sys_time # branch to system call 58 jg compat_sys_time # branch to system call
67 59
68 .globl sys32_mknod_wrapper 60ENTRY(sys32_mknod_wrapper)
69sys32_mknod_wrapper:
70 llgtr %r2,%r2 # const char * 61 llgtr %r2,%r2 # const char *
71 lgfr %r3,%r3 # int 62 lgfr %r3,%r3 # int
72 llgfr %r4,%r4 # dev 63 llgfr %r4,%r4 # dev
73 jg sys_mknod # branch to system call 64 jg sys_mknod # branch to system call
74 65
75 .globl sys32_chmod_wrapper 66ENTRY(sys32_chmod_wrapper)
76sys32_chmod_wrapper:
77 llgtr %r2,%r2 # const char * 67 llgtr %r2,%r2 # const char *
78 llgfr %r3,%r3 # mode_t 68 llgfr %r3,%r3 # mode_t
79 jg sys_chmod # branch to system call 69 jg sys_chmod # branch to system call
80 70
81 .globl sys32_lchown16_wrapper 71ENTRY(sys32_lchown16_wrapper)
82sys32_lchown16_wrapper:
83 llgtr %r2,%r2 # const char * 72 llgtr %r2,%r2 # const char *
84 llgfr %r3,%r3 # __kernel_old_uid_emu31_t 73 llgfr %r3,%r3 # __kernel_old_uid_emu31_t
85 llgfr %r4,%r4 # __kernel_old_uid_emu31_t 74 llgfr %r4,%r4 # __kernel_old_uid_emu31_t
86 jg sys32_lchown16 # branch to system call 75 jg sys32_lchown16 # branch to system call
87 76
88 .globl sys32_lseek_wrapper 77ENTRY(sys32_lseek_wrapper)
89sys32_lseek_wrapper:
90 llgfr %r2,%r2 # unsigned int 78 llgfr %r2,%r2 # unsigned int
91 lgfr %r3,%r3 # off_t 79 lgfr %r3,%r3 # off_t
92 llgfr %r4,%r4 # unsigned int 80 llgfr %r4,%r4 # unsigned int
@@ -94,8 +82,7 @@ sys32_lseek_wrapper:
94 82
95#sys32_getpid_wrapper # void 83#sys32_getpid_wrapper # void
96 84
97 .globl sys32_mount_wrapper 85ENTRY(sys32_mount_wrapper)
98sys32_mount_wrapper:
99 llgtr %r2,%r2 # char * 86 llgtr %r2,%r2 # char *
100 llgtr %r3,%r3 # char * 87 llgtr %r3,%r3 # char *
101 llgtr %r4,%r4 # char * 88 llgtr %r4,%r4 # char *
@@ -103,102 +90,85 @@ sys32_mount_wrapper:
103 llgtr %r6,%r6 # void * 90 llgtr %r6,%r6 # void *
104 jg compat_sys_mount # branch to system call 91 jg compat_sys_mount # branch to system call
105 92
106 .globl sys32_oldumount_wrapper 93ENTRY(sys32_oldumount_wrapper)
107sys32_oldumount_wrapper:
108 llgtr %r2,%r2 # char * 94 llgtr %r2,%r2 # char *
109 jg sys_oldumount # branch to system call 95 jg sys_oldumount # branch to system call
110 96
111 .globl sys32_setuid16_wrapper 97ENTRY(sys32_setuid16_wrapper)
112sys32_setuid16_wrapper:
113 llgfr %r2,%r2 # __kernel_old_uid_emu31_t 98 llgfr %r2,%r2 # __kernel_old_uid_emu31_t
114 jg sys32_setuid16 # branch to system call 99 jg sys32_setuid16 # branch to system call
115 100
116#sys32_getuid16_wrapper # void 101#sys32_getuid16_wrapper # void
117 102
118 .globl sys32_ptrace_wrapper 103ENTRY(sys32_ptrace_wrapper)
119sys32_ptrace_wrapper:
120 lgfr %r2,%r2 # long 104 lgfr %r2,%r2 # long
121 lgfr %r3,%r3 # long 105 lgfr %r3,%r3 # long
122 llgtr %r4,%r4 # long 106 llgtr %r4,%r4 # long
123 llgfr %r5,%r5 # long 107 llgfr %r5,%r5 # long
124 jg compat_sys_ptrace # branch to system call 108 jg compat_sys_ptrace # branch to system call
125 109
126 .globl sys32_alarm_wrapper 110ENTRY(sys32_alarm_wrapper)
127sys32_alarm_wrapper:
128 llgfr %r2,%r2 # unsigned int 111 llgfr %r2,%r2 # unsigned int
129 jg sys_alarm # branch to system call 112 jg sys_alarm # branch to system call
130 113
131 .globl compat_sys_utime_wrapper 114ENTRY(compat_sys_utime_wrapper)
132compat_sys_utime_wrapper:
133 llgtr %r2,%r2 # char * 115 llgtr %r2,%r2 # char *
134 llgtr %r3,%r3 # struct compat_utimbuf * 116 llgtr %r3,%r3 # struct compat_utimbuf *
135 jg compat_sys_utime # branch to system call 117 jg compat_sys_utime # branch to system call
136 118
137 .globl sys32_access_wrapper 119ENTRY(sys32_access_wrapper)
138sys32_access_wrapper:
139 llgtr %r2,%r2 # const char * 120 llgtr %r2,%r2 # const char *
140 lgfr %r3,%r3 # int 121 lgfr %r3,%r3 # int
141 jg sys_access # branch to system call 122 jg sys_access # branch to system call
142 123
143 .globl sys32_nice_wrapper 124ENTRY(sys32_nice_wrapper)
144sys32_nice_wrapper:
145 lgfr %r2,%r2 # int 125 lgfr %r2,%r2 # int
146 jg sys_nice # branch to system call 126 jg sys_nice # branch to system call
147 127
148#sys32_sync_wrapper # void 128#sys32_sync_wrapper # void
149 129
150 .globl sys32_kill_wrapper 130ENTRY(sys32_kill_wrapper)
151sys32_kill_wrapper:
152 lgfr %r2,%r2 # int 131 lgfr %r2,%r2 # int
153 lgfr %r3,%r3 # int 132 lgfr %r3,%r3 # int
154 jg sys_kill # branch to system call 133 jg sys_kill # branch to system call
155 134
156 .globl sys32_rename_wrapper 135ENTRY(sys32_rename_wrapper)
157sys32_rename_wrapper:
158 llgtr %r2,%r2 # const char * 136 llgtr %r2,%r2 # const char *
159 llgtr %r3,%r3 # const char * 137 llgtr %r3,%r3 # const char *
160 jg sys_rename # branch to system call 138 jg sys_rename # branch to system call
161 139
162 .globl sys32_mkdir_wrapper 140ENTRY(sys32_mkdir_wrapper)
163sys32_mkdir_wrapper:
164 llgtr %r2,%r2 # const char * 141 llgtr %r2,%r2 # const char *
165 lgfr %r3,%r3 # int 142 lgfr %r3,%r3 # int
166 jg sys_mkdir # branch to system call 143 jg sys_mkdir # branch to system call
167 144
168 .globl sys32_rmdir_wrapper 145ENTRY(sys32_rmdir_wrapper)
169sys32_rmdir_wrapper:
170 llgtr %r2,%r2 # const char * 146 llgtr %r2,%r2 # const char *
171 jg sys_rmdir # branch to system call 147 jg sys_rmdir # branch to system call
172 148
173 .globl sys32_dup_wrapper 149ENTRY(sys32_dup_wrapper)
174sys32_dup_wrapper:
175 llgfr %r2,%r2 # unsigned int 150 llgfr %r2,%r2 # unsigned int
176 jg sys_dup # branch to system call 151 jg sys_dup # branch to system call
177 152
178 .globl sys32_pipe_wrapper 153ENTRY(sys32_pipe_wrapper)
179sys32_pipe_wrapper:
180 llgtr %r2,%r2 # u32 * 154 llgtr %r2,%r2 # u32 *
181 jg sys_pipe # branch to system call 155 jg sys_pipe # branch to system call
182 156
183 .globl compat_sys_times_wrapper 157ENTRY(compat_sys_times_wrapper)
184compat_sys_times_wrapper:
185 llgtr %r2,%r2 # struct compat_tms * 158 llgtr %r2,%r2 # struct compat_tms *
186 jg compat_sys_times # branch to system call 159 jg compat_sys_times # branch to system call
187 160
188 .globl sys32_brk_wrapper 161ENTRY(sys32_brk_wrapper)
189sys32_brk_wrapper:
190 llgtr %r2,%r2 # unsigned long 162 llgtr %r2,%r2 # unsigned long
191 jg sys_brk # branch to system call 163 jg sys_brk # branch to system call
192 164
193 .globl sys32_setgid16_wrapper 165ENTRY(sys32_setgid16_wrapper)
194sys32_setgid16_wrapper:
195 llgfr %r2,%r2 # __kernel_old_gid_emu31_t 166 llgfr %r2,%r2 # __kernel_old_gid_emu31_t
196 jg sys32_setgid16 # branch to system call 167 jg sys32_setgid16 # branch to system call
197 168
198#sys32_getgid16_wrapper # void 169#sys32_getgid16_wrapper # void
199 170
200 .globl sys32_signal_wrapper 171ENTRY(sys32_signal_wrapper)
201sys32_signal_wrapper:
202 lgfr %r2,%r2 # int 172 lgfr %r2,%r2 # int
203 llgtr %r3,%r3 # __sighandler_t 173 llgtr %r3,%r3 # __sighandler_t
204 jg sys_signal 174 jg sys_signal
@@ -207,55 +177,46 @@ sys32_signal_wrapper:
207 177
208#sys32_getegid16_wrapper # void 178#sys32_getegid16_wrapper # void
209 179
210 .globl sys32_acct_wrapper 180ENTRY(sys32_acct_wrapper)
211sys32_acct_wrapper:
212 llgtr %r2,%r2 # char * 181 llgtr %r2,%r2 # char *
213 jg sys_acct # branch to system call 182 jg sys_acct # branch to system call
214 183
215 .globl sys32_umount_wrapper 184ENTRY(sys32_umount_wrapper)
216sys32_umount_wrapper:
217 llgtr %r2,%r2 # char * 185 llgtr %r2,%r2 # char *
218 lgfr %r3,%r3 # int 186 lgfr %r3,%r3 # int
219 jg sys_umount # branch to system call 187 jg sys_umount # branch to system call
220 188
221 .globl compat_sys_ioctl_wrapper 189ENTRY(compat_sys_ioctl_wrapper)
222compat_sys_ioctl_wrapper:
223 llgfr %r2,%r2 # unsigned int 190 llgfr %r2,%r2 # unsigned int
224 llgfr %r3,%r3 # unsigned int 191 llgfr %r3,%r3 # unsigned int
225 llgfr %r4,%r4 # unsigned int 192 llgfr %r4,%r4 # unsigned int
226 jg compat_sys_ioctl # branch to system call 193 jg compat_sys_ioctl # branch to system call
227 194
228 .globl compat_sys_fcntl_wrapper 195ENTRY(compat_sys_fcntl_wrapper)
229compat_sys_fcntl_wrapper:
230 llgfr %r2,%r2 # unsigned int 196 llgfr %r2,%r2 # unsigned int
231 llgfr %r3,%r3 # unsigned int 197 llgfr %r3,%r3 # unsigned int
232 llgfr %r4,%r4 # unsigned long 198 llgfr %r4,%r4 # unsigned long
233 jg compat_sys_fcntl # branch to system call 199 jg compat_sys_fcntl # branch to system call
234 200
235 .globl sys32_setpgid_wrapper 201ENTRY(sys32_setpgid_wrapper)
236sys32_setpgid_wrapper:
237 lgfr %r2,%r2 # pid_t 202 lgfr %r2,%r2 # pid_t
238 lgfr %r3,%r3 # pid_t 203 lgfr %r3,%r3 # pid_t
239 jg sys_setpgid # branch to system call 204 jg sys_setpgid # branch to system call
240 205
241 .globl sys32_umask_wrapper 206ENTRY(sys32_umask_wrapper)
242sys32_umask_wrapper:
243 lgfr %r2,%r2 # int 207 lgfr %r2,%r2 # int
244 jg sys_umask # branch to system call 208 jg sys_umask # branch to system call
245 209
246 .globl sys32_chroot_wrapper 210ENTRY(sys32_chroot_wrapper)
247sys32_chroot_wrapper:
248 llgtr %r2,%r2 # char * 211 llgtr %r2,%r2 # char *
249 jg sys_chroot # branch to system call 212 jg sys_chroot # branch to system call
250 213
251 .globl sys32_ustat_wrapper 214ENTRY(sys32_ustat_wrapper)
252sys32_ustat_wrapper:
253 llgfr %r2,%r2 # dev_t 215 llgfr %r2,%r2 # dev_t
254 llgtr %r3,%r3 # struct ustat * 216 llgtr %r3,%r3 # struct ustat *
255 jg compat_sys_ustat 217 jg compat_sys_ustat
256 218
257 .globl sys32_dup2_wrapper 219ENTRY(sys32_dup2_wrapper)
258sys32_dup2_wrapper:
259 llgfr %r2,%r2 # unsigned int 220 llgfr %r2,%r2 # unsigned int
260 llgfr %r3,%r3 # unsigned int 221 llgfr %r3,%r3 # unsigned int
261 jg sys_dup2 # branch to system call 222 jg sys_dup2 # branch to system call
@@ -266,262 +227,220 @@ sys32_dup2_wrapper:
266 227
267#sys32_setsid_wrapper # void 228#sys32_setsid_wrapper # void
268 229
269 .globl sys32_sigaction_wrapper 230ENTRY(sys32_sigaction_wrapper)
270sys32_sigaction_wrapper:
271 lgfr %r2,%r2 # int 231 lgfr %r2,%r2 # int
272 llgtr %r3,%r3 # const struct old_sigaction * 232 llgtr %r3,%r3 # const struct old_sigaction *
273 llgtr %r4,%r4 # struct old_sigaction32 * 233 llgtr %r4,%r4 # struct old_sigaction32 *
274 jg sys32_sigaction # branch to system call 234 jg sys32_sigaction # branch to system call
275 235
276 .globl sys32_setreuid16_wrapper 236ENTRY(sys32_setreuid16_wrapper)
277sys32_setreuid16_wrapper:
278 llgfr %r2,%r2 # __kernel_old_uid_emu31_t 237 llgfr %r2,%r2 # __kernel_old_uid_emu31_t
279 llgfr %r3,%r3 # __kernel_old_uid_emu31_t 238 llgfr %r3,%r3 # __kernel_old_uid_emu31_t
280 jg sys32_setreuid16 # branch to system call 239 jg sys32_setreuid16 # branch to system call
281 240
282 .globl sys32_setregid16_wrapper 241ENTRY(sys32_setregid16_wrapper)
283sys32_setregid16_wrapper:
284 llgfr %r2,%r2 # __kernel_old_gid_emu31_t 242 llgfr %r2,%r2 # __kernel_old_gid_emu31_t
285 llgfr %r3,%r3 # __kernel_old_gid_emu31_t 243 llgfr %r3,%r3 # __kernel_old_gid_emu31_t
286 jg sys32_setregid16 # branch to system call 244 jg sys32_setregid16 # branch to system call
287 245
288 .globl sys_sigsuspend_wrapper 246ENTRY(sys_sigsuspend_wrapper)
289sys_sigsuspend_wrapper:
290 lgfr %r2,%r2 # int 247 lgfr %r2,%r2 # int
291 lgfr %r3,%r3 # int 248 lgfr %r3,%r3 # int
292 llgfr %r4,%r4 # old_sigset_t 249 llgfr %r4,%r4 # old_sigset_t
293 jg sys_sigsuspend 250 jg sys_sigsuspend
294 251
295 .globl compat_sys_sigpending_wrapper 252ENTRY(compat_sys_sigpending_wrapper)
296compat_sys_sigpending_wrapper:
297 llgtr %r2,%r2 # compat_old_sigset_t * 253 llgtr %r2,%r2 # compat_old_sigset_t *
298 jg compat_sys_sigpending # branch to system call 254 jg compat_sys_sigpending # branch to system call
299 255
300 .globl sys32_sethostname_wrapper 256ENTRY(sys32_sethostname_wrapper)
301sys32_sethostname_wrapper:
302 llgtr %r2,%r2 # char * 257 llgtr %r2,%r2 # char *
303 lgfr %r3,%r3 # int 258 lgfr %r3,%r3 # int
304 jg sys_sethostname # branch to system call 259 jg sys_sethostname # branch to system call
305 260
306 .globl compat_sys_setrlimit_wrapper 261ENTRY(compat_sys_setrlimit_wrapper)
307compat_sys_setrlimit_wrapper:
308 llgfr %r2,%r2 # unsigned int 262 llgfr %r2,%r2 # unsigned int
309 llgtr %r3,%r3 # struct rlimit_emu31 * 263 llgtr %r3,%r3 # struct rlimit_emu31 *
310 jg compat_sys_setrlimit # branch to system call 264 jg compat_sys_setrlimit # branch to system call
311 265
312 .globl compat_sys_old_getrlimit_wrapper 266ENTRY(compat_sys_old_getrlimit_wrapper)
313compat_sys_old_getrlimit_wrapper:
314 llgfr %r2,%r2 # unsigned int 267 llgfr %r2,%r2 # unsigned int
315 llgtr %r3,%r3 # struct rlimit_emu31 * 268 llgtr %r3,%r3 # struct rlimit_emu31 *
316 jg compat_sys_old_getrlimit # branch to system call 269 jg compat_sys_old_getrlimit # branch to system call
317 270
318 .globl compat_sys_getrlimit_wrapper 271ENTRY(compat_sys_getrlimit_wrapper)
319compat_sys_getrlimit_wrapper:
320 llgfr %r2,%r2 # unsigned int 272 llgfr %r2,%r2 # unsigned int
321 llgtr %r3,%r3 # struct rlimit_emu31 * 273 llgtr %r3,%r3 # struct rlimit_emu31 *
322 jg compat_sys_getrlimit # branch to system call 274 jg compat_sys_getrlimit # branch to system call
323 275
324 .globl sys32_mmap2_wrapper 276ENTRY(sys32_mmap2_wrapper)
325sys32_mmap2_wrapper:
326 llgtr %r2,%r2 # struct mmap_arg_struct_emu31 * 277 llgtr %r2,%r2 # struct mmap_arg_struct_emu31 *
327 jg sys32_mmap2 # branch to system call 278 jg sys32_mmap2 # branch to system call
328 279
329 .globl compat_sys_getrusage_wrapper 280ENTRY(compat_sys_getrusage_wrapper)
330compat_sys_getrusage_wrapper:
331 lgfr %r2,%r2 # int 281 lgfr %r2,%r2 # int
332 llgtr %r3,%r3 # struct rusage_emu31 * 282 llgtr %r3,%r3 # struct rusage_emu31 *
333 jg compat_sys_getrusage # branch to system call 283 jg compat_sys_getrusage # branch to system call
334 284
335 .globl compat_sys_gettimeofday_wrapper 285ENTRY(compat_sys_gettimeofday_wrapper)
336compat_sys_gettimeofday_wrapper:
337 llgtr %r2,%r2 # struct timeval_emu31 * 286 llgtr %r2,%r2 # struct timeval_emu31 *
338 llgtr %r3,%r3 # struct timezone * 287 llgtr %r3,%r3 # struct timezone *
339 jg compat_sys_gettimeofday # branch to system call 288 jg compat_sys_gettimeofday # branch to system call
340 289
341 .globl compat_sys_settimeofday_wrapper 290ENTRY(compat_sys_settimeofday_wrapper)
342compat_sys_settimeofday_wrapper:
343 llgtr %r2,%r2 # struct timeval_emu31 * 291 llgtr %r2,%r2 # struct timeval_emu31 *
344 llgtr %r3,%r3 # struct timezone * 292 llgtr %r3,%r3 # struct timezone *
345 jg compat_sys_settimeofday # branch to system call 293 jg compat_sys_settimeofday # branch to system call
346 294
347 .globl sys32_getgroups16_wrapper 295ENTRY(sys32_getgroups16_wrapper)
348sys32_getgroups16_wrapper:
349 lgfr %r2,%r2 # int 296 lgfr %r2,%r2 # int
350 llgtr %r3,%r3 # __kernel_old_gid_emu31_t * 297 llgtr %r3,%r3 # __kernel_old_gid_emu31_t *
351 jg sys32_getgroups16 # branch to system call 298 jg sys32_getgroups16 # branch to system call
352 299
353 .globl sys32_setgroups16_wrapper 300ENTRY(sys32_setgroups16_wrapper)
354sys32_setgroups16_wrapper:
355 lgfr %r2,%r2 # int 301 lgfr %r2,%r2 # int
356 llgtr %r3,%r3 # __kernel_old_gid_emu31_t * 302 llgtr %r3,%r3 # __kernel_old_gid_emu31_t *
357 jg sys32_setgroups16 # branch to system call 303 jg sys32_setgroups16 # branch to system call
358 304
359 .globl sys32_symlink_wrapper 305ENTRY(sys32_symlink_wrapper)
360sys32_symlink_wrapper:
361 llgtr %r2,%r2 # const char * 306 llgtr %r2,%r2 # const char *
362 llgtr %r3,%r3 # const char * 307 llgtr %r3,%r3 # const char *
363 jg sys_symlink # branch to system call 308 jg sys_symlink # branch to system call
364 309
365 .globl sys32_readlink_wrapper 310ENTRY(sys32_readlink_wrapper)
366sys32_readlink_wrapper:
367 llgtr %r2,%r2 # const char * 311 llgtr %r2,%r2 # const char *
368 llgtr %r3,%r3 # char * 312 llgtr %r3,%r3 # char *
369 lgfr %r4,%r4 # int 313 lgfr %r4,%r4 # int
370 jg sys_readlink # branch to system call 314 jg sys_readlink # branch to system call
371 315
372 .globl sys32_uselib_wrapper 316ENTRY(sys32_uselib_wrapper)
373sys32_uselib_wrapper:
374 llgtr %r2,%r2 # const char * 317 llgtr %r2,%r2 # const char *
375 jg sys_uselib # branch to system call 318 jg sys_uselib # branch to system call
376 319
377 .globl sys32_swapon_wrapper 320ENTRY(sys32_swapon_wrapper)
378sys32_swapon_wrapper:
379 llgtr %r2,%r2 # const char * 321 llgtr %r2,%r2 # const char *
380 lgfr %r3,%r3 # int 322 lgfr %r3,%r3 # int
381 jg sys_swapon # branch to system call 323 jg sys_swapon # branch to system call
382 324
383 .globl sys32_reboot_wrapper 325ENTRY(sys32_reboot_wrapper)
384sys32_reboot_wrapper:
385 lgfr %r2,%r2 # int 326 lgfr %r2,%r2 # int
386 lgfr %r3,%r3 # int 327 lgfr %r3,%r3 # int
387 llgfr %r4,%r4 # unsigned int 328 llgfr %r4,%r4 # unsigned int
388 llgtr %r5,%r5 # void * 329 llgtr %r5,%r5 # void *
389 jg sys_reboot # branch to system call 330 jg sys_reboot # branch to system call
390 331
391 .globl old32_readdir_wrapper 332ENTRY(old32_readdir_wrapper)
392old32_readdir_wrapper:
393 llgfr %r2,%r2 # unsigned int 333 llgfr %r2,%r2 # unsigned int
394 llgtr %r3,%r3 # void * 334 llgtr %r3,%r3 # void *
395 llgfr %r4,%r4 # unsigned int 335 llgfr %r4,%r4 # unsigned int
396 jg compat_sys_old_readdir # branch to system call 336 jg compat_sys_old_readdir # branch to system call
397 337
398 .globl old32_mmap_wrapper 338ENTRY(old32_mmap_wrapper)
399old32_mmap_wrapper:
400 llgtr %r2,%r2 # struct mmap_arg_struct_emu31 * 339 llgtr %r2,%r2 # struct mmap_arg_struct_emu31 *
401 jg old32_mmap # branch to system call 340 jg old32_mmap # branch to system call
402 341
403 .globl sys32_munmap_wrapper 342ENTRY(sys32_munmap_wrapper)
404sys32_munmap_wrapper:
405 llgfr %r2,%r2 # unsigned long 343 llgfr %r2,%r2 # unsigned long
406 llgfr %r3,%r3 # size_t 344 llgfr %r3,%r3 # size_t
407 jg sys_munmap # branch to system call 345 jg sys_munmap # branch to system call
408 346
409 .globl sys32_truncate_wrapper 347ENTRY(sys32_truncate_wrapper)
410sys32_truncate_wrapper:
411 llgtr %r2,%r2 # const char * 348 llgtr %r2,%r2 # const char *
412 lgfr %r3,%r3 # long 349 lgfr %r3,%r3 # long
413 jg sys_truncate # branch to system call 350 jg sys_truncate # branch to system call
414 351
415 .globl sys32_ftruncate_wrapper 352ENTRY(sys32_ftruncate_wrapper)
416sys32_ftruncate_wrapper:
417 llgfr %r2,%r2 # unsigned int 353 llgfr %r2,%r2 # unsigned int
418 llgfr %r3,%r3 # unsigned long 354 llgfr %r3,%r3 # unsigned long
419 jg sys_ftruncate # branch to system call 355 jg sys_ftruncate # branch to system call
420 356
421 .globl sys32_fchmod_wrapper 357ENTRY(sys32_fchmod_wrapper)
422sys32_fchmod_wrapper:
423 llgfr %r2,%r2 # unsigned int 358 llgfr %r2,%r2 # unsigned int
424 llgfr %r3,%r3 # mode_t 359 llgfr %r3,%r3 # mode_t
425 jg sys_fchmod # branch to system call 360 jg sys_fchmod # branch to system call
426 361
427 .globl sys32_fchown16_wrapper 362ENTRY(sys32_fchown16_wrapper)
428sys32_fchown16_wrapper:
429 llgfr %r2,%r2 # unsigned int 363 llgfr %r2,%r2 # unsigned int
430 llgfr %r3,%r3 # compat_uid_t 364 llgfr %r3,%r3 # compat_uid_t
431 llgfr %r4,%r4 # compat_uid_t 365 llgfr %r4,%r4 # compat_uid_t
432 jg sys32_fchown16 # branch to system call 366 jg sys32_fchown16 # branch to system call
433 367
434 .globl sys32_getpriority_wrapper 368ENTRY(sys32_getpriority_wrapper)
435sys32_getpriority_wrapper:
436 lgfr %r2,%r2 # int 369 lgfr %r2,%r2 # int
437 lgfr %r3,%r3 # int 370 lgfr %r3,%r3 # int
438 jg sys_getpriority # branch to system call 371 jg sys_getpriority # branch to system call
439 372
440 .globl sys32_setpriority_wrapper 373ENTRY(sys32_setpriority_wrapper)
441sys32_setpriority_wrapper:
442 lgfr %r2,%r2 # int 374 lgfr %r2,%r2 # int
443 lgfr %r3,%r3 # int 375 lgfr %r3,%r3 # int
444 lgfr %r4,%r4 # int 376 lgfr %r4,%r4 # int
445 jg sys_setpriority # branch to system call 377 jg sys_setpriority # branch to system call
446 378
447 .globl compat_sys_statfs_wrapper 379ENTRY(compat_sys_statfs_wrapper)
448compat_sys_statfs_wrapper:
449 llgtr %r2,%r2 # char * 380 llgtr %r2,%r2 # char *
450 llgtr %r3,%r3 # struct compat_statfs * 381 llgtr %r3,%r3 # struct compat_statfs *
451 jg compat_sys_statfs # branch to system call 382 jg compat_sys_statfs # branch to system call
452 383
453 .globl compat_sys_fstatfs_wrapper 384ENTRY(compat_sys_fstatfs_wrapper)
454compat_sys_fstatfs_wrapper:
455 llgfr %r2,%r2 # unsigned int 385 llgfr %r2,%r2 # unsigned int
456 llgtr %r3,%r3 # struct compat_statfs * 386 llgtr %r3,%r3 # struct compat_statfs *
457 jg compat_sys_fstatfs # branch to system call 387 jg compat_sys_fstatfs # branch to system call
458 388
459 .globl compat_sys_socketcall_wrapper 389ENTRY(compat_sys_socketcall_wrapper)
460compat_sys_socketcall_wrapper:
461 lgfr %r2,%r2 # int 390 lgfr %r2,%r2 # int
462 llgtr %r3,%r3 # u32 * 391 llgtr %r3,%r3 # u32 *
463 jg compat_sys_socketcall # branch to system call 392 jg compat_sys_socketcall # branch to system call
464 393
465 .globl sys32_syslog_wrapper 394ENTRY(sys32_syslog_wrapper)
466sys32_syslog_wrapper:
467 lgfr %r2,%r2 # int 395 lgfr %r2,%r2 # int
468 llgtr %r3,%r3 # char * 396 llgtr %r3,%r3 # char *
469 lgfr %r4,%r4 # int 397 lgfr %r4,%r4 # int
470 jg sys_syslog # branch to system call 398 jg sys_syslog # branch to system call
471 399
472 .globl compat_sys_setitimer_wrapper 400ENTRY(compat_sys_setitimer_wrapper)
473compat_sys_setitimer_wrapper:
474 lgfr %r2,%r2 # int 401 lgfr %r2,%r2 # int
475 llgtr %r3,%r3 # struct itimerval_emu31 * 402 llgtr %r3,%r3 # struct itimerval_emu31 *
476 llgtr %r4,%r4 # struct itimerval_emu31 * 403 llgtr %r4,%r4 # struct itimerval_emu31 *
477 jg compat_sys_setitimer # branch to system call 404 jg compat_sys_setitimer # branch to system call
478 405
479 .globl compat_sys_getitimer_wrapper 406ENTRY(compat_sys_getitimer_wrapper)
480compat_sys_getitimer_wrapper:
481 lgfr %r2,%r2 # int 407 lgfr %r2,%r2 # int
482 llgtr %r3,%r3 # struct itimerval_emu31 * 408 llgtr %r3,%r3 # struct itimerval_emu31 *
483 jg compat_sys_getitimer # branch to system call 409 jg compat_sys_getitimer # branch to system call
484 410
485 .globl compat_sys_newstat_wrapper 411ENTRY(compat_sys_newstat_wrapper)
486compat_sys_newstat_wrapper:
487 llgtr %r2,%r2 # char * 412 llgtr %r2,%r2 # char *
488 llgtr %r3,%r3 # struct stat_emu31 * 413 llgtr %r3,%r3 # struct stat_emu31 *
489 jg compat_sys_newstat # branch to system call 414 jg compat_sys_newstat # branch to system call
490 415
491 .globl compat_sys_newlstat_wrapper 416ENTRY(compat_sys_newlstat_wrapper)
492compat_sys_newlstat_wrapper:
493 llgtr %r2,%r2 # char * 417 llgtr %r2,%r2 # char *
494 llgtr %r3,%r3 # struct stat_emu31 * 418 llgtr %r3,%r3 # struct stat_emu31 *
495 jg compat_sys_newlstat # branch to system call 419 jg compat_sys_newlstat # branch to system call
496 420
497 .globl compat_sys_newfstat_wrapper 421ENTRY(compat_sys_newfstat_wrapper)
498compat_sys_newfstat_wrapper:
499 llgfr %r2,%r2 # unsigned int 422 llgfr %r2,%r2 # unsigned int
500 llgtr %r3,%r3 # struct stat_emu31 * 423 llgtr %r3,%r3 # struct stat_emu31 *
501 jg compat_sys_newfstat # branch to system call 424 jg compat_sys_newfstat # branch to system call
502 425
503#sys32_vhangup_wrapper # void 426#sys32_vhangup_wrapper # void
504 427
505 .globl compat_sys_wait4_wrapper 428ENTRY(compat_sys_wait4_wrapper)
506compat_sys_wait4_wrapper:
507 lgfr %r2,%r2 # pid_t 429 lgfr %r2,%r2 # pid_t
508 llgtr %r3,%r3 # unsigned int * 430 llgtr %r3,%r3 # unsigned int *
509 lgfr %r4,%r4 # int 431 lgfr %r4,%r4 # int
510 llgtr %r5,%r5 # struct rusage * 432 llgtr %r5,%r5 # struct rusage *
511 jg compat_sys_wait4 # branch to system call 433 jg compat_sys_wait4 # branch to system call
512 434
513 .globl sys32_swapoff_wrapper 435ENTRY(sys32_swapoff_wrapper)
514sys32_swapoff_wrapper:
515 llgtr %r2,%r2 # const char * 436 llgtr %r2,%r2 # const char *
516 jg sys_swapoff # branch to system call 437 jg sys_swapoff # branch to system call
517 438
518 .globl compat_sys_sysinfo_wrapper 439ENTRY(compat_sys_sysinfo_wrapper)
519compat_sys_sysinfo_wrapper:
520 llgtr %r2,%r2 # struct sysinfo_emu31 * 440 llgtr %r2,%r2 # struct sysinfo_emu31 *
521 jg compat_sys_sysinfo # branch to system call 441 jg compat_sys_sysinfo # branch to system call
522 442
523 .globl sys32_ipc_wrapper 443ENTRY(sys32_ipc_wrapper)
524sys32_ipc_wrapper:
525 llgfr %r2,%r2 # uint 444 llgfr %r2,%r2 # uint
526 lgfr %r3,%r3 # int 445 lgfr %r3,%r3 # int
527 lgfr %r4,%r4 # int 446 lgfr %r4,%r4 # int
@@ -529,8 +448,7 @@ sys32_ipc_wrapper:
529 llgfr %r6,%r6 # u32 448 llgfr %r6,%r6 # u32
530 jg sys32_ipc # branch to system call 449 jg sys32_ipc # branch to system call
531 450
532 .globl sys32_fsync_wrapper 451ENTRY(sys32_fsync_wrapper)
533sys32_fsync_wrapper:
534 llgfr %r2,%r2 # unsigned int 452 llgfr %r2,%r2 # unsigned int
535 jg sys_fsync # branch to system call 453 jg sys_fsync # branch to system call
536 454
@@ -538,97 +456,81 @@ sys32_fsync_wrapper:
538 456
539#sys32_clone_wrapper # done in clone_glue 457#sys32_clone_wrapper # done in clone_glue
540 458
541 .globl sys32_setdomainname_wrapper 459ENTRY(sys32_setdomainname_wrapper)
542sys32_setdomainname_wrapper:
543 llgtr %r2,%r2 # char * 460 llgtr %r2,%r2 # char *
544 lgfr %r3,%r3 # int 461 lgfr %r3,%r3 # int
545 jg sys_setdomainname # branch to system call 462 jg sys_setdomainname # branch to system call
546 463
547 .globl sys32_newuname_wrapper 464ENTRY(sys32_newuname_wrapper)
548sys32_newuname_wrapper:
549 llgtr %r2,%r2 # struct new_utsname * 465 llgtr %r2,%r2 # struct new_utsname *
550 jg sys_newuname # branch to system call 466 jg sys_newuname # branch to system call
551 467
552 .globl compat_sys_adjtimex_wrapper 468ENTRY(compat_sys_adjtimex_wrapper)
553compat_sys_adjtimex_wrapper:
554 llgtr %r2,%r2 # struct compat_timex * 469 llgtr %r2,%r2 # struct compat_timex *
555 jg compat_sys_adjtimex # branch to system call 470 jg compat_sys_adjtimex # branch to system call
556 471
557 .globl sys32_mprotect_wrapper 472ENTRY(sys32_mprotect_wrapper)
558sys32_mprotect_wrapper:
559 llgtr %r2,%r2 # unsigned long (actually pointer 473 llgtr %r2,%r2 # unsigned long (actually pointer
560 llgfr %r3,%r3 # size_t 474 llgfr %r3,%r3 # size_t
561 llgfr %r4,%r4 # unsigned long 475 llgfr %r4,%r4 # unsigned long
562 jg sys_mprotect # branch to system call 476 jg sys_mprotect # branch to system call
563 477
564 .globl compat_sys_sigprocmask_wrapper 478ENTRY(compat_sys_sigprocmask_wrapper)
565compat_sys_sigprocmask_wrapper:
566 lgfr %r2,%r2 # int 479 lgfr %r2,%r2 # int
567 llgtr %r3,%r3 # compat_old_sigset_t * 480 llgtr %r3,%r3 # compat_old_sigset_t *
568 llgtr %r4,%r4 # compat_old_sigset_t * 481 llgtr %r4,%r4 # compat_old_sigset_t *
569 jg compat_sys_sigprocmask # branch to system call 482 jg compat_sys_sigprocmask # branch to system call
570 483
571 .globl sys_init_module_wrapper 484ENTRY(sys_init_module_wrapper)
572sys_init_module_wrapper:
573 llgtr %r2,%r2 # void * 485 llgtr %r2,%r2 # void *
574 llgfr %r3,%r3 # unsigned long 486 llgfr %r3,%r3 # unsigned long
575 llgtr %r4,%r4 # char * 487 llgtr %r4,%r4 # char *
576 jg sys_init_module # branch to system call 488 jg sys_init_module # branch to system call
577 489
578 .globl sys_delete_module_wrapper 490ENTRY(sys_delete_module_wrapper)
579sys_delete_module_wrapper:
580 llgtr %r2,%r2 # const char * 491 llgtr %r2,%r2 # const char *
581 llgfr %r3,%r3 # unsigned int 492 llgfr %r3,%r3 # unsigned int
582 jg sys_delete_module # branch to system call 493 jg sys_delete_module # branch to system call
583 494
584 .globl sys32_quotactl_wrapper 495ENTRY(sys32_quotactl_wrapper)
585sys32_quotactl_wrapper:
586 llgfr %r2,%r2 # unsigned int 496 llgfr %r2,%r2 # unsigned int
587 llgtr %r3,%r3 # const char * 497 llgtr %r3,%r3 # const char *
588 llgfr %r4,%r4 # qid_t 498 llgfr %r4,%r4 # qid_t
589 llgtr %r5,%r5 # caddr_t 499 llgtr %r5,%r5 # caddr_t
590 jg sys_quotactl # branch to system call 500 jg sys_quotactl # branch to system call
591 501
592 .globl sys32_getpgid_wrapper 502ENTRY(sys32_getpgid_wrapper)
593sys32_getpgid_wrapper:
594 lgfr %r2,%r2 # pid_t 503 lgfr %r2,%r2 # pid_t
595 jg sys_getpgid # branch to system call 504 jg sys_getpgid # branch to system call
596 505
597 .globl sys32_fchdir_wrapper 506ENTRY(sys32_fchdir_wrapper)
598sys32_fchdir_wrapper:
599 llgfr %r2,%r2 # unsigned int 507 llgfr %r2,%r2 # unsigned int
600 jg sys_fchdir # branch to system call 508 jg sys_fchdir # branch to system call
601 509
602 .globl sys32_bdflush_wrapper 510ENTRY(sys32_bdflush_wrapper)
603sys32_bdflush_wrapper:
604 lgfr %r2,%r2 # int 511 lgfr %r2,%r2 # int
605 lgfr %r3,%r3 # long 512 lgfr %r3,%r3 # long
606 jg sys_bdflush # branch to system call 513 jg sys_bdflush # branch to system call
607 514
608 .globl sys32_sysfs_wrapper 515ENTRY(sys32_sysfs_wrapper)
609sys32_sysfs_wrapper:
610 lgfr %r2,%r2 # int 516 lgfr %r2,%r2 # int
611 llgfr %r3,%r3 # unsigned long 517 llgfr %r3,%r3 # unsigned long
612 llgfr %r4,%r4 # unsigned long 518 llgfr %r4,%r4 # unsigned long
613 jg sys_sysfs # branch to system call 519 jg sys_sysfs # branch to system call
614 520
615 .globl sys32_personality_wrapper 521ENTRY(sys32_personality_wrapper)
616sys32_personality_wrapper:
617 llgfr %r2,%r2 # unsigned int 522 llgfr %r2,%r2 # unsigned int
618 jg sys_s390_personality # branch to system call 523 jg sys_s390_personality # branch to system call
619 524
620 .globl sys32_setfsuid16_wrapper 525ENTRY(sys32_setfsuid16_wrapper)
621sys32_setfsuid16_wrapper:
622 llgfr %r2,%r2 # __kernel_old_uid_emu31_t 526 llgfr %r2,%r2 # __kernel_old_uid_emu31_t
623 jg sys32_setfsuid16 # branch to system call 527 jg sys32_setfsuid16 # branch to system call
624 528
625 .globl sys32_setfsgid16_wrapper 529ENTRY(sys32_setfsgid16_wrapper)
626sys32_setfsgid16_wrapper:
627 llgfr %r2,%r2 # __kernel_old_gid_emu31_t 530 llgfr %r2,%r2 # __kernel_old_gid_emu31_t
628 jg sys32_setfsgid16 # branch to system call 531 jg sys32_setfsgid16 # branch to system call
629 532
630 .globl sys32_llseek_wrapper 533ENTRY(sys32_llseek_wrapper)
631sys32_llseek_wrapper:
632 llgfr %r2,%r2 # unsigned int 534 llgfr %r2,%r2 # unsigned int
633 llgfr %r3,%r3 # unsigned long 535 llgfr %r3,%r3 # unsigned long
634 llgfr %r4,%r4 # unsigned long 536 llgfr %r4,%r4 # unsigned long
@@ -636,15 +538,13 @@ sys32_llseek_wrapper:
636 llgfr %r6,%r6 # unsigned int 538 llgfr %r6,%r6 # unsigned int
637 jg sys_llseek # branch to system call 539 jg sys_llseek # branch to system call
638 540
639 .globl sys32_getdents_wrapper 541ENTRY(sys32_getdents_wrapper)
640sys32_getdents_wrapper:
641 llgfr %r2,%r2 # unsigned int 542 llgfr %r2,%r2 # unsigned int
642 llgtr %r3,%r3 # void * 543 llgtr %r3,%r3 # void *
643 llgfr %r4,%r4 # unsigned int 544 llgfr %r4,%r4 # unsigned int
644 jg compat_sys_getdents # branch to system call 545 jg compat_sys_getdents # branch to system call
645 546
646 .globl compat_sys_select_wrapper 547ENTRY(compat_sys_select_wrapper)
647compat_sys_select_wrapper:
648 lgfr %r2,%r2 # int 548 lgfr %r2,%r2 # int
649 llgtr %r3,%r3 # compat_fd_set * 549 llgtr %r3,%r3 # compat_fd_set *
650 llgtr %r4,%r4 # compat_fd_set * 550 llgtr %r4,%r4 # compat_fd_set *
@@ -652,112 +552,94 @@ compat_sys_select_wrapper:
652 llgtr %r6,%r6 # struct compat_timeval * 552 llgtr %r6,%r6 # struct compat_timeval *
653 jg compat_sys_select # branch to system call 553 jg compat_sys_select # branch to system call
654 554
655 .globl sys32_flock_wrapper 555ENTRY(sys32_flock_wrapper)
656sys32_flock_wrapper:
657 llgfr %r2,%r2 # unsigned int 556 llgfr %r2,%r2 # unsigned int
658 llgfr %r3,%r3 # unsigned int 557 llgfr %r3,%r3 # unsigned int
659 jg sys_flock # branch to system call 558 jg sys_flock # branch to system call
660 559
661 .globl sys32_msync_wrapper 560ENTRY(sys32_msync_wrapper)
662sys32_msync_wrapper:
663 llgfr %r2,%r2 # unsigned long 561 llgfr %r2,%r2 # unsigned long
664 llgfr %r3,%r3 # size_t 562 llgfr %r3,%r3 # size_t
665 lgfr %r4,%r4 # int 563 lgfr %r4,%r4 # int
666 jg sys_msync # branch to system call 564 jg sys_msync # branch to system call
667 565
668 .globl compat_sys_readv_wrapper 566ENTRY(compat_sys_readv_wrapper)
669compat_sys_readv_wrapper:
670 lgfr %r2,%r2 # int 567 lgfr %r2,%r2 # int
671 llgtr %r3,%r3 # const struct compat_iovec * 568 llgtr %r3,%r3 # const struct compat_iovec *
672 llgfr %r4,%r4 # unsigned long 569 llgfr %r4,%r4 # unsigned long
673 jg compat_sys_readv # branch to system call 570 jg compat_sys_readv # branch to system call
674 571
675 .globl compat_sys_writev_wrapper 572ENTRY(compat_sys_writev_wrapper)
676compat_sys_writev_wrapper:
677 lgfr %r2,%r2 # int 573 lgfr %r2,%r2 # int
678 llgtr %r3,%r3 # const struct compat_iovec * 574 llgtr %r3,%r3 # const struct compat_iovec *
679 llgfr %r4,%r4 # unsigned long 575 llgfr %r4,%r4 # unsigned long
680 jg compat_sys_writev # branch to system call 576 jg compat_sys_writev # branch to system call
681 577
682 .globl sys32_getsid_wrapper 578ENTRY(sys32_getsid_wrapper)
683sys32_getsid_wrapper:
684 lgfr %r2,%r2 # pid_t 579 lgfr %r2,%r2 # pid_t
685 jg sys_getsid # branch to system call 580 jg sys_getsid # branch to system call
686 581
687 .globl sys32_fdatasync_wrapper 582ENTRY(sys32_fdatasync_wrapper)
688sys32_fdatasync_wrapper:
689 llgfr %r2,%r2 # unsigned int 583 llgfr %r2,%r2 # unsigned int
690 jg sys_fdatasync # branch to system call 584 jg sys_fdatasync # branch to system call
691 585
692 .globl sys32_mlock_wrapper 586ENTRY(sys32_mlock_wrapper)
693sys32_mlock_wrapper:
694 llgfr %r2,%r2 # unsigned long 587 llgfr %r2,%r2 # unsigned long
695 llgfr %r3,%r3 # size_t 588 llgfr %r3,%r3 # size_t
696 jg sys_mlock # branch to system call 589 jg sys_mlock # branch to system call
697 590
698 .globl sys32_munlock_wrapper 591ENTRY(sys32_munlock_wrapper)
699sys32_munlock_wrapper:
700 llgfr %r2,%r2 # unsigned long 592 llgfr %r2,%r2 # unsigned long
701 llgfr %r3,%r3 # size_t 593 llgfr %r3,%r3 # size_t
702 jg sys_munlock # branch to system call 594 jg sys_munlock # branch to system call
703 595
704 .globl sys32_mlockall_wrapper 596ENTRY(sys32_mlockall_wrapper)
705sys32_mlockall_wrapper:
706 lgfr %r2,%r2 # int 597 lgfr %r2,%r2 # int
707 jg sys_mlockall # branch to system call 598 jg sys_mlockall # branch to system call
708 599
709#sys32_munlockall_wrapper # void 600#sys32_munlockall_wrapper # void
710 601
711 .globl sys32_sched_setparam_wrapper 602ENTRY(sys32_sched_setparam_wrapper)
712sys32_sched_setparam_wrapper:
713 lgfr %r2,%r2 # pid_t 603 lgfr %r2,%r2 # pid_t
714 llgtr %r3,%r3 # struct sched_param * 604 llgtr %r3,%r3 # struct sched_param *
715 jg sys_sched_setparam # branch to system call 605 jg sys_sched_setparam # branch to system call
716 606
717 .globl sys32_sched_getparam_wrapper 607ENTRY(sys32_sched_getparam_wrapper)
718sys32_sched_getparam_wrapper:
719 lgfr %r2,%r2 # pid_t 608 lgfr %r2,%r2 # pid_t
720 llgtr %r3,%r3 # struct sched_param * 609 llgtr %r3,%r3 # struct sched_param *
721 jg sys_sched_getparam # branch to system call 610 jg sys_sched_getparam # branch to system call
722 611
723 .globl sys32_sched_setscheduler_wrapper 612ENTRY(sys32_sched_setscheduler_wrapper)
724sys32_sched_setscheduler_wrapper:
725 lgfr %r2,%r2 # pid_t 613 lgfr %r2,%r2 # pid_t
726 lgfr %r3,%r3 # int 614 lgfr %r3,%r3 # int
727 llgtr %r4,%r4 # struct sched_param * 615 llgtr %r4,%r4 # struct sched_param *
728 jg sys_sched_setscheduler # branch to system call 616 jg sys_sched_setscheduler # branch to system call
729 617
730 .globl sys32_sched_getscheduler_wrapper 618ENTRY(sys32_sched_getscheduler_wrapper)
731sys32_sched_getscheduler_wrapper:
732 lgfr %r2,%r2 # pid_t 619 lgfr %r2,%r2 # pid_t
733 jg sys_sched_getscheduler # branch to system call 620 jg sys_sched_getscheduler # branch to system call
734 621
735#sys32_sched_yield_wrapper # void 622#sys32_sched_yield_wrapper # void
736 623
737 .globl sys32_sched_get_priority_max_wrapper 624ENTRY(sys32_sched_get_priority_max_wrapper)
738sys32_sched_get_priority_max_wrapper:
739 lgfr %r2,%r2 # int 625 lgfr %r2,%r2 # int
740 jg sys_sched_get_priority_max # branch to system call 626 jg sys_sched_get_priority_max # branch to system call
741 627
742 .globl sys32_sched_get_priority_min_wrapper 628ENTRY(sys32_sched_get_priority_min_wrapper)
743sys32_sched_get_priority_min_wrapper:
744 lgfr %r2,%r2 # int 629 lgfr %r2,%r2 # int
745 jg sys_sched_get_priority_min # branch to system call 630 jg sys_sched_get_priority_min # branch to system call
746 631
747 .globl sys32_sched_rr_get_interval_wrapper 632ENTRY(sys32_sched_rr_get_interval_wrapper)
748sys32_sched_rr_get_interval_wrapper:
749 lgfr %r2,%r2 # pid_t 633 lgfr %r2,%r2 # pid_t
750 llgtr %r3,%r3 # struct compat_timespec * 634 llgtr %r3,%r3 # struct compat_timespec *
751 jg sys32_sched_rr_get_interval # branch to system call 635 jg sys32_sched_rr_get_interval # branch to system call
752 636
753 .globl compat_sys_nanosleep_wrapper 637ENTRY(compat_sys_nanosleep_wrapper)
754compat_sys_nanosleep_wrapper:
755 llgtr %r2,%r2 # struct compat_timespec * 638 llgtr %r2,%r2 # struct compat_timespec *
756 llgtr %r3,%r3 # struct compat_timespec * 639 llgtr %r3,%r3 # struct compat_timespec *
757 jg compat_sys_nanosleep # branch to system call 640 jg compat_sys_nanosleep # branch to system call
758 641
759 .globl sys32_mremap_wrapper 642ENTRY(sys32_mremap_wrapper)
760sys32_mremap_wrapper:
761 llgfr %r2,%r2 # unsigned long 643 llgfr %r2,%r2 # unsigned long
762 llgfr %r3,%r3 # unsigned long 644 llgfr %r3,%r3 # unsigned long
763 llgfr %r4,%r4 # unsigned long 645 llgfr %r4,%r4 # unsigned long
@@ -765,50 +647,37 @@ sys32_mremap_wrapper:
765 llgfr %r6,%r6 # unsigned long 647 llgfr %r6,%r6 # unsigned long
766 jg sys_mremap # branch to system call 648 jg sys_mremap # branch to system call
767 649
768 .globl sys32_setresuid16_wrapper 650ENTRY(sys32_setresuid16_wrapper)
769sys32_setresuid16_wrapper:
770 llgfr %r2,%r2 # __kernel_old_uid_emu31_t 651 llgfr %r2,%r2 # __kernel_old_uid_emu31_t
771 llgfr %r3,%r3 # __kernel_old_uid_emu31_t 652 llgfr %r3,%r3 # __kernel_old_uid_emu31_t
772 llgfr %r4,%r4 # __kernel_old_uid_emu31_t 653 llgfr %r4,%r4 # __kernel_old_uid_emu31_t
773 jg sys32_setresuid16 # branch to system call 654 jg sys32_setresuid16 # branch to system call
774 655
775 .globl sys32_getresuid16_wrapper 656ENTRY(sys32_getresuid16_wrapper)
776sys32_getresuid16_wrapper:
777 llgtr %r2,%r2 # __kernel_old_uid_emu31_t * 657 llgtr %r2,%r2 # __kernel_old_uid_emu31_t *
778 llgtr %r3,%r3 # __kernel_old_uid_emu31_t * 658 llgtr %r3,%r3 # __kernel_old_uid_emu31_t *
779 llgtr %r4,%r4 # __kernel_old_uid_emu31_t * 659 llgtr %r4,%r4 # __kernel_old_uid_emu31_t *
780 jg sys32_getresuid16 # branch to system call 660 jg sys32_getresuid16 # branch to system call
781 661
782 .globl sys32_poll_wrapper 662ENTRY(sys32_poll_wrapper)
783sys32_poll_wrapper:
784 llgtr %r2,%r2 # struct pollfd * 663 llgtr %r2,%r2 # struct pollfd *
785 llgfr %r3,%r3 # unsigned int 664 llgfr %r3,%r3 # unsigned int
786 lgfr %r4,%r4 # long 665 lgfr %r4,%r4 # long
787 jg sys_poll # branch to system call 666 jg sys_poll # branch to system call
788 667
789 .globl compat_sys_nfsservctl_wrapper 668ENTRY(sys32_setresgid16_wrapper)
790compat_sys_nfsservctl_wrapper:
791 lgfr %r2,%r2 # int
792 llgtr %r3,%r3 # struct compat_nfsctl_arg*
793 llgtr %r4,%r4 # union compat_nfsctl_res*
794 jg compat_sys_nfsservctl # branch to system call
795
796 .globl sys32_setresgid16_wrapper
797sys32_setresgid16_wrapper:
798 llgfr %r2,%r2 # __kernel_old_gid_emu31_t 669 llgfr %r2,%r2 # __kernel_old_gid_emu31_t
799 llgfr %r3,%r3 # __kernel_old_gid_emu31_t 670 llgfr %r3,%r3 # __kernel_old_gid_emu31_t
800 llgfr %r4,%r4 # __kernel_old_gid_emu31_t 671 llgfr %r4,%r4 # __kernel_old_gid_emu31_t
801 jg sys32_setresgid16 # branch to system call 672 jg sys32_setresgid16 # branch to system call
802 673
803 .globl sys32_getresgid16_wrapper 674ENTRY(sys32_getresgid16_wrapper)
804sys32_getresgid16_wrapper:
805 llgtr %r2,%r2 # __kernel_old_gid_emu31_t * 675 llgtr %r2,%r2 # __kernel_old_gid_emu31_t *
806 llgtr %r3,%r3 # __kernel_old_gid_emu31_t * 676 llgtr %r3,%r3 # __kernel_old_gid_emu31_t *
807 llgtr %r4,%r4 # __kernel_old_gid_emu31_t * 677 llgtr %r4,%r4 # __kernel_old_gid_emu31_t *
808 jg sys32_getresgid16 # branch to system call 678 jg sys32_getresgid16 # branch to system call
809 679
810 .globl sys32_prctl_wrapper 680ENTRY(sys32_prctl_wrapper)
811sys32_prctl_wrapper:
812 lgfr %r2,%r2 # int 681 lgfr %r2,%r2 # int
813 llgfr %r3,%r3 # unsigned long 682 llgfr %r3,%r3 # unsigned long
814 llgfr %r4,%r4 # unsigned long 683 llgfr %r4,%r4 # unsigned long
@@ -818,51 +687,44 @@ sys32_prctl_wrapper:
818 687
819#sys32_rt_sigreturn_wrapper # done in rt_sigreturn_glue 688#sys32_rt_sigreturn_wrapper # done in rt_sigreturn_glue
820 689
821 .globl sys32_rt_sigaction_wrapper 690ENTRY(sys32_rt_sigaction_wrapper)
822sys32_rt_sigaction_wrapper:
823 lgfr %r2,%r2 # int 691 lgfr %r2,%r2 # int
824 llgtr %r3,%r3 # const struct sigaction_emu31 * 692 llgtr %r3,%r3 # const struct sigaction_emu31 *
825 llgtr %r4,%r4 # const struct sigaction_emu31 * 693 llgtr %r4,%r4 # const struct sigaction_emu31 *
826 llgfr %r5,%r5 # size_t 694 llgfr %r5,%r5 # size_t
827 jg sys32_rt_sigaction # branch to system call 695 jg sys32_rt_sigaction # branch to system call
828 696
829 .globl sys32_rt_sigprocmask_wrapper 697ENTRY(sys32_rt_sigprocmask_wrapper)
830sys32_rt_sigprocmask_wrapper:
831 lgfr %r2,%r2 # int 698 lgfr %r2,%r2 # int
832 llgtr %r3,%r3 # old_sigset_emu31 * 699 llgtr %r3,%r3 # old_sigset_emu31 *
833 llgtr %r4,%r4 # old_sigset_emu31 * 700 llgtr %r4,%r4 # old_sigset_emu31 *
834 llgfr %r5,%r5 # size_t 701 llgfr %r5,%r5 # size_t
835 jg sys32_rt_sigprocmask # branch to system call 702 jg sys32_rt_sigprocmask # branch to system call
836 703
837 .globl sys32_rt_sigpending_wrapper 704ENTRY(sys32_rt_sigpending_wrapper)
838sys32_rt_sigpending_wrapper:
839 llgtr %r2,%r2 # sigset_emu31 * 705 llgtr %r2,%r2 # sigset_emu31 *
840 llgfr %r3,%r3 # size_t 706 llgfr %r3,%r3 # size_t
841 jg sys32_rt_sigpending # branch to system call 707 jg sys32_rt_sigpending # branch to system call
842 708
843 .globl compat_sys_rt_sigtimedwait_wrapper 709ENTRY(compat_sys_rt_sigtimedwait_wrapper)
844compat_sys_rt_sigtimedwait_wrapper:
845 llgtr %r2,%r2 # const sigset_emu31_t * 710 llgtr %r2,%r2 # const sigset_emu31_t *
846 llgtr %r3,%r3 # siginfo_emu31_t * 711 llgtr %r3,%r3 # siginfo_emu31_t *
847 llgtr %r4,%r4 # const struct compat_timespec * 712 llgtr %r4,%r4 # const struct compat_timespec *
848 llgfr %r5,%r5 # size_t 713 llgfr %r5,%r5 # size_t
849 jg compat_sys_rt_sigtimedwait # branch to system call 714 jg compat_sys_rt_sigtimedwait # branch to system call
850 715
851 .globl sys32_rt_sigqueueinfo_wrapper 716ENTRY(sys32_rt_sigqueueinfo_wrapper)
852sys32_rt_sigqueueinfo_wrapper:
853 lgfr %r2,%r2 # int 717 lgfr %r2,%r2 # int
854 lgfr %r3,%r3 # int 718 lgfr %r3,%r3 # int
855 llgtr %r4,%r4 # siginfo_emu31_t * 719 llgtr %r4,%r4 # siginfo_emu31_t *
856 jg sys32_rt_sigqueueinfo # branch to system call 720 jg sys32_rt_sigqueueinfo # branch to system call
857 721
858 .globl compat_sys_rt_sigsuspend_wrapper 722ENTRY(compat_sys_rt_sigsuspend_wrapper)
859compat_sys_rt_sigsuspend_wrapper:
860 llgtr %r2,%r2 # compat_sigset_t * 723 llgtr %r2,%r2 # compat_sigset_t *
861 llgfr %r3,%r3 # compat_size_t 724 llgfr %r3,%r3 # compat_size_t
862 jg compat_sys_rt_sigsuspend 725 jg compat_sys_rt_sigsuspend
863 726
864 .globl sys32_pread64_wrapper 727ENTRY(sys32_pread64_wrapper)
865sys32_pread64_wrapper:
866 llgfr %r2,%r2 # unsigned int 728 llgfr %r2,%r2 # unsigned int
867 llgtr %r3,%r3 # char * 729 llgtr %r3,%r3 # char *
868 llgfr %r4,%r4 # size_t 730 llgfr %r4,%r4 # size_t
@@ -870,8 +732,7 @@ sys32_pread64_wrapper:
870 llgfr %r6,%r6 # u32 732 llgfr %r6,%r6 # u32
871 jg sys32_pread64 # branch to system call 733 jg sys32_pread64 # branch to system call
872 734
873 .globl sys32_pwrite64_wrapper 735ENTRY(sys32_pwrite64_wrapper)
874sys32_pwrite64_wrapper:
875 llgfr %r2,%r2 # unsigned int 736 llgfr %r2,%r2 # unsigned int
876 llgtr %r3,%r3 # const char * 737 llgtr %r3,%r3 # const char *
877 llgfr %r4,%r4 # size_t 738 llgfr %r4,%r4 # size_t
@@ -879,39 +740,33 @@ sys32_pwrite64_wrapper:
879 llgfr %r6,%r6 # u32 740 llgfr %r6,%r6 # u32
880 jg sys32_pwrite64 # branch to system call 741 jg sys32_pwrite64 # branch to system call
881 742
882 .globl sys32_chown16_wrapper 743ENTRY(sys32_chown16_wrapper)
883sys32_chown16_wrapper:
884 llgtr %r2,%r2 # const char * 744 llgtr %r2,%r2 # const char *
885 llgfr %r3,%r3 # __kernel_old_uid_emu31_t 745 llgfr %r3,%r3 # __kernel_old_uid_emu31_t
886 llgfr %r4,%r4 # __kernel_old_gid_emu31_t 746 llgfr %r4,%r4 # __kernel_old_gid_emu31_t
887 jg sys32_chown16 # branch to system call 747 jg sys32_chown16 # branch to system call
888 748
889 .globl sys32_getcwd_wrapper 749ENTRY(sys32_getcwd_wrapper)
890sys32_getcwd_wrapper:
891 llgtr %r2,%r2 # char * 750 llgtr %r2,%r2 # char *
892 llgfr %r3,%r3 # unsigned long 751 llgfr %r3,%r3 # unsigned long
893 jg sys_getcwd # branch to system call 752 jg sys_getcwd # branch to system call
894 753
895 .globl sys32_capget_wrapper 754ENTRY(sys32_capget_wrapper)
896sys32_capget_wrapper:
897 llgtr %r2,%r2 # cap_user_header_t 755 llgtr %r2,%r2 # cap_user_header_t
898 llgtr %r3,%r3 # cap_user_data_t 756 llgtr %r3,%r3 # cap_user_data_t
899 jg sys_capget # branch to system call 757 jg sys_capget # branch to system call
900 758
901 .globl sys32_capset_wrapper 759ENTRY(sys32_capset_wrapper)
902sys32_capset_wrapper:
903 llgtr %r2,%r2 # cap_user_header_t 760 llgtr %r2,%r2 # cap_user_header_t
904 llgtr %r3,%r3 # const cap_user_data_t 761 llgtr %r3,%r3 # const cap_user_data_t
905 jg sys_capset # branch to system call 762 jg sys_capset # branch to system call
906 763
907 .globl sys32_sigaltstack_wrapper 764ENTRY(sys32_sigaltstack_wrapper)
908sys32_sigaltstack_wrapper:
909 llgtr %r2,%r2 # const stack_emu31_t * 765 llgtr %r2,%r2 # const stack_emu31_t *
910 llgtr %r3,%r3 # stack_emu31_t * 766 llgtr %r3,%r3 # stack_emu31_t *
911 jg sys32_sigaltstack 767 jg sys32_sigaltstack
912 768
913 .globl sys32_sendfile_wrapper 769ENTRY(sys32_sendfile_wrapper)
914sys32_sendfile_wrapper:
915 lgfr %r2,%r2 # int 770 lgfr %r2,%r2 # int
916 lgfr %r3,%r3 # int 771 lgfr %r3,%r3 # int
917 llgtr %r4,%r4 # __kernel_off_emu31_t * 772 llgtr %r4,%r4 # __kernel_off_emu31_t *
@@ -920,22 +775,19 @@ sys32_sendfile_wrapper:
920 775
921#sys32_vfork_wrapper # done in vfork_glue 776#sys32_vfork_wrapper # done in vfork_glue
922 777
923 .globl sys32_truncate64_wrapper 778ENTRY(sys32_truncate64_wrapper)
924sys32_truncate64_wrapper:
925 llgtr %r2,%r2 # const char * 779 llgtr %r2,%r2 # const char *
926 llgfr %r3,%r3 # unsigned long 780 llgfr %r3,%r3 # unsigned long
927 llgfr %r4,%r4 # unsigned long 781 llgfr %r4,%r4 # unsigned long
928 jg sys32_truncate64 # branch to system call 782 jg sys32_truncate64 # branch to system call
929 783
930 .globl sys32_ftruncate64_wrapper 784ENTRY(sys32_ftruncate64_wrapper)
931sys32_ftruncate64_wrapper:
932 llgfr %r2,%r2 # unsigned int 785 llgfr %r2,%r2 # unsigned int
933 llgfr %r3,%r3 # unsigned long 786 llgfr %r3,%r3 # unsigned long
934 llgfr %r4,%r4 # unsigned long 787 llgfr %r4,%r4 # unsigned long
935 jg sys32_ftruncate64 # branch to system call 788 jg sys32_ftruncate64 # branch to system call
936 789
937 .globl sys32_lchown_wrapper 790ENTRY(sys32_lchown_wrapper)
938sys32_lchown_wrapper:
939 llgtr %r2,%r2 # const char * 791 llgtr %r2,%r2 # const char *
940 llgfr %r3,%r3 # uid_t 792 llgfr %r3,%r3 # uid_t
941 llgfr %r4,%r4 # gid_t 793 llgfr %r4,%r4 # gid_t
@@ -946,156 +798,131 @@ sys32_lchown_wrapper:
946#sys32_geteuid_wrapper # void 798#sys32_geteuid_wrapper # void
947#sys32_getegid_wrapper # void 799#sys32_getegid_wrapper # void
948 800
949 .globl sys32_setreuid_wrapper 801ENTRY(sys32_setreuid_wrapper)
950sys32_setreuid_wrapper:
951 llgfr %r2,%r2 # uid_t 802 llgfr %r2,%r2 # uid_t
952 llgfr %r3,%r3 # uid_t 803 llgfr %r3,%r3 # uid_t
953 jg sys_setreuid # branch to system call 804 jg sys_setreuid # branch to system call
954 805
955 .globl sys32_setregid_wrapper 806ENTRY(sys32_setregid_wrapper)
956sys32_setregid_wrapper:
957 llgfr %r2,%r2 # gid_t 807 llgfr %r2,%r2 # gid_t
958 llgfr %r3,%r3 # gid_t 808 llgfr %r3,%r3 # gid_t
959 jg sys_setregid # branch to system call 809 jg sys_setregid # branch to system call
960 810
961 .globl sys32_getgroups_wrapper 811ENTRY(sys32_getgroups_wrapper)
962sys32_getgroups_wrapper:
963 lgfr %r2,%r2 # int 812 lgfr %r2,%r2 # int
964 llgtr %r3,%r3 # gid_t * 813 llgtr %r3,%r3 # gid_t *
965 jg sys_getgroups # branch to system call 814 jg sys_getgroups # branch to system call
966 815
967 .globl sys32_setgroups_wrapper 816ENTRY(sys32_setgroups_wrapper)
968sys32_setgroups_wrapper:
969 lgfr %r2,%r2 # int 817 lgfr %r2,%r2 # int
970 llgtr %r3,%r3 # gid_t * 818 llgtr %r3,%r3 # gid_t *
971 jg sys_setgroups # branch to system call 819 jg sys_setgroups # branch to system call
972 820
973 .globl sys32_fchown_wrapper 821ENTRY(sys32_fchown_wrapper)
974sys32_fchown_wrapper:
975 llgfr %r2,%r2 # unsigned int 822 llgfr %r2,%r2 # unsigned int
976 llgfr %r3,%r3 # uid_t 823 llgfr %r3,%r3 # uid_t
977 llgfr %r4,%r4 # gid_t 824 llgfr %r4,%r4 # gid_t
978 jg sys_fchown # branch to system call 825 jg sys_fchown # branch to system call
979 826
980 .globl sys32_setresuid_wrapper 827ENTRY(sys32_setresuid_wrapper)
981sys32_setresuid_wrapper:
982 llgfr %r2,%r2 # uid_t 828 llgfr %r2,%r2 # uid_t
983 llgfr %r3,%r3 # uid_t 829 llgfr %r3,%r3 # uid_t
984 llgfr %r4,%r4 # uid_t 830 llgfr %r4,%r4 # uid_t
985 jg sys_setresuid # branch to system call 831 jg sys_setresuid # branch to system call
986 832
987 .globl sys32_getresuid_wrapper 833ENTRY(sys32_getresuid_wrapper)
988sys32_getresuid_wrapper:
989 llgtr %r2,%r2 # uid_t * 834 llgtr %r2,%r2 # uid_t *
990 llgtr %r3,%r3 # uid_t * 835 llgtr %r3,%r3 # uid_t *
991 llgtr %r4,%r4 # uid_t * 836 llgtr %r4,%r4 # uid_t *
992 jg sys_getresuid # branch to system call 837 jg sys_getresuid # branch to system call
993 838
994 .globl sys32_setresgid_wrapper 839ENTRY(sys32_setresgid_wrapper)
995sys32_setresgid_wrapper:
996 llgfr %r2,%r2 # gid_t 840 llgfr %r2,%r2 # gid_t
997 llgfr %r3,%r3 # gid_t 841 llgfr %r3,%r3 # gid_t
998 llgfr %r4,%r4 # gid_t 842 llgfr %r4,%r4 # gid_t
999 jg sys_setresgid # branch to system call 843 jg sys_setresgid # branch to system call
1000 844
1001 .globl sys32_getresgid_wrapper 845ENTRY(sys32_getresgid_wrapper)
1002sys32_getresgid_wrapper:
1003 llgtr %r2,%r2 # gid_t * 846 llgtr %r2,%r2 # gid_t *
1004 llgtr %r3,%r3 # gid_t * 847 llgtr %r3,%r3 # gid_t *
1005 llgtr %r4,%r4 # gid_t * 848 llgtr %r4,%r4 # gid_t *
1006 jg sys_getresgid # branch to system call 849 jg sys_getresgid # branch to system call
1007 850
1008 .globl sys32_chown_wrapper 851ENTRY(sys32_chown_wrapper)
1009sys32_chown_wrapper:
1010 llgtr %r2,%r2 # const char * 852 llgtr %r2,%r2 # const char *
1011 llgfr %r3,%r3 # uid_t 853 llgfr %r3,%r3 # uid_t
1012 llgfr %r4,%r4 # gid_t 854 llgfr %r4,%r4 # gid_t
1013 jg sys_chown # branch to system call 855 jg sys_chown # branch to system call
1014 856
1015 .globl sys32_setuid_wrapper 857ENTRY(sys32_setuid_wrapper)
1016sys32_setuid_wrapper:
1017 llgfr %r2,%r2 # uid_t 858 llgfr %r2,%r2 # uid_t
1018 jg sys_setuid # branch to system call 859 jg sys_setuid # branch to system call
1019 860
1020 .globl sys32_setgid_wrapper 861ENTRY(sys32_setgid_wrapper)
1021sys32_setgid_wrapper:
1022 llgfr %r2,%r2 # gid_t 862 llgfr %r2,%r2 # gid_t
1023 jg sys_setgid # branch to system call 863 jg sys_setgid # branch to system call
1024 864
1025 .globl sys32_setfsuid_wrapper 865ENTRY(sys32_setfsuid_wrapper)
1026sys32_setfsuid_wrapper:
1027 llgfr %r2,%r2 # uid_t 866 llgfr %r2,%r2 # uid_t
1028 jg sys_setfsuid # branch to system call 867 jg sys_setfsuid # branch to system call
1029 868
1030 .globl sys32_setfsgid_wrapper 869ENTRY(sys32_setfsgid_wrapper)
1031sys32_setfsgid_wrapper:
1032 llgfr %r2,%r2 # gid_t 870 llgfr %r2,%r2 # gid_t
1033 jg sys_setfsgid # branch to system call 871 jg sys_setfsgid # branch to system call
1034 872
1035 .globl sys32_pivot_root_wrapper 873ENTRY(sys32_pivot_root_wrapper)
1036sys32_pivot_root_wrapper:
1037 llgtr %r2,%r2 # const char * 874 llgtr %r2,%r2 # const char *
1038 llgtr %r3,%r3 # const char * 875 llgtr %r3,%r3 # const char *
1039 jg sys_pivot_root # branch to system call 876 jg sys_pivot_root # branch to system call
1040 877
1041 .globl sys32_mincore_wrapper 878ENTRY(sys32_mincore_wrapper)
1042sys32_mincore_wrapper:
1043 llgfr %r2,%r2 # unsigned long 879 llgfr %r2,%r2 # unsigned long
1044 llgfr %r3,%r3 # size_t 880 llgfr %r3,%r3 # size_t
1045 llgtr %r4,%r4 # unsigned char * 881 llgtr %r4,%r4 # unsigned char *
1046 jg sys_mincore # branch to system call 882 jg sys_mincore # branch to system call
1047 883
1048 .globl sys32_madvise_wrapper 884ENTRY(sys32_madvise_wrapper)
1049sys32_madvise_wrapper:
1050 llgfr %r2,%r2 # unsigned long 885 llgfr %r2,%r2 # unsigned long
1051 llgfr %r3,%r3 # size_t 886 llgfr %r3,%r3 # size_t
1052 lgfr %r4,%r4 # int 887 lgfr %r4,%r4 # int
1053 jg sys_madvise # branch to system call 888 jg sys_madvise # branch to system call
1054 889
1055 .globl sys32_getdents64_wrapper 890ENTRY(sys32_getdents64_wrapper)
1056sys32_getdents64_wrapper:
1057 llgfr %r2,%r2 # unsigned int 891 llgfr %r2,%r2 # unsigned int
1058 llgtr %r3,%r3 # void * 892 llgtr %r3,%r3 # void *
1059 llgfr %r4,%r4 # unsigned int 893 llgfr %r4,%r4 # unsigned int
1060 jg sys_getdents64 # branch to system call 894 jg sys_getdents64 # branch to system call
1061 895
1062 .globl compat_sys_fcntl64_wrapper 896ENTRY(compat_sys_fcntl64_wrapper)
1063compat_sys_fcntl64_wrapper:
1064 llgfr %r2,%r2 # unsigned int 897 llgfr %r2,%r2 # unsigned int
1065 llgfr %r3,%r3 # unsigned int 898 llgfr %r3,%r3 # unsigned int
1066 llgfr %r4,%r4 # unsigned long 899 llgfr %r4,%r4 # unsigned long
1067 jg compat_sys_fcntl64 # branch to system call 900 jg compat_sys_fcntl64 # branch to system call
1068 901
1069 .globl sys32_stat64_wrapper 902ENTRY(sys32_stat64_wrapper)
1070sys32_stat64_wrapper:
1071 llgtr %r2,%r2 # char * 903 llgtr %r2,%r2 # char *
1072 llgtr %r3,%r3 # struct stat64 * 904 llgtr %r3,%r3 # struct stat64 *
1073 jg sys32_stat64 # branch to system call 905 jg sys32_stat64 # branch to system call
1074 906
1075 .globl sys32_lstat64_wrapper 907ENTRY(sys32_lstat64_wrapper)
1076sys32_lstat64_wrapper:
1077 llgtr %r2,%r2 # char * 908 llgtr %r2,%r2 # char *
1078 llgtr %r3,%r3 # struct stat64 * 909 llgtr %r3,%r3 # struct stat64 *
1079 jg sys32_lstat64 # branch to system call 910 jg sys32_lstat64 # branch to system call
1080 911
1081 .globl sys32_stime_wrapper 912ENTRY(sys32_stime_wrapper)
1082sys32_stime_wrapper:
1083 llgtr %r2,%r2 # long * 913 llgtr %r2,%r2 # long *
1084 jg compat_sys_stime # branch to system call 914 jg compat_sys_stime # branch to system call
1085 915
1086 .globl sys32_sysctl_wrapper 916ENTRY(sys32_sysctl_wrapper)
1087sys32_sysctl_wrapper:
1088 llgtr %r2,%r2 # struct compat_sysctl_args * 917 llgtr %r2,%r2 # struct compat_sysctl_args *
1089 jg compat_sys_sysctl 918 jg compat_sys_sysctl
1090 919
1091 .globl sys32_fstat64_wrapper 920ENTRY(sys32_fstat64_wrapper)
1092sys32_fstat64_wrapper:
1093 llgfr %r2,%r2 # unsigned long 921 llgfr %r2,%r2 # unsigned long
1094 llgtr %r3,%r3 # struct stat64 * 922 llgtr %r3,%r3 # struct stat64 *
1095 jg sys32_fstat64 # branch to system call 923 jg sys32_fstat64 # branch to system call
1096 924
1097 .globl compat_sys_futex_wrapper 925ENTRY(compat_sys_futex_wrapper)
1098compat_sys_futex_wrapper:
1099 llgtr %r2,%r2 # u32 * 926 llgtr %r2,%r2 # u32 *
1100 lgfr %r3,%r3 # int 927 lgfr %r3,%r3 # int
1101 lgfr %r4,%r4 # int 928 lgfr %r4,%r4 # int
@@ -1105,8 +932,7 @@ compat_sys_futex_wrapper:
1105 stg %r0,160(%r15) 932 stg %r0,160(%r15)
1106 jg compat_sys_futex # branch to system call 933 jg compat_sys_futex # branch to system call
1107 934
1108 .globl sys32_setxattr_wrapper 935ENTRY(sys32_setxattr_wrapper)
1109sys32_setxattr_wrapper:
1110 llgtr %r2,%r2 # char * 936 llgtr %r2,%r2 # char *
1111 llgtr %r3,%r3 # char * 937 llgtr %r3,%r3 # char *
1112 llgtr %r4,%r4 # void * 938 llgtr %r4,%r4 # void *
@@ -1114,8 +940,7 @@ sys32_setxattr_wrapper:
1114 lgfr %r6,%r6 # int 940 lgfr %r6,%r6 # int
1115 jg sys_setxattr 941 jg sys_setxattr
1116 942
1117 .globl sys32_lsetxattr_wrapper 943ENTRY(sys32_lsetxattr_wrapper)
1118sys32_lsetxattr_wrapper:
1119 llgtr %r2,%r2 # char * 944 llgtr %r2,%r2 # char *
1120 llgtr %r3,%r3 # char * 945 llgtr %r3,%r3 # char *
1121 llgtr %r4,%r4 # void * 946 llgtr %r4,%r4 # void *
@@ -1123,8 +948,7 @@ sys32_lsetxattr_wrapper:
1123 lgfr %r6,%r6 # int 948 lgfr %r6,%r6 # int
1124 jg sys_lsetxattr 949 jg sys_lsetxattr
1125 950
1126 .globl sys32_fsetxattr_wrapper 951ENTRY(sys32_fsetxattr_wrapper)
1127sys32_fsetxattr_wrapper:
1128 lgfr %r2,%r2 # int 952 lgfr %r2,%r2 # int
1129 llgtr %r3,%r3 # char * 953 llgtr %r3,%r3 # char *
1130 llgtr %r4,%r4 # void * 954 llgtr %r4,%r4 # void *
@@ -1132,124 +956,106 @@ sys32_fsetxattr_wrapper:
1132 lgfr %r6,%r6 # int 956 lgfr %r6,%r6 # int
1133 jg sys_fsetxattr 957 jg sys_fsetxattr
1134 958
1135 .globl sys32_getxattr_wrapper 959ENTRY(sys32_getxattr_wrapper)
1136sys32_getxattr_wrapper:
1137 llgtr %r2,%r2 # char * 960 llgtr %r2,%r2 # char *
1138 llgtr %r3,%r3 # char * 961 llgtr %r3,%r3 # char *
1139 llgtr %r4,%r4 # void * 962 llgtr %r4,%r4 # void *
1140 llgfr %r5,%r5 # size_t 963 llgfr %r5,%r5 # size_t
1141 jg sys_getxattr 964 jg sys_getxattr
1142 965
1143 .globl sys32_lgetxattr_wrapper 966ENTRY(sys32_lgetxattr_wrapper)
1144sys32_lgetxattr_wrapper:
1145 llgtr %r2,%r2 # char * 967 llgtr %r2,%r2 # char *
1146 llgtr %r3,%r3 # char * 968 llgtr %r3,%r3 # char *
1147 llgtr %r4,%r4 # void * 969 llgtr %r4,%r4 # void *
1148 llgfr %r5,%r5 # size_t 970 llgfr %r5,%r5 # size_t
1149 jg sys_lgetxattr 971 jg sys_lgetxattr
1150 972
1151 .globl sys32_fgetxattr_wrapper 973ENTRY(sys32_fgetxattr_wrapper)
1152sys32_fgetxattr_wrapper:
1153 lgfr %r2,%r2 # int 974 lgfr %r2,%r2 # int
1154 llgtr %r3,%r3 # char * 975 llgtr %r3,%r3 # char *
1155 llgtr %r4,%r4 # void * 976 llgtr %r4,%r4 # void *
1156 llgfr %r5,%r5 # size_t 977 llgfr %r5,%r5 # size_t
1157 jg sys_fgetxattr 978 jg sys_fgetxattr
1158 979
1159 .globl sys32_listxattr_wrapper 980ENTRY(sys32_listxattr_wrapper)
1160sys32_listxattr_wrapper:
1161 llgtr %r2,%r2 # char * 981 llgtr %r2,%r2 # char *
1162 llgtr %r3,%r3 # char * 982 llgtr %r3,%r3 # char *
1163 llgfr %r4,%r4 # size_t 983 llgfr %r4,%r4 # size_t
1164 jg sys_listxattr 984 jg sys_listxattr
1165 985
1166 .globl sys32_llistxattr_wrapper 986ENTRY(sys32_llistxattr_wrapper)
1167sys32_llistxattr_wrapper:
1168 llgtr %r2,%r2 # char * 987 llgtr %r2,%r2 # char *
1169 llgtr %r3,%r3 # char * 988 llgtr %r3,%r3 # char *
1170 llgfr %r4,%r4 # size_t 989 llgfr %r4,%r4 # size_t
1171 jg sys_llistxattr 990 jg sys_llistxattr
1172 991
1173 .globl sys32_flistxattr_wrapper 992ENTRY(sys32_flistxattr_wrapper)
1174sys32_flistxattr_wrapper:
1175 lgfr %r2,%r2 # int 993 lgfr %r2,%r2 # int
1176 llgtr %r3,%r3 # char * 994 llgtr %r3,%r3 # char *
1177 llgfr %r4,%r4 # size_t 995 llgfr %r4,%r4 # size_t
1178 jg sys_flistxattr 996 jg sys_flistxattr
1179 997
1180 .globl sys32_removexattr_wrapper 998ENTRY(sys32_removexattr_wrapper)
1181sys32_removexattr_wrapper:
1182 llgtr %r2,%r2 # char * 999 llgtr %r2,%r2 # char *
1183 llgtr %r3,%r3 # char * 1000 llgtr %r3,%r3 # char *
1184 jg sys_removexattr 1001 jg sys_removexattr
1185 1002
1186 .globl sys32_lremovexattr_wrapper 1003ENTRY(sys32_lremovexattr_wrapper)
1187sys32_lremovexattr_wrapper:
1188 llgtr %r2,%r2 # char * 1004 llgtr %r2,%r2 # char *
1189 llgtr %r3,%r3 # char * 1005 llgtr %r3,%r3 # char *
1190 jg sys_lremovexattr 1006 jg sys_lremovexattr
1191 1007
1192 .globl sys32_fremovexattr_wrapper 1008ENTRY(sys32_fremovexattr_wrapper)
1193sys32_fremovexattr_wrapper:
1194 lgfr %r2,%r2 # int 1009 lgfr %r2,%r2 # int
1195 llgtr %r3,%r3 # char * 1010 llgtr %r3,%r3 # char *
1196 jg sys_fremovexattr 1011 jg sys_fremovexattr
1197 1012
1198 .globl sys32_sched_setaffinity_wrapper 1013ENTRY(sys32_sched_setaffinity_wrapper)
1199sys32_sched_setaffinity_wrapper:
1200 lgfr %r2,%r2 # int 1014 lgfr %r2,%r2 # int
1201 llgfr %r3,%r3 # unsigned int 1015 llgfr %r3,%r3 # unsigned int
1202 llgtr %r4,%r4 # unsigned long * 1016 llgtr %r4,%r4 # unsigned long *
1203 jg compat_sys_sched_setaffinity 1017 jg compat_sys_sched_setaffinity
1204 1018
1205 .globl sys32_sched_getaffinity_wrapper 1019ENTRY(sys32_sched_getaffinity_wrapper)
1206sys32_sched_getaffinity_wrapper:
1207 lgfr %r2,%r2 # int 1020 lgfr %r2,%r2 # int
1208 llgfr %r3,%r3 # unsigned int 1021 llgfr %r3,%r3 # unsigned int
1209 llgtr %r4,%r4 # unsigned long * 1022 llgtr %r4,%r4 # unsigned long *
1210 jg compat_sys_sched_getaffinity 1023 jg compat_sys_sched_getaffinity
1211 1024
1212 .globl sys32_exit_group_wrapper 1025ENTRY(sys32_exit_group_wrapper)
1213sys32_exit_group_wrapper:
1214 lgfr %r2,%r2 # int 1026 lgfr %r2,%r2 # int
1215 jg sys_exit_group # branch to system call 1027 jg sys_exit_group # branch to system call
1216 1028
1217 .globl sys32_set_tid_address_wrapper 1029ENTRY(sys32_set_tid_address_wrapper)
1218sys32_set_tid_address_wrapper:
1219 llgtr %r2,%r2 # int * 1030 llgtr %r2,%r2 # int *
1220 jg sys_set_tid_address # branch to system call 1031 jg sys_set_tid_address # branch to system call
1221 1032
1222 .globl sys_epoll_create_wrapper 1033ENTRY(sys_epoll_create_wrapper)
1223sys_epoll_create_wrapper:
1224 lgfr %r2,%r2 # int 1034 lgfr %r2,%r2 # int
1225 jg sys_epoll_create # branch to system call 1035 jg sys_epoll_create # branch to system call
1226 1036
1227 .globl sys_epoll_ctl_wrapper 1037ENTRY(sys_epoll_ctl_wrapper)
1228sys_epoll_ctl_wrapper:
1229 lgfr %r2,%r2 # int 1038 lgfr %r2,%r2 # int
1230 lgfr %r3,%r3 # int 1039 lgfr %r3,%r3 # int
1231 lgfr %r4,%r4 # int 1040 lgfr %r4,%r4 # int
1232 llgtr %r5,%r5 # struct epoll_event * 1041 llgtr %r5,%r5 # struct epoll_event *
1233 jg sys_epoll_ctl # branch to system call 1042 jg sys_epoll_ctl # branch to system call
1234 1043
1235 .globl sys_epoll_wait_wrapper 1044ENTRY(sys_epoll_wait_wrapper)
1236sys_epoll_wait_wrapper:
1237 lgfr %r2,%r2 # int 1045 lgfr %r2,%r2 # int
1238 llgtr %r3,%r3 # struct epoll_event * 1046 llgtr %r3,%r3 # struct epoll_event *
1239 lgfr %r4,%r4 # int 1047 lgfr %r4,%r4 # int
1240 lgfr %r5,%r5 # int 1048 lgfr %r5,%r5 # int
1241 jg sys_epoll_wait # branch to system call 1049 jg sys_epoll_wait # branch to system call
1242 1050
1243 .globl sys32_lookup_dcookie_wrapper 1051ENTRY(sys32_lookup_dcookie_wrapper)
1244sys32_lookup_dcookie_wrapper:
1245 sllg %r2,%r2,32 # get high word of 64bit dcookie 1052 sllg %r2,%r2,32 # get high word of 64bit dcookie
1246 or %r2,%r3 # get low word of 64bit dcookie 1053 or %r2,%r3 # get low word of 64bit dcookie
1247 llgtr %r3,%r4 # char * 1054 llgtr %r3,%r4 # char *
1248 llgfr %r4,%r5 # size_t 1055 llgfr %r4,%r5 # size_t
1249 jg sys_lookup_dcookie 1056 jg sys_lookup_dcookie
1250 1057
1251 .globl sys32_fadvise64_wrapper 1058ENTRY(sys32_fadvise64_wrapper)
1252sys32_fadvise64_wrapper:
1253 lgfr %r2,%r2 # int 1059 lgfr %r2,%r2 # int
1254 sllg %r3,%r3,32 # get high word of 64bit loff_t 1060 sllg %r3,%r3,32 # get high word of 64bit loff_t
1255 or %r3,%r4 # get low word of 64bit loff_t 1061 or %r3,%r4 # get low word of 64bit loff_t
@@ -1257,81 +1063,68 @@ sys32_fadvise64_wrapper:
1257 lgfr %r5,%r6 # int 1063 lgfr %r5,%r6 # int
1258 jg sys32_fadvise64 1064 jg sys32_fadvise64
1259 1065
1260 .globl sys32_fadvise64_64_wrapper 1066ENTRY(sys32_fadvise64_64_wrapper)
1261sys32_fadvise64_64_wrapper:
1262 llgtr %r2,%r2 # struct fadvise64_64_args * 1067 llgtr %r2,%r2 # struct fadvise64_64_args *
1263 jg sys32_fadvise64_64 1068 jg sys32_fadvise64_64
1264 1069
1265 .globl sys32_clock_settime_wrapper 1070ENTRY(sys32_clock_settime_wrapper)
1266sys32_clock_settime_wrapper:
1267 lgfr %r2,%r2 # clockid_t (int) 1071 lgfr %r2,%r2 # clockid_t (int)
1268 llgtr %r3,%r3 # struct compat_timespec * 1072 llgtr %r3,%r3 # struct compat_timespec *
1269 jg compat_sys_clock_settime 1073 jg compat_sys_clock_settime
1270 1074
1271 .globl sys32_clock_gettime_wrapper 1075ENTRY(sys32_clock_gettime_wrapper)
1272sys32_clock_gettime_wrapper:
1273 lgfr %r2,%r2 # clockid_t (int) 1076 lgfr %r2,%r2 # clockid_t (int)
1274 llgtr %r3,%r3 # struct compat_timespec * 1077 llgtr %r3,%r3 # struct compat_timespec *
1275 jg compat_sys_clock_gettime 1078 jg compat_sys_clock_gettime
1276 1079
1277 .globl sys32_clock_getres_wrapper 1080ENTRY(sys32_clock_getres_wrapper)
1278sys32_clock_getres_wrapper:
1279 lgfr %r2,%r2 # clockid_t (int) 1081 lgfr %r2,%r2 # clockid_t (int)
1280 llgtr %r3,%r3 # struct compat_timespec * 1082 llgtr %r3,%r3 # struct compat_timespec *
1281 jg compat_sys_clock_getres 1083 jg compat_sys_clock_getres
1282 1084
1283 .globl sys32_clock_nanosleep_wrapper 1085ENTRY(sys32_clock_nanosleep_wrapper)
1284sys32_clock_nanosleep_wrapper:
1285 lgfr %r2,%r2 # clockid_t (int) 1086 lgfr %r2,%r2 # clockid_t (int)
1286 lgfr %r3,%r3 # int 1087 lgfr %r3,%r3 # int
1287 llgtr %r4,%r4 # struct compat_timespec * 1088 llgtr %r4,%r4 # struct compat_timespec *
1288 llgtr %r5,%r5 # struct compat_timespec * 1089 llgtr %r5,%r5 # struct compat_timespec *
1289 jg compat_sys_clock_nanosleep 1090 jg compat_sys_clock_nanosleep
1290 1091
1291 .globl sys32_timer_create_wrapper 1092ENTRY(sys32_timer_create_wrapper)
1292sys32_timer_create_wrapper:
1293 lgfr %r2,%r2 # timer_t (int) 1093 lgfr %r2,%r2 # timer_t (int)
1294 llgtr %r3,%r3 # struct compat_sigevent * 1094 llgtr %r3,%r3 # struct compat_sigevent *
1295 llgtr %r4,%r4 # timer_t * 1095 llgtr %r4,%r4 # timer_t *
1296 jg compat_sys_timer_create 1096 jg compat_sys_timer_create
1297 1097
1298 .globl sys32_timer_settime_wrapper 1098ENTRY(sys32_timer_settime_wrapper)
1299sys32_timer_settime_wrapper:
1300 lgfr %r2,%r2 # timer_t (int) 1099 lgfr %r2,%r2 # timer_t (int)
1301 lgfr %r3,%r3 # int 1100 lgfr %r3,%r3 # int
1302 llgtr %r4,%r4 # struct compat_itimerspec * 1101 llgtr %r4,%r4 # struct compat_itimerspec *
1303 llgtr %r5,%r5 # struct compat_itimerspec * 1102 llgtr %r5,%r5 # struct compat_itimerspec *
1304 jg compat_sys_timer_settime 1103 jg compat_sys_timer_settime
1305 1104
1306 .globl sys32_timer_gettime_wrapper 1105ENTRY(sys32_timer_gettime_wrapper)
1307sys32_timer_gettime_wrapper:
1308 lgfr %r2,%r2 # timer_t (int) 1106 lgfr %r2,%r2 # timer_t (int)
1309 llgtr %r3,%r3 # struct compat_itimerspec * 1107 llgtr %r3,%r3 # struct compat_itimerspec *
1310 jg compat_sys_timer_gettime 1108 jg compat_sys_timer_gettime
1311 1109
1312 .globl sys32_timer_getoverrun_wrapper 1110ENTRY(sys32_timer_getoverrun_wrapper)
1313sys32_timer_getoverrun_wrapper:
1314 lgfr %r2,%r2 # timer_t (int) 1111 lgfr %r2,%r2 # timer_t (int)
1315 jg sys_timer_getoverrun 1112 jg sys_timer_getoverrun
1316 1113
1317 .globl sys32_timer_delete_wrapper 1114ENTRY(sys32_timer_delete_wrapper)
1318sys32_timer_delete_wrapper:
1319 lgfr %r2,%r2 # timer_t (int) 1115 lgfr %r2,%r2 # timer_t (int)
1320 jg sys_timer_delete 1116 jg sys_timer_delete
1321 1117
1322 .globl sys32_io_setup_wrapper 1118ENTRY(sys32_io_setup_wrapper)
1323sys32_io_setup_wrapper:
1324 llgfr %r2,%r2 # unsigned int 1119 llgfr %r2,%r2 # unsigned int
1325 llgtr %r3,%r3 # u32 * 1120 llgtr %r3,%r3 # u32 *
1326 jg compat_sys_io_setup 1121 jg compat_sys_io_setup
1327 1122
1328 .globl sys32_io_destroy_wrapper 1123ENTRY(sys32_io_destroy_wrapper)
1329sys32_io_destroy_wrapper:
1330 llgfr %r2,%r2 # (aio_context_t) u32 1124 llgfr %r2,%r2 # (aio_context_t) u32
1331 jg sys_io_destroy 1125 jg sys_io_destroy
1332 1126
1333 .globl sys32_io_getevents_wrapper 1127ENTRY(sys32_io_getevents_wrapper)
1334sys32_io_getevents_wrapper:
1335 llgfr %r2,%r2 # (aio_context_t) u32 1128 llgfr %r2,%r2 # (aio_context_t) u32
1336 lgfr %r3,%r3 # long 1129 lgfr %r3,%r3 # long
1337 lgfr %r4,%r4 # long 1130 lgfr %r4,%r4 # long
@@ -1339,49 +1132,42 @@ sys32_io_getevents_wrapper:
1339 llgtr %r6,%r6 # struct compat_timespec * 1132 llgtr %r6,%r6 # struct compat_timespec *
1340 jg compat_sys_io_getevents 1133 jg compat_sys_io_getevents
1341 1134
1342 .globl sys32_io_submit_wrapper 1135ENTRY(sys32_io_submit_wrapper)
1343sys32_io_submit_wrapper:
1344 llgfr %r2,%r2 # (aio_context_t) u32 1136 llgfr %r2,%r2 # (aio_context_t) u32
1345 lgfr %r3,%r3 # long 1137 lgfr %r3,%r3 # long
1346 llgtr %r4,%r4 # struct iocb ** 1138 llgtr %r4,%r4 # struct iocb **
1347 jg compat_sys_io_submit 1139 jg compat_sys_io_submit
1348 1140
1349 .globl sys32_io_cancel_wrapper 1141ENTRY(sys32_io_cancel_wrapper)
1350sys32_io_cancel_wrapper:
1351 llgfr %r2,%r2 # (aio_context_t) u32 1142 llgfr %r2,%r2 # (aio_context_t) u32
1352 llgtr %r3,%r3 # struct iocb * 1143 llgtr %r3,%r3 # struct iocb *
1353 llgtr %r4,%r4 # struct io_event * 1144 llgtr %r4,%r4 # struct io_event *
1354 jg sys_io_cancel 1145 jg sys_io_cancel
1355 1146
1356 .globl compat_sys_statfs64_wrapper 1147ENTRY(compat_sys_statfs64_wrapper)
1357compat_sys_statfs64_wrapper:
1358 llgtr %r2,%r2 # const char * 1148 llgtr %r2,%r2 # const char *
1359 llgfr %r3,%r3 # compat_size_t 1149 llgfr %r3,%r3 # compat_size_t
1360 llgtr %r4,%r4 # struct compat_statfs64 * 1150 llgtr %r4,%r4 # struct compat_statfs64 *
1361 jg compat_sys_statfs64 1151 jg compat_sys_statfs64
1362 1152
1363 .globl compat_sys_fstatfs64_wrapper 1153ENTRY(compat_sys_fstatfs64_wrapper)
1364compat_sys_fstatfs64_wrapper:
1365 llgfr %r2,%r2 # unsigned int fd 1154 llgfr %r2,%r2 # unsigned int fd
1366 llgfr %r3,%r3 # compat_size_t 1155 llgfr %r3,%r3 # compat_size_t
1367 llgtr %r4,%r4 # struct compat_statfs64 * 1156 llgtr %r4,%r4 # struct compat_statfs64 *
1368 jg compat_sys_fstatfs64 1157 jg compat_sys_fstatfs64
1369 1158
1370 .globl compat_sys_mq_open_wrapper 1159ENTRY(compat_sys_mq_open_wrapper)
1371compat_sys_mq_open_wrapper:
1372 llgtr %r2,%r2 # const char * 1160 llgtr %r2,%r2 # const char *
1373 lgfr %r3,%r3 # int 1161 lgfr %r3,%r3 # int
1374 llgfr %r4,%r4 # mode_t 1162 llgfr %r4,%r4 # mode_t
1375 llgtr %r5,%r5 # struct compat_mq_attr * 1163 llgtr %r5,%r5 # struct compat_mq_attr *
1376 jg compat_sys_mq_open 1164 jg compat_sys_mq_open
1377 1165
1378 .globl sys32_mq_unlink_wrapper 1166ENTRY(sys32_mq_unlink_wrapper)
1379sys32_mq_unlink_wrapper:
1380 llgtr %r2,%r2 # const char * 1167 llgtr %r2,%r2 # const char *
1381 jg sys_mq_unlink 1168 jg sys_mq_unlink
1382 1169
1383 .globl compat_sys_mq_timedsend_wrapper 1170ENTRY(compat_sys_mq_timedsend_wrapper)
1384compat_sys_mq_timedsend_wrapper:
1385 lgfr %r2,%r2 # mqd_t 1171 lgfr %r2,%r2 # mqd_t
1386 llgtr %r3,%r3 # const char * 1172 llgtr %r3,%r3 # const char *
1387 llgfr %r4,%r4 # size_t 1173 llgfr %r4,%r4 # size_t
@@ -1389,8 +1175,7 @@ compat_sys_mq_timedsend_wrapper:
1389 llgtr %r6,%r6 # const struct compat_timespec * 1175 llgtr %r6,%r6 # const struct compat_timespec *
1390 jg compat_sys_mq_timedsend 1176 jg compat_sys_mq_timedsend
1391 1177
1392 .globl compat_sys_mq_timedreceive_wrapper 1178ENTRY(compat_sys_mq_timedreceive_wrapper)
1393compat_sys_mq_timedreceive_wrapper:
1394 lgfr %r2,%r2 # mqd_t 1179 lgfr %r2,%r2 # mqd_t
1395 llgtr %r3,%r3 # char * 1180 llgtr %r3,%r3 # char *
1396 llgfr %r4,%r4 # size_t 1181 llgfr %r4,%r4 # size_t
@@ -1398,21 +1183,18 @@ compat_sys_mq_timedreceive_wrapper:
1398 llgtr %r6,%r6 # const struct compat_timespec * 1183 llgtr %r6,%r6 # const struct compat_timespec *
1399 jg compat_sys_mq_timedreceive 1184 jg compat_sys_mq_timedreceive
1400 1185
1401 .globl compat_sys_mq_notify_wrapper 1186ENTRY(compat_sys_mq_notify_wrapper)
1402compat_sys_mq_notify_wrapper:
1403 lgfr %r2,%r2 # mqd_t 1187 lgfr %r2,%r2 # mqd_t
1404 llgtr %r3,%r3 # struct compat_sigevent * 1188 llgtr %r3,%r3 # struct compat_sigevent *
1405 jg compat_sys_mq_notify 1189 jg compat_sys_mq_notify
1406 1190
1407 .globl compat_sys_mq_getsetattr_wrapper 1191ENTRY(compat_sys_mq_getsetattr_wrapper)
1408compat_sys_mq_getsetattr_wrapper:
1409 lgfr %r2,%r2 # mqd_t 1192 lgfr %r2,%r2 # mqd_t
1410 llgtr %r3,%r3 # struct compat_mq_attr * 1193 llgtr %r3,%r3 # struct compat_mq_attr *
1411 llgtr %r4,%r4 # struct compat_mq_attr * 1194 llgtr %r4,%r4 # struct compat_mq_attr *
1412 jg compat_sys_mq_getsetattr 1195 jg compat_sys_mq_getsetattr
1413 1196
1414 .globl compat_sys_add_key_wrapper 1197ENTRY(compat_sys_add_key_wrapper)
1415compat_sys_add_key_wrapper:
1416 llgtr %r2,%r2 # const char * 1198 llgtr %r2,%r2 # const char *
1417 llgtr %r3,%r3 # const char * 1199 llgtr %r3,%r3 # const char *
1418 llgtr %r4,%r4 # const void * 1200 llgtr %r4,%r4 # const void *
@@ -1420,16 +1202,14 @@ compat_sys_add_key_wrapper:
1420 llgfr %r6,%r6 # (key_serial_t) u32 1202 llgfr %r6,%r6 # (key_serial_t) u32
1421 jg sys_add_key 1203 jg sys_add_key
1422 1204
1423 .globl compat_sys_request_key_wrapper 1205ENTRY(compat_sys_request_key_wrapper)
1424compat_sys_request_key_wrapper:
1425 llgtr %r2,%r2 # const char * 1206 llgtr %r2,%r2 # const char *
1426 llgtr %r3,%r3 # const char * 1207 llgtr %r3,%r3 # const char *
1427 llgtr %r4,%r4 # const void * 1208 llgtr %r4,%r4 # const void *
1428 llgfr %r5,%r5 # (key_serial_t) u32 1209 llgfr %r5,%r5 # (key_serial_t) u32
1429 jg sys_request_key 1210 jg sys_request_key
1430 1211
1431 .globl sys32_remap_file_pages_wrapper 1212ENTRY(sys32_remap_file_pages_wrapper)
1432sys32_remap_file_pages_wrapper:
1433 llgfr %r2,%r2 # unsigned long 1213 llgfr %r2,%r2 # unsigned long
1434 llgfr %r3,%r3 # unsigned long 1214 llgfr %r3,%r3 # unsigned long
1435 llgfr %r4,%r4 # unsigned long 1215 llgfr %r4,%r4 # unsigned long
@@ -1437,8 +1217,7 @@ sys32_remap_file_pages_wrapper:
1437 llgfr %r6,%r6 # unsigned long 1217 llgfr %r6,%r6 # unsigned long
1438 jg sys_remap_file_pages 1218 jg sys_remap_file_pages
1439 1219
1440 .globl compat_sys_waitid_wrapper 1220ENTRY(compat_sys_waitid_wrapper)
1441compat_sys_waitid_wrapper:
1442 lgfr %r2,%r2 # int 1221 lgfr %r2,%r2 # int
1443 lgfr %r3,%r3 # pid_t 1222 lgfr %r3,%r3 # pid_t
1444 llgtr %r4,%r4 # siginfo_emu31_t * 1223 llgtr %r4,%r4 # siginfo_emu31_t *
@@ -1446,65 +1225,56 @@ compat_sys_waitid_wrapper:
1446 llgtr %r6,%r6 # struct rusage_emu31 * 1225 llgtr %r6,%r6 # struct rusage_emu31 *
1447 jg compat_sys_waitid 1226 jg compat_sys_waitid
1448 1227
1449 .globl compat_sys_kexec_load_wrapper 1228ENTRY(compat_sys_kexec_load_wrapper)
1450compat_sys_kexec_load_wrapper:
1451 llgfr %r2,%r2 # unsigned long 1229 llgfr %r2,%r2 # unsigned long
1452 llgfr %r3,%r3 # unsigned long 1230 llgfr %r3,%r3 # unsigned long
1453 llgtr %r4,%r4 # struct kexec_segment * 1231 llgtr %r4,%r4 # struct kexec_segment *
1454 llgfr %r5,%r5 # unsigned long 1232 llgfr %r5,%r5 # unsigned long
1455 jg compat_sys_kexec_load 1233 jg compat_sys_kexec_load
1456 1234
1457 .globl sys_ioprio_set_wrapper 1235ENTRY(sys_ioprio_set_wrapper)
1458sys_ioprio_set_wrapper:
1459 lgfr %r2,%r2 # int 1236 lgfr %r2,%r2 # int
1460 lgfr %r3,%r3 # int 1237 lgfr %r3,%r3 # int
1461 lgfr %r4,%r4 # int 1238 lgfr %r4,%r4 # int
1462 jg sys_ioprio_set 1239 jg sys_ioprio_set
1463 1240
1464 .globl sys_ioprio_get_wrapper 1241ENTRY(sys_ioprio_get_wrapper)
1465sys_ioprio_get_wrapper:
1466 lgfr %r2,%r2 # int 1242 lgfr %r2,%r2 # int
1467 lgfr %r3,%r3 # int 1243 lgfr %r3,%r3 # int
1468 jg sys_ioprio_get 1244 jg sys_ioprio_get
1469 1245
1470 .globl sys_inotify_add_watch_wrapper 1246ENTRY(sys_inotify_add_watch_wrapper)
1471sys_inotify_add_watch_wrapper:
1472 lgfr %r2,%r2 # int 1247 lgfr %r2,%r2 # int
1473 llgtr %r3,%r3 # const char * 1248 llgtr %r3,%r3 # const char *
1474 llgfr %r4,%r4 # u32 1249 llgfr %r4,%r4 # u32
1475 jg sys_inotify_add_watch 1250 jg sys_inotify_add_watch
1476 1251
1477 .globl sys_inotify_rm_watch_wrapper 1252ENTRY(sys_inotify_rm_watch_wrapper)
1478sys_inotify_rm_watch_wrapper:
1479 lgfr %r2,%r2 # int 1253 lgfr %r2,%r2 # int
1480 llgfr %r3,%r3 # u32 1254 llgfr %r3,%r3 # u32
1481 jg sys_inotify_rm_watch 1255 jg sys_inotify_rm_watch
1482 1256
1483 .globl compat_sys_openat_wrapper 1257ENTRY(compat_sys_openat_wrapper)
1484compat_sys_openat_wrapper:
1485 llgfr %r2,%r2 # unsigned int 1258 llgfr %r2,%r2 # unsigned int
1486 llgtr %r3,%r3 # const char * 1259 llgtr %r3,%r3 # const char *
1487 lgfr %r4,%r4 # int 1260 lgfr %r4,%r4 # int
1488 lgfr %r5,%r5 # int 1261 lgfr %r5,%r5 # int
1489 jg compat_sys_openat 1262 jg compat_sys_openat
1490 1263
1491 .globl sys_mkdirat_wrapper 1264ENTRY(sys_mkdirat_wrapper)
1492sys_mkdirat_wrapper:
1493 lgfr %r2,%r2 # int 1265 lgfr %r2,%r2 # int
1494 llgtr %r3,%r3 # const char * 1266 llgtr %r3,%r3 # const char *
1495 lgfr %r4,%r4 # int 1267 lgfr %r4,%r4 # int
1496 jg sys_mkdirat 1268 jg sys_mkdirat
1497 1269
1498 .globl sys_mknodat_wrapper 1270ENTRY(sys_mknodat_wrapper)
1499sys_mknodat_wrapper:
1500 lgfr %r2,%r2 # int 1271 lgfr %r2,%r2 # int
1501 llgtr %r3,%r3 # const char * 1272 llgtr %r3,%r3 # const char *
1502 lgfr %r4,%r4 # int 1273 lgfr %r4,%r4 # int
1503 llgfr %r5,%r5 # unsigned int 1274 llgfr %r5,%r5 # unsigned int
1504 jg sys_mknodat 1275 jg sys_mknodat
1505 1276
1506 .globl sys_fchownat_wrapper 1277ENTRY(sys_fchownat_wrapper)
1507sys_fchownat_wrapper:
1508 lgfr %r2,%r2 # int 1278 lgfr %r2,%r2 # int
1509 llgtr %r3,%r3 # const char * 1279 llgtr %r3,%r3 # const char *
1510 llgfr %r4,%r4 # uid_t 1280 llgfr %r4,%r4 # uid_t
@@ -1512,38 +1282,33 @@ sys_fchownat_wrapper:
1512 lgfr %r6,%r6 # int 1282 lgfr %r6,%r6 # int
1513 jg sys_fchownat 1283 jg sys_fchownat
1514 1284
1515 .globl compat_sys_futimesat_wrapper 1285ENTRY(compat_sys_futimesat_wrapper)
1516compat_sys_futimesat_wrapper:
1517 llgfr %r2,%r2 # unsigned int 1286 llgfr %r2,%r2 # unsigned int
1518 llgtr %r3,%r3 # char * 1287 llgtr %r3,%r3 # char *
1519 llgtr %r4,%r4 # struct timeval * 1288 llgtr %r4,%r4 # struct timeval *
1520 jg compat_sys_futimesat 1289 jg compat_sys_futimesat
1521 1290
1522 .globl sys32_fstatat64_wrapper 1291ENTRY(sys32_fstatat64_wrapper)
1523sys32_fstatat64_wrapper:
1524 llgfr %r2,%r2 # unsigned int 1292 llgfr %r2,%r2 # unsigned int
1525 llgtr %r3,%r3 # char * 1293 llgtr %r3,%r3 # char *
1526 llgtr %r4,%r4 # struct stat64 * 1294 llgtr %r4,%r4 # struct stat64 *
1527 lgfr %r5,%r5 # int 1295 lgfr %r5,%r5 # int
1528 jg sys32_fstatat64 1296 jg sys32_fstatat64
1529 1297
1530 .globl sys_unlinkat_wrapper 1298ENTRY(sys_unlinkat_wrapper)
1531sys_unlinkat_wrapper:
1532 lgfr %r2,%r2 # int 1299 lgfr %r2,%r2 # int
1533 llgtr %r3,%r3 # const char * 1300 llgtr %r3,%r3 # const char *
1534 lgfr %r4,%r4 # int 1301 lgfr %r4,%r4 # int
1535 jg sys_unlinkat 1302 jg sys_unlinkat
1536 1303
1537 .globl sys_renameat_wrapper 1304ENTRY(sys_renameat_wrapper)
1538sys_renameat_wrapper:
1539 lgfr %r2,%r2 # int 1305 lgfr %r2,%r2 # int
1540 llgtr %r3,%r3 # const char * 1306 llgtr %r3,%r3 # const char *
1541 lgfr %r4,%r4 # int 1307 lgfr %r4,%r4 # int
1542 llgtr %r5,%r5 # const char * 1308 llgtr %r5,%r5 # const char *
1543 jg sys_renameat 1309 jg sys_renameat
1544 1310
1545 .globl sys_linkat_wrapper 1311ENTRY(sys_linkat_wrapper)
1546sys_linkat_wrapper:
1547 lgfr %r2,%r2 # int 1312 lgfr %r2,%r2 # int
1548 llgtr %r3,%r3 # const char * 1313 llgtr %r3,%r3 # const char *
1549 lgfr %r4,%r4 # int 1314 lgfr %r4,%r4 # int
@@ -1551,37 +1316,32 @@ sys_linkat_wrapper:
1551 lgfr %r6,%r6 # int 1316 lgfr %r6,%r6 # int
1552 jg sys_linkat 1317 jg sys_linkat
1553 1318
1554 .globl sys_symlinkat_wrapper 1319ENTRY(sys_symlinkat_wrapper)
1555sys_symlinkat_wrapper:
1556 llgtr %r2,%r2 # const char * 1320 llgtr %r2,%r2 # const char *
1557 lgfr %r3,%r3 # int 1321 lgfr %r3,%r3 # int
1558 llgtr %r4,%r4 # const char * 1322 llgtr %r4,%r4 # const char *
1559 jg sys_symlinkat 1323 jg sys_symlinkat
1560 1324
1561 .globl sys_readlinkat_wrapper 1325ENTRY(sys_readlinkat_wrapper)
1562sys_readlinkat_wrapper:
1563 lgfr %r2,%r2 # int 1326 lgfr %r2,%r2 # int
1564 llgtr %r3,%r3 # const char * 1327 llgtr %r3,%r3 # const char *
1565 llgtr %r4,%r4 # char * 1328 llgtr %r4,%r4 # char *
1566 lgfr %r5,%r5 # int 1329 lgfr %r5,%r5 # int
1567 jg sys_readlinkat 1330 jg sys_readlinkat
1568 1331
1569 .globl sys_fchmodat_wrapper 1332ENTRY(sys_fchmodat_wrapper)
1570sys_fchmodat_wrapper:
1571 lgfr %r2,%r2 # int 1333 lgfr %r2,%r2 # int
1572 llgtr %r3,%r3 # const char * 1334 llgtr %r3,%r3 # const char *
1573 llgfr %r4,%r4 # mode_t 1335 llgfr %r4,%r4 # mode_t
1574 jg sys_fchmodat 1336 jg sys_fchmodat
1575 1337
1576 .globl sys_faccessat_wrapper 1338ENTRY(sys_faccessat_wrapper)
1577sys_faccessat_wrapper:
1578 lgfr %r2,%r2 # int 1339 lgfr %r2,%r2 # int
1579 llgtr %r3,%r3 # const char * 1340 llgtr %r3,%r3 # const char *
1580 lgfr %r4,%r4 # int 1341 lgfr %r4,%r4 # int
1581 jg sys_faccessat 1342 jg sys_faccessat
1582 1343
1583 .globl compat_sys_pselect6_wrapper 1344ENTRY(compat_sys_pselect6_wrapper)
1584compat_sys_pselect6_wrapper:
1585 lgfr %r2,%r2 # int 1345 lgfr %r2,%r2 # int
1586 llgtr %r3,%r3 # fd_set * 1346 llgtr %r3,%r3 # fd_set *
1587 llgtr %r4,%r4 # fd_set * 1347 llgtr %r4,%r4 # fd_set *
@@ -1591,8 +1351,7 @@ compat_sys_pselect6_wrapper:
1591 stg %r0,160(%r15) 1351 stg %r0,160(%r15)
1592 jg compat_sys_pselect6 1352 jg compat_sys_pselect6
1593 1353
1594 .globl compat_sys_ppoll_wrapper 1354ENTRY(compat_sys_ppoll_wrapper)
1595compat_sys_ppoll_wrapper:
1596 llgtr %r2,%r2 # struct pollfd * 1355 llgtr %r2,%r2 # struct pollfd *
1597 llgfr %r3,%r3 # unsigned int 1356 llgfr %r3,%r3 # unsigned int
1598 llgtr %r4,%r4 # struct timespec * 1357 llgtr %r4,%r4 # struct timespec *
@@ -1600,26 +1359,22 @@ compat_sys_ppoll_wrapper:
1600 llgfr %r6,%r6 # size_t 1359 llgfr %r6,%r6 # size_t
1601 jg compat_sys_ppoll 1360 jg compat_sys_ppoll
1602 1361
1603 .globl sys_unshare_wrapper 1362ENTRY(sys_unshare_wrapper)
1604sys_unshare_wrapper:
1605 llgfr %r2,%r2 # unsigned long 1363 llgfr %r2,%r2 # unsigned long
1606 jg sys_unshare 1364 jg sys_unshare
1607 1365
1608 .globl compat_sys_set_robust_list_wrapper 1366ENTRY(compat_sys_set_robust_list_wrapper)
1609compat_sys_set_robust_list_wrapper:
1610 llgtr %r2,%r2 # struct compat_robust_list_head * 1367 llgtr %r2,%r2 # struct compat_robust_list_head *
1611 llgfr %r3,%r3 # size_t 1368 llgfr %r3,%r3 # size_t
1612 jg compat_sys_set_robust_list 1369 jg compat_sys_set_robust_list
1613 1370
1614 .globl compat_sys_get_robust_list_wrapper 1371ENTRY(compat_sys_get_robust_list_wrapper)
1615compat_sys_get_robust_list_wrapper:
1616 lgfr %r2,%r2 # int 1372 lgfr %r2,%r2 # int
1617 llgtr %r3,%r3 # compat_uptr_t_t * 1373 llgtr %r3,%r3 # compat_uptr_t_t *
1618 llgtr %r4,%r4 # compat_size_t * 1374 llgtr %r4,%r4 # compat_size_t *
1619 jg compat_sys_get_robust_list 1375 jg compat_sys_get_robust_list
1620 1376
1621 .globl sys_splice_wrapper 1377ENTRY(sys_splice_wrapper)
1622sys_splice_wrapper:
1623 lgfr %r2,%r2 # int 1378 lgfr %r2,%r2 # int
1624 llgtr %r3,%r3 # loff_t * 1379 llgtr %r3,%r3 # loff_t *
1625 lgfr %r4,%r4 # int 1380 lgfr %r4,%r4 # int
@@ -1629,8 +1384,7 @@ sys_splice_wrapper:
1629 stg %r0,160(%r15) 1384 stg %r0,160(%r15)
1630 jg sys_splice 1385 jg sys_splice
1631 1386
1632 .globl sys_sync_file_range_wrapper 1387ENTRY(sys_sync_file_range_wrapper)
1633sys_sync_file_range_wrapper:
1634 lgfr %r2,%r2 # int 1388 lgfr %r2,%r2 # int
1635 sllg %r3,%r3,32 # get high word of 64bit loff_t 1389 sllg %r3,%r3,32 # get high word of 64bit loff_t
1636 or %r3,%r4 # get low word of 64bit loff_t 1390 or %r3,%r4 # get low word of 64bit loff_t
@@ -1639,31 +1393,27 @@ sys_sync_file_range_wrapper:
1639 llgf %r5,164(%r15) # unsigned int 1393 llgf %r5,164(%r15) # unsigned int
1640 jg sys_sync_file_range 1394 jg sys_sync_file_range
1641 1395
1642 .globl sys_tee_wrapper 1396ENTRY(sys_tee_wrapper)
1643sys_tee_wrapper:
1644 lgfr %r2,%r2 # int 1397 lgfr %r2,%r2 # int
1645 lgfr %r3,%r3 # int 1398 lgfr %r3,%r3 # int
1646 llgfr %r4,%r4 # size_t 1399 llgfr %r4,%r4 # size_t
1647 llgfr %r5,%r5 # unsigned int 1400 llgfr %r5,%r5 # unsigned int
1648 jg sys_tee 1401 jg sys_tee
1649 1402
1650 .globl compat_sys_vmsplice_wrapper 1403ENTRY(compat_sys_vmsplice_wrapper)
1651compat_sys_vmsplice_wrapper:
1652 lgfr %r2,%r2 # int 1404 lgfr %r2,%r2 # int
1653 llgtr %r3,%r3 # compat_iovec * 1405 llgtr %r3,%r3 # compat_iovec *
1654 llgfr %r4,%r4 # unsigned int 1406 llgfr %r4,%r4 # unsigned int
1655 llgfr %r5,%r5 # unsigned int 1407 llgfr %r5,%r5 # unsigned int
1656 jg compat_sys_vmsplice 1408 jg compat_sys_vmsplice
1657 1409
1658 .globl sys_getcpu_wrapper 1410ENTRY(sys_getcpu_wrapper)
1659sys_getcpu_wrapper:
1660 llgtr %r2,%r2 # unsigned * 1411 llgtr %r2,%r2 # unsigned *
1661 llgtr %r3,%r3 # unsigned * 1412 llgtr %r3,%r3 # unsigned *
1662 llgtr %r4,%r4 # struct getcpu_cache * 1413 llgtr %r4,%r4 # struct getcpu_cache *
1663 jg sys_getcpu 1414 jg sys_getcpu
1664 1415
1665 .globl compat_sys_epoll_pwait_wrapper 1416ENTRY(compat_sys_epoll_pwait_wrapper)
1666compat_sys_epoll_pwait_wrapper:
1667 lgfr %r2,%r2 # int 1417 lgfr %r2,%r2 # int
1668 llgtr %r3,%r3 # struct compat_epoll_event * 1418 llgtr %r3,%r3 # struct compat_epoll_event *
1669 lgfr %r4,%r4 # int 1419 lgfr %r4,%r4 # int
@@ -1673,34 +1423,29 @@ compat_sys_epoll_pwait_wrapper:
1673 stg %r0,160(%r15) 1423 stg %r0,160(%r15)
1674 jg compat_sys_epoll_pwait 1424 jg compat_sys_epoll_pwait
1675 1425
1676 .globl compat_sys_utimes_wrapper 1426ENTRY(compat_sys_utimes_wrapper)
1677compat_sys_utimes_wrapper:
1678 llgtr %r2,%r2 # char * 1427 llgtr %r2,%r2 # char *
1679 llgtr %r3,%r3 # struct compat_timeval * 1428 llgtr %r3,%r3 # struct compat_timeval *
1680 jg compat_sys_utimes 1429 jg compat_sys_utimes
1681 1430
1682 .globl compat_sys_utimensat_wrapper 1431ENTRY(compat_sys_utimensat_wrapper)
1683compat_sys_utimensat_wrapper:
1684 llgfr %r2,%r2 # unsigned int 1432 llgfr %r2,%r2 # unsigned int
1685 llgtr %r3,%r3 # char * 1433 llgtr %r3,%r3 # char *
1686 llgtr %r4,%r4 # struct compat_timespec * 1434 llgtr %r4,%r4 # struct compat_timespec *
1687 lgfr %r5,%r5 # int 1435 lgfr %r5,%r5 # int
1688 jg compat_sys_utimensat 1436 jg compat_sys_utimensat
1689 1437
1690 .globl compat_sys_signalfd_wrapper 1438ENTRY(compat_sys_signalfd_wrapper)
1691compat_sys_signalfd_wrapper:
1692 lgfr %r2,%r2 # int 1439 lgfr %r2,%r2 # int
1693 llgtr %r3,%r3 # compat_sigset_t * 1440 llgtr %r3,%r3 # compat_sigset_t *
1694 llgfr %r4,%r4 # compat_size_t 1441 llgfr %r4,%r4 # compat_size_t
1695 jg compat_sys_signalfd 1442 jg compat_sys_signalfd
1696 1443
1697 .globl sys_eventfd_wrapper 1444ENTRY(sys_eventfd_wrapper)
1698sys_eventfd_wrapper:
1699 llgfr %r2,%r2 # unsigned int 1445 llgfr %r2,%r2 # unsigned int
1700 jg sys_eventfd 1446 jg sys_eventfd
1701 1447
1702 .globl sys_fallocate_wrapper 1448ENTRY(sys_fallocate_wrapper)
1703sys_fallocate_wrapper:
1704 lgfr %r2,%r2 # int 1449 lgfr %r2,%r2 # int
1705 lgfr %r3,%r3 # int 1450 lgfr %r3,%r3 # int
1706 sllg %r4,%r4,32 # get high word of 64bit loff_t 1451 sllg %r4,%r4,32 # get high word of 64bit loff_t
@@ -1709,94 +1454,80 @@ sys_fallocate_wrapper:
1709 l %r5,164(%r15) # get low word of 64bit loff_t 1454 l %r5,164(%r15) # get low word of 64bit loff_t
1710 jg sys_fallocate 1455 jg sys_fallocate
1711 1456
1712 .globl sys_timerfd_create_wrapper 1457ENTRY(sys_timerfd_create_wrapper)
1713sys_timerfd_create_wrapper:
1714 lgfr %r2,%r2 # int 1458 lgfr %r2,%r2 # int
1715 lgfr %r3,%r3 # int 1459 lgfr %r3,%r3 # int
1716 jg sys_timerfd_create 1460 jg sys_timerfd_create
1717 1461
1718 .globl compat_sys_timerfd_settime_wrapper 1462ENTRY(compat_sys_timerfd_settime_wrapper)
1719compat_sys_timerfd_settime_wrapper:
1720 lgfr %r2,%r2 # int 1463 lgfr %r2,%r2 # int
1721 lgfr %r3,%r3 # int 1464 lgfr %r3,%r3 # int
1722 llgtr %r4,%r4 # struct compat_itimerspec * 1465 llgtr %r4,%r4 # struct compat_itimerspec *
1723 llgtr %r5,%r5 # struct compat_itimerspec * 1466 llgtr %r5,%r5 # struct compat_itimerspec *
1724 jg compat_sys_timerfd_settime 1467 jg compat_sys_timerfd_settime
1725 1468
1726 .globl compat_sys_timerfd_gettime_wrapper 1469ENTRY(compat_sys_timerfd_gettime_wrapper)
1727compat_sys_timerfd_gettime_wrapper:
1728 lgfr %r2,%r2 # int 1470 lgfr %r2,%r2 # int
1729 llgtr %r3,%r3 # struct compat_itimerspec * 1471 llgtr %r3,%r3 # struct compat_itimerspec *
1730 jg compat_sys_timerfd_gettime 1472 jg compat_sys_timerfd_gettime
1731 1473
1732 .globl compat_sys_signalfd4_wrapper 1474ENTRY(compat_sys_signalfd4_wrapper)
1733compat_sys_signalfd4_wrapper:
1734 lgfr %r2,%r2 # int 1475 lgfr %r2,%r2 # int
1735 llgtr %r3,%r3 # compat_sigset_t * 1476 llgtr %r3,%r3 # compat_sigset_t *
1736 llgfr %r4,%r4 # compat_size_t 1477 llgfr %r4,%r4 # compat_size_t
1737 lgfr %r5,%r5 # int 1478 lgfr %r5,%r5 # int
1738 jg compat_sys_signalfd4 1479 jg compat_sys_signalfd4
1739 1480
1740 .globl sys_eventfd2_wrapper 1481ENTRY(sys_eventfd2_wrapper)
1741sys_eventfd2_wrapper:
1742 llgfr %r2,%r2 # unsigned int 1482 llgfr %r2,%r2 # unsigned int
1743 lgfr %r3,%r3 # int 1483 lgfr %r3,%r3 # int
1744 jg sys_eventfd2 1484 jg sys_eventfd2
1745 1485
1746 .globl sys_inotify_init1_wrapper 1486ENTRY(sys_inotify_init1_wrapper)
1747sys_inotify_init1_wrapper:
1748 lgfr %r2,%r2 # int 1487 lgfr %r2,%r2 # int
1749 jg sys_inotify_init1 1488 jg sys_inotify_init1
1750 1489
1751 .globl sys_pipe2_wrapper 1490ENTRY(sys_pipe2_wrapper)
1752sys_pipe2_wrapper:
1753 llgtr %r2,%r2 # u32 * 1491 llgtr %r2,%r2 # u32 *
1754 lgfr %r3,%r3 # int 1492 lgfr %r3,%r3 # int
1755 jg sys_pipe2 # branch to system call 1493 jg sys_pipe2 # branch to system call
1756 1494
1757 .globl sys_dup3_wrapper 1495ENTRY(sys_dup3_wrapper)
1758sys_dup3_wrapper:
1759 llgfr %r2,%r2 # unsigned int 1496 llgfr %r2,%r2 # unsigned int
1760 llgfr %r3,%r3 # unsigned int 1497 llgfr %r3,%r3 # unsigned int
1761 lgfr %r4,%r4 # int 1498 lgfr %r4,%r4 # int
1762 jg sys_dup3 # branch to system call 1499 jg sys_dup3 # branch to system call
1763 1500
1764 .globl sys_epoll_create1_wrapper 1501ENTRY(sys_epoll_create1_wrapper)
1765sys_epoll_create1_wrapper:
1766 lgfr %r2,%r2 # int 1502 lgfr %r2,%r2 # int
1767 jg sys_epoll_create1 # branch to system call 1503 jg sys_epoll_create1 # branch to system call
1768 1504
1769 .globl sys32_readahead_wrapper 1505ENTRY(sys32_readahead_wrapper)
1770sys32_readahead_wrapper:
1771 lgfr %r2,%r2 # int 1506 lgfr %r2,%r2 # int
1772 llgfr %r3,%r3 # u32 1507 llgfr %r3,%r3 # u32
1773 llgfr %r4,%r4 # u32 1508 llgfr %r4,%r4 # u32
1774 lgfr %r5,%r5 # s32 1509 lgfr %r5,%r5 # s32
1775 jg sys32_readahead # branch to system call 1510 jg sys32_readahead # branch to system call
1776 1511
1777 .globl sys32_sendfile64_wrapper 1512ENTRY(sys32_sendfile64_wrapper)
1778sys32_sendfile64_wrapper:
1779 lgfr %r2,%r2 # int 1513 lgfr %r2,%r2 # int
1780 lgfr %r3,%r3 # int 1514 lgfr %r3,%r3 # int
1781 llgtr %r4,%r4 # compat_loff_t * 1515 llgtr %r4,%r4 # compat_loff_t *
1782 lgfr %r5,%r5 # s32 1516 lgfr %r5,%r5 # s32
1783 jg sys32_sendfile64 # branch to system call 1517 jg sys32_sendfile64 # branch to system call
1784 1518
1785 .globl sys_tkill_wrapper 1519ENTRY(sys_tkill_wrapper)
1786sys_tkill_wrapper:
1787 lgfr %r2,%r2 # pid_t 1520 lgfr %r2,%r2 # pid_t
1788 lgfr %r3,%r3 # int 1521 lgfr %r3,%r3 # int
1789 jg sys_tkill # branch to system call 1522 jg sys_tkill # branch to system call
1790 1523
1791 .globl sys_tgkill_wrapper 1524ENTRY(sys_tgkill_wrapper)
1792sys_tgkill_wrapper:
1793 lgfr %r2,%r2 # pid_t 1525 lgfr %r2,%r2 # pid_t
1794 lgfr %r3,%r3 # pid_t 1526 lgfr %r3,%r3 # pid_t
1795 lgfr %r4,%r4 # int 1527 lgfr %r4,%r4 # int
1796 jg sys_tgkill # branch to system call 1528 jg sys_tgkill # branch to system call
1797 1529
1798 .globl compat_sys_keyctl_wrapper 1530ENTRY(compat_sys_keyctl_wrapper)
1799compat_sys_keyctl_wrapper:
1800 llgfr %r2,%r2 # u32 1531 llgfr %r2,%r2 # u32
1801 llgfr %r3,%r3 # u32 1532 llgfr %r3,%r3 # u32
1802 llgfr %r4,%r4 # u32 1533 llgfr %r4,%r4 # u32
@@ -1804,8 +1535,7 @@ compat_sys_keyctl_wrapper:
1804 llgfr %r6,%r6 # u32 1535 llgfr %r6,%r6 # u32
1805 jg compat_sys_keyctl # branch to system call 1536 jg compat_sys_keyctl # branch to system call
1806 1537
1807 .globl compat_sys_preadv_wrapper 1538ENTRY(compat_sys_preadv_wrapper)
1808compat_sys_preadv_wrapper:
1809 llgfr %r2,%r2 # unsigned long 1539 llgfr %r2,%r2 # unsigned long
1810 llgtr %r3,%r3 # compat_iovec * 1540 llgtr %r3,%r3 # compat_iovec *
1811 llgfr %r4,%r4 # unsigned long 1541 llgfr %r4,%r4 # unsigned long
@@ -1813,8 +1543,7 @@ compat_sys_preadv_wrapper:
1813 llgfr %r6,%r6 # u32 1543 llgfr %r6,%r6 # u32
1814 jg compat_sys_preadv # branch to system call 1544 jg compat_sys_preadv # branch to system call
1815 1545
1816 .globl compat_sys_pwritev_wrapper 1546ENTRY(compat_sys_pwritev_wrapper)
1817compat_sys_pwritev_wrapper:
1818 llgfr %r2,%r2 # unsigned long 1547 llgfr %r2,%r2 # unsigned long
1819 llgtr %r3,%r3 # compat_iovec * 1548 llgtr %r3,%r3 # compat_iovec *
1820 llgfr %r4,%r4 # unsigned long 1549 llgfr %r4,%r4 # unsigned long
@@ -1822,16 +1551,14 @@ compat_sys_pwritev_wrapper:
1822 llgfr %r6,%r6 # u32 1551 llgfr %r6,%r6 # u32
1823 jg compat_sys_pwritev # branch to system call 1552 jg compat_sys_pwritev # branch to system call
1824 1553
1825 .globl compat_sys_rt_tgsigqueueinfo_wrapper 1554ENTRY(compat_sys_rt_tgsigqueueinfo_wrapper)
1826compat_sys_rt_tgsigqueueinfo_wrapper:
1827 lgfr %r2,%r2 # compat_pid_t 1555 lgfr %r2,%r2 # compat_pid_t
1828 lgfr %r3,%r3 # compat_pid_t 1556 lgfr %r3,%r3 # compat_pid_t
1829 lgfr %r4,%r4 # int 1557 lgfr %r4,%r4 # int
1830 llgtr %r5,%r5 # struct compat_siginfo * 1558 llgtr %r5,%r5 # struct compat_siginfo *
1831 jg compat_sys_rt_tgsigqueueinfo_wrapper # branch to system call 1559 jg compat_sys_rt_tgsigqueueinfo_wrapper # branch to system call
1832 1560
1833 .globl sys_perf_event_open_wrapper 1561ENTRY(sys_perf_event_open_wrapper)
1834sys_perf_event_open_wrapper:
1835 llgtr %r2,%r2 # const struct perf_event_attr * 1562 llgtr %r2,%r2 # const struct perf_event_attr *
1836 lgfr %r3,%r3 # pid_t 1563 lgfr %r3,%r3 # pid_t
1837 lgfr %r4,%r4 # int 1564 lgfr %r4,%r4 # int
@@ -1839,29 +1566,25 @@ sys_perf_event_open_wrapper:
1839 llgfr %r6,%r6 # unsigned long 1566 llgfr %r6,%r6 # unsigned long
1840 jg sys_perf_event_open # branch to system call 1567 jg sys_perf_event_open # branch to system call
1841 1568
1842 .globl sys_clone_wrapper 1569ENTRY(sys_clone_wrapper)
1843sys_clone_wrapper:
1844 llgfr %r2,%r2 # unsigned long 1570 llgfr %r2,%r2 # unsigned long
1845 llgfr %r3,%r3 # unsigned long 1571 llgfr %r3,%r3 # unsigned long
1846 llgtr %r4,%r4 # int * 1572 llgtr %r4,%r4 # int *
1847 llgtr %r5,%r5 # int * 1573 llgtr %r5,%r5 # int *
1848 jg sys_clone # branch to system call 1574 jg sys_clone # branch to system call
1849 1575
1850 .globl sys32_execve_wrapper 1576ENTRY(sys32_execve_wrapper)
1851sys32_execve_wrapper:
1852 llgtr %r2,%r2 # char * 1577 llgtr %r2,%r2 # char *
1853 llgtr %r3,%r3 # compat_uptr_t * 1578 llgtr %r3,%r3 # compat_uptr_t *
1854 llgtr %r4,%r4 # compat_uptr_t * 1579 llgtr %r4,%r4 # compat_uptr_t *
1855 jg sys32_execve # branch to system call 1580 jg sys32_execve # branch to system call
1856 1581
1857 .globl sys_fanotify_init_wrapper 1582ENTRY(sys_fanotify_init_wrapper)
1858sys_fanotify_init_wrapper:
1859 llgfr %r2,%r2 # unsigned int 1583 llgfr %r2,%r2 # unsigned int
1860 llgfr %r3,%r3 # unsigned int 1584 llgfr %r3,%r3 # unsigned int
1861 jg sys_fanotify_init # branch to system call 1585 jg sys_fanotify_init # branch to system call
1862 1586
1863 .globl sys_fanotify_mark_wrapper 1587ENTRY(sys_fanotify_mark_wrapper)
1864sys_fanotify_mark_wrapper:
1865 lgfr %r2,%r2 # int 1588 lgfr %r2,%r2 # int
1866 llgfr %r3,%r3 # unsigned int 1589 llgfr %r3,%r3 # unsigned int
1867 sllg %r4,%r4,32 # get high word of 64bit mask 1590 sllg %r4,%r4,32 # get high word of 64bit mask
@@ -1870,16 +1593,14 @@ sys_fanotify_mark_wrapper:
1870 llgt %r6,164(%r15) # char * 1593 llgt %r6,164(%r15) # char *
1871 jg sys_fanotify_mark # branch to system call 1594 jg sys_fanotify_mark # branch to system call
1872 1595
1873 .globl sys_prlimit64_wrapper 1596ENTRY(sys_prlimit64_wrapper)
1874sys_prlimit64_wrapper:
1875 lgfr %r2,%r2 # pid_t 1597 lgfr %r2,%r2 # pid_t
1876 llgfr %r3,%r3 # unsigned int 1598 llgfr %r3,%r3 # unsigned int
1877 llgtr %r4,%r4 # const struct rlimit64 __user * 1599 llgtr %r4,%r4 # const struct rlimit64 __user *
1878 llgtr %r5,%r5 # struct rlimit64 __user * 1600 llgtr %r5,%r5 # struct rlimit64 __user *
1879 jg sys_prlimit64 # branch to system call 1601 jg sys_prlimit64 # branch to system call
1880 1602
1881 .globl sys_name_to_handle_at_wrapper 1603ENTRY(sys_name_to_handle_at_wrapper)
1882sys_name_to_handle_at_wrapper:
1883 lgfr %r2,%r2 # int 1604 lgfr %r2,%r2 # int
1884 llgtr %r3,%r3 # const char __user * 1605 llgtr %r3,%r3 # const char __user *
1885 llgtr %r4,%r4 # struct file_handle __user * 1606 llgtr %r4,%r4 # struct file_handle __user *
@@ -1887,21 +1608,18 @@ sys_name_to_handle_at_wrapper:
1887 lgfr %r6,%r6 # int 1608 lgfr %r6,%r6 # int
1888 jg sys_name_to_handle_at 1609 jg sys_name_to_handle_at
1889 1610
1890 .globl compat_sys_open_by_handle_at_wrapper 1611ENTRY(compat_sys_open_by_handle_at_wrapper)
1891compat_sys_open_by_handle_at_wrapper:
1892 lgfr %r2,%r2 # int 1612 lgfr %r2,%r2 # int
1893 llgtr %r3,%r3 # struct file_handle __user * 1613 llgtr %r3,%r3 # struct file_handle __user *
1894 lgfr %r4,%r4 # int 1614 lgfr %r4,%r4 # int
1895 jg compat_sys_open_by_handle_at 1615 jg compat_sys_open_by_handle_at
1896 1616
1897 .globl compat_sys_clock_adjtime_wrapper 1617ENTRY(compat_sys_clock_adjtime_wrapper)
1898compat_sys_clock_adjtime_wrapper:
1899 lgfr %r2,%r2 # clockid_t (int) 1618 lgfr %r2,%r2 # clockid_t (int)
1900 llgtr %r3,%r3 # struct compat_timex __user * 1619 llgtr %r3,%r3 # struct compat_timex __user *
1901 jg compat_sys_clock_adjtime 1620 jg compat_sys_clock_adjtime
1902 1621
1903 .globl sys_syncfs_wrapper 1622ENTRY(sys_syncfs_wrapper)
1904sys_syncfs_wrapper:
1905 lgfr %r2,%r2 # int 1623 lgfr %r2,%r2 # int
1906 jg sys_syncfs 1624 jg sys_syncfs
1907 1625
diff --git a/arch/s390/kernel/dis.c b/arch/s390/kernel/dis.c
index 1ca3d1d6a86..45df6d456aa 100644
--- a/arch/s390/kernel/dis.c
+++ b/arch/s390/kernel/dis.c
@@ -27,7 +27,7 @@
27#include <asm/system.h> 27#include <asm/system.h>
28#include <asm/uaccess.h> 28#include <asm/uaccess.h>
29#include <asm/io.h> 29#include <asm/io.h>
30#include <asm/atomic.h> 30#include <linux/atomic.h>
31#include <asm/mathemu.h> 31#include <asm/mathemu.h>
32#include <asm/cpcmd.h> 32#include <asm/cpcmd.h>
33#include <asm/lowcore.h> 33#include <asm/lowcore.h>
diff --git a/arch/s390/kernel/early.c b/arch/s390/kernel/early.c
index 068f8465c4e..f297456dba7 100644
--- a/arch/s390/kernel/early.c
+++ b/arch/s390/kernel/early.c
@@ -396,17 +396,19 @@ static __init void detect_machine_facilities(void)
396static __init void rescue_initrd(void) 396static __init void rescue_initrd(void)
397{ 397{
398#ifdef CONFIG_BLK_DEV_INITRD 398#ifdef CONFIG_BLK_DEV_INITRD
399 unsigned long min_initrd_addr = (unsigned long) _end + (4UL << 20);
399 /* 400 /*
400 * Move the initrd right behind the bss section in case it starts 401 * Just like in case of IPL from VM reader we make sure there is a
401 * within the bss section. So we don't overwrite it when the bss 402 * gap of 4MB between end of kernel and start of initrd.
402 * section gets cleared. 403 * That way we can also be sure that saving an NSS will succeed,
404 * which however only requires different segments.
403 */ 405 */
404 if (!INITRD_START || !INITRD_SIZE) 406 if (!INITRD_START || !INITRD_SIZE)
405 return; 407 return;
406 if (INITRD_START >= (unsigned long) __bss_stop) 408 if (INITRD_START >= min_initrd_addr)
407 return; 409 return;
408 memmove(__bss_stop, (void *) INITRD_START, INITRD_SIZE); 410 memmove((void *) min_initrd_addr, (void *) INITRD_START, INITRD_SIZE);
409 INITRD_START = (unsigned long) __bss_stop; 411 INITRD_START = min_initrd_addr;
410#endif 412#endif
411} 413}
412 414
diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S
index 0476174dfff..02ec8fe7d03 100644
--- a/arch/s390/kernel/entry.S
+++ b/arch/s390/kernel/entry.S
@@ -9,8 +9,8 @@
9 * Heiko Carstens <heiko.carstens@de.ibm.com> 9 * Heiko Carstens <heiko.carstens@de.ibm.com>
10 */ 10 */
11 11
12#include <linux/linkage.h>
13#include <linux/init.h> 12#include <linux/init.h>
13#include <linux/linkage.h>
14#include <asm/cache.h> 14#include <asm/cache.h>
15#include <asm/errno.h> 15#include <asm/errno.h>
16#include <asm/ptrace.h> 16#include <asm/ptrace.h>
@@ -197,8 +197,7 @@ STACK_SIZE = 1 << STACK_SHIFT
197 * Returns: 197 * Returns:
198 * gpr2 = prev 198 * gpr2 = prev
199 */ 199 */
200 .globl __switch_to 200ENTRY(__switch_to)
201__switch_to:
202 basr %r1,0 201 basr %r1,0
2030: l %r4,__THREAD_info(%r2) # get thread_info of prev 2020: l %r4,__THREAD_info(%r2) # get thread_info of prev
204 l %r5,__THREAD_info(%r3) # get thread_info of next 203 l %r5,__THREAD_info(%r3) # get thread_info of next
@@ -224,8 +223,7 @@ __critical_start:
224 * are executed with interrupts enabled. 223 * are executed with interrupts enabled.
225 */ 224 */
226 225
227 .globl system_call 226ENTRY(system_call)
228system_call:
229 stpt __LC_SYNC_ENTER_TIMER 227 stpt __LC_SYNC_ENTER_TIMER
230sysc_saveall: 228sysc_saveall:
231 SAVE_ALL_SVC __LC_SVC_OLD_PSW,__LC_SAVE_AREA 229 SAVE_ALL_SVC __LC_SVC_OLD_PSW,__LC_SAVE_AREA
@@ -388,8 +386,7 @@ sysc_tracenogo:
388# 386#
389# a new process exits the kernel with ret_from_fork 387# a new process exits the kernel with ret_from_fork
390# 388#
391 .globl ret_from_fork 389ENTRY(ret_from_fork)
392ret_from_fork:
393 l %r13,__LC_SVC_NEW_PSW+4 390 l %r13,__LC_SVC_NEW_PSW+4
394 l %r12,__LC_THREAD_INFO # load pointer to thread_info struct 391 l %r12,__LC_THREAD_INFO # load pointer to thread_info struct
395 tm SP_PSW+1(%r15),0x01 # forking a kernel thread ? 392 tm SP_PSW+1(%r15),0x01 # forking a kernel thread ?
@@ -405,8 +402,7 @@ ret_from_fork:
405# kernel_execve function needs to deal with pt_regs that is not 402# kernel_execve function needs to deal with pt_regs that is not
406# at the usual place 403# at the usual place
407# 404#
408 .globl kernel_execve 405ENTRY(kernel_execve)
409kernel_execve:
410 stm %r12,%r15,48(%r15) 406 stm %r12,%r15,48(%r15)
411 lr %r14,%r15 407 lr %r14,%r15
412 l %r13,__LC_SVC_NEW_PSW+4 408 l %r13,__LC_SVC_NEW_PSW+4
@@ -438,8 +434,7 @@ kernel_execve:
438 * Program check handler routine 434 * Program check handler routine
439 */ 435 */
440 436
441 .globl pgm_check_handler 437ENTRY(pgm_check_handler)
442pgm_check_handler:
443/* 438/*
444 * First we need to check for a special case: 439 * First we need to check for a special case:
445 * Single stepping an instruction that disables the PER event mask will 440 * Single stepping an instruction that disables the PER event mask will
@@ -565,8 +560,7 @@ kernel_per:
565 * IO interrupt handler routine 560 * IO interrupt handler routine
566 */ 561 */
567 562
568 .globl io_int_handler 563ENTRY(io_int_handler)
569io_int_handler:
570 stck __LC_INT_CLOCK 564 stck __LC_INT_CLOCK
571 stpt __LC_ASYNC_ENTER_TIMER 565 stpt __LC_ASYNC_ENTER_TIMER
572 SAVE_ALL_ASYNC __LC_IO_OLD_PSW,__LC_SAVE_AREA+16 566 SAVE_ALL_ASYNC __LC_IO_OLD_PSW,__LC_SAVE_AREA+16
@@ -703,8 +697,7 @@ io_notify_resume:
703 * External interrupt handler routine 697 * External interrupt handler routine
704 */ 698 */
705 699
706 .globl ext_int_handler 700ENTRY(ext_int_handler)
707ext_int_handler:
708 stck __LC_INT_CLOCK 701 stck __LC_INT_CLOCK
709 stpt __LC_ASYNC_ENTER_TIMER 702 stpt __LC_ASYNC_ENTER_TIMER
710 SAVE_ALL_ASYNC __LC_EXT_OLD_PSW,__LC_SAVE_AREA+16 703 SAVE_ALL_ASYNC __LC_EXT_OLD_PSW,__LC_SAVE_AREA+16
@@ -731,8 +724,7 @@ __critical_end:
731 * Machine check handler routines 724 * Machine check handler routines
732 */ 725 */
733 726
734 .globl mcck_int_handler 727ENTRY(mcck_int_handler)
735mcck_int_handler:
736 stck __LC_MCCK_CLOCK 728 stck __LC_MCCK_CLOCK
737 spt __LC_CPU_TIMER_SAVE_AREA # revalidate cpu timer 729 spt __LC_CPU_TIMER_SAVE_AREA # revalidate cpu timer
738 lm %r0,%r15,__LC_GPREGS_SAVE_AREA # revalidate gprs 730 lm %r0,%r15,__LC_GPREGS_SAVE_AREA # revalidate gprs
@@ -818,8 +810,7 @@ mcck_return:
818 */ 810 */
819#ifdef CONFIG_SMP 811#ifdef CONFIG_SMP
820 __CPUINIT 812 __CPUINIT
821 .globl restart_int_handler 813ENTRY(restart_int_handler)
822restart_int_handler:
823 basr %r1,0 814 basr %r1,0
824restart_base: 815restart_base:
825 spt restart_vtime-restart_base(%r1) 816 spt restart_vtime-restart_base(%r1)
@@ -848,8 +839,7 @@ restart_vtime:
848/* 839/*
849 * If we do not run with SMP enabled, let the new CPU crash ... 840 * If we do not run with SMP enabled, let the new CPU crash ...
850 */ 841 */
851 .globl restart_int_handler 842ENTRY(restart_int_handler)
852restart_int_handler:
853 basr %r1,0 843 basr %r1,0
854restart_base: 844restart_base:
855 lpsw restart_crash-restart_base(%r1) 845 lpsw restart_crash-restart_base(%r1)
@@ -859,6 +849,34 @@ restart_crash:
859restart_go: 849restart_go:
860#endif 850#endif
861 851
852#
853# PSW restart interrupt handler
854#
855ENTRY(psw_restart_int_handler)
856 st %r15,__LC_SAVE_AREA_64(%r0) # save r15
857 basr %r15,0
8580: l %r15,.Lrestart_stack-0b(%r15) # load restart stack
859 l %r15,0(%r15)
860 ahi %r15,-SP_SIZE # make room for pt_regs
861 stm %r0,%r14,SP_R0(%r15) # store gprs %r0-%r14 to stack
862 mvc SP_R15(4,%r15),__LC_SAVE_AREA_64(%r0)# store saved %r15 to stack
863 mvc SP_PSW(8,%r15),__LC_RST_OLD_PSW(%r0) # store restart old psw
864 xc __SF_BACKCHAIN(4,%r15),__SF_BACKCHAIN(%r15) # set backchain to 0
865 basr %r14,0
8661: l %r14,.Ldo_restart-1b(%r14)
867 basr %r14,%r14
868
869 basr %r14,0 # load disabled wait PSW if
8702: lpsw restart_psw_crash-2b(%r14) # do_restart returns
871 .align 4
872.Ldo_restart:
873 .long do_restart
874.Lrestart_stack:
875 .long restart_stack
876 .align 8
877restart_psw_crash:
878 .long 0x000a0000,0x00000000 + restart_psw_crash
879
862 .section .kprobes.text, "ax" 880 .section .kprobes.text, "ax"
863 881
864#ifdef CONFIG_CHECK_STACK 882#ifdef CONFIG_CHECK_STACK
diff --git a/arch/s390/kernel/entry.h b/arch/s390/kernel/entry.h
index 17a6f83a2d6..66729eb7bbc 100644
--- a/arch/s390/kernel/entry.h
+++ b/arch/s390/kernel/entry.h
@@ -5,10 +5,9 @@
5#include <linux/signal.h> 5#include <linux/signal.h>
6#include <asm/ptrace.h> 6#include <asm/ptrace.h>
7 7
8typedef void pgm_check_handler_t(struct pt_regs *, long, unsigned long); 8void do_protection_exception(struct pt_regs *, long, unsigned long);
9extern pgm_check_handler_t *pgm_check_table[128]; 9void do_dat_exception(struct pt_regs *, long, unsigned long);
10pgm_check_handler_t do_protection_exception; 10void do_asce_exception(struct pt_regs *, long, unsigned long);
11pgm_check_handler_t do_dat_exception;
12 11
13extern int sysctl_userprocess_debug; 12extern int sysctl_userprocess_debug;
14 13
diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S
index d61967e2eab..713da076053 100644
--- a/arch/s390/kernel/entry64.S
+++ b/arch/s390/kernel/entry64.S
@@ -9,8 +9,8 @@
9 * Heiko Carstens <heiko.carstens@de.ibm.com> 9 * Heiko Carstens <heiko.carstens@de.ibm.com>
10 */ 10 */
11 11
12#include <linux/linkage.h>
13#include <linux/init.h> 12#include <linux/init.h>
13#include <linux/linkage.h>
14#include <asm/cache.h> 14#include <asm/cache.h>
15#include <asm/errno.h> 15#include <asm/errno.h>
16#include <asm/ptrace.h> 16#include <asm/ptrace.h>
@@ -56,15 +56,28 @@ _TIF_WORK_INT = (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | _TIF_NEED_RESCHED | \
56 _TIF_MCCK_PENDING) 56 _TIF_MCCK_PENDING)
57_TIF_SYSCALL = (_TIF_SYSCALL_TRACE>>8 | _TIF_SYSCALL_AUDIT>>8 | \ 57_TIF_SYSCALL = (_TIF_SYSCALL_TRACE>>8 | _TIF_SYSCALL_AUDIT>>8 | \
58 _TIF_SECCOMP>>8 | _TIF_SYSCALL_TRACEPOINT>>8) 58 _TIF_SECCOMP>>8 | _TIF_SYSCALL_TRACEPOINT>>8)
59_TIF_EXIT_SIE = (_TIF_SIGPENDING | _TIF_NEED_RESCHED | _TIF_MCCK_PENDING)
59 60
60#define BASED(name) name-system_call(%r13) 61#define BASED(name) name-system_call(%r13)
61 62
63 .macro SPP newpp
64#if defined(CONFIG_KVM) || defined(CONFIG_KVM_MODULE)
65 tm __LC_MACHINE_FLAGS+6,0x20 # MACHINE_FLAG_SPP
66 jz .+8
67 .insn s,0xb2800000,\newpp
68#endif
69 .endm
70
62 .macro HANDLE_SIE_INTERCEPT 71 .macro HANDLE_SIE_INTERCEPT
63#if defined(CONFIG_KVM) || defined(CONFIG_KVM_MODULE) 72#if defined(CONFIG_KVM) || defined(CONFIG_KVM_MODULE)
64 lg %r3,__LC_SIE_HOOK 73 tm __TI_flags+6(%r12),_TIF_SIE>>8
65 ltgr %r3,%r3
66 jz 0f 74 jz 0f
67 basr %r14,%r3 75 SPP __LC_CMF_HPP # set host id
76 clc SP_PSW+8(8,%r15),BASED(.Lsie_loop)
77 jl 0f
78 clc SP_PSW+8(8,%r15),BASED(.Lsie_done)
79 jhe 0f
80 mvc SP_PSW+8(8,%r15),BASED(.Lsie_loop)
680: 810:
69#endif 82#endif
70 .endm 83 .endm
@@ -206,8 +219,7 @@ _TIF_SYSCALL = (_TIF_SYSCALL_TRACE>>8 | _TIF_SYSCALL_AUDIT>>8 | \
206 * Returns: 219 * Returns:
207 * gpr2 = prev 220 * gpr2 = prev
208 */ 221 */
209 .globl __switch_to 222ENTRY(__switch_to)
210__switch_to:
211 lg %r4,__THREAD_info(%r2) # get thread_info of prev 223 lg %r4,__THREAD_info(%r2) # get thread_info of prev
212 lg %r5,__THREAD_info(%r3) # get thread_info of next 224 lg %r5,__THREAD_info(%r3) # get thread_info of next
213 tm __TI_flags+7(%r4),_TIF_MCCK_PENDING # machine check pending? 225 tm __TI_flags+7(%r4),_TIF_MCCK_PENDING # machine check pending?
@@ -232,8 +244,7 @@ __critical_start:
232 * are executed with interrupts enabled. 244 * are executed with interrupts enabled.
233 */ 245 */
234 246
235 .globl system_call 247ENTRY(system_call)
236system_call:
237 stpt __LC_SYNC_ENTER_TIMER 248 stpt __LC_SYNC_ENTER_TIMER
238sysc_saveall: 249sysc_saveall:
239 SAVE_ALL_SVC __LC_SVC_OLD_PSW,__LC_SAVE_AREA 250 SAVE_ALL_SVC __LC_SVC_OLD_PSW,__LC_SAVE_AREA
@@ -395,8 +406,7 @@ sysc_tracenogo:
395# 406#
396# a new process exits the kernel with ret_from_fork 407# a new process exits the kernel with ret_from_fork
397# 408#
398 .globl ret_from_fork 409ENTRY(ret_from_fork)
399ret_from_fork:
400 lg %r13,__LC_SVC_NEW_PSW+8 410 lg %r13,__LC_SVC_NEW_PSW+8
401 lg %r12,__LC_THREAD_INFO # load pointer to thread_info struct 411 lg %r12,__LC_THREAD_INFO # load pointer to thread_info struct
402 tm SP_PSW+1(%r15),0x01 # forking a kernel thread ? 412 tm SP_PSW+1(%r15),0x01 # forking a kernel thread ?
@@ -411,8 +421,7 @@ ret_from_fork:
411# kernel_execve function needs to deal with pt_regs that is not 421# kernel_execve function needs to deal with pt_regs that is not
412# at the usual place 422# at the usual place
413# 423#
414 .globl kernel_execve 424ENTRY(kernel_execve)
415kernel_execve:
416 stmg %r12,%r15,96(%r15) 425 stmg %r12,%r15,96(%r15)
417 lgr %r14,%r15 426 lgr %r14,%r15
418 aghi %r15,-SP_SIZE 427 aghi %r15,-SP_SIZE
@@ -442,8 +451,7 @@ kernel_execve:
442 * Program check handler routine 451 * Program check handler routine
443 */ 452 */
444 453
445 .globl pgm_check_handler 454ENTRY(pgm_check_handler)
446pgm_check_handler:
447/* 455/*
448 * First we need to check for a special case: 456 * First we need to check for a special case:
449 * Single stepping an instruction that disables the PER event mask will 457 * Single stepping an instruction that disables the PER event mask will
@@ -465,6 +473,7 @@ pgm_check_handler:
465 xc SP_ILC(4,%r15),SP_ILC(%r15) 473 xc SP_ILC(4,%r15),SP_ILC(%r15)
466 mvc SP_PSW(16,%r15),__LC_PGM_OLD_PSW 474 mvc SP_PSW(16,%r15),__LC_PGM_OLD_PSW
467 lg %r12,__LC_THREAD_INFO # load pointer to thread_info struct 475 lg %r12,__LC_THREAD_INFO # load pointer to thread_info struct
476 HANDLE_SIE_INTERCEPT
468 tm SP_PSW+1(%r15),0x01 # interrupting from user ? 477 tm SP_PSW+1(%r15),0x01 # interrupting from user ?
469 jz pgm_no_vtime 478 jz pgm_no_vtime
470 UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER 479 UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER
@@ -472,7 +481,6 @@ pgm_check_handler:
472 mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER 481 mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER
473 LAST_BREAK 482 LAST_BREAK
474pgm_no_vtime: 483pgm_no_vtime:
475 HANDLE_SIE_INTERCEPT
476 stg %r11,SP_ARGS(%r15) 484 stg %r11,SP_ARGS(%r15)
477 lgf %r3,__LC_PGM_ILC # load program interruption code 485 lgf %r3,__LC_PGM_ILC # load program interruption code
478 lg %r4,__LC_TRANS_EXC_CODE 486 lg %r4,__LC_TRANS_EXC_CODE
@@ -507,6 +515,7 @@ pgm_per_std:
507 CREATE_STACK_FRAME __LC_SAVE_AREA 515 CREATE_STACK_FRAME __LC_SAVE_AREA
508 mvc SP_PSW(16,%r15),__LC_PGM_OLD_PSW 516 mvc SP_PSW(16,%r15),__LC_PGM_OLD_PSW
509 lg %r12,__LC_THREAD_INFO # load pointer to thread_info struct 517 lg %r12,__LC_THREAD_INFO # load pointer to thread_info struct
518 HANDLE_SIE_INTERCEPT
510 tm SP_PSW+1(%r15),0x01 # interrupting from user ? 519 tm SP_PSW+1(%r15),0x01 # interrupting from user ?
511 jz pgm_no_vtime2 520 jz pgm_no_vtime2
512 UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER 521 UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER
@@ -514,7 +523,6 @@ pgm_per_std:
514 mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER 523 mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER
515 LAST_BREAK 524 LAST_BREAK
516pgm_no_vtime2: 525pgm_no_vtime2:
517 HANDLE_SIE_INTERCEPT
518 lg %r1,__TI_task(%r12) 526 lg %r1,__TI_task(%r12)
519 tm SP_PSW+1(%r15),0x01 # kernel per event ? 527 tm SP_PSW+1(%r15),0x01 # kernel per event ?
520 jz kernel_per 528 jz kernel_per
@@ -571,14 +579,14 @@ kernel_per:
571/* 579/*
572 * IO interrupt handler routine 580 * IO interrupt handler routine
573 */ 581 */
574 .globl io_int_handler 582ENTRY(io_int_handler)
575io_int_handler:
576 stck __LC_INT_CLOCK 583 stck __LC_INT_CLOCK
577 stpt __LC_ASYNC_ENTER_TIMER 584 stpt __LC_ASYNC_ENTER_TIMER
578 SAVE_ALL_ASYNC __LC_IO_OLD_PSW,__LC_SAVE_AREA+40 585 SAVE_ALL_ASYNC __LC_IO_OLD_PSW,__LC_SAVE_AREA+40
579 CREATE_STACK_FRAME __LC_SAVE_AREA+40 586 CREATE_STACK_FRAME __LC_SAVE_AREA+40
580 mvc SP_PSW(16,%r15),0(%r12) # move user PSW to stack 587 mvc SP_PSW(16,%r15),0(%r12) # move user PSW to stack
581 lg %r12,__LC_THREAD_INFO # load pointer to thread_info struct 588 lg %r12,__LC_THREAD_INFO # load pointer to thread_info struct
589 HANDLE_SIE_INTERCEPT
582 tm SP_PSW+1(%r15),0x01 # interrupting from user ? 590 tm SP_PSW+1(%r15),0x01 # interrupting from user ?
583 jz io_no_vtime 591 jz io_no_vtime
584 UPDATE_VTIME __LC_EXIT_TIMER,__LC_ASYNC_ENTER_TIMER,__LC_USER_TIMER 592 UPDATE_VTIME __LC_EXIT_TIMER,__LC_ASYNC_ENTER_TIMER,__LC_USER_TIMER
@@ -586,7 +594,6 @@ io_int_handler:
586 mvc __LC_LAST_UPDATE_TIMER(8),__LC_ASYNC_ENTER_TIMER 594 mvc __LC_LAST_UPDATE_TIMER(8),__LC_ASYNC_ENTER_TIMER
587 LAST_BREAK 595 LAST_BREAK
588io_no_vtime: 596io_no_vtime:
589 HANDLE_SIE_INTERCEPT
590 TRACE_IRQS_OFF 597 TRACE_IRQS_OFF
591 la %r2,SP_PTREGS(%r15) # address of register-save area 598 la %r2,SP_PTREGS(%r15) # address of register-save area
592 brasl %r14,do_IRQ # call standard irq handler 599 brasl %r14,do_IRQ # call standard irq handler
@@ -706,14 +713,14 @@ io_notify_resume:
706/* 713/*
707 * External interrupt handler routine 714 * External interrupt handler routine
708 */ 715 */
709 .globl ext_int_handler 716ENTRY(ext_int_handler)
710ext_int_handler:
711 stck __LC_INT_CLOCK 717 stck __LC_INT_CLOCK
712 stpt __LC_ASYNC_ENTER_TIMER 718 stpt __LC_ASYNC_ENTER_TIMER
713 SAVE_ALL_ASYNC __LC_EXT_OLD_PSW,__LC_SAVE_AREA+40 719 SAVE_ALL_ASYNC __LC_EXT_OLD_PSW,__LC_SAVE_AREA+40
714 CREATE_STACK_FRAME __LC_SAVE_AREA+40 720 CREATE_STACK_FRAME __LC_SAVE_AREA+40
715 mvc SP_PSW(16,%r15),0(%r12) # move user PSW to stack 721 mvc SP_PSW(16,%r15),0(%r12) # move user PSW to stack
716 lg %r12,__LC_THREAD_INFO # load pointer to thread_info struct 722 lg %r12,__LC_THREAD_INFO # load pointer to thread_info struct
723 HANDLE_SIE_INTERCEPT
717 tm SP_PSW+1(%r15),0x01 # interrupting from user ? 724 tm SP_PSW+1(%r15),0x01 # interrupting from user ?
718 jz ext_no_vtime 725 jz ext_no_vtime
719 UPDATE_VTIME __LC_EXIT_TIMER,__LC_ASYNC_ENTER_TIMER,__LC_USER_TIMER 726 UPDATE_VTIME __LC_EXIT_TIMER,__LC_ASYNC_ENTER_TIMER,__LC_USER_TIMER
@@ -721,7 +728,6 @@ ext_int_handler:
721 mvc __LC_LAST_UPDATE_TIMER(8),__LC_ASYNC_ENTER_TIMER 728 mvc __LC_LAST_UPDATE_TIMER(8),__LC_ASYNC_ENTER_TIMER
722 LAST_BREAK 729 LAST_BREAK
723ext_no_vtime: 730ext_no_vtime:
724 HANDLE_SIE_INTERCEPT
725 TRACE_IRQS_OFF 731 TRACE_IRQS_OFF
726 lghi %r1,4096 732 lghi %r1,4096
727 la %r2,SP_PTREGS(%r15) # address of register-save area 733 la %r2,SP_PTREGS(%r15) # address of register-save area
@@ -736,8 +742,7 @@ __critical_end:
736/* 742/*
737 * Machine check handler routines 743 * Machine check handler routines
738 */ 744 */
739 .globl mcck_int_handler 745ENTRY(mcck_int_handler)
740mcck_int_handler:
741 stck __LC_MCCK_CLOCK 746 stck __LC_MCCK_CLOCK
742 la %r1,4095 # revalidate r1 747 la %r1,4095 # revalidate r1
743 spt __LC_CPU_TIMER_SAVE_AREA-4095(%r1) # revalidate cpu timer 748 spt __LC_CPU_TIMER_SAVE_AREA-4095(%r1) # revalidate cpu timer
@@ -785,6 +790,7 @@ mcck_int_main:
785 lg %r12,__LC_THREAD_INFO # load pointer to thread_info struct 790 lg %r12,__LC_THREAD_INFO # load pointer to thread_info struct
786 tm __LC_MCCK_CODE+2,0x08 # mwp of old psw valid? 791 tm __LC_MCCK_CODE+2,0x08 # mwp of old psw valid?
787 jno mcck_no_vtime # no -> no timer update 792 jno mcck_no_vtime # no -> no timer update
793 HANDLE_SIE_INTERCEPT
788 tm SP_PSW+1(%r15),0x01 # interrupting from user ? 794 tm SP_PSW+1(%r15),0x01 # interrupting from user ?
789 jz mcck_no_vtime 795 jz mcck_no_vtime
790 UPDATE_VTIME __LC_EXIT_TIMER,__LC_MCCK_ENTER_TIMER,__LC_USER_TIMER 796 UPDATE_VTIME __LC_EXIT_TIMER,__LC_MCCK_ENTER_TIMER,__LC_USER_TIMER
@@ -804,7 +810,6 @@ mcck_no_vtime:
804 stosm __SF_EMPTY(%r15),0x04 # turn dat on 810 stosm __SF_EMPTY(%r15),0x04 # turn dat on
805 tm __TI_flags+7(%r12),_TIF_MCCK_PENDING 811 tm __TI_flags+7(%r12),_TIF_MCCK_PENDING
806 jno mcck_return 812 jno mcck_return
807 HANDLE_SIE_INTERCEPT
808 TRACE_IRQS_OFF 813 TRACE_IRQS_OFF
809 brasl %r14,s390_handle_mcck 814 brasl %r14,s390_handle_mcck
810 TRACE_IRQS_ON 815 TRACE_IRQS_ON
@@ -823,8 +828,7 @@ mcck_done:
823 */ 828 */
824#ifdef CONFIG_SMP 829#ifdef CONFIG_SMP
825 __CPUINIT 830 __CPUINIT
826 .globl restart_int_handler 831ENTRY(restart_int_handler)
827restart_int_handler:
828 basr %r1,0 832 basr %r1,0
829restart_base: 833restart_base:
830 spt restart_vtime-restart_base(%r1) 834 spt restart_vtime-restart_base(%r1)
@@ -851,8 +855,7 @@ restart_vtime:
851/* 855/*
852 * If we do not run with SMP enabled, let the new CPU crash ... 856 * If we do not run with SMP enabled, let the new CPU crash ...
853 */ 857 */
854 .globl restart_int_handler 858ENTRY(restart_int_handler)
855restart_int_handler:
856 basr %r1,0 859 basr %r1,0
857restart_base: 860restart_base:
858 lpswe restart_crash-restart_base(%r1) 861 lpswe restart_crash-restart_base(%r1)
@@ -862,6 +865,26 @@ restart_crash:
862restart_go: 865restart_go:
863#endif 866#endif
864 867
868#
869# PSW restart interrupt handler
870#
871ENTRY(psw_restart_int_handler)
872 stg %r15,__LC_SAVE_AREA_64(%r0) # save r15
873 larl %r15,restart_stack # load restart stack
874 lg %r15,0(%r15)
875 aghi %r15,-SP_SIZE # make room for pt_regs
876 stmg %r0,%r14,SP_R0(%r15) # store gprs %r0-%r14 to stack
877 mvc SP_R15(8,%r15),__LC_SAVE_AREA_64(%r0)# store saved %r15 to stack
878 mvc SP_PSW(16,%r15),__LC_RST_OLD_PSW(%r0)# store restart old psw
879 xc __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15) # set backchain to 0
880 brasl %r14,do_restart
881
882 larl %r14,restart_psw_crash # load disabled wait PSW if
883 lpswe 0(%r14) # do_restart returns
884 .align 8
885restart_psw_crash:
886 .quad 0x0002000080000000,0x0000000000000000 + restart_psw_crash
887
865 .section .kprobes.text, "ax" 888 .section .kprobes.text, "ax"
866 889
867#ifdef CONFIG_CHECK_STACK 890#ifdef CONFIG_CHECK_STACK
@@ -1036,6 +1059,62 @@ cleanup_io_restore_insn:
1036.Lcritical_end: 1059.Lcritical_end:
1037 .quad __critical_end 1060 .quad __critical_end
1038 1061
1062#if defined(CONFIG_KVM) || defined(CONFIG_KVM_MODULE)
1063/*
1064 * sie64a calling convention:
1065 * %r2 pointer to sie control block
1066 * %r3 guest register save area
1067 */
1068ENTRY(sie64a)
1069 stmg %r6,%r14,__SF_GPRS(%r15) # save kernel registers
1070 stg %r2,__SF_EMPTY(%r15) # save control block pointer
1071 stg %r3,__SF_EMPTY+8(%r15) # save guest register save area
1072 lmg %r0,%r13,0(%r3) # load guest gprs 0-13
1073 lg %r14,__LC_THREAD_INFO # pointer thread_info struct
1074 oi __TI_flags+6(%r14),_TIF_SIE>>8
1075sie_loop:
1076 lg %r14,__LC_THREAD_INFO # pointer thread_info struct
1077 tm __TI_flags+7(%r14),_TIF_EXIT_SIE
1078 jnz sie_exit
1079 lg %r14,__LC_GMAP # get gmap pointer
1080 ltgr %r14,%r14
1081 jz sie_gmap
1082 lctlg %c1,%c1,__GMAP_ASCE(%r14) # load primary asce
1083sie_gmap:
1084 lg %r14,__SF_EMPTY(%r15) # get control block pointer
1085 SPP __SF_EMPTY(%r15) # set guest id
1086 sie 0(%r14)
1087sie_done:
1088 SPP __LC_CMF_HPP # set host id
1089 lg %r14,__LC_THREAD_INFO # pointer thread_info struct
1090sie_exit:
1091 lctlg %c1,%c1,__LC_USER_ASCE # load primary asce
1092 ni __TI_flags+6(%r14),255-(_TIF_SIE>>8)
1093 lg %r14,__SF_EMPTY+8(%r15) # load guest register save area
1094 stmg %r0,%r13,0(%r14) # save guest gprs 0-13
1095 lmg %r6,%r14,__SF_GPRS(%r15) # restore kernel registers
1096 lghi %r2,0
1097 br %r14
1098sie_fault:
1099 lg %r14,__LC_THREAD_INFO # pointer thread_info struct
1100 ni __TI_flags+6(%r14),255-(_TIF_SIE>>8)
1101 lg %r14,__SF_EMPTY+8(%r15) # load guest register save area
1102 stmg %r0,%r13,0(%r14) # save guest gprs 0-13
1103 lmg %r6,%r14,__SF_GPRS(%r15) # restore kernel registers
1104 lghi %r2,-EFAULT
1105 br %r14
1106
1107 .align 8
1108.Lsie_loop:
1109 .quad sie_loop
1110.Lsie_done:
1111 .quad sie_done
1112
1113 .section __ex_table,"a"
1114 .quad sie_loop,sie_fault
1115 .previous
1116#endif
1117
1039 .section .rodata, "a" 1118 .section .rodata, "a"
1040#define SYSCALL(esa,esame,emu) .long esame 1119#define SYSCALL(esa,esame,emu) .long esame
1041 .globl sys_call_table 1120 .globl sys_call_table
diff --git a/arch/s390/kernel/head.S b/arch/s390/kernel/head.S
index fb317bf2c37..2d781bab37b 100644
--- a/arch/s390/kernel/head.S
+++ b/arch/s390/kernel/head.S
@@ -22,6 +22,7 @@
22 */ 22 */
23 23
24#include <linux/init.h> 24#include <linux/init.h>
25#include <linux/linkage.h>
25#include <asm/asm-offsets.h> 26#include <asm/asm-offsets.h>
26#include <asm/thread_info.h> 27#include <asm/thread_info.h>
27#include <asm/page.h> 28#include <asm/page.h>
@@ -383,8 +384,7 @@ iplstart:
383# doesn't need a builtin ipl record. 384# doesn't need a builtin ipl record.
384# 385#
385 .org 0x800 386 .org 0x800
386 .globl start 387ENTRY(start)
387start:
388 stm %r0,%r15,0x07b0 # store registers 388 stm %r0,%r15,0x07b0 # store registers
389 basr %r12,%r0 389 basr %r12,%r0
390.base: 390.base:
@@ -448,8 +448,7 @@ start:
448# or linload or SALIPL 448# or linload or SALIPL
449# 449#
450 .org 0x10000 450 .org 0x10000
451 .globl startup 451ENTRY(startup)
452startup:
453 basr %r13,0 # get base 452 basr %r13,0 # get base
454.LPG0: 453.LPG0:
455 xc 0x200(256),0x200 # partially clear lowcore 454 xc 0x200(256),0x200 # partially clear lowcore
diff --git a/arch/s390/kernel/head31.S b/arch/s390/kernel/head31.S
index b8f8dc12610..f21954b44dc 100644
--- a/arch/s390/kernel/head31.S
+++ b/arch/s390/kernel/head31.S
@@ -11,13 +11,13 @@
11 */ 11 */
12 12
13#include <linux/init.h> 13#include <linux/init.h>
14#include <linux/linkage.h>
14#include <asm/asm-offsets.h> 15#include <asm/asm-offsets.h>
15#include <asm/thread_info.h> 16#include <asm/thread_info.h>
16#include <asm/page.h> 17#include <asm/page.h>
17 18
18__HEAD 19__HEAD
19 .globl startup_continue 20ENTRY(startup_continue)
20startup_continue:
21 basr %r13,0 # get base 21 basr %r13,0 # get base
22.LPG1: 22.LPG1:
23 23
@@ -45,7 +45,7 @@ startup_continue:
45 # virtual and never return ... 45 # virtual and never return ...
46 .align 8 46 .align 8
47.Lentry:.long 0x00080000,0x80000000 + _stext 47.Lentry:.long 0x00080000,0x80000000 + _stext
48.Lctl: .long 0x04b50002 # cr0: various things 48.Lctl: .long 0x04b50000 # cr0: various things
49 .long 0 # cr1: primary space segment table 49 .long 0 # cr1: primary space segment table
50 .long .Lduct # cr2: dispatchable unit control table 50 .long .Lduct # cr2: dispatchable unit control table
51 .long 0 # cr3: instruction authorization 51 .long 0 # cr3: instruction authorization
@@ -78,8 +78,7 @@ startup_continue:
78.Lbase_cc: 78.Lbase_cc:
79 .long sched_clock_base_cc 79 .long sched_clock_base_cc
80 80
81 .globl _ehead 81ENTRY(_ehead)
82_ehead:
83 82
84#ifdef CONFIG_SHARED_KERNEL 83#ifdef CONFIG_SHARED_KERNEL
85 .org 0x100000 - 0x11000 # head.o ends at 0x11000 84 .org 0x100000 - 0x11000 # head.o ends at 0x11000
@@ -88,8 +87,8 @@ _ehead:
88# 87#
89# startup-code, running in absolute addressing mode 88# startup-code, running in absolute addressing mode
90# 89#
91 .globl _stext 90ENTRY(_stext)
92_stext: basr %r13,0 # get base 91 basr %r13,0 # get base
93.LPG3: 92.LPG3:
94# check control registers 93# check control registers
95 stctl %c0,%c15,0(%r15) 94 stctl %c0,%c15,0(%r15)
diff --git a/arch/s390/kernel/head64.S b/arch/s390/kernel/head64.S
index cdef6871741..ae5d492b069 100644
--- a/arch/s390/kernel/head64.S
+++ b/arch/s390/kernel/head64.S
@@ -11,13 +11,13 @@
11 */ 11 */
12 12
13#include <linux/init.h> 13#include <linux/init.h>
14#include <linux/linkage.h>
14#include <asm/asm-offsets.h> 15#include <asm/asm-offsets.h>
15#include <asm/thread_info.h> 16#include <asm/thread_info.h>
16#include <asm/page.h> 17#include <asm/page.h>
17 18
18__HEAD 19__HEAD
19 .globl startup_continue 20ENTRY(startup_continue)
20startup_continue:
21 larl %r1,sched_clock_base_cc 21 larl %r1,sched_clock_base_cc
22 mvc 0(8,%r1),__LC_LAST_UPDATE_CLOCK 22 mvc 0(8,%r1),__LC_LAST_UPDATE_CLOCK
23 larl %r13,.LPG1 # get base 23 larl %r13,.LPG1 # get base
@@ -46,7 +46,7 @@ startup_continue:
46 .align 16 46 .align 16
47.LPG1: 47.LPG1:
48.Lentry:.quad 0x0000000180000000,_stext 48.Lentry:.quad 0x0000000180000000,_stext
49.Lctl: .quad 0x04350002 # cr0: various things 49.Lctl: .quad 0x04040000 # cr0: AFP registers & secondary space
50 .quad 0 # cr1: primary space segment table 50 .quad 0 # cr1: primary space segment table
51 .quad .Lduct # cr2: dispatchable unit control table 51 .quad .Lduct # cr2: dispatchable unit control table
52 .quad 0 # cr3: instruction authorization 52 .quad 0 # cr3: instruction authorization
@@ -76,8 +76,7 @@ startup_continue:
76 .long 0x80000000,0,0,0 # invalid access-list entries 76 .long 0x80000000,0,0,0 # invalid access-list entries
77 .endr 77 .endr
78 78
79 .globl _ehead 79ENTRY(_ehead)
80_ehead:
81 80
82#ifdef CONFIG_SHARED_KERNEL 81#ifdef CONFIG_SHARED_KERNEL
83 .org 0x100000 - 0x11000 # head.o ends at 0x11000 82 .org 0x100000 - 0x11000 # head.o ends at 0x11000
@@ -86,8 +85,8 @@ _ehead:
86# 85#
87# startup-code, running in absolute addressing mode 86# startup-code, running in absolute addressing mode
88# 87#
89 .globl _stext 88ENTRY(_stext)
90_stext: basr %r13,0 # get base 89 basr %r13,0 # get base
91.LPG3: 90.LPG3:
92# check control registers 91# check control registers
93 stctg %c0,%c15,0(%r15) 92 stctg %c0,%c15,0(%r15)
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c
index a689070be28..48c71020636 100644
--- a/arch/s390/kernel/ipl.c
+++ b/arch/s390/kernel/ipl.c
@@ -45,11 +45,13 @@
45 * - halt 45 * - halt
46 * - power off 46 * - power off
47 * - reipl 47 * - reipl
48 * - restart
48 */ 49 */
49#define ON_PANIC_STR "on_panic" 50#define ON_PANIC_STR "on_panic"
50#define ON_HALT_STR "on_halt" 51#define ON_HALT_STR "on_halt"
51#define ON_POFF_STR "on_poff" 52#define ON_POFF_STR "on_poff"
52#define ON_REIPL_STR "on_reboot" 53#define ON_REIPL_STR "on_reboot"
54#define ON_RESTART_STR "on_restart"
53 55
54struct shutdown_action; 56struct shutdown_action;
55struct shutdown_trigger { 57struct shutdown_trigger {
@@ -1218,7 +1220,7 @@ static int __init reipl_fcp_init(void)
1218 /* sysfs: create fcp kset for mixing attr group and bin attrs */ 1220 /* sysfs: create fcp kset for mixing attr group and bin attrs */
1219 reipl_fcp_kset = kset_create_and_add(IPL_FCP_STR, NULL, 1221 reipl_fcp_kset = kset_create_and_add(IPL_FCP_STR, NULL,
1220 &reipl_kset->kobj); 1222 &reipl_kset->kobj);
1221 if (!reipl_kset) { 1223 if (!reipl_fcp_kset) {
1222 free_page((unsigned long) reipl_block_fcp); 1224 free_page((unsigned long) reipl_block_fcp);
1223 return -ENOMEM; 1225 return -ENOMEM;
1224 } 1226 }
@@ -1544,17 +1546,20 @@ static char vmcmd_on_reboot[128];
1544static char vmcmd_on_panic[128]; 1546static char vmcmd_on_panic[128];
1545static char vmcmd_on_halt[128]; 1547static char vmcmd_on_halt[128];
1546static char vmcmd_on_poff[128]; 1548static char vmcmd_on_poff[128];
1549static char vmcmd_on_restart[128];
1547 1550
1548DEFINE_IPL_ATTR_STR_RW(vmcmd, on_reboot, "%s\n", "%s\n", vmcmd_on_reboot); 1551DEFINE_IPL_ATTR_STR_RW(vmcmd, on_reboot, "%s\n", "%s\n", vmcmd_on_reboot);
1549DEFINE_IPL_ATTR_STR_RW(vmcmd, on_panic, "%s\n", "%s\n", vmcmd_on_panic); 1552DEFINE_IPL_ATTR_STR_RW(vmcmd, on_panic, "%s\n", "%s\n", vmcmd_on_panic);
1550DEFINE_IPL_ATTR_STR_RW(vmcmd, on_halt, "%s\n", "%s\n", vmcmd_on_halt); 1553DEFINE_IPL_ATTR_STR_RW(vmcmd, on_halt, "%s\n", "%s\n", vmcmd_on_halt);
1551DEFINE_IPL_ATTR_STR_RW(vmcmd, on_poff, "%s\n", "%s\n", vmcmd_on_poff); 1554DEFINE_IPL_ATTR_STR_RW(vmcmd, on_poff, "%s\n", "%s\n", vmcmd_on_poff);
1555DEFINE_IPL_ATTR_STR_RW(vmcmd, on_restart, "%s\n", "%s\n", vmcmd_on_restart);
1552 1556
1553static struct attribute *vmcmd_attrs[] = { 1557static struct attribute *vmcmd_attrs[] = {
1554 &sys_vmcmd_on_reboot_attr.attr, 1558 &sys_vmcmd_on_reboot_attr.attr,
1555 &sys_vmcmd_on_panic_attr.attr, 1559 &sys_vmcmd_on_panic_attr.attr,
1556 &sys_vmcmd_on_halt_attr.attr, 1560 &sys_vmcmd_on_halt_attr.attr,
1557 &sys_vmcmd_on_poff_attr.attr, 1561 &sys_vmcmd_on_poff_attr.attr,
1562 &sys_vmcmd_on_restart_attr.attr,
1558 NULL, 1563 NULL,
1559}; 1564};
1560 1565
@@ -1576,6 +1581,8 @@ static void vmcmd_run(struct shutdown_trigger *trigger)
1576 cmd = vmcmd_on_halt; 1581 cmd = vmcmd_on_halt;
1577 else if (strcmp(trigger->name, ON_POFF_STR) == 0) 1582 else if (strcmp(trigger->name, ON_POFF_STR) == 0)
1578 cmd = vmcmd_on_poff; 1583 cmd = vmcmd_on_poff;
1584 else if (strcmp(trigger->name, ON_RESTART_STR) == 0)
1585 cmd = vmcmd_on_restart;
1579 else 1586 else
1580 return; 1587 return;
1581 1588
@@ -1611,7 +1618,8 @@ static struct shutdown_action vmcmd_action = {SHUTDOWN_ACTION_VMCMD_STR,
1611 1618
1612static void stop_run(struct shutdown_trigger *trigger) 1619static void stop_run(struct shutdown_trigger *trigger)
1613{ 1620{
1614 if (strcmp(trigger->name, ON_PANIC_STR) == 0) 1621 if (strcmp(trigger->name, ON_PANIC_STR) == 0 ||
1622 strcmp(trigger->name, ON_RESTART_STR) == 0)
1615 disabled_wait((unsigned long) __builtin_return_address(0)); 1623 disabled_wait((unsigned long) __builtin_return_address(0));
1616 while (sigp(smp_processor_id(), sigp_stop) == sigp_busy) 1624 while (sigp(smp_processor_id(), sigp_stop) == sigp_busy)
1617 cpu_relax(); 1625 cpu_relax();
@@ -1707,6 +1715,34 @@ static void do_panic(void)
1707 stop_run(&on_panic_trigger); 1715 stop_run(&on_panic_trigger);
1708} 1716}
1709 1717
1718/* on restart */
1719
1720static struct shutdown_trigger on_restart_trigger = {ON_RESTART_STR,
1721 &stop_action};
1722
1723static ssize_t on_restart_show(struct kobject *kobj,
1724 struct kobj_attribute *attr, char *page)
1725{
1726 return sprintf(page, "%s\n", on_restart_trigger.action->name);
1727}
1728
1729static ssize_t on_restart_store(struct kobject *kobj,
1730 struct kobj_attribute *attr,
1731 const char *buf, size_t len)
1732{
1733 return set_trigger(buf, &on_restart_trigger, len);
1734}
1735
1736static struct kobj_attribute on_restart_attr =
1737 __ATTR(on_restart, 0644, on_restart_show, on_restart_store);
1738
1739void do_restart(void)
1740{
1741 smp_send_stop();
1742 on_restart_trigger.action->fn(&on_restart_trigger);
1743 stop_run(&on_restart_trigger);
1744}
1745
1710/* on halt */ 1746/* on halt */
1711 1747
1712static struct shutdown_trigger on_halt_trigger = {ON_HALT_STR, &stop_action}; 1748static struct shutdown_trigger on_halt_trigger = {ON_HALT_STR, &stop_action};
@@ -1783,7 +1819,9 @@ static void __init shutdown_triggers_init(void)
1783 if (sysfs_create_file(&shutdown_actions_kset->kobj, 1819 if (sysfs_create_file(&shutdown_actions_kset->kobj,
1784 &on_poff_attr.attr)) 1820 &on_poff_attr.attr))
1785 goto fail; 1821 goto fail;
1786 1822 if (sysfs_create_file(&shutdown_actions_kset->kobj,
1823 &on_restart_attr.attr))
1824 goto fail;
1787 return; 1825 return;
1788fail: 1826fail:
1789 panic("shutdown_triggers_init failed\n"); 1827 panic("shutdown_triggers_init failed\n");
@@ -1959,6 +1997,12 @@ static void do_reset_calls(void)
1959{ 1997{
1960 struct reset_call *reset; 1998 struct reset_call *reset;
1961 1999
2000#ifdef CONFIG_64BIT
2001 if (diag308_set_works) {
2002 diag308_reset();
2003 return;
2004 }
2005#endif
1962 list_for_each_entry(reset, &rcall, list) 2006 list_for_each_entry(reset, &rcall, list)
1963 reset->fn(); 2007 reset->fn();
1964} 2008}
diff --git a/arch/s390/kernel/irq.c b/arch/s390/kernel/irq.c
index e3264f6a972..1f4050d45f7 100644
--- a/arch/s390/kernel/irq.c
+++ b/arch/s390/kernel/irq.c
@@ -88,15 +88,6 @@ int show_interrupts(struct seq_file *p, void *v)
88} 88}
89 89
90/* 90/*
91 * For compatibilty only. S/390 specific setup of interrupts et al. is done
92 * much later in init_channel_subsystem().
93 */
94void __init init_IRQ(void)
95{
96 /* nothing... */
97}
98
99/*
100 * Switch to the asynchronous interrupt stack for softirq execution. 91 * Switch to the asynchronous interrupt stack for softirq execution.
101 */ 92 */
102asmlinkage void do_softirq(void) 93asmlinkage void do_softirq(void)
@@ -144,28 +135,45 @@ void init_irq_proc(void)
144#endif 135#endif
145 136
146/* 137/*
147 * ext_int_hash[index] is the start of the list for all external interrupts 138 * ext_int_hash[index] is the list head for all external interrupts that hash
148 * that hash to this index. With the current set of external interrupts 139 * to this index.
149 * (0x1202 external call, 0x1004 cpu timer, 0x2401 hwc console, 0x4000
150 * iucv and 0x2603 pfault) this is always the first element.
151 */ 140 */
141static struct list_head ext_int_hash[256];
152 142
153struct ext_int_info { 143struct ext_int_info {
154 struct ext_int_info *next;
155 ext_int_handler_t handler; 144 ext_int_handler_t handler;
156 u16 code; 145 u16 code;
146 struct list_head entry;
147 struct rcu_head rcu;
157}; 148};
158 149
159static struct ext_int_info *ext_int_hash[256]; 150/* ext_int_hash_lock protects the handler lists for external interrupts */
151DEFINE_SPINLOCK(ext_int_hash_lock);
152
153static void __init init_external_interrupts(void)
154{
155 int idx;
156
157 for (idx = 0; idx < ARRAY_SIZE(ext_int_hash); idx++)
158 INIT_LIST_HEAD(&ext_int_hash[idx]);
159}
160 160
161static inline int ext_hash(u16 code) 161static inline int ext_hash(u16 code)
162{ 162{
163 return (code + (code >> 9)) & 0xff; 163 return (code + (code >> 9)) & 0xff;
164} 164}
165 165
166static void ext_int_hash_update(struct rcu_head *head)
167{
168 struct ext_int_info *p = container_of(head, struct ext_int_info, rcu);
169
170 kfree(p);
171}
172
166int register_external_interrupt(u16 code, ext_int_handler_t handler) 173int register_external_interrupt(u16 code, ext_int_handler_t handler)
167{ 174{
168 struct ext_int_info *p; 175 struct ext_int_info *p;
176 unsigned long flags;
169 int index; 177 int index;
170 178
171 p = kmalloc(sizeof(*p), GFP_ATOMIC); 179 p = kmalloc(sizeof(*p), GFP_ATOMIC);
@@ -174,33 +182,27 @@ int register_external_interrupt(u16 code, ext_int_handler_t handler)
174 p->code = code; 182 p->code = code;
175 p->handler = handler; 183 p->handler = handler;
176 index = ext_hash(code); 184 index = ext_hash(code);
177 p->next = ext_int_hash[index]; 185
178 ext_int_hash[index] = p; 186 spin_lock_irqsave(&ext_int_hash_lock, flags);
187 list_add_rcu(&p->entry, &ext_int_hash[index]);
188 spin_unlock_irqrestore(&ext_int_hash_lock, flags);
179 return 0; 189 return 0;
180} 190}
181EXPORT_SYMBOL(register_external_interrupt); 191EXPORT_SYMBOL(register_external_interrupt);
182 192
183int unregister_external_interrupt(u16 code, ext_int_handler_t handler) 193int unregister_external_interrupt(u16 code, ext_int_handler_t handler)
184{ 194{
185 struct ext_int_info *p, *q; 195 struct ext_int_info *p;
186 int index; 196 unsigned long flags;
197 int index = ext_hash(code);
187 198
188 index = ext_hash(code); 199 spin_lock_irqsave(&ext_int_hash_lock, flags);
189 q = NULL; 200 list_for_each_entry_rcu(p, &ext_int_hash[index], entry)
190 p = ext_int_hash[index]; 201 if (p->code == code && p->handler == handler) {
191 while (p) { 202 list_del_rcu(&p->entry);
192 if (p->code == code && p->handler == handler) 203 call_rcu(&p->rcu, ext_int_hash_update);
193 break; 204 }
194 q = p; 205 spin_unlock_irqrestore(&ext_int_hash_lock, flags);
195 p = p->next;
196 }
197 if (!p)
198 return -ENOENT;
199 if (q)
200 q->next = p->next;
201 else
202 ext_int_hash[index] = p->next;
203 kfree(p);
204 return 0; 206 return 0;
205} 207}
206EXPORT_SYMBOL(unregister_external_interrupt); 208EXPORT_SYMBOL(unregister_external_interrupt);
@@ -224,15 +226,22 @@ void __irq_entry do_extint(struct pt_regs *regs, unsigned int ext_int_code,
224 kstat_cpu(smp_processor_id()).irqs[EXTERNAL_INTERRUPT]++; 226 kstat_cpu(smp_processor_id()).irqs[EXTERNAL_INTERRUPT]++;
225 if (code != 0x1004) 227 if (code != 0x1004)
226 __get_cpu_var(s390_idle).nohz_delay = 1; 228 __get_cpu_var(s390_idle).nohz_delay = 1;
229
227 index = ext_hash(code); 230 index = ext_hash(code);
228 for (p = ext_int_hash[index]; p; p = p->next) { 231 rcu_read_lock();
232 list_for_each_entry_rcu(p, &ext_int_hash[index], entry)
229 if (likely(p->code == code)) 233 if (likely(p->code == code))
230 p->handler(ext_int_code, param32, param64); 234 p->handler(ext_int_code, param32, param64);
231 } 235 rcu_read_unlock();
232 irq_exit(); 236 irq_exit();
233 set_irq_regs(old_regs); 237 set_irq_regs(old_regs);
234} 238}
235 239
240void __init init_IRQ(void)
241{
242 init_external_interrupts();
243}
244
236static DEFINE_SPINLOCK(sc_irq_lock); 245static DEFINE_SPINLOCK(sc_irq_lock);
237static int sc_irq_refcount; 246static int sc_irq_refcount;
238 247
diff --git a/arch/s390/kernel/mcount.S b/arch/s390/kernel/mcount.S
index 1e6a5579562..7e2c38ba137 100644
--- a/arch/s390/kernel/mcount.S
+++ b/arch/s390/kernel/mcount.S
@@ -5,21 +5,19 @@
5 * 5 *
6 */ 6 */
7 7
8#include <linux/linkage.h>
8#include <asm/asm-offsets.h> 9#include <asm/asm-offsets.h>
9 10
10 .section .kprobes.text, "ax" 11 .section .kprobes.text, "ax"
11 12
12 .globl ftrace_stub 13ENTRY(ftrace_stub)
13ftrace_stub:
14 br %r14 14 br %r14
15 15
16 .globl _mcount 16ENTRY(_mcount)
17_mcount:
18#ifdef CONFIG_DYNAMIC_FTRACE 17#ifdef CONFIG_DYNAMIC_FTRACE
19 br %r14 18 br %r14
20 19
21 .globl ftrace_caller 20ENTRY(ftrace_caller)
22ftrace_caller:
23#endif 21#endif
24 stm %r2,%r5,16(%r15) 22 stm %r2,%r5,16(%r15)
25 bras %r1,2f 23 bras %r1,2f
@@ -41,8 +39,7 @@ ftrace_caller:
41#ifdef CONFIG_FUNCTION_GRAPH_TRACER 39#ifdef CONFIG_FUNCTION_GRAPH_TRACER
42 l %r2,100(%r15) 40 l %r2,100(%r15)
43 l %r3,152(%r15) 41 l %r3,152(%r15)
44 .globl ftrace_graph_caller 42ENTRY(ftrace_graph_caller)
45ftrace_graph_caller:
46# The bras instruction gets runtime patched to call prepare_ftrace_return. 43# The bras instruction gets runtime patched to call prepare_ftrace_return.
47# See ftrace_enable_ftrace_graph_caller. The patched instruction is: 44# See ftrace_enable_ftrace_graph_caller. The patched instruction is:
48# bras %r14,prepare_ftrace_return 45# bras %r14,prepare_ftrace_return
@@ -56,8 +53,7 @@ ftrace_graph_caller:
56 53
57#ifdef CONFIG_FUNCTION_GRAPH_TRACER 54#ifdef CONFIG_FUNCTION_GRAPH_TRACER
58 55
59 .globl return_to_handler 56ENTRY(return_to_handler)
60return_to_handler:
61 stm %r2,%r5,16(%r15) 57 stm %r2,%r5,16(%r15)
62 st %r14,56(%r15) 58 st %r14,56(%r15)
63 lr %r0,%r15 59 lr %r0,%r15
diff --git a/arch/s390/kernel/mcount64.S b/arch/s390/kernel/mcount64.S
index e73667286ac..f70cadec68f 100644
--- a/arch/s390/kernel/mcount64.S
+++ b/arch/s390/kernel/mcount64.S
@@ -5,21 +5,19 @@
5 * 5 *
6 */ 6 */
7 7
8#include <linux/linkage.h>
8#include <asm/asm-offsets.h> 9#include <asm/asm-offsets.h>
9 10
10 .section .kprobes.text, "ax" 11 .section .kprobes.text, "ax"
11 12
12 .globl ftrace_stub 13ENTRY(ftrace_stub)
13ftrace_stub:
14 br %r14 14 br %r14
15 15
16 .globl _mcount 16ENTRY(_mcount)
17_mcount:
18#ifdef CONFIG_DYNAMIC_FTRACE 17#ifdef CONFIG_DYNAMIC_FTRACE
19 br %r14 18 br %r14
20 19
21 .globl ftrace_caller 20ENTRY(ftrace_caller)
22ftrace_caller:
23#endif 21#endif
24 larl %r1,function_trace_stop 22 larl %r1,function_trace_stop
25 icm %r1,0xf,0(%r1) 23 icm %r1,0xf,0(%r1)
@@ -37,8 +35,7 @@ ftrace_caller:
37#ifdef CONFIG_FUNCTION_GRAPH_TRACER 35#ifdef CONFIG_FUNCTION_GRAPH_TRACER
38 lg %r2,168(%r15) 36 lg %r2,168(%r15)
39 lg %r3,272(%r15) 37 lg %r3,272(%r15)
40 .globl ftrace_graph_caller 38ENTRY(ftrace_graph_caller)
41ftrace_graph_caller:
42# The bras instruction gets runtime patched to call prepare_ftrace_return. 39# The bras instruction gets runtime patched to call prepare_ftrace_return.
43# See ftrace_enable_ftrace_graph_caller. The patched instruction is: 40# See ftrace_enable_ftrace_graph_caller. The patched instruction is:
44# bras %r14,prepare_ftrace_return 41# bras %r14,prepare_ftrace_return
@@ -52,8 +49,7 @@ ftrace_graph_caller:
52 49
53#ifdef CONFIG_FUNCTION_GRAPH_TRACER 50#ifdef CONFIG_FUNCTION_GRAPH_TRACER
54 51
55 .globl return_to_handler 52ENTRY(return_to_handler)
56return_to_handler:
57 stmg %r2,%r5,32(%r15) 53 stmg %r2,%r5,32(%r15)
58 lgr %r1,%r15 54 lgr %r1,%r15
59 aghi %r15,-160 55 aghi %r15,-160
diff --git a/arch/s390/kernel/module.c b/arch/s390/kernel/module.c
index f7167ee4604..dfcb3436bad 100644
--- a/arch/s390/kernel/module.c
+++ b/arch/s390/kernel/module.c
@@ -45,13 +45,6 @@
45#define PLT_ENTRY_SIZE 20 45#define PLT_ENTRY_SIZE 20
46#endif /* CONFIG_64BIT */ 46#endif /* CONFIG_64BIT */
47 47
48void *module_alloc(unsigned long size)
49{
50 if (size == 0)
51 return NULL;
52 return vmalloc(size);
53}
54
55/* Free memory returned from module_alloc */ 48/* Free memory returned from module_alloc */
56void module_free(struct module *mod, void *module_region) 49void module_free(struct module *mod, void *module_region)
57{ 50{
@@ -176,15 +169,6 @@ module_frob_arch_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs,
176 return 0; 169 return 0;
177} 170}
178 171
179int
180apply_relocate(Elf_Shdr *sechdrs, const char *strtab, unsigned int symindex,
181 unsigned int relsec, struct module *me)
182{
183 printk(KERN_ERR "module %s: RELOCATION unsupported\n",
184 me->name);
185 return -ENOEXEC;
186}
187
188static int 172static int
189apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab, 173apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
190 struct module *me) 174 struct module *me)
@@ -409,7 +393,3 @@ int module_finalize(const Elf_Ehdr *hdr,
409 me->arch.syminfo = NULL; 393 me->arch.syminfo = NULL;
410 return 0; 394 return 0;
411} 395}
412
413void module_arch_cleanup(struct module *mod)
414{
415}
diff --git a/arch/s390/kernel/ptrace.c b/arch/s390/kernel/ptrace.c
index ef86ad24398..5804cfa7cba 100644
--- a/arch/s390/kernel/ptrace.c
+++ b/arch/s390/kernel/ptrace.c
@@ -47,29 +47,31 @@ enum s390_regset {
47 47
48void update_per_regs(struct task_struct *task) 48void update_per_regs(struct task_struct *task)
49{ 49{
50 static const struct per_regs per_single_step = {
51 .control = PER_EVENT_IFETCH,
52 .start = 0,
53 .end = PSW_ADDR_INSN,
54 };
55 struct pt_regs *regs = task_pt_regs(task); 50 struct pt_regs *regs = task_pt_regs(task);
56 struct thread_struct *thread = &task->thread; 51 struct thread_struct *thread = &task->thread;
57 const struct per_regs *new; 52 struct per_regs old, new;
58 struct per_regs old; 53
59 54 /* Copy user specified PER registers */
60 /* TIF_SINGLE_STEP overrides the user specified PER registers. */ 55 new.control = thread->per_user.control;
61 new = test_tsk_thread_flag(task, TIF_SINGLE_STEP) ? 56 new.start = thread->per_user.start;
62 &per_single_step : &thread->per_user; 57 new.end = thread->per_user.end;
58
59 /* merge TIF_SINGLE_STEP into user specified PER registers. */
60 if (test_tsk_thread_flag(task, TIF_SINGLE_STEP)) {
61 new.control |= PER_EVENT_IFETCH;
62 new.start = 0;
63 new.end = PSW_ADDR_INSN;
64 }
63 65
64 /* Take care of the PER enablement bit in the PSW. */ 66 /* Take care of the PER enablement bit in the PSW. */
65 if (!(new->control & PER_EVENT_MASK)) { 67 if (!(new.control & PER_EVENT_MASK)) {
66 regs->psw.mask &= ~PSW_MASK_PER; 68 regs->psw.mask &= ~PSW_MASK_PER;
67 return; 69 return;
68 } 70 }
69 regs->psw.mask |= PSW_MASK_PER; 71 regs->psw.mask |= PSW_MASK_PER;
70 __ctl_store(old, 9, 11); 72 __ctl_store(old, 9, 11);
71 if (memcmp(new, &old, sizeof(struct per_regs)) != 0) 73 if (memcmp(&new, &old, sizeof(struct per_regs)) != 0)
72 __ctl_load(*new, 9, 11); 74 __ctl_load(new, 9, 11);
73} 75}
74 76
75void user_enable_single_step(struct task_struct *task) 77void user_enable_single_step(struct task_struct *task)
@@ -895,6 +897,14 @@ static int s390_last_break_get(struct task_struct *target,
895 return 0; 897 return 0;
896} 898}
897 899
900static int s390_last_break_set(struct task_struct *target,
901 const struct user_regset *regset,
902 unsigned int pos, unsigned int count,
903 const void *kbuf, const void __user *ubuf)
904{
905 return 0;
906}
907
898#endif 908#endif
899 909
900static const struct user_regset s390_regsets[] = { 910static const struct user_regset s390_regsets[] = {
@@ -921,6 +931,7 @@ static const struct user_regset s390_regsets[] = {
921 .size = sizeof(long), 931 .size = sizeof(long),
922 .align = sizeof(long), 932 .align = sizeof(long),
923 .get = s390_last_break_get, 933 .get = s390_last_break_get,
934 .set = s390_last_break_set,
924 }, 935 },
925#endif 936#endif
926}; 937};
@@ -1078,6 +1089,14 @@ static int s390_compat_last_break_get(struct task_struct *target,
1078 return 0; 1089 return 0;
1079} 1090}
1080 1091
1092static int s390_compat_last_break_set(struct task_struct *target,
1093 const struct user_regset *regset,
1094 unsigned int pos, unsigned int count,
1095 const void *kbuf, const void __user *ubuf)
1096{
1097 return 0;
1098}
1099
1081static const struct user_regset s390_compat_regsets[] = { 1100static const struct user_regset s390_compat_regsets[] = {
1082 [REGSET_GENERAL] = { 1101 [REGSET_GENERAL] = {
1083 .core_note_type = NT_PRSTATUS, 1102 .core_note_type = NT_PRSTATUS,
@@ -1101,6 +1120,7 @@ static const struct user_regset s390_compat_regsets[] = {
1101 .size = sizeof(long), 1120 .size = sizeof(long),
1102 .align = sizeof(long), 1121 .align = sizeof(long),
1103 .get = s390_compat_last_break_get, 1122 .get = s390_compat_last_break_get,
1123 .set = s390_compat_last_break_set,
1104 }, 1124 },
1105 [REGSET_GENERAL_EXTENDED] = { 1125 [REGSET_GENERAL_EXTENDED] = {
1106 .core_note_type = NT_S390_HIGH_GPRS, 1126 .core_note_type = NT_S390_HIGH_GPRS,
diff --git a/arch/s390/kernel/reipl.S b/arch/s390/kernel/reipl.S
index cb899d9f850..303d961c3bb 100644
--- a/arch/s390/kernel/reipl.S
+++ b/arch/s390/kernel/reipl.S
@@ -6,14 +6,15 @@
6 * Author(s): Holger Smolinski (Holger.Smolinski@de.ibm.com) 6 * Author(s): Holger Smolinski (Holger.Smolinski@de.ibm.com)
7 */ 7 */
8 8
9#include <linux/linkage.h>
9#include <asm/asm-offsets.h> 10#include <asm/asm-offsets.h>
10 11
11# 12#
12# do_reipl_asm 13# do_reipl_asm
13# Parameter: r2 = schid of reipl device 14# Parameter: r2 = schid of reipl device
14# 15#
15 .globl do_reipl_asm 16ENTRY(do_reipl_asm)
16do_reipl_asm: basr %r13,0 17 basr %r13,0
17.Lpg0: lpsw .Lnewpsw-.Lpg0(%r13) 18.Lpg0: lpsw .Lnewpsw-.Lpg0(%r13)
18.Lpg1: # do store status of all registers 19.Lpg1: # do store status of all registers
19 20
diff --git a/arch/s390/kernel/reipl64.S b/arch/s390/kernel/reipl64.S
index 9eabbc90795..e690975403f 100644
--- a/arch/s390/kernel/reipl64.S
+++ b/arch/s390/kernel/reipl64.S
@@ -1,35 +1,79 @@
1/* 1/*
2 * Copyright IBM Corp 2000,2009 2 * Copyright IBM Corp 2000,2011
3 * Author(s): Holger Smolinski <Holger.Smolinski@de.ibm.com>, 3 * Author(s): Holger Smolinski <Holger.Smolinski@de.ibm.com>,
4 * Denis Joseph Barrow, 4 * Denis Joseph Barrow,
5 */ 5 */
6 6
7#include <linux/linkage.h>
7#include <asm/asm-offsets.h> 8#include <asm/asm-offsets.h>
8 9
9# 10#
11# store_status
12#
13# Prerequisites to run this function:
14# - Prefix register is set to zero
15# - Original prefix register is stored in "dump_prefix_page"
16# - Lowcore protection is off
17#
18ENTRY(store_status)
19 /* Save register one and load save area base */
20 stg %r1,__LC_SAVE_AREA_64(%r0)
21 lghi %r1,SAVE_AREA_BASE
22 /* General purpose registers */
23 stmg %r0,%r15,__LC_GPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
24 lg %r2,__LC_SAVE_AREA_64(%r0)
25 stg %r2,__LC_GPREGS_SAVE_AREA-SAVE_AREA_BASE+8(%r1)
26 /* Control registers */
27 stctg %c0,%c15,__LC_CREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
28 /* Access registers */
29 stam %a0,%a15,__LC_AREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
30 /* Floating point registers */
31 std %f0, 0x00 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
32 std %f1, 0x08 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
33 std %f2, 0x10 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
34 std %f3, 0x18 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
35 std %f4, 0x20 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
36 std %f5, 0x28 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
37 std %f6, 0x30 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
38 std %f7, 0x38 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
39 std %f8, 0x40 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
40 std %f9, 0x48 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
41 std %f10,0x50 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
42 std %f11,0x58 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
43 std %f12,0x60 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
44 std %f13,0x68 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
45 std %f14,0x70 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
46 std %f15,0x78 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
47 /* Floating point control register */
48 stfpc __LC_FP_CREG_SAVE_AREA-SAVE_AREA_BASE(%r1)
49 /* CPU timer */
50 stpt __LC_CPU_TIMER_SAVE_AREA-SAVE_AREA_BASE(%r1)
51 /* Saved prefix register */
52 larl %r2,dump_prefix_page
53 mvc __LC_PREFIX_SAVE_AREA-SAVE_AREA_BASE(4,%r1),0(%r2)
54 /* Clock comparator - seven bytes */
55 larl %r2,.Lclkcmp
56 stckc 0(%r2)
57 mvc __LC_CLOCK_COMP_SAVE_AREA-SAVE_AREA_BASE + 1(7,%r1),1(%r2)
58 /* Program status word */
59 epsw %r2,%r3
60 st %r2,__LC_PSW_SAVE_AREA-SAVE_AREA_BASE + 0(%r1)
61 st %r3,__LC_PSW_SAVE_AREA-SAVE_AREA_BASE + 4(%r1)
62 larl %r2,store_status
63 stg %r2,__LC_PSW_SAVE_AREA-SAVE_AREA_BASE + 8(%r1)
64 br %r14
65.align 8
66.Lclkcmp: .quad 0x0000000000000000
67
68#
10# do_reipl_asm 69# do_reipl_asm
11# Parameter: r2 = schid of reipl device 70# Parameter: r2 = schid of reipl device
12# 71#
13 72
14 .globl do_reipl_asm 73ENTRY(do_reipl_asm)
15do_reipl_asm: basr %r13,0 74 basr %r13,0
16.Lpg0: lpswe .Lnewpsw-.Lpg0(%r13) 75.Lpg0: lpswe .Lnewpsw-.Lpg0(%r13)
17.Lpg1: # do store status of all registers 76.Lpg1: brasl %r14,store_status
18
19 stg %r1,.Lregsave-.Lpg0(%r13)
20 lghi %r1,0x1000
21 stmg %r0,%r15,__LC_GPREGS_SAVE_AREA-0x1000(%r1)
22 lg %r0,.Lregsave-.Lpg0(%r13)
23 stg %r0,__LC_GPREGS_SAVE_AREA-0x1000+8(%r1)
24 stctg %c0,%c15,__LC_CREGS_SAVE_AREA-0x1000(%r1)
25 stam %a0,%a15,__LC_AREGS_SAVE_AREA-0x1000(%r1)
26 lg %r10,.Ldump_pfx-.Lpg0(%r13)
27 mvc __LC_PREFIX_SAVE_AREA-0x1000(4,%r1),0(%r10)
28 stfpc __LC_FP_CREG_SAVE_AREA-0x1000(%r1)
29 stckc .Lclkcmp-.Lpg0(%r13)
30 mvc __LC_CLOCK_COMP_SAVE_AREA-0x1000(7,%r1),.Lclkcmp-.Lpg0(%r13)
31 stpt __LC_CPU_TIMER_SAVE_AREA-0x1000(%r1)
32 stg %r13, __LC_PSW_SAVE_AREA-0x1000+8(%r1)
33 77
34 lctlg %c6,%c6,.Lall-.Lpg0(%r13) 78 lctlg %c6,%c6,.Lall-.Lpg0(%r13)
35 lgr %r1,%r2 79 lgr %r1,%r2
@@ -66,10 +110,7 @@ do_reipl_asm: basr %r13,0
66 st %r14,.Ldispsw+12-.Lpg0(%r13) 110 st %r14,.Ldispsw+12-.Lpg0(%r13)
67 lpswe .Ldispsw-.Lpg0(%r13) 111 lpswe .Ldispsw-.Lpg0(%r13)
68 .align 8 112 .align 8
69.Lclkcmp: .quad 0x0000000000000000
70.Lall: .quad 0x00000000ff000000 113.Lall: .quad 0x00000000ff000000
71.Ldump_pfx: .quad dump_prefix_page
72.Lregsave: .quad 0x0000000000000000
73 .align 16 114 .align 16
74/* 115/*
75 * These addresses have to be 31 bit otherwise 116 * These addresses have to be 31 bit otherwise
diff --git a/arch/s390/kernel/relocate_kernel.S b/arch/s390/kernel/relocate_kernel.S
index 3b456b80bce..c91d70aede9 100644
--- a/arch/s390/kernel/relocate_kernel.S
+++ b/arch/s390/kernel/relocate_kernel.S
@@ -8,6 +8,8 @@
8 * 8 *
9 */ 9 */
10 10
11#include <linux/linkage.h>
12
11/* 13/*
12 * moves the new kernel to its destination... 14 * moves the new kernel to its destination...
13 * %r2 = pointer to first kimage_entry_t 15 * %r2 = pointer to first kimage_entry_t
@@ -22,8 +24,7 @@
22 */ 24 */
23 25
24 .text 26 .text
25 .globl relocate_kernel 27ENTRY(relocate_kernel)
26 relocate_kernel:
27 basr %r13,0 # base address 28 basr %r13,0 # base address
28 .base: 29 .base:
29 stnsm sys_msk-.base(%r13),0xfb # disable DAT 30 stnsm sys_msk-.base(%r13),0xfb # disable DAT
@@ -112,6 +113,7 @@
112 .byte 0 113 .byte 0
113 .align 8 114 .align 8
114 relocate_kernel_end: 115 relocate_kernel_end:
116 .align 8
115 .globl relocate_kernel_len 117 .globl relocate_kernel_len
116 relocate_kernel_len: 118 relocate_kernel_len:
117 .quad relocate_kernel_end - relocate_kernel 119 .quad relocate_kernel_end - relocate_kernel
diff --git a/arch/s390/kernel/relocate_kernel64.S b/arch/s390/kernel/relocate_kernel64.S
index 1f9ea2067b5..7c3ce589a7f 100644
--- a/arch/s390/kernel/relocate_kernel64.S
+++ b/arch/s390/kernel/relocate_kernel64.S
@@ -8,6 +8,8 @@
8 * 8 *
9 */ 9 */
10 10
11#include <linux/linkage.h>
12
11/* 13/*
12 * moves the new kernel to its destination... 14 * moves the new kernel to its destination...
13 * %r2 = pointer to first kimage_entry_t 15 * %r2 = pointer to first kimage_entry_t
@@ -23,8 +25,7 @@
23 */ 25 */
24 26
25 .text 27 .text
26 .globl relocate_kernel 28ENTRY(relocate_kernel)
27 relocate_kernel:
28 basr %r13,0 # base address 29 basr %r13,0 # base address
29 .base: 30 .base:
30 stnsm sys_msk-.base(%r13),0xfb # disable DAT 31 stnsm sys_msk-.base(%r13),0xfb # disable DAT
@@ -115,6 +116,7 @@
115 .byte 0 116 .byte 0
116 .align 8 117 .align 8
117 relocate_kernel_end: 118 relocate_kernel_end:
119 .align 8
118 .globl relocate_kernel_len 120 .globl relocate_kernel_len
119 relocate_kernel_len: 121 relocate_kernel_len:
120 .quad relocate_kernel_end - relocate_kernel 122 .quad relocate_kernel_end - relocate_kernel
diff --git a/arch/s390/kernel/s390_ksyms.c b/arch/s390/kernel/s390_ksyms.c
index 656fcbb9bd8..57b536649b0 100644
--- a/arch/s390/kernel/s390_ksyms.c
+++ b/arch/s390/kernel/s390_ksyms.c
@@ -1,6 +1,10 @@
1#include <linux/module.h> 1#include <linux/module.h>
2#include <linux/kvm_host.h>
2#include <asm/ftrace.h> 3#include <asm/ftrace.h>
3 4
4#ifdef CONFIG_FUNCTION_TRACER 5#ifdef CONFIG_FUNCTION_TRACER
5EXPORT_SYMBOL(_mcount); 6EXPORT_SYMBOL(_mcount);
6#endif 7#endif
8#if defined(CONFIG_KVM) || defined(CONFIG_KVM_MODULE)
9EXPORT_SYMBOL(sie64a);
10#endif
diff --git a/arch/s390/kernel/sclp.S b/arch/s390/kernel/sclp.S
index 2e82fdd8932..95792d846bb 100644
--- a/arch/s390/kernel/sclp.S
+++ b/arch/s390/kernel/sclp.S
@@ -8,6 +8,8 @@
8 * 8 *
9 */ 9 */
10 10
11#include <linux/linkage.h>
12
11LC_EXT_NEW_PSW = 0x58 # addr of ext int handler 13LC_EXT_NEW_PSW = 0x58 # addr of ext int handler
12LC_EXT_NEW_PSW_64 = 0x1b0 # addr of ext int handler 64 bit 14LC_EXT_NEW_PSW_64 = 0x1b0 # addr of ext int handler 64 bit
13LC_EXT_INT_PARAM = 0x80 # addr of ext int parameter 15LC_EXT_INT_PARAM = 0x80 # addr of ext int parameter
@@ -260,8 +262,7 @@ _sclp_print:
260# R2 = 0 on success, 1 on failure 262# R2 = 0 on success, 1 on failure
261# 263#
262 264
263 .globl _sclp_print_early 265ENTRY(_sclp_print_early)
264_sclp_print_early:
265 stm %r6,%r15,24(%r15) # save registers 266 stm %r6,%r15,24(%r15) # save registers
266 ahi %r15,-96 # create stack frame 267 ahi %r15,-96 # create stack frame
267#ifdef CONFIG_64BIT 268#ifdef CONFIG_64BIT
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
index 0c35dee10b0..7b371c37061 100644
--- a/arch/s390/kernel/setup.c
+++ b/arch/s390/kernel/setup.c
@@ -346,7 +346,7 @@ setup_lowcore(void)
346 lc = __alloc_bootmem_low(LC_PAGES * PAGE_SIZE, LC_PAGES * PAGE_SIZE, 0); 346 lc = __alloc_bootmem_low(LC_PAGES * PAGE_SIZE, LC_PAGES * PAGE_SIZE, 0);
347 lc->restart_psw.mask = PSW_BASE_BITS | PSW_DEFAULT_KEY; 347 lc->restart_psw.mask = PSW_BASE_BITS | PSW_DEFAULT_KEY;
348 lc->restart_psw.addr = 348 lc->restart_psw.addr =
349 PSW_ADDR_AMODE | (unsigned long) restart_int_handler; 349 PSW_ADDR_AMODE | (unsigned long) psw_restart_int_handler;
350 if (user_mode != HOME_SPACE_MODE) 350 if (user_mode != HOME_SPACE_MODE)
351 lc->restart_psw.mask |= PSW_ASC_HOME; 351 lc->restart_psw.mask |= PSW_ASC_HOME;
352 lc->external_new_psw.mask = psw_kernel_bits; 352 lc->external_new_psw.mask = psw_kernel_bits;
@@ -529,6 +529,27 @@ static void __init setup_memory_end(void)
529 memory_end = memory_size; 529 memory_end = memory_size;
530} 530}
531 531
532void *restart_stack __attribute__((__section__(".data")));
533
534/*
535 * Setup new PSW and allocate stack for PSW restart interrupt
536 */
537static void __init setup_restart_psw(void)
538{
539 psw_t psw;
540
541 restart_stack = __alloc_bootmem(ASYNC_SIZE, ASYNC_SIZE, 0);
542 restart_stack += ASYNC_SIZE;
543
544 /*
545 * Setup restart PSW for absolute zero lowcore. This is necesary
546 * if PSW restart is done on an offline CPU that has lowcore zero
547 */
548 psw.mask = PSW_BASE_BITS | PSW_DEFAULT_KEY;
549 psw.addr = PSW_ADDR_AMODE | (unsigned long) psw_restart_int_handler;
550 copy_to_absolute_zero(&S390_lowcore.restart_psw, &psw, sizeof(psw));
551}
552
532static void __init 553static void __init
533setup_memory(void) 554setup_memory(void)
534{ 555{
@@ -731,6 +752,7 @@ static void __init setup_hwcaps(void)
731 strcpy(elf_platform, "z10"); 752 strcpy(elf_platform, "z10");
732 break; 753 break;
733 case 0x2817: 754 case 0x2817:
755 case 0x2818:
734 strcpy(elf_platform, "z196"); 756 strcpy(elf_platform, "z196");
735 break; 757 break;
736 } 758 }
@@ -792,6 +814,7 @@ setup_arch(char **cmdline_p)
792 setup_addressing_mode(); 814 setup_addressing_mode();
793 setup_memory(); 815 setup_memory();
794 setup_resources(); 816 setup_resources();
817 setup_restart_psw();
795 setup_lowcore(); 818 setup_lowcore();
796 819
797 cpu_init(); 820 cpu_init();
diff --git a/arch/s390/kernel/signal.c b/arch/s390/kernel/signal.c
index abbb3c3c7aa..9a40e1cc5ec 100644
--- a/arch/s390/kernel/signal.c
+++ b/arch/s390/kernel/signal.c
@@ -57,17 +57,15 @@ typedef struct
57 */ 57 */
58SYSCALL_DEFINE3(sigsuspend, int, history0, int, history1, old_sigset_t, mask) 58SYSCALL_DEFINE3(sigsuspend, int, history0, int, history1, old_sigset_t, mask)
59{ 59{
60 mask &= _BLOCKABLE; 60 sigset_t blocked;
61 spin_lock_irq(&current->sighand->siglock);
62 current->saved_sigmask = current->blocked;
63 siginitset(&current->blocked, mask);
64 recalc_sigpending();
65 spin_unlock_irq(&current->sighand->siglock);
66 61
62 current->saved_sigmask = current->blocked;
63 mask &= _BLOCKABLE;
64 siginitset(&blocked, mask);
65 set_current_blocked(&blocked);
67 set_current_state(TASK_INTERRUPTIBLE); 66 set_current_state(TASK_INTERRUPTIBLE);
68 schedule(); 67 schedule();
69 set_thread_flag(TIF_RESTORE_SIGMASK); 68 set_restore_sigmask();
70
71 return -ERESTARTNOHAND; 69 return -ERESTARTNOHAND;
72} 70}
73 71
@@ -172,18 +170,11 @@ SYSCALL_DEFINE0(sigreturn)
172 goto badframe; 170 goto badframe;
173 if (__copy_from_user(&set.sig, &frame->sc.oldmask, _SIGMASK_COPY_SIZE)) 171 if (__copy_from_user(&set.sig, &frame->sc.oldmask, _SIGMASK_COPY_SIZE))
174 goto badframe; 172 goto badframe;
175
176 sigdelsetmask(&set, ~_BLOCKABLE); 173 sigdelsetmask(&set, ~_BLOCKABLE);
177 spin_lock_irq(&current->sighand->siglock); 174 set_current_blocked(&set);
178 current->blocked = set;
179 recalc_sigpending();
180 spin_unlock_irq(&current->sighand->siglock);
181
182 if (restore_sigregs(regs, &frame->sregs)) 175 if (restore_sigregs(regs, &frame->sregs))
183 goto badframe; 176 goto badframe;
184
185 return regs->gprs[2]; 177 return regs->gprs[2];
186
187badframe: 178badframe:
188 force_sig(SIGSEGV, current); 179 force_sig(SIGSEGV, current);
189 return 0; 180 return 0;
@@ -199,21 +190,14 @@ SYSCALL_DEFINE0(rt_sigreturn)
199 goto badframe; 190 goto badframe;
200 if (__copy_from_user(&set.sig, &frame->uc.uc_sigmask, sizeof(set))) 191 if (__copy_from_user(&set.sig, &frame->uc.uc_sigmask, sizeof(set)))
201 goto badframe; 192 goto badframe;
202
203 sigdelsetmask(&set, ~_BLOCKABLE); 193 sigdelsetmask(&set, ~_BLOCKABLE);
204 spin_lock_irq(&current->sighand->siglock); 194 set_current_blocked(&set);
205 current->blocked = set;
206 recalc_sigpending();
207 spin_unlock_irq(&current->sighand->siglock);
208
209 if (restore_sigregs(regs, &frame->uc.uc_mcontext)) 195 if (restore_sigregs(regs, &frame->uc.uc_mcontext))
210 goto badframe; 196 goto badframe;
211
212 if (do_sigaltstack(&frame->uc.uc_stack, NULL, 197 if (do_sigaltstack(&frame->uc.uc_stack, NULL,
213 regs->gprs[15]) == -EFAULT) 198 regs->gprs[15]) == -EFAULT)
214 goto badframe; 199 goto badframe;
215 return regs->gprs[2]; 200 return regs->gprs[2];
216
217badframe: 201badframe:
218 force_sig(SIGSEGV, current); 202 force_sig(SIGSEGV, current);
219 return 0; 203 return 0;
@@ -385,14 +369,11 @@ give_sigsegv:
385 return -EFAULT; 369 return -EFAULT;
386} 370}
387 371
388/* 372static int handle_signal(unsigned long sig, struct k_sigaction *ka,
389 * OK, we're invoking a handler 373 siginfo_t *info, sigset_t *oldset,
390 */ 374 struct pt_regs *regs)
391
392static int
393handle_signal(unsigned long sig, struct k_sigaction *ka,
394 siginfo_t *info, sigset_t *oldset, struct pt_regs * regs)
395{ 375{
376 sigset_t blocked;
396 int ret; 377 int ret;
397 378
398 /* Set up the stack frame */ 379 /* Set up the stack frame */
@@ -400,17 +381,13 @@ handle_signal(unsigned long sig, struct k_sigaction *ka,
400 ret = setup_rt_frame(sig, ka, info, oldset, regs); 381 ret = setup_rt_frame(sig, ka, info, oldset, regs);
401 else 382 else
402 ret = setup_frame(sig, ka, oldset, regs); 383 ret = setup_frame(sig, ka, oldset, regs);
403 384 if (ret)
404 if (ret == 0) { 385 return ret;
405 spin_lock_irq(&current->sighand->siglock); 386 sigorsets(&blocked, &current->blocked, &ka->sa.sa_mask);
406 sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask); 387 if (!(ka->sa.sa_flags & SA_NODEFER))
407 if (!(ka->sa.sa_flags & SA_NODEFER)) 388 sigaddset(&blocked, sig);
408 sigaddset(&current->blocked,sig); 389 set_current_blocked(&blocked);
409 recalc_sigpending(); 390 return 0;
410 spin_unlock_irq(&current->sighand->siglock);
411 }
412
413 return ret;
414} 391}
415 392
416/* 393/*
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
index 1d55c95f617..07f73cde90b 100644
--- a/arch/s390/kernel/smp.c
+++ b/arch/s390/kernel/smp.c
@@ -452,23 +452,21 @@ out:
452 */ 452 */
453int __cpuinit start_secondary(void *cpuvoid) 453int __cpuinit start_secondary(void *cpuvoid)
454{ 454{
455 /* Setup the cpu */
456 cpu_init(); 455 cpu_init();
457 preempt_disable(); 456 preempt_disable();
458 /* Enable TOD clock interrupts on the secondary cpu. */
459 init_cpu_timer(); 457 init_cpu_timer();
460 /* Enable cpu timer interrupts on the secondary cpu. */
461 init_cpu_vtimer(); 458 init_cpu_vtimer();
462 /* Enable pfault pseudo page faults on this cpu. */
463 pfault_init(); 459 pfault_init();
464 460
465 /* call cpu notifiers */
466 notify_cpu_starting(smp_processor_id()); 461 notify_cpu_starting(smp_processor_id());
467 /* Mark this cpu as online */
468 ipi_call_lock(); 462 ipi_call_lock();
469 set_cpu_online(smp_processor_id(), true); 463 set_cpu_online(smp_processor_id(), true);
470 ipi_call_unlock(); 464 ipi_call_unlock();
471 /* Switch on interrupts */ 465 __ctl_clear_bit(0, 28); /* Disable lowcore protection */
466 S390_lowcore.restart_psw.mask = PSW_BASE_BITS | PSW_DEFAULT_KEY;
467 S390_lowcore.restart_psw.addr =
468 PSW_ADDR_AMODE | (unsigned long) psw_restart_int_handler;
469 __ctl_set_bit(0, 28); /* Enable lowcore protection */
472 local_irq_enable(); 470 local_irq_enable();
473 /* cpu_idle will call schedule for us */ 471 /* cpu_idle will call schedule for us */
474 cpu_idle(); 472 cpu_idle();
@@ -507,7 +505,11 @@ static int __cpuinit smp_alloc_lowcore(int cpu)
507 memset((char *)lowcore + 512, 0, sizeof(*lowcore) - 512); 505 memset((char *)lowcore + 512, 0, sizeof(*lowcore) - 512);
508 lowcore->async_stack = async_stack + ASYNC_SIZE; 506 lowcore->async_stack = async_stack + ASYNC_SIZE;
509 lowcore->panic_stack = panic_stack + PAGE_SIZE; 507 lowcore->panic_stack = panic_stack + PAGE_SIZE;
510 508 lowcore->restart_psw.mask = PSW_BASE_BITS | PSW_DEFAULT_KEY;
509 lowcore->restart_psw.addr =
510 PSW_ADDR_AMODE | (unsigned long) restart_int_handler;
511 if (user_mode != HOME_SPACE_MODE)
512 lowcore->restart_psw.mask |= PSW_ASC_HOME;
511#ifndef CONFIG_64BIT 513#ifndef CONFIG_64BIT
512 if (MACHINE_HAS_IEEE) { 514 if (MACHINE_HAS_IEEE) {
513 unsigned long save_area; 515 unsigned long save_area;
@@ -654,7 +656,8 @@ int __cpu_disable(void)
654 /* disable all external interrupts */ 656 /* disable all external interrupts */
655 cr_parms.orvals[0] = 0; 657 cr_parms.orvals[0] = 0;
656 cr_parms.andvals[0] = ~(1 << 15 | 1 << 14 | 1 << 13 | 1 << 11 | 658 cr_parms.andvals[0] = ~(1 << 15 | 1 << 14 | 1 << 13 | 1 << 11 |
657 1 << 10 | 1 << 9 | 1 << 6 | 1 << 4); 659 1 << 10 | 1 << 9 | 1 << 6 | 1 << 5 |
660 1 << 4);
658 /* disable all I/O interrupts */ 661 /* disable all I/O interrupts */
659 cr_parms.orvals[6] = 0; 662 cr_parms.orvals[6] = 0;
660 cr_parms.andvals[6] = ~(1 << 31 | 1 << 30 | 1 << 29 | 1 << 28 | 663 cr_parms.andvals[6] = ~(1 << 31 | 1 << 30 | 1 << 29 | 1 << 28 |
diff --git a/arch/s390/kernel/switch_cpu.S b/arch/s390/kernel/switch_cpu.S
index 20530dd2eab..bfe070bc765 100644
--- a/arch/s390/kernel/switch_cpu.S
+++ b/arch/s390/kernel/switch_cpu.S
@@ -5,6 +5,7 @@
5 * 5 *
6 */ 6 */
7 7
8#include <linux/linkage.h>
8#include <asm/asm-offsets.h> 9#include <asm/asm-offsets.h>
9#include <asm/ptrace.h> 10#include <asm/ptrace.h>
10 11
@@ -16,9 +17,7 @@
16# %r6 - destination cpu 17# %r6 - destination cpu
17 18
18 .section .text 19 .section .text
19 .align 4 20ENTRY(smp_switch_to_cpu)
20 .globl smp_switch_to_cpu
21smp_switch_to_cpu:
22 stm %r6,%r15,__SF_GPRS(%r15) 21 stm %r6,%r15,__SF_GPRS(%r15)
23 lr %r1,%r15 22 lr %r1,%r15
24 ahi %r15,-STACK_FRAME_OVERHEAD 23 ahi %r15,-STACK_FRAME_OVERHEAD
@@ -33,8 +32,7 @@ smp_switch_to_cpu:
33 brc 2,2b /* busy, try again */ 32 brc 2,2b /* busy, try again */
343: j 3b 333: j 3b
35 34
36 .globl smp_restart_cpu 35ENTRY(smp_restart_cpu)
37smp_restart_cpu:
38 basr %r13,0 36 basr %r13,0
390: la %r1,.gprregs_addr-0b(%r13) 370: la %r1,.gprregs_addr-0b(%r13)
40 l %r1,0(%r1) 38 l %r1,0(%r1)
diff --git a/arch/s390/kernel/switch_cpu64.S b/arch/s390/kernel/switch_cpu64.S
index 5be3f43898f..fcc42d799e4 100644
--- a/arch/s390/kernel/switch_cpu64.S
+++ b/arch/s390/kernel/switch_cpu64.S
@@ -5,6 +5,7 @@
5 * 5 *
6 */ 6 */
7 7
8#include <linux/linkage.h>
8#include <asm/asm-offsets.h> 9#include <asm/asm-offsets.h>
9#include <asm/ptrace.h> 10#include <asm/ptrace.h>
10 11
@@ -16,9 +17,7 @@
16# %r6 - destination cpu 17# %r6 - destination cpu
17 18
18 .section .text 19 .section .text
19 .align 4 20ENTRY(smp_switch_to_cpu)
20 .globl smp_switch_to_cpu
21smp_switch_to_cpu:
22 stmg %r6,%r15,__SF_GPRS(%r15) 21 stmg %r6,%r15,__SF_GPRS(%r15)
23 lgr %r1,%r15 22 lgr %r1,%r15
24 aghi %r15,-STACK_FRAME_OVERHEAD 23 aghi %r15,-STACK_FRAME_OVERHEAD
@@ -31,8 +30,7 @@ smp_switch_to_cpu:
31 brc 2,2b /* busy, try again */ 30 brc 2,2b /* busy, try again */
323: j 3b 313: j 3b
33 32
34 .globl smp_restart_cpu 33ENTRY(smp_restart_cpu)
35smp_restart_cpu:
36 larl %r1,.gprregs 34 larl %r1,.gprregs
37 lmg %r0,%r15,0(%r1) 35 lmg %r0,%r15,0(%r1)
381: sigp %r0,%r5,__SIGP_SENSE /* Wait for calling CPU */ 361: sigp %r0,%r5,__SIGP_SENSE /* Wait for calling CPU */
diff --git a/arch/s390/kernel/swsusp_asm64.S b/arch/s390/kernel/swsusp_asm64.S
index 1f066e46e83..51bcdb50a23 100644
--- a/arch/s390/kernel/swsusp_asm64.S
+++ b/arch/s390/kernel/swsusp_asm64.S
@@ -7,6 +7,7 @@
7 * Michael Holzheu <holzheu@linux.vnet.ibm.com> 7 * Michael Holzheu <holzheu@linux.vnet.ibm.com>
8 */ 8 */
9 9
10#include <linux/linkage.h>
10#include <asm/page.h> 11#include <asm/page.h>
11#include <asm/ptrace.h> 12#include <asm/ptrace.h>
12#include <asm/thread_info.h> 13#include <asm/thread_info.h>
@@ -22,9 +23,7 @@
22 * This function runs with disabled interrupts. 23 * This function runs with disabled interrupts.
23 */ 24 */
24 .section .text 25 .section .text
25 .align 4 26ENTRY(swsusp_arch_suspend)
26 .globl swsusp_arch_suspend
27swsusp_arch_suspend:
28 stmg %r6,%r15,__SF_GPRS(%r15) 27 stmg %r6,%r15,__SF_GPRS(%r15)
29 lgr %r1,%r15 28 lgr %r1,%r15
30 aghi %r15,-STACK_FRAME_OVERHEAD 29 aghi %r15,-STACK_FRAME_OVERHEAD
@@ -112,8 +111,7 @@ swsusp_arch_suspend:
112 * Then we return to the function that called swsusp_arch_suspend(). 111 * Then we return to the function that called swsusp_arch_suspend().
113 * swsusp_arch_resume() runs with disabled interrupts. 112 * swsusp_arch_resume() runs with disabled interrupts.
114 */ 113 */
115 .globl swsusp_arch_resume 114ENTRY(swsusp_arch_resume)
116swsusp_arch_resume:
117 stmg %r6,%r15,__SF_GPRS(%r15) 115 stmg %r6,%r15,__SF_GPRS(%r15)
118 lgr %r1,%r15 116 lgr %r1,%r15
119 aghi %r15,-STACK_FRAME_OVERHEAD 117 aghi %r15,-STACK_FRAME_OVERHEAD
diff --git a/arch/s390/kernel/syscalls.S b/arch/s390/kernel/syscalls.S
index 6ee39ef8fe4..73eb08c874f 100644
--- a/arch/s390/kernel/syscalls.S
+++ b/arch/s390/kernel/syscalls.S
@@ -177,7 +177,7 @@ SYSCALL(sys_getresuid16,sys_ni_syscall,sys32_getresuid16_wrapper) /* 165 old get
177NI_SYSCALL /* for vm86 */ 177NI_SYSCALL /* for vm86 */
178NI_SYSCALL /* old sys_query_module */ 178NI_SYSCALL /* old sys_query_module */
179SYSCALL(sys_poll,sys_poll,sys32_poll_wrapper) 179SYSCALL(sys_poll,sys_poll,sys32_poll_wrapper)
180SYSCALL(sys_nfsservctl,sys_nfsservctl,compat_sys_nfsservctl_wrapper) 180NI_SYSCALL /* old nfsservctl */
181SYSCALL(sys_setresgid16,sys_ni_syscall,sys32_setresgid16_wrapper) /* 170 old setresgid16 syscall */ 181SYSCALL(sys_setresgid16,sys_ni_syscall,sys32_setresgid16_wrapper) /* 170 old setresgid16 syscall */
182SYSCALL(sys_getresgid16,sys_ni_syscall,sys32_getresgid16_wrapper) /* old getresgid16 syscall */ 182SYSCALL(sys_getresgid16,sys_ni_syscall,sys32_getresgid16_wrapper) /* old getresgid16 syscall */
183SYSCALL(sys_prctl,sys_prctl,sys32_prctl_wrapper) 183SYSCALL(sys_prctl,sys_prctl,sys32_prctl_wrapper)
diff --git a/arch/s390/kernel/traps.c b/arch/s390/kernel/traps.c
index a65d2e82f61..ffabcd9d336 100644
--- a/arch/s390/kernel/traps.c
+++ b/arch/s390/kernel/traps.c
@@ -18,7 +18,7 @@
18#include <linux/kernel.h> 18#include <linux/kernel.h>
19#include <linux/string.h> 19#include <linux/string.h>
20#include <linux/errno.h> 20#include <linux/errno.h>
21#include <linux/tracehook.h> 21#include <linux/ptrace.h>
22#include <linux/timer.h> 22#include <linux/timer.h>
23#include <linux/mm.h> 23#include <linux/mm.h>
24#include <linux/smp.h> 24#include <linux/smp.h>
@@ -36,21 +36,17 @@
36#include <asm/system.h> 36#include <asm/system.h>
37#include <asm/uaccess.h> 37#include <asm/uaccess.h>
38#include <asm/io.h> 38#include <asm/io.h>
39#include <asm/atomic.h> 39#include <linux/atomic.h>
40#include <asm/mathemu.h> 40#include <asm/mathemu.h>
41#include <asm/cpcmd.h> 41#include <asm/cpcmd.h>
42#include <asm/lowcore.h> 42#include <asm/lowcore.h>
43#include <asm/debug.h> 43#include <asm/debug.h>
44#include "entry.h" 44#include "entry.h"
45 45
46pgm_check_handler_t *pgm_check_table[128]; 46void (*pgm_check_table[128])(struct pt_regs *, long, unsigned long);
47 47
48int show_unhandled_signals; 48int show_unhandled_signals;
49 49
50extern pgm_check_handler_t do_protection_exception;
51extern pgm_check_handler_t do_dat_exception;
52extern pgm_check_handler_t do_asce_exception;
53
54#define stack_pointer ({ void **sp; asm("la %0,0(15)" : "=&d" (sp)); sp; }) 50#define stack_pointer ({ void **sp; asm("la %0,0(15)" : "=&d" (sp)); sp; })
55 51
56#ifndef CONFIG_64BIT 52#ifndef CONFIG_64BIT
@@ -329,10 +325,17 @@ static inline void __user *get_psw_address(struct pt_regs *regs,
329 325
330void __kprobes do_per_trap(struct pt_regs *regs) 326void __kprobes do_per_trap(struct pt_regs *regs)
331{ 327{
328 siginfo_t info;
329
332 if (notify_die(DIE_SSTEP, "sstep", regs, 0, 0, SIGTRAP) == NOTIFY_STOP) 330 if (notify_die(DIE_SSTEP, "sstep", regs, 0, 0, SIGTRAP) == NOTIFY_STOP)
333 return; 331 return;
334 if (tracehook_consider_fatal_signal(current, SIGTRAP)) 332 if (!current->ptrace)
335 force_sig(SIGTRAP, current); 333 return;
334 info.si_signo = SIGTRAP;
335 info.si_errno = 0;
336 info.si_code = TRAP_HWBKPT;
337 info.si_addr = (void *) current->thread.per_event.address;
338 force_sig_info(SIGTRAP, &info, current);
336} 339}
337 340
338static void default_trap_handler(struct pt_regs *regs, long pgm_int_code, 341static void default_trap_handler(struct pt_regs *regs, long pgm_int_code,
@@ -425,9 +428,13 @@ static void __kprobes illegal_op(struct pt_regs *regs, long pgm_int_code,
425 if (get_user(*((__u16 *) opcode), (__u16 __user *) location)) 428 if (get_user(*((__u16 *) opcode), (__u16 __user *) location))
426 return; 429 return;
427 if (*((__u16 *) opcode) == S390_BREAKPOINT_U16) { 430 if (*((__u16 *) opcode) == S390_BREAKPOINT_U16) {
428 if (tracehook_consider_fatal_signal(current, SIGTRAP)) 431 if (current->ptrace) {
429 force_sig(SIGTRAP, current); 432 info.si_signo = SIGTRAP;
430 else 433 info.si_errno = 0;
434 info.si_code = TRAP_BRKPT;
435 info.si_addr = location;
436 force_sig_info(SIGTRAP, &info, current);
437 } else
431 signal = SIGILL; 438 signal = SIGILL;
432#ifdef CONFIG_MATHEMU 439#ifdef CONFIG_MATHEMU
433 } else if (opcode[0] == 0xb3) { 440 } else if (opcode[0] == 0xb3) {
@@ -489,9 +496,8 @@ static void __kprobes illegal_op(struct pt_regs *regs, long pgm_int_code,
489 496
490 497
491#ifdef CONFIG_MATHEMU 498#ifdef CONFIG_MATHEMU
492asmlinkage void specification_exception(struct pt_regs *regs, 499void specification_exception(struct pt_regs *regs, long pgm_int_code,
493 long pgm_int_code, 500 unsigned long trans_exc_code)
494 unsigned long trans_exc_code)
495{ 501{
496 __u8 opcode[6]; 502 __u8 opcode[6];
497 __u16 __user *location = NULL; 503 __u16 __user *location = NULL;
@@ -648,7 +654,7 @@ static void space_switch_exception(struct pt_regs *regs, long pgm_int_code,
648 do_trap(pgm_int_code, SIGILL, "space switch event", regs, &info); 654 do_trap(pgm_int_code, SIGILL, "space switch event", regs, &info);
649} 655}
650 656
651asmlinkage void __kprobes kernel_stack_overflow(struct pt_regs * regs) 657void __kprobes kernel_stack_overflow(struct pt_regs * regs)
652{ 658{
653 bust_spinlocks(1); 659 bust_spinlocks(1);
654 printk("Kernel stack overflow.\n"); 660 printk("Kernel stack overflow.\n");
diff --git a/arch/s390/kernel/vdso32/.gitignore b/arch/s390/kernel/vdso32/.gitignore
new file mode 100644
index 00000000000..e45fba9d0ce
--- /dev/null
+++ b/arch/s390/kernel/vdso32/.gitignore
@@ -0,0 +1 @@
vdso32.lds
diff --git a/arch/s390/kernel/vdso64/.gitignore b/arch/s390/kernel/vdso64/.gitignore
new file mode 100644
index 00000000000..3fd18cf9fec
--- /dev/null
+++ b/arch/s390/kernel/vdso64/.gitignore
@@ -0,0 +1 @@
vdso64.lds