diff options
Diffstat (limited to 'arch/s390/kernel')
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 | 15 | ENTRY(s390_base_mcck_handler) |
15 | s390_base_mcck_handler: | ||
16 | basr %r13,0 | 16 | basr %r13,0 |
17 | 0: lg %r15,__LC_PANIC_STACK # load panic stack | 17 | 0: 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 |
30 | s390_base_mcck_handler_fn: | 31 | s390_base_mcck_handler_fn: |
31 | .quad 0 | 32 | .quad 0 |
32 | .previous | 33 | .previous |
33 | 34 | ||
34 | .globl s390_base_ext_handler | 35 | ENTRY(s390_base_ext_handler) |
35 | s390_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 |
38 | 0: aghi %r15,-STACK_FRAME_OVERHEAD | 38 | 0: 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 |
50 | s390_base_ext_handler_fn: | 51 | s390_base_ext_handler_fn: |
51 | .quad 0 | 52 | .quad 0 |
52 | .previous | 53 | .previous |
53 | 54 | ||
54 | .globl s390_base_pgm_handler | 55 | ENTRY(s390_base_pgm_handler) |
55 | s390_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 |
58 | 0: aghi %r15,-STACK_FRAME_OVERHEAD | 58 | 0: 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 |
74 | s390_base_pgm_handler_fn: | 75 | s390_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 | # | ||
86 | ENTRY(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 | 117 | ENTRY(s390_base_mcck_handler) |
81 | s390_base_mcck_handler: | ||
82 | basr %r13,0 | 118 | basr %r13,0 |
83 | 0: l %r15,__LC_PANIC_STACK # load panic stack | 119 | 0: 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: | |||
93 | 2: .long s390_base_mcck_handler_fn | 129 | 2: .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 |
97 | s390_base_mcck_handler_fn: | 134 | s390_base_mcck_handler_fn: |
98 | .long 0 | 135 | .long 0 |
99 | .previous | 136 | .previous |
100 | 137 | ||
101 | .globl s390_base_ext_handler | 138 | ENTRY(s390_base_ext_handler) |
102 | s390_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 |
105 | 0: ahi %r15,-STACK_FRAME_OVERHEAD | 141 | 0: ahi %r15,-STACK_FRAME_OVERHEAD |
@@ -115,13 +151,13 @@ s390_base_ext_handler: | |||
115 | 2: .long s390_base_ext_handler_fn | 151 | 2: .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 |
119 | s390_base_ext_handler_fn: | 156 | s390_base_ext_handler_fn: |
120 | .long 0 | 157 | .long 0 |
121 | .previous | 158 | .previous |
122 | 159 | ||
123 | .globl s390_base_pgm_handler | 160 | ENTRY(s390_base_pgm_handler) |
124 | s390_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 |
127 | 0: ahi %r15,-STACK_FRAME_OVERHEAD | 163 | 0: 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 |
146 | s390_base_pgm_handler_fn: | 183 | s390_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(¤t->sighand->siglock); | 384 | set_current_blocked(&set); |
386 | current->blocked = set; | ||
387 | recalc_sigpending(); | ||
388 | spin_unlock_irq(¤t->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 | |||
397 | badframe: | 390 | badframe: |
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(¤t->sighand->siglock); | 410 | set_current_blocked(&set); |
419 | current->blocked = set; | ||
420 | recalc_sigpending(); | ||
421 | spin_unlock_irq(¤t->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 | |||
441 | badframe: | 425 | badframe: |
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 | ||
608 | int | 592 | int handle_signal32(unsigned long sig, struct k_sigaction *ka, |
609 | handle_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(¤t->sighand->siglock); | 605 | sigorsets(&blocked, ¤t->blocked, &ka->sa.sa_mask); |
622 | sigorsets(¤t->blocked,¤t->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(¤t->blocked,sig); | 608 | set_current_blocked(&blocked); |
625 | recalc_sigpending(); | 609 | return 0; |
626 | spin_unlock_irq(¤t->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> |
11 | sys32_exit_wrapper: | 11 | |
12 | ENTRY(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 | 16 | ENTRY(sys32_read_wrapper) |
16 | sys32_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 | 22 | ENTRY(sys32_write_wrapper) |
23 | sys32_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 | 28 | ENTRY(sys32_open_wrapper) |
30 | sys32_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 | 34 | ENTRY(sys32_close_wrapper) |
37 | sys32_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 | 38 | ENTRY(sys32_creat_wrapper) |
42 | sys32_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 | 43 | ENTRY(sys32_link_wrapper) |
48 | sys32_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 | 48 | ENTRY(sys32_unlink_wrapper) |
54 | sys32_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 | 52 | ENTRY(sys32_chdir_wrapper) |
59 | sys32_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 | 56 | ENTRY(sys32_time_wrapper) |
64 | sys32_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 | 60 | ENTRY(sys32_mknod_wrapper) |
69 | sys32_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 | 66 | ENTRY(sys32_chmod_wrapper) |
76 | sys32_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 | 71 | ENTRY(sys32_lchown16_wrapper) |
82 | sys32_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 | 77 | ENTRY(sys32_lseek_wrapper) |
89 | sys32_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 | 85 | ENTRY(sys32_mount_wrapper) |
98 | sys32_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 | 93 | ENTRY(sys32_oldumount_wrapper) |
107 | sys32_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 | 97 | ENTRY(sys32_setuid16_wrapper) |
112 | sys32_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 | 103 | ENTRY(sys32_ptrace_wrapper) |
119 | sys32_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 | 110 | ENTRY(sys32_alarm_wrapper) |
127 | sys32_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 | 114 | ENTRY(compat_sys_utime_wrapper) |
132 | compat_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 | 119 | ENTRY(sys32_access_wrapper) |
138 | sys32_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 | 124 | ENTRY(sys32_nice_wrapper) |
144 | sys32_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 | 130 | ENTRY(sys32_kill_wrapper) |
151 | sys32_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 | 135 | ENTRY(sys32_rename_wrapper) |
157 | sys32_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 | 140 | ENTRY(sys32_mkdir_wrapper) |
163 | sys32_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 | 145 | ENTRY(sys32_rmdir_wrapper) |
169 | sys32_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 | 149 | ENTRY(sys32_dup_wrapper) |
174 | sys32_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 | 153 | ENTRY(sys32_pipe_wrapper) |
179 | sys32_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 | 157 | ENTRY(compat_sys_times_wrapper) |
184 | compat_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 | 161 | ENTRY(sys32_brk_wrapper) |
189 | sys32_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 | 165 | ENTRY(sys32_setgid16_wrapper) |
194 | sys32_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 | 171 | ENTRY(sys32_signal_wrapper) |
201 | sys32_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 | 180 | ENTRY(sys32_acct_wrapper) |
211 | sys32_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 | 184 | ENTRY(sys32_umount_wrapper) |
216 | sys32_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 | 189 | ENTRY(compat_sys_ioctl_wrapper) |
222 | compat_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 | 195 | ENTRY(compat_sys_fcntl_wrapper) |
229 | compat_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 | 201 | ENTRY(sys32_setpgid_wrapper) |
236 | sys32_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 | 206 | ENTRY(sys32_umask_wrapper) |
242 | sys32_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 | 210 | ENTRY(sys32_chroot_wrapper) |
247 | sys32_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 | 214 | ENTRY(sys32_ustat_wrapper) |
252 | sys32_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 | 219 | ENTRY(sys32_dup2_wrapper) |
258 | sys32_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 | 230 | ENTRY(sys32_sigaction_wrapper) |
270 | sys32_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 | 236 | ENTRY(sys32_setreuid16_wrapper) |
277 | sys32_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 | 241 | ENTRY(sys32_setregid16_wrapper) |
283 | sys32_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 | 246 | ENTRY(sys_sigsuspend_wrapper) |
289 | sys_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 | 252 | ENTRY(compat_sys_sigpending_wrapper) |
296 | compat_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 | 256 | ENTRY(sys32_sethostname_wrapper) |
301 | sys32_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 | 261 | ENTRY(compat_sys_setrlimit_wrapper) |
307 | compat_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 | 266 | ENTRY(compat_sys_old_getrlimit_wrapper) |
313 | compat_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 | 271 | ENTRY(compat_sys_getrlimit_wrapper) |
319 | compat_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 | 276 | ENTRY(sys32_mmap2_wrapper) |
325 | sys32_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 | 280 | ENTRY(compat_sys_getrusage_wrapper) |
330 | compat_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 | 285 | ENTRY(compat_sys_gettimeofday_wrapper) |
336 | compat_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 | 290 | ENTRY(compat_sys_settimeofday_wrapper) |
342 | compat_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 | 295 | ENTRY(sys32_getgroups16_wrapper) |
348 | sys32_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 | 300 | ENTRY(sys32_setgroups16_wrapper) |
354 | sys32_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 | 305 | ENTRY(sys32_symlink_wrapper) |
360 | sys32_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 | 310 | ENTRY(sys32_readlink_wrapper) |
366 | sys32_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 | 316 | ENTRY(sys32_uselib_wrapper) |
373 | sys32_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 | 320 | ENTRY(sys32_swapon_wrapper) |
378 | sys32_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 | 325 | ENTRY(sys32_reboot_wrapper) |
384 | sys32_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 | 332 | ENTRY(old32_readdir_wrapper) |
392 | old32_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 | 338 | ENTRY(old32_mmap_wrapper) |
399 | old32_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 | 342 | ENTRY(sys32_munmap_wrapper) |
404 | sys32_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 | 347 | ENTRY(sys32_truncate_wrapper) |
410 | sys32_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 | 352 | ENTRY(sys32_ftruncate_wrapper) |
416 | sys32_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 | 357 | ENTRY(sys32_fchmod_wrapper) |
422 | sys32_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 | 362 | ENTRY(sys32_fchown16_wrapper) |
428 | sys32_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 | 368 | ENTRY(sys32_getpriority_wrapper) |
435 | sys32_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 | 373 | ENTRY(sys32_setpriority_wrapper) |
441 | sys32_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 | 379 | ENTRY(compat_sys_statfs_wrapper) |
448 | compat_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 | 384 | ENTRY(compat_sys_fstatfs_wrapper) |
454 | compat_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 | 389 | ENTRY(compat_sys_socketcall_wrapper) |
460 | compat_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 | 394 | ENTRY(sys32_syslog_wrapper) |
466 | sys32_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 | 400 | ENTRY(compat_sys_setitimer_wrapper) |
473 | compat_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 | 406 | ENTRY(compat_sys_getitimer_wrapper) |
480 | compat_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 | 411 | ENTRY(compat_sys_newstat_wrapper) |
486 | compat_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 | 416 | ENTRY(compat_sys_newlstat_wrapper) |
492 | compat_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 | 421 | ENTRY(compat_sys_newfstat_wrapper) |
498 | compat_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 | 428 | ENTRY(compat_sys_wait4_wrapper) |
506 | compat_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 | 435 | ENTRY(sys32_swapoff_wrapper) |
514 | sys32_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 | 439 | ENTRY(compat_sys_sysinfo_wrapper) |
519 | compat_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 | 443 | ENTRY(sys32_ipc_wrapper) |
524 | sys32_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 | 451 | ENTRY(sys32_fsync_wrapper) |
533 | sys32_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 | 459 | ENTRY(sys32_setdomainname_wrapper) |
542 | sys32_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 | 464 | ENTRY(sys32_newuname_wrapper) |
548 | sys32_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 | 468 | ENTRY(compat_sys_adjtimex_wrapper) |
553 | compat_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 | 472 | ENTRY(sys32_mprotect_wrapper) |
558 | sys32_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 | 478 | ENTRY(compat_sys_sigprocmask_wrapper) |
565 | compat_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 | 484 | ENTRY(sys_init_module_wrapper) |
572 | sys_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 | 490 | ENTRY(sys_delete_module_wrapper) |
579 | sys_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 | 495 | ENTRY(sys32_quotactl_wrapper) |
585 | sys32_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 | 502 | ENTRY(sys32_getpgid_wrapper) |
593 | sys32_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 | 506 | ENTRY(sys32_fchdir_wrapper) |
598 | sys32_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 | 510 | ENTRY(sys32_bdflush_wrapper) |
603 | sys32_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 | 515 | ENTRY(sys32_sysfs_wrapper) |
609 | sys32_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 | 521 | ENTRY(sys32_personality_wrapper) |
616 | sys32_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 | 525 | ENTRY(sys32_setfsuid16_wrapper) |
621 | sys32_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 | 529 | ENTRY(sys32_setfsgid16_wrapper) |
626 | sys32_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 | 533 | ENTRY(sys32_llseek_wrapper) |
631 | sys32_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 | 541 | ENTRY(sys32_getdents_wrapper) |
640 | sys32_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 | 547 | ENTRY(compat_sys_select_wrapper) |
647 | compat_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 | 555 | ENTRY(sys32_flock_wrapper) |
656 | sys32_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 | 560 | ENTRY(sys32_msync_wrapper) |
662 | sys32_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 | 566 | ENTRY(compat_sys_readv_wrapper) |
669 | compat_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 | 572 | ENTRY(compat_sys_writev_wrapper) |
676 | compat_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 | 578 | ENTRY(sys32_getsid_wrapper) |
683 | sys32_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 | 582 | ENTRY(sys32_fdatasync_wrapper) |
688 | sys32_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 | 586 | ENTRY(sys32_mlock_wrapper) |
693 | sys32_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 | 591 | ENTRY(sys32_munlock_wrapper) |
699 | sys32_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 | 596 | ENTRY(sys32_mlockall_wrapper) |
705 | sys32_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 | 602 | ENTRY(sys32_sched_setparam_wrapper) |
712 | sys32_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 | 607 | ENTRY(sys32_sched_getparam_wrapper) |
718 | sys32_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 | 612 | ENTRY(sys32_sched_setscheduler_wrapper) |
724 | sys32_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 | 618 | ENTRY(sys32_sched_getscheduler_wrapper) |
731 | sys32_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 | 624 | ENTRY(sys32_sched_get_priority_max_wrapper) |
738 | sys32_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 | 628 | ENTRY(sys32_sched_get_priority_min_wrapper) |
743 | sys32_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 | 632 | ENTRY(sys32_sched_rr_get_interval_wrapper) |
748 | sys32_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 | 637 | ENTRY(compat_sys_nanosleep_wrapper) |
754 | compat_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 | 642 | ENTRY(sys32_mremap_wrapper) |
760 | sys32_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 | 650 | ENTRY(sys32_setresuid16_wrapper) |
769 | sys32_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 | 656 | ENTRY(sys32_getresuid16_wrapper) |
776 | sys32_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 | 662 | ENTRY(sys32_poll_wrapper) |
783 | sys32_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 | 668 | ENTRY(sys32_setresgid16_wrapper) |
790 | compat_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 | ||
797 | sys32_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 | 674 | ENTRY(sys32_getresgid16_wrapper) |
804 | sys32_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 | 680 | ENTRY(sys32_prctl_wrapper) |
811 | sys32_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 | 690 | ENTRY(sys32_rt_sigaction_wrapper) |
822 | sys32_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 | 697 | ENTRY(sys32_rt_sigprocmask_wrapper) |
830 | sys32_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 | 704 | ENTRY(sys32_rt_sigpending_wrapper) |
838 | sys32_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 | 709 | ENTRY(compat_sys_rt_sigtimedwait_wrapper) |
844 | compat_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 | 716 | ENTRY(sys32_rt_sigqueueinfo_wrapper) |
852 | sys32_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 | 722 | ENTRY(compat_sys_rt_sigsuspend_wrapper) |
859 | compat_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 | 727 | ENTRY(sys32_pread64_wrapper) |
865 | sys32_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 | 735 | ENTRY(sys32_pwrite64_wrapper) |
874 | sys32_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 | 743 | ENTRY(sys32_chown16_wrapper) |
883 | sys32_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 | 749 | ENTRY(sys32_getcwd_wrapper) |
890 | sys32_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 | 754 | ENTRY(sys32_capget_wrapper) |
896 | sys32_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 | 759 | ENTRY(sys32_capset_wrapper) |
902 | sys32_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 | 764 | ENTRY(sys32_sigaltstack_wrapper) |
908 | sys32_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 | 769 | ENTRY(sys32_sendfile_wrapper) |
914 | sys32_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 | 778 | ENTRY(sys32_truncate64_wrapper) |
924 | sys32_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 | 784 | ENTRY(sys32_ftruncate64_wrapper) |
931 | sys32_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 | 790 | ENTRY(sys32_lchown_wrapper) |
938 | sys32_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 | 801 | ENTRY(sys32_setreuid_wrapper) |
950 | sys32_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 | 806 | ENTRY(sys32_setregid_wrapper) |
956 | sys32_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 | 811 | ENTRY(sys32_getgroups_wrapper) |
962 | sys32_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 | 816 | ENTRY(sys32_setgroups_wrapper) |
968 | sys32_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 | 821 | ENTRY(sys32_fchown_wrapper) |
974 | sys32_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 | 827 | ENTRY(sys32_setresuid_wrapper) |
981 | sys32_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 | 833 | ENTRY(sys32_getresuid_wrapper) |
988 | sys32_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 | 839 | ENTRY(sys32_setresgid_wrapper) |
995 | sys32_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 | 845 | ENTRY(sys32_getresgid_wrapper) |
1002 | sys32_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 | 851 | ENTRY(sys32_chown_wrapper) |
1009 | sys32_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 | 857 | ENTRY(sys32_setuid_wrapper) |
1016 | sys32_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 | 861 | ENTRY(sys32_setgid_wrapper) |
1021 | sys32_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 | 865 | ENTRY(sys32_setfsuid_wrapper) |
1026 | sys32_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 | 869 | ENTRY(sys32_setfsgid_wrapper) |
1031 | sys32_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 | 873 | ENTRY(sys32_pivot_root_wrapper) |
1036 | sys32_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 | 878 | ENTRY(sys32_mincore_wrapper) |
1042 | sys32_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 | 884 | ENTRY(sys32_madvise_wrapper) |
1049 | sys32_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 | 890 | ENTRY(sys32_getdents64_wrapper) |
1056 | sys32_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 | 896 | ENTRY(compat_sys_fcntl64_wrapper) |
1063 | compat_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 | 902 | ENTRY(sys32_stat64_wrapper) |
1070 | sys32_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 | 907 | ENTRY(sys32_lstat64_wrapper) |
1076 | sys32_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 | 912 | ENTRY(sys32_stime_wrapper) |
1082 | sys32_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 | 916 | ENTRY(sys32_sysctl_wrapper) |
1087 | sys32_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 | 920 | ENTRY(sys32_fstat64_wrapper) |
1092 | sys32_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 | 925 | ENTRY(compat_sys_futex_wrapper) |
1098 | compat_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 | 935 | ENTRY(sys32_setxattr_wrapper) |
1109 | sys32_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 | 943 | ENTRY(sys32_lsetxattr_wrapper) |
1118 | sys32_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 | 951 | ENTRY(sys32_fsetxattr_wrapper) |
1127 | sys32_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 | 959 | ENTRY(sys32_getxattr_wrapper) |
1136 | sys32_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 | 966 | ENTRY(sys32_lgetxattr_wrapper) |
1144 | sys32_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 | 973 | ENTRY(sys32_fgetxattr_wrapper) |
1152 | sys32_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 | 980 | ENTRY(sys32_listxattr_wrapper) |
1160 | sys32_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 | 986 | ENTRY(sys32_llistxattr_wrapper) |
1167 | sys32_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 | 992 | ENTRY(sys32_flistxattr_wrapper) |
1174 | sys32_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 | 998 | ENTRY(sys32_removexattr_wrapper) |
1181 | sys32_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 | 1003 | ENTRY(sys32_lremovexattr_wrapper) |
1187 | sys32_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 | 1008 | ENTRY(sys32_fremovexattr_wrapper) |
1193 | sys32_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 | 1013 | ENTRY(sys32_sched_setaffinity_wrapper) |
1199 | sys32_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 | 1019 | ENTRY(sys32_sched_getaffinity_wrapper) |
1206 | sys32_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 | 1025 | ENTRY(sys32_exit_group_wrapper) |
1213 | sys32_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 | 1029 | ENTRY(sys32_set_tid_address_wrapper) |
1218 | sys32_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 | 1033 | ENTRY(sys_epoll_create_wrapper) |
1223 | sys_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 | 1037 | ENTRY(sys_epoll_ctl_wrapper) |
1228 | sys_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 | 1044 | ENTRY(sys_epoll_wait_wrapper) |
1236 | sys_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 | 1051 | ENTRY(sys32_lookup_dcookie_wrapper) |
1244 | sys32_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 | 1058 | ENTRY(sys32_fadvise64_wrapper) |
1252 | sys32_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 | 1066 | ENTRY(sys32_fadvise64_64_wrapper) |
1261 | sys32_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 | 1070 | ENTRY(sys32_clock_settime_wrapper) |
1266 | sys32_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 | 1075 | ENTRY(sys32_clock_gettime_wrapper) |
1272 | sys32_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 | 1080 | ENTRY(sys32_clock_getres_wrapper) |
1278 | sys32_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 | 1085 | ENTRY(sys32_clock_nanosleep_wrapper) |
1284 | sys32_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 | 1092 | ENTRY(sys32_timer_create_wrapper) |
1292 | sys32_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 | 1098 | ENTRY(sys32_timer_settime_wrapper) |
1299 | sys32_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 | 1105 | ENTRY(sys32_timer_gettime_wrapper) |
1307 | sys32_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 | 1110 | ENTRY(sys32_timer_getoverrun_wrapper) |
1313 | sys32_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 | 1114 | ENTRY(sys32_timer_delete_wrapper) |
1318 | sys32_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 | 1118 | ENTRY(sys32_io_setup_wrapper) |
1323 | sys32_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 | 1123 | ENTRY(sys32_io_destroy_wrapper) |
1329 | sys32_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 | 1127 | ENTRY(sys32_io_getevents_wrapper) |
1334 | sys32_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 | 1135 | ENTRY(sys32_io_submit_wrapper) |
1343 | sys32_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 | 1141 | ENTRY(sys32_io_cancel_wrapper) |
1350 | sys32_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 | 1147 | ENTRY(compat_sys_statfs64_wrapper) |
1357 | compat_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 | 1153 | ENTRY(compat_sys_fstatfs64_wrapper) |
1364 | compat_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 | 1159 | ENTRY(compat_sys_mq_open_wrapper) |
1371 | compat_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 | 1166 | ENTRY(sys32_mq_unlink_wrapper) |
1379 | sys32_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 | 1170 | ENTRY(compat_sys_mq_timedsend_wrapper) |
1384 | compat_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 | 1178 | ENTRY(compat_sys_mq_timedreceive_wrapper) |
1393 | compat_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 | 1186 | ENTRY(compat_sys_mq_notify_wrapper) |
1402 | compat_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 | 1191 | ENTRY(compat_sys_mq_getsetattr_wrapper) |
1408 | compat_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 | 1197 | ENTRY(compat_sys_add_key_wrapper) |
1415 | compat_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 | 1205 | ENTRY(compat_sys_request_key_wrapper) |
1424 | compat_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 | 1212 | ENTRY(sys32_remap_file_pages_wrapper) |
1432 | sys32_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 | 1220 | ENTRY(compat_sys_waitid_wrapper) |
1441 | compat_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 | 1228 | ENTRY(compat_sys_kexec_load_wrapper) |
1450 | compat_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 | 1235 | ENTRY(sys_ioprio_set_wrapper) |
1458 | sys_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 | 1241 | ENTRY(sys_ioprio_get_wrapper) |
1465 | sys_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 | 1246 | ENTRY(sys_inotify_add_watch_wrapper) |
1471 | sys_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 | 1252 | ENTRY(sys_inotify_rm_watch_wrapper) |
1478 | sys_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 | 1257 | ENTRY(compat_sys_openat_wrapper) |
1484 | compat_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 | 1264 | ENTRY(sys_mkdirat_wrapper) |
1492 | sys_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 | 1270 | ENTRY(sys_mknodat_wrapper) |
1499 | sys_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 | 1277 | ENTRY(sys_fchownat_wrapper) |
1507 | sys_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 | 1285 | ENTRY(compat_sys_futimesat_wrapper) |
1516 | compat_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 | 1291 | ENTRY(sys32_fstatat64_wrapper) |
1523 | sys32_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 | 1298 | ENTRY(sys_unlinkat_wrapper) |
1531 | sys_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 | 1304 | ENTRY(sys_renameat_wrapper) |
1538 | sys_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 | 1311 | ENTRY(sys_linkat_wrapper) |
1546 | sys_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 | 1319 | ENTRY(sys_symlinkat_wrapper) |
1555 | sys_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 | 1325 | ENTRY(sys_readlinkat_wrapper) |
1562 | sys_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 | 1332 | ENTRY(sys_fchmodat_wrapper) |
1570 | sys_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 | 1338 | ENTRY(sys_faccessat_wrapper) |
1577 | sys_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 | 1344 | ENTRY(compat_sys_pselect6_wrapper) |
1584 | compat_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 | 1354 | ENTRY(compat_sys_ppoll_wrapper) |
1595 | compat_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 | 1362 | ENTRY(sys_unshare_wrapper) |
1604 | sys_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 | 1366 | ENTRY(compat_sys_set_robust_list_wrapper) |
1609 | compat_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 | 1371 | ENTRY(compat_sys_get_robust_list_wrapper) |
1615 | compat_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 | 1377 | ENTRY(sys_splice_wrapper) |
1622 | sys_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 | 1387 | ENTRY(sys_sync_file_range_wrapper) |
1633 | sys_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 | 1396 | ENTRY(sys_tee_wrapper) |
1643 | sys_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 | 1403 | ENTRY(compat_sys_vmsplice_wrapper) |
1651 | compat_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 | 1410 | ENTRY(sys_getcpu_wrapper) |
1659 | sys_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 | 1416 | ENTRY(compat_sys_epoll_pwait_wrapper) |
1666 | compat_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 | 1426 | ENTRY(compat_sys_utimes_wrapper) |
1677 | compat_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 | 1431 | ENTRY(compat_sys_utimensat_wrapper) |
1683 | compat_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 | 1438 | ENTRY(compat_sys_signalfd_wrapper) |
1691 | compat_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 | 1444 | ENTRY(sys_eventfd_wrapper) |
1698 | sys_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 | 1448 | ENTRY(sys_fallocate_wrapper) |
1703 | sys_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 | 1457 | ENTRY(sys_timerfd_create_wrapper) |
1713 | sys_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 | 1462 | ENTRY(compat_sys_timerfd_settime_wrapper) |
1719 | compat_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 | 1469 | ENTRY(compat_sys_timerfd_gettime_wrapper) |
1727 | compat_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 | 1474 | ENTRY(compat_sys_signalfd4_wrapper) |
1733 | compat_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 | 1481 | ENTRY(sys_eventfd2_wrapper) |
1741 | sys_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 | 1486 | ENTRY(sys_inotify_init1_wrapper) |
1747 | sys_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 | 1490 | ENTRY(sys_pipe2_wrapper) |
1752 | sys_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 | 1495 | ENTRY(sys_dup3_wrapper) |
1758 | sys_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 | 1501 | ENTRY(sys_epoll_create1_wrapper) |
1765 | sys_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 | 1505 | ENTRY(sys32_readahead_wrapper) |
1770 | sys32_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 | 1512 | ENTRY(sys32_sendfile64_wrapper) |
1778 | sys32_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 | 1519 | ENTRY(sys_tkill_wrapper) |
1786 | sys_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 | 1524 | ENTRY(sys_tgkill_wrapper) |
1792 | sys_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 | 1530 | ENTRY(compat_sys_keyctl_wrapper) |
1799 | compat_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 | 1538 | ENTRY(compat_sys_preadv_wrapper) |
1808 | compat_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 | 1546 | ENTRY(compat_sys_pwritev_wrapper) |
1817 | compat_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 | 1554 | ENTRY(compat_sys_rt_tgsigqueueinfo_wrapper) |
1826 | compat_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 | 1561 | ENTRY(sys_perf_event_open_wrapper) |
1834 | sys_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 | 1569 | ENTRY(sys_clone_wrapper) |
1843 | sys_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 | 1576 | ENTRY(sys32_execve_wrapper) |
1851 | sys32_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 | 1582 | ENTRY(sys_fanotify_init_wrapper) |
1858 | sys_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 | 1587 | ENTRY(sys_fanotify_mark_wrapper) |
1864 | sys_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 | 1596 | ENTRY(sys_prlimit64_wrapper) |
1874 | sys_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 | 1603 | ENTRY(sys_name_to_handle_at_wrapper) |
1882 | sys_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 | 1611 | ENTRY(compat_sys_open_by_handle_at_wrapper) |
1891 | compat_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 | 1617 | ENTRY(compat_sys_clock_adjtime_wrapper) |
1898 | compat_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 | 1622 | ENTRY(sys_syncfs_wrapper) |
1904 | sys_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) | |||
396 | static __init void rescue_initrd(void) | 396 | static __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 | 200 | ENTRY(__switch_to) |
201 | __switch_to: | ||
202 | basr %r1,0 | 201 | basr %r1,0 |
203 | 0: l %r4,__THREAD_info(%r2) # get thread_info of prev | 202 | 0: 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 | 226 | ENTRY(system_call) |
228 | system_call: | ||
229 | stpt __LC_SYNC_ENTER_TIMER | 227 | stpt __LC_SYNC_ENTER_TIMER |
230 | sysc_saveall: | 228 | sysc_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 | 389 | ENTRY(ret_from_fork) |
392 | ret_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 | 405 | ENTRY(kernel_execve) |
409 | kernel_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 | 437 | ENTRY(pgm_check_handler) |
442 | pgm_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 | 563 | ENTRY(io_int_handler) |
569 | io_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 | 700 | ENTRY(ext_int_handler) |
707 | ext_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 | 727 | ENTRY(mcck_int_handler) |
735 | mcck_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 | 813 | ENTRY(restart_int_handler) |
822 | restart_int_handler: | ||
823 | basr %r1,0 | 814 | basr %r1,0 |
824 | restart_base: | 815 | restart_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 | 842 | ENTRY(restart_int_handler) |
852 | restart_int_handler: | ||
853 | basr %r1,0 | 843 | basr %r1,0 |
854 | restart_base: | 844 | restart_base: |
855 | lpsw restart_crash-restart_base(%r1) | 845 | lpsw restart_crash-restart_base(%r1) |
@@ -859,6 +849,34 @@ restart_crash: | |||
859 | restart_go: | 849 | restart_go: |
860 | #endif | 850 | #endif |
861 | 851 | ||
852 | # | ||
853 | # PSW restart interrupt handler | ||
854 | # | ||
855 | ENTRY(psw_restart_int_handler) | ||
856 | st %r15,__LC_SAVE_AREA_64(%r0) # save r15 | ||
857 | basr %r15,0 | ||
858 | 0: 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 | ||
866 | 1: l %r14,.Ldo_restart-1b(%r14) | ||
867 | basr %r14,%r14 | ||
868 | |||
869 | basr %r14,0 # load disabled wait PSW if | ||
870 | 2: 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 | ||
877 | restart_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 | ||
8 | typedef void pgm_check_handler_t(struct pt_regs *, long, unsigned long); | 8 | void do_protection_exception(struct pt_regs *, long, unsigned long); |
9 | extern pgm_check_handler_t *pgm_check_table[128]; | 9 | void do_dat_exception(struct pt_regs *, long, unsigned long); |
10 | pgm_check_handler_t do_protection_exception; | 10 | void do_asce_exception(struct pt_regs *, long, unsigned long); |
11 | pgm_check_handler_t do_dat_exception; | ||
12 | 11 | ||
13 | extern int sysctl_userprocess_debug; | 12 | extern 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) | ||
68 | 0: | 81 | 0: |
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 | 222 | ENTRY(__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 | 247 | ENTRY(system_call) |
236 | system_call: | ||
237 | stpt __LC_SYNC_ENTER_TIMER | 248 | stpt __LC_SYNC_ENTER_TIMER |
238 | sysc_saveall: | 249 | sysc_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 | 409 | ENTRY(ret_from_fork) |
399 | ret_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 | 424 | ENTRY(kernel_execve) |
415 | kernel_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 | 454 | ENTRY(pgm_check_handler) |
446 | pgm_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 |
474 | pgm_no_vtime: | 483 | pgm_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 |
516 | pgm_no_vtime2: | 525 | pgm_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 | 582 | ENTRY(io_int_handler) |
575 | io_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 |
588 | io_no_vtime: | 596 | io_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 | 716 | ENTRY(ext_int_handler) |
710 | ext_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 |
723 | ext_no_vtime: | 730 | ext_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 | 745 | ENTRY(mcck_int_handler) |
740 | mcck_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 | 831 | ENTRY(restart_int_handler) |
827 | restart_int_handler: | ||
828 | basr %r1,0 | 832 | basr %r1,0 |
829 | restart_base: | 833 | restart_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 | 858 | ENTRY(restart_int_handler) |
855 | restart_int_handler: | ||
856 | basr %r1,0 | 859 | basr %r1,0 |
857 | restart_base: | 860 | restart_base: |
858 | lpswe restart_crash-restart_base(%r1) | 861 | lpswe restart_crash-restart_base(%r1) |
@@ -862,6 +865,26 @@ restart_crash: | |||
862 | restart_go: | 865 | restart_go: |
863 | #endif | 866 | #endif |
864 | 867 | ||
868 | # | ||
869 | # PSW restart interrupt handler | ||
870 | # | ||
871 | ENTRY(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 | ||
885 | restart_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 | */ | ||
1068 | ENTRY(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 | ||
1075 | sie_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 | ||
1083 | sie_gmap: | ||
1084 | lg %r14,__SF_EMPTY(%r15) # get control block pointer | ||
1085 | SPP __SF_EMPTY(%r15) # set guest id | ||
1086 | sie 0(%r14) | ||
1087 | sie_done: | ||
1088 | SPP __LC_CMF_HPP # set host id | ||
1089 | lg %r14,__LC_THREAD_INFO # pointer thread_info struct | ||
1090 | sie_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 | ||
1098 | sie_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 | 387 | ENTRY(start) |
387 | start: | ||
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 | 451 | ENTRY(startup) |
452 | startup: | ||
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 | 20 | ENTRY(startup_continue) |
20 | startup_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 | 81 | ENTRY(_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 | 90 | ENTRY(_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 | 20 | ENTRY(startup_continue) |
20 | startup_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 | 79 | ENTRY(_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 | 88 | ENTRY(_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 | ||
54 | struct shutdown_action; | 56 | struct shutdown_action; |
55 | struct shutdown_trigger { | 57 | struct 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]; | |||
1544 | static char vmcmd_on_panic[128]; | 1546 | static char vmcmd_on_panic[128]; |
1545 | static char vmcmd_on_halt[128]; | 1547 | static char vmcmd_on_halt[128]; |
1546 | static char vmcmd_on_poff[128]; | 1548 | static char vmcmd_on_poff[128]; |
1549 | static char vmcmd_on_restart[128]; | ||
1547 | 1550 | ||
1548 | DEFINE_IPL_ATTR_STR_RW(vmcmd, on_reboot, "%s\n", "%s\n", vmcmd_on_reboot); | 1551 | DEFINE_IPL_ATTR_STR_RW(vmcmd, on_reboot, "%s\n", "%s\n", vmcmd_on_reboot); |
1549 | DEFINE_IPL_ATTR_STR_RW(vmcmd, on_panic, "%s\n", "%s\n", vmcmd_on_panic); | 1552 | DEFINE_IPL_ATTR_STR_RW(vmcmd, on_panic, "%s\n", "%s\n", vmcmd_on_panic); |
1550 | DEFINE_IPL_ATTR_STR_RW(vmcmd, on_halt, "%s\n", "%s\n", vmcmd_on_halt); | 1553 | DEFINE_IPL_ATTR_STR_RW(vmcmd, on_halt, "%s\n", "%s\n", vmcmd_on_halt); |
1551 | DEFINE_IPL_ATTR_STR_RW(vmcmd, on_poff, "%s\n", "%s\n", vmcmd_on_poff); | 1554 | DEFINE_IPL_ATTR_STR_RW(vmcmd, on_poff, "%s\n", "%s\n", vmcmd_on_poff); |
1555 | DEFINE_IPL_ATTR_STR_RW(vmcmd, on_restart, "%s\n", "%s\n", vmcmd_on_restart); | ||
1552 | 1556 | ||
1553 | static struct attribute *vmcmd_attrs[] = { | 1557 | static 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 | ||
1612 | static void stop_run(struct shutdown_trigger *trigger) | 1619 | static 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 | |||
1720 | static struct shutdown_trigger on_restart_trigger = {ON_RESTART_STR, | ||
1721 | &stop_action}; | ||
1722 | |||
1723 | static 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 | |||
1729 | static 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 | |||
1736 | static struct kobj_attribute on_restart_attr = | ||
1737 | __ATTR(on_restart, 0644, on_restart_show, on_restart_store); | ||
1738 | |||
1739 | void 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 | ||
1712 | static struct shutdown_trigger on_halt_trigger = {ON_HALT_STR, &stop_action}; | 1748 | static 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; |
1788 | fail: | 1826 | fail: |
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 | */ | ||
94 | void __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 | */ |
102 | asmlinkage void do_softirq(void) | 93 | asmlinkage 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 | */ |
141 | static struct list_head ext_int_hash[256]; | ||
152 | 142 | ||
153 | struct ext_int_info { | 143 | struct 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 | ||
159 | static struct ext_int_info *ext_int_hash[256]; | 150 | /* ext_int_hash_lock protects the handler lists for external interrupts */ |
151 | DEFINE_SPINLOCK(ext_int_hash_lock); | ||
152 | |||
153 | static 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 | ||
161 | static inline int ext_hash(u16 code) | 161 | static inline int ext_hash(u16 code) |
162 | { | 162 | { |
163 | return (code + (code >> 9)) & 0xff; | 163 | return (code + (code >> 9)) & 0xff; |
164 | } | 164 | } |
165 | 165 | ||
166 | static 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 | |||
166 | int register_external_interrupt(u16 code, ext_int_handler_t handler) | 173 | int 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 | } |
181 | EXPORT_SYMBOL(register_external_interrupt); | 191 | EXPORT_SYMBOL(register_external_interrupt); |
182 | 192 | ||
183 | int unregister_external_interrupt(u16 code, ext_int_handler_t handler) | 193 | int 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 | } |
206 | EXPORT_SYMBOL(unregister_external_interrupt); | 208 | EXPORT_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 | ||
240 | void __init init_IRQ(void) | ||
241 | { | ||
242 | init_external_interrupts(); | ||
243 | } | ||
244 | |||
236 | static DEFINE_SPINLOCK(sc_irq_lock); | 245 | static DEFINE_SPINLOCK(sc_irq_lock); |
237 | static int sc_irq_refcount; | 246 | static 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 | 13 | ENTRY(ftrace_stub) |
13 | ftrace_stub: | ||
14 | br %r14 | 14 | br %r14 |
15 | 15 | ||
16 | .globl _mcount | 16 | ENTRY(_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 | 20 | ENTRY(ftrace_caller) |
22 | ftrace_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 | 42 | ENTRY(ftrace_graph_caller) |
45 | ftrace_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 | 56 | ENTRY(return_to_handler) |
60 | return_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 | 13 | ENTRY(ftrace_stub) |
13 | ftrace_stub: | ||
14 | br %r14 | 14 | br %r14 |
15 | 15 | ||
16 | .globl _mcount | 16 | ENTRY(_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 | 20 | ENTRY(ftrace_caller) |
22 | ftrace_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 | 38 | ENTRY(ftrace_graph_caller) |
41 | ftrace_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 | 52 | ENTRY(return_to_handler) |
56 | return_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 | ||
48 | void *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 */ |
56 | void module_free(struct module *mod, void *module_region) | 49 | void 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 | ||
179 | int | ||
180 | apply_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 | |||
188 | static int | 172 | static int |
189 | apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab, | 173 | apply_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 | |||
413 | void 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 | ||
48 | void update_per_regs(struct task_struct *task) | 48 | void 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 | ||
75 | void user_enable_single_step(struct task_struct *task) | 77 | void 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 | ||
900 | static 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 | ||
900 | static const struct user_regset s390_regsets[] = { | 910 | static 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 | ||
1092 | static 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 | |||
1081 | static const struct user_regset s390_compat_regsets[] = { | 1100 | static 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 | 16 | ENTRY(do_reipl_asm) |
16 | do_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 | # | ||
18 | ENTRY(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 | 73 | ENTRY(do_reipl_asm) |
15 | do_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 | 27 | ENTRY(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 | 28 | ENTRY(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 |
5 | EXPORT_SYMBOL(_mcount); | 6 | EXPORT_SYMBOL(_mcount); |
6 | #endif | 7 | #endif |
8 | #if defined(CONFIG_KVM) || defined(CONFIG_KVM_MODULE) | ||
9 | EXPORT_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 | |||
11 | LC_EXT_NEW_PSW = 0x58 # addr of ext int handler | 13 | LC_EXT_NEW_PSW = 0x58 # addr of ext int handler |
12 | LC_EXT_NEW_PSW_64 = 0x1b0 # addr of ext int handler 64 bit | 14 | LC_EXT_NEW_PSW_64 = 0x1b0 # addr of ext int handler 64 bit |
13 | LC_EXT_INT_PARAM = 0x80 # addr of ext int parameter | 15 | LC_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 | 265 | ENTRY(_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 | ||
532 | void *restart_stack __attribute__((__section__(".data"))); | ||
533 | |||
534 | /* | ||
535 | * Setup new PSW and allocate stack for PSW restart interrupt | ||
536 | */ | ||
537 | static 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 | |||
532 | static void __init | 553 | static void __init |
533 | setup_memory(void) | 554 | setup_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 | */ |
58 | SYSCALL_DEFINE3(sigsuspend, int, history0, int, history1, old_sigset_t, mask) | 58 | SYSCALL_DEFINE3(sigsuspend, int, history0, int, history1, old_sigset_t, mask) |
59 | { | 59 | { |
60 | mask &= _BLOCKABLE; | 60 | sigset_t blocked; |
61 | spin_lock_irq(¤t->sighand->siglock); | ||
62 | current->saved_sigmask = current->blocked; | ||
63 | siginitset(¤t->blocked, mask); | ||
64 | recalc_sigpending(); | ||
65 | spin_unlock_irq(¤t->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(¤t->sighand->siglock); | 174 | set_current_blocked(&set); |
178 | current->blocked = set; | ||
179 | recalc_sigpending(); | ||
180 | spin_unlock_irq(¤t->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 | |||
187 | badframe: | 178 | badframe: |
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(¤t->sighand->siglock); | 194 | set_current_blocked(&set); |
205 | current->blocked = set; | ||
206 | recalc_sigpending(); | ||
207 | spin_unlock_irq(¤t->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 | |||
217 | badframe: | 201 | badframe: |
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 | /* | 372 | static 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 | |||
392 | static int | ||
393 | handle_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(¤t->sighand->siglock); | 386 | sigorsets(&blocked, ¤t->blocked, &ka->sa.sa_mask); |
406 | sigorsets(¤t->blocked,¤t->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(¤t->blocked,sig); | 389 | set_current_blocked(&blocked); |
409 | recalc_sigpending(); | 390 | return 0; |
410 | spin_unlock_irq(¤t->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 | */ |
453 | int __cpuinit start_secondary(void *cpuvoid) | 453 | int __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 | 20 | ENTRY(smp_switch_to_cpu) |
20 | .globl smp_switch_to_cpu | ||
21 | smp_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 */ |
34 | 3: j 3b | 33 | 3: j 3b |
35 | 34 | ||
36 | .globl smp_restart_cpu | 35 | ENTRY(smp_restart_cpu) |
37 | smp_restart_cpu: | ||
38 | basr %r13,0 | 36 | basr %r13,0 |
39 | 0: la %r1,.gprregs_addr-0b(%r13) | 37 | 0: 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 | 20 | ENTRY(smp_switch_to_cpu) |
20 | .globl smp_switch_to_cpu | ||
21 | smp_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 */ |
32 | 3: j 3b | 31 | 3: j 3b |
33 | 32 | ||
34 | .globl smp_restart_cpu | 33 | ENTRY(smp_restart_cpu) |
35 | smp_restart_cpu: | ||
36 | larl %r1,.gprregs | 34 | larl %r1,.gprregs |
37 | lmg %r0,%r15,0(%r1) | 35 | lmg %r0,%r15,0(%r1) |
38 | 1: sigp %r0,%r5,__SIGP_SENSE /* Wait for calling CPU */ | 36 | 1: 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 | 26 | ENTRY(swsusp_arch_suspend) |
26 | .globl swsusp_arch_suspend | ||
27 | swsusp_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 | 114 | ENTRY(swsusp_arch_resume) |
116 | swsusp_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 | |||
177 | NI_SYSCALL /* for vm86 */ | 177 | NI_SYSCALL /* for vm86 */ |
178 | NI_SYSCALL /* old sys_query_module */ | 178 | NI_SYSCALL /* old sys_query_module */ |
179 | SYSCALL(sys_poll,sys_poll,sys32_poll_wrapper) | 179 | SYSCALL(sys_poll,sys_poll,sys32_poll_wrapper) |
180 | SYSCALL(sys_nfsservctl,sys_nfsservctl,compat_sys_nfsservctl_wrapper) | 180 | NI_SYSCALL /* old nfsservctl */ |
181 | SYSCALL(sys_setresgid16,sys_ni_syscall,sys32_setresgid16_wrapper) /* 170 old setresgid16 syscall */ | 181 | SYSCALL(sys_setresgid16,sys_ni_syscall,sys32_setresgid16_wrapper) /* 170 old setresgid16 syscall */ |
182 | SYSCALL(sys_getresgid16,sys_ni_syscall,sys32_getresgid16_wrapper) /* old getresgid16 syscall */ | 182 | SYSCALL(sys_getresgid16,sys_ni_syscall,sys32_getresgid16_wrapper) /* old getresgid16 syscall */ |
183 | SYSCALL(sys_prctl,sys_prctl,sys32_prctl_wrapper) | 183 | SYSCALL(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 | ||
46 | pgm_check_handler_t *pgm_check_table[128]; | 46 | void (*pgm_check_table[128])(struct pt_regs *, long, unsigned long); |
47 | 47 | ||
48 | int show_unhandled_signals; | 48 | int show_unhandled_signals; |
49 | 49 | ||
50 | extern pgm_check_handler_t do_protection_exception; | ||
51 | extern pgm_check_handler_t do_dat_exception; | ||
52 | extern 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 | ||
330 | void __kprobes do_per_trap(struct pt_regs *regs) | 326 | void __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 | ||
338 | static void default_trap_handler(struct pt_regs *regs, long pgm_int_code, | 341 | static 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 |
492 | asmlinkage void specification_exception(struct pt_regs *regs, | 499 | void 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 | ||
651 | asmlinkage void __kprobes kernel_stack_overflow(struct pt_regs * regs) | 657 | void __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 | |||