mirror of https://gitee.com/openkylin/linux.git
[S390] fix s390 assembler code alignments
The alignment is missing for various global symbols in s390 assembly code. With a recent gcc and an instruction like stgrl this can lead to a specification exception if the instruction uses such a mis-aligned address. Specify the alignment explicitely and while add it define __ALIGN for s390 and use the ENTRY define to save some lines of code. Signed-off-by: Jan Glauber <jang@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
603d1a50ac
commit
144d634a21
|
@ -7,14 +7,14 @@
|
|||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/page.h>
|
||||
#include "sizes.h"
|
||||
|
||||
__HEAD
|
||||
.globl startup_continue
|
||||
startup_continue:
|
||||
ENTRY(startup_continue)
|
||||
basr %r13,0 # get base
|
||||
.LPG1:
|
||||
# setup stack
|
||||
|
|
|
@ -7,14 +7,14 @@
|
|||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/page.h>
|
||||
#include "sizes.h"
|
||||
|
||||
__HEAD
|
||||
.globl startup_continue
|
||||
startup_continue:
|
||||
ENTRY(startup_continue)
|
||||
basr %r13,0 # get base
|
||||
.LPG1:
|
||||
# setup stack
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
#ifndef __ASM_LINKAGE_H
|
||||
#define __ASM_LINKAGE_H
|
||||
|
||||
/* Nothing to see here... */
|
||||
#include <linux/stringify.h>
|
||||
|
||||
#define __ALIGN .align 4, 0x07
|
||||
#define __ALIGN_STR __stringify(__ALIGN)
|
||||
|
||||
#endif
|
||||
|
|
|
@ -6,13 +6,13 @@
|
|||
* Michael Holzheu <holzheu@de.ibm.com>
|
||||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/ptrace.h>
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
|
||||
.globl s390_base_mcck_handler
|
||||
s390_base_mcck_handler:
|
||||
ENTRY(s390_base_mcck_handler)
|
||||
basr %r13,0
|
||||
0: lg %r15,__LC_PANIC_STACK # load panic stack
|
||||
aghi %r15,-STACK_FRAME_OVERHEAD
|
||||
|
@ -26,13 +26,13 @@ s390_base_mcck_handler:
|
|||
lpswe __LC_MCK_OLD_PSW
|
||||
|
||||
.section .bss
|
||||
.align 8
|
||||
.globl s390_base_mcck_handler_fn
|
||||
s390_base_mcck_handler_fn:
|
||||
.quad 0
|
||||
.previous
|
||||
|
||||
.globl s390_base_ext_handler
|
||||
s390_base_ext_handler:
|
||||
ENTRY(s390_base_ext_handler)
|
||||
stmg %r0,%r15,__LC_SAVE_AREA
|
||||
basr %r13,0
|
||||
0: aghi %r15,-STACK_FRAME_OVERHEAD
|
||||
|
@ -46,13 +46,13 @@ s390_base_ext_handler:
|
|||
lpswe __LC_EXT_OLD_PSW
|
||||
|
||||
.section .bss
|
||||
.align 8
|
||||
.globl s390_base_ext_handler_fn
|
||||
s390_base_ext_handler_fn:
|
||||
.quad 0
|
||||
.previous
|
||||
|
||||
.globl s390_base_pgm_handler
|
||||
s390_base_pgm_handler:
|
||||
ENTRY(s390_base_pgm_handler)
|
||||
stmg %r0,%r15,__LC_SAVE_AREA
|
||||
basr %r13,0
|
||||
0: aghi %r15,-STACK_FRAME_OVERHEAD
|
||||
|
@ -70,6 +70,7 @@ disabled_wait_psw:
|
|||
.quad 0x0002000180000000,0x0000000000000000 + s390_base_pgm_handler
|
||||
|
||||
.section .bss
|
||||
.align 8
|
||||
.globl s390_base_pgm_handler_fn
|
||||
s390_base_pgm_handler_fn:
|
||||
.quad 0
|
||||
|
@ -77,8 +78,7 @@ s390_base_pgm_handler_fn:
|
|||
|
||||
#else /* CONFIG_64BIT */
|
||||
|
||||
.globl s390_base_mcck_handler
|
||||
s390_base_mcck_handler:
|
||||
ENTRY(s390_base_mcck_handler)
|
||||
basr %r13,0
|
||||
0: l %r15,__LC_PANIC_STACK # load panic stack
|
||||
ahi %r15,-STACK_FRAME_OVERHEAD
|
||||
|
@ -93,13 +93,13 @@ s390_base_mcck_handler:
|
|||
2: .long s390_base_mcck_handler_fn
|
||||
|
||||
.section .bss
|
||||
.align 4
|
||||
.globl s390_base_mcck_handler_fn
|
||||
s390_base_mcck_handler_fn:
|
||||
.long 0
|
||||
.previous
|
||||
|
||||
.globl s390_base_ext_handler
|
||||
s390_base_ext_handler:
|
||||
ENTRY(s390_base_ext_handler)
|
||||
stm %r0,%r15,__LC_SAVE_AREA
|
||||
basr %r13,0
|
||||
0: ahi %r15,-STACK_FRAME_OVERHEAD
|
||||
|
@ -115,13 +115,13 @@ s390_base_ext_handler:
|
|||
2: .long s390_base_ext_handler_fn
|
||||
|
||||
.section .bss
|
||||
.align 4
|
||||
.globl s390_base_ext_handler_fn
|
||||
s390_base_ext_handler_fn:
|
||||
.long 0
|
||||
.previous
|
||||
|
||||
.globl s390_base_pgm_handler
|
||||
s390_base_pgm_handler:
|
||||
ENTRY(s390_base_pgm_handler)
|
||||
stm %r0,%r15,__LC_SAVE_AREA
|
||||
basr %r13,0
|
||||
0: ahi %r15,-STACK_FRAME_OVERHEAD
|
||||
|
@ -142,6 +142,7 @@ disabled_wait_psw:
|
|||
.long 0x000a0000,0x00000000 + s390_base_pgm_handler
|
||||
|
||||
.section .bss
|
||||
.align 4
|
||||
.globl s390_base_pgm_handler_fn
|
||||
s390_base_pgm_handler_fn:
|
||||
.long 0
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -9,8 +9,8 @@
|
|||
* Heiko Carstens <heiko.carstens@de.ibm.com>
|
||||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/cache.h>
|
||||
#include <asm/errno.h>
|
||||
#include <asm/ptrace.h>
|
||||
|
@ -197,8 +197,7 @@ STACK_SIZE = 1 << STACK_SHIFT
|
|||
* Returns:
|
||||
* gpr2 = prev
|
||||
*/
|
||||
.globl __switch_to
|
||||
__switch_to:
|
||||
ENTRY(__switch_to)
|
||||
basr %r1,0
|
||||
0: l %r4,__THREAD_info(%r2) # get thread_info of prev
|
||||
l %r5,__THREAD_info(%r3) # get thread_info of next
|
||||
|
@ -224,8 +223,7 @@ __critical_start:
|
|||
* are executed with interrupts enabled.
|
||||
*/
|
||||
|
||||
.globl system_call
|
||||
system_call:
|
||||
ENTRY(system_call)
|
||||
stpt __LC_SYNC_ENTER_TIMER
|
||||
sysc_saveall:
|
||||
SAVE_ALL_SVC __LC_SVC_OLD_PSW,__LC_SAVE_AREA
|
||||
|
@ -388,8 +386,7 @@ sysc_tracenogo:
|
|||
#
|
||||
# a new process exits the kernel with ret_from_fork
|
||||
#
|
||||
.globl ret_from_fork
|
||||
ret_from_fork:
|
||||
ENTRY(ret_from_fork)
|
||||
l %r13,__LC_SVC_NEW_PSW+4
|
||||
l %r12,__LC_THREAD_INFO # load pointer to thread_info struct
|
||||
tm SP_PSW+1(%r15),0x01 # forking a kernel thread ?
|
||||
|
@ -405,8 +402,7 @@ ret_from_fork:
|
|||
# kernel_execve function needs to deal with pt_regs that is not
|
||||
# at the usual place
|
||||
#
|
||||
.globl kernel_execve
|
||||
kernel_execve:
|
||||
ENTRY(kernel_execve)
|
||||
stm %r12,%r15,48(%r15)
|
||||
lr %r14,%r15
|
||||
l %r13,__LC_SVC_NEW_PSW+4
|
||||
|
@ -438,8 +434,7 @@ kernel_execve:
|
|||
* Program check handler routine
|
||||
*/
|
||||
|
||||
.globl pgm_check_handler
|
||||
pgm_check_handler:
|
||||
ENTRY(pgm_check_handler)
|
||||
/*
|
||||
* First we need to check for a special case:
|
||||
* Single stepping an instruction that disables the PER event mask will
|
||||
|
@ -565,8 +560,7 @@ kernel_per:
|
|||
* IO interrupt handler routine
|
||||
*/
|
||||
|
||||
.globl io_int_handler
|
||||
io_int_handler:
|
||||
ENTRY(io_int_handler)
|
||||
stck __LC_INT_CLOCK
|
||||
stpt __LC_ASYNC_ENTER_TIMER
|
||||
SAVE_ALL_ASYNC __LC_IO_OLD_PSW,__LC_SAVE_AREA+16
|
||||
|
@ -703,8 +697,7 @@ io_notify_resume:
|
|||
* External interrupt handler routine
|
||||
*/
|
||||
|
||||
.globl ext_int_handler
|
||||
ext_int_handler:
|
||||
ENTRY(ext_int_handler)
|
||||
stck __LC_INT_CLOCK
|
||||
stpt __LC_ASYNC_ENTER_TIMER
|
||||
SAVE_ALL_ASYNC __LC_EXT_OLD_PSW,__LC_SAVE_AREA+16
|
||||
|
@ -731,8 +724,7 @@ __critical_end:
|
|||
* Machine check handler routines
|
||||
*/
|
||||
|
||||
.globl mcck_int_handler
|
||||
mcck_int_handler:
|
||||
ENTRY(mcck_int_handler)
|
||||
stck __LC_MCCK_CLOCK
|
||||
spt __LC_CPU_TIMER_SAVE_AREA # revalidate cpu timer
|
||||
lm %r0,%r15,__LC_GPREGS_SAVE_AREA # revalidate gprs
|
||||
|
@ -818,8 +810,7 @@ mcck_return:
|
|||
*/
|
||||
#ifdef CONFIG_SMP
|
||||
__CPUINIT
|
||||
.globl restart_int_handler
|
||||
restart_int_handler:
|
||||
ENTRY(restart_int_handler)
|
||||
basr %r1,0
|
||||
restart_base:
|
||||
spt restart_vtime-restart_base(%r1)
|
||||
|
@ -848,8 +839,7 @@ restart_vtime:
|
|||
/*
|
||||
* If we do not run with SMP enabled, let the new CPU crash ...
|
||||
*/
|
||||
.globl restart_int_handler
|
||||
restart_int_handler:
|
||||
ENTRY(restart_int_handler)
|
||||
basr %r1,0
|
||||
restart_base:
|
||||
lpsw restart_crash-restart_base(%r1)
|
||||
|
|
|
@ -9,8 +9,8 @@
|
|||
* Heiko Carstens <heiko.carstens@de.ibm.com>
|
||||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/cache.h>
|
||||
#include <asm/errno.h>
|
||||
#include <asm/ptrace.h>
|
||||
|
@ -219,8 +219,7 @@ _TIF_EXIT_SIE = (_TIF_SIGPENDING | _TIF_NEED_RESCHED | _TIF_MCCK_PENDING)
|
|||
* Returns:
|
||||
* gpr2 = prev
|
||||
*/
|
||||
.globl __switch_to
|
||||
__switch_to:
|
||||
ENTRY(__switch_to)
|
||||
lg %r4,__THREAD_info(%r2) # get thread_info of prev
|
||||
lg %r5,__THREAD_info(%r3) # get thread_info of next
|
||||
tm __TI_flags+7(%r4),_TIF_MCCK_PENDING # machine check pending?
|
||||
|
@ -245,8 +244,7 @@ __critical_start:
|
|||
* are executed with interrupts enabled.
|
||||
*/
|
||||
|
||||
.globl system_call
|
||||
system_call:
|
||||
ENTRY(system_call)
|
||||
stpt __LC_SYNC_ENTER_TIMER
|
||||
sysc_saveall:
|
||||
SAVE_ALL_SVC __LC_SVC_OLD_PSW,__LC_SAVE_AREA
|
||||
|
@ -408,8 +406,7 @@ sysc_tracenogo:
|
|||
#
|
||||
# a new process exits the kernel with ret_from_fork
|
||||
#
|
||||
.globl ret_from_fork
|
||||
ret_from_fork:
|
||||
ENTRY(ret_from_fork)
|
||||
lg %r13,__LC_SVC_NEW_PSW+8
|
||||
lg %r12,__LC_THREAD_INFO # load pointer to thread_info struct
|
||||
tm SP_PSW+1(%r15),0x01 # forking a kernel thread ?
|
||||
|
@ -424,8 +421,7 @@ ret_from_fork:
|
|||
# kernel_execve function needs to deal with pt_regs that is not
|
||||
# at the usual place
|
||||
#
|
||||
.globl kernel_execve
|
||||
kernel_execve:
|
||||
ENTRY(kernel_execve)
|
||||
stmg %r12,%r15,96(%r15)
|
||||
lgr %r14,%r15
|
||||
aghi %r15,-SP_SIZE
|
||||
|
@ -455,8 +451,7 @@ kernel_execve:
|
|||
* Program check handler routine
|
||||
*/
|
||||
|
||||
.globl pgm_check_handler
|
||||
pgm_check_handler:
|
||||
ENTRY(pgm_check_handler)
|
||||
/*
|
||||
* First we need to check for a special case:
|
||||
* Single stepping an instruction that disables the PER event mask will
|
||||
|
@ -584,8 +579,7 @@ kernel_per:
|
|||
/*
|
||||
* IO interrupt handler routine
|
||||
*/
|
||||
.globl io_int_handler
|
||||
io_int_handler:
|
||||
ENTRY(io_int_handler)
|
||||
stck __LC_INT_CLOCK
|
||||
stpt __LC_ASYNC_ENTER_TIMER
|
||||
SAVE_ALL_ASYNC __LC_IO_OLD_PSW,__LC_SAVE_AREA+40
|
||||
|
@ -719,8 +713,7 @@ io_notify_resume:
|
|||
/*
|
||||
* External interrupt handler routine
|
||||
*/
|
||||
.globl ext_int_handler
|
||||
ext_int_handler:
|
||||
ENTRY(ext_int_handler)
|
||||
stck __LC_INT_CLOCK
|
||||
stpt __LC_ASYNC_ENTER_TIMER
|
||||
SAVE_ALL_ASYNC __LC_EXT_OLD_PSW,__LC_SAVE_AREA+40
|
||||
|
@ -749,8 +742,7 @@ __critical_end:
|
|||
/*
|
||||
* Machine check handler routines
|
||||
*/
|
||||
.globl mcck_int_handler
|
||||
mcck_int_handler:
|
||||
ENTRY(mcck_int_handler)
|
||||
stck __LC_MCCK_CLOCK
|
||||
la %r1,4095 # revalidate r1
|
||||
spt __LC_CPU_TIMER_SAVE_AREA-4095(%r1) # revalidate cpu timer
|
||||
|
@ -836,8 +828,7 @@ mcck_done:
|
|||
*/
|
||||
#ifdef CONFIG_SMP
|
||||
__CPUINIT
|
||||
.globl restart_int_handler
|
||||
restart_int_handler:
|
||||
ENTRY(restart_int_handler)
|
||||
basr %r1,0
|
||||
restart_base:
|
||||
spt restart_vtime-restart_base(%r1)
|
||||
|
@ -864,8 +855,7 @@ restart_vtime:
|
|||
/*
|
||||
* If we do not run with SMP enabled, let the new CPU crash ...
|
||||
*/
|
||||
.globl restart_int_handler
|
||||
restart_int_handler:
|
||||
ENTRY(restart_int_handler)
|
||||
basr %r1,0
|
||||
restart_base:
|
||||
lpswe restart_crash-restart_base(%r1)
|
||||
|
@ -1055,8 +1045,7 @@ cleanup_io_restore_insn:
|
|||
* %r2 pointer to sie control block
|
||||
* %r3 guest register save area
|
||||
*/
|
||||
.globl sie64a
|
||||
sie64a:
|
||||
ENTRY(sie64a)
|
||||
stmg %r6,%r14,__SF_GPRS(%r15) # save kernel registers
|
||||
stg %r2,__SF_EMPTY(%r15) # save control block pointer
|
||||
stg %r3,__SF_EMPTY+8(%r15) # save guest register save area
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/page.h>
|
||||
|
@ -383,8 +384,7 @@ iplstart:
|
|||
# doesn't need a builtin ipl record.
|
||||
#
|
||||
.org 0x800
|
||||
.globl start
|
||||
start:
|
||||
ENTRY(start)
|
||||
stm %r0,%r15,0x07b0 # store registers
|
||||
basr %r12,%r0
|
||||
.base:
|
||||
|
@ -448,8 +448,7 @@ start:
|
|||
# or linload or SALIPL
|
||||
#
|
||||
.org 0x10000
|
||||
.globl startup
|
||||
startup:
|
||||
ENTRY(startup)
|
||||
basr %r13,0 # get base
|
||||
.LPG0:
|
||||
xc 0x200(256),0x200 # partially clear lowcore
|
||||
|
|
|
@ -11,13 +11,13 @@
|
|||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/page.h>
|
||||
|
||||
__HEAD
|
||||
.globl startup_continue
|
||||
startup_continue:
|
||||
ENTRY(startup_continue)
|
||||
basr %r13,0 # get base
|
||||
.LPG1:
|
||||
|
||||
|
@ -78,8 +78,7 @@ startup_continue:
|
|||
.Lbase_cc:
|
||||
.long sched_clock_base_cc
|
||||
|
||||
.globl _ehead
|
||||
_ehead:
|
||||
ENTRY(_ehead)
|
||||
|
||||
#ifdef CONFIG_SHARED_KERNEL
|
||||
.org 0x100000 - 0x11000 # head.o ends at 0x11000
|
||||
|
@ -88,8 +87,8 @@ _ehead:
|
|||
#
|
||||
# startup-code, running in absolute addressing mode
|
||||
#
|
||||
.globl _stext
|
||||
_stext: basr %r13,0 # get base
|
||||
ENTRY(_stext)
|
||||
basr %r13,0 # get base
|
||||
.LPG3:
|
||||
# check control registers
|
||||
stctl %c0,%c15,0(%r15)
|
||||
|
|
|
@ -11,13 +11,13 @@
|
|||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/page.h>
|
||||
|
||||
__HEAD
|
||||
.globl startup_continue
|
||||
startup_continue:
|
||||
ENTRY(startup_continue)
|
||||
larl %r1,sched_clock_base_cc
|
||||
mvc 0(8,%r1),__LC_LAST_UPDATE_CLOCK
|
||||
larl %r13,.LPG1 # get base
|
||||
|
@ -76,8 +76,7 @@ startup_continue:
|
|||
.long 0x80000000,0,0,0 # invalid access-list entries
|
||||
.endr
|
||||
|
||||
.globl _ehead
|
||||
_ehead:
|
||||
ENTRY(_ehead)
|
||||
|
||||
#ifdef CONFIG_SHARED_KERNEL
|
||||
.org 0x100000 - 0x11000 # head.o ends at 0x11000
|
||||
|
@ -86,8 +85,8 @@ _ehead:
|
|||
#
|
||||
# startup-code, running in absolute addressing mode
|
||||
#
|
||||
.globl _stext
|
||||
_stext: basr %r13,0 # get base
|
||||
ENTRY(_stext)
|
||||
basr %r13,0 # get base
|
||||
.LPG3:
|
||||
# check control registers
|
||||
stctg %c0,%c15,0(%r15)
|
||||
|
|
|
@ -5,21 +5,19 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
|
||||
.section .kprobes.text, "ax"
|
||||
|
||||
.globl ftrace_stub
|
||||
ftrace_stub:
|
||||
ENTRY(ftrace_stub)
|
||||
br %r14
|
||||
|
||||
.globl _mcount
|
||||
_mcount:
|
||||
ENTRY(_mcount)
|
||||
#ifdef CONFIG_DYNAMIC_FTRACE
|
||||
br %r14
|
||||
|
||||
.globl ftrace_caller
|
||||
ftrace_caller:
|
||||
ENTRY(ftrace_caller)
|
||||
#endif
|
||||
stm %r2,%r5,16(%r15)
|
||||
bras %r1,2f
|
||||
|
@ -41,8 +39,7 @@ ftrace_caller:
|
|||
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
||||
l %r2,100(%r15)
|
||||
l %r3,152(%r15)
|
||||
.globl ftrace_graph_caller
|
||||
ftrace_graph_caller:
|
||||
ENTRY(ftrace_graph_caller)
|
||||
# The bras instruction gets runtime patched to call prepare_ftrace_return.
|
||||
# See ftrace_enable_ftrace_graph_caller. The patched instruction is:
|
||||
# bras %r14,prepare_ftrace_return
|
||||
|
@ -56,8 +53,7 @@ ftrace_graph_caller:
|
|||
|
||||
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
||||
|
||||
.globl return_to_handler
|
||||
return_to_handler:
|
||||
ENTRY(return_to_handler)
|
||||
stm %r2,%r5,16(%r15)
|
||||
st %r14,56(%r15)
|
||||
lr %r0,%r15
|
||||
|
|
|
@ -5,21 +5,19 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
|
||||
.section .kprobes.text, "ax"
|
||||
|
||||
.globl ftrace_stub
|
||||
ftrace_stub:
|
||||
ENTRY(ftrace_stub)
|
||||
br %r14
|
||||
|
||||
.globl _mcount
|
||||
_mcount:
|
||||
ENTRY(_mcount)
|
||||
#ifdef CONFIG_DYNAMIC_FTRACE
|
||||
br %r14
|
||||
|
||||
.globl ftrace_caller
|
||||
ftrace_caller:
|
||||
ENTRY(ftrace_caller)
|
||||
#endif
|
||||
larl %r1,function_trace_stop
|
||||
icm %r1,0xf,0(%r1)
|
||||
|
@ -37,8 +35,7 @@ ftrace_caller:
|
|||
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
||||
lg %r2,168(%r15)
|
||||
lg %r3,272(%r15)
|
||||
.globl ftrace_graph_caller
|
||||
ftrace_graph_caller:
|
||||
ENTRY(ftrace_graph_caller)
|
||||
# The bras instruction gets runtime patched to call prepare_ftrace_return.
|
||||
# See ftrace_enable_ftrace_graph_caller. The patched instruction is:
|
||||
# bras %r14,prepare_ftrace_return
|
||||
|
@ -52,8 +49,7 @@ ftrace_graph_caller:
|
|||
|
||||
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
||||
|
||||
.globl return_to_handler
|
||||
return_to_handler:
|
||||
ENTRY(return_to_handler)
|
||||
stmg %r2,%r5,32(%r15)
|
||||
lgr %r1,%r15
|
||||
aghi %r15,-160
|
||||
|
|
|
@ -6,14 +6,15 @@
|
|||
* Author(s): Holger Smolinski (Holger.Smolinski@de.ibm.com)
|
||||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
|
||||
#
|
||||
# do_reipl_asm
|
||||
# Parameter: r2 = schid of reipl device
|
||||
#
|
||||
.globl do_reipl_asm
|
||||
do_reipl_asm: basr %r13,0
|
||||
ENTRY(do_reipl_asm)
|
||||
basr %r13,0
|
||||
.Lpg0: lpsw .Lnewpsw-.Lpg0(%r13)
|
||||
.Lpg1: # do store status of all registers
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
* Denis Joseph Barrow,
|
||||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
|
||||
#
|
||||
|
@ -11,8 +12,8 @@
|
|||
# Parameter: r2 = schid of reipl device
|
||||
#
|
||||
|
||||
.globl do_reipl_asm
|
||||
do_reipl_asm: basr %r13,0
|
||||
ENTRY(do_reipl_asm)
|
||||
basr %r13,0
|
||||
.Lpg0: lpswe .Lnewpsw-.Lpg0(%r13)
|
||||
.Lpg1: # do store status of all registers
|
||||
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
|
||||
/*
|
||||
* moves the new kernel to its destination...
|
||||
* %r2 = pointer to first kimage_entry_t
|
||||
|
@ -22,8 +24,7 @@
|
|||
*/
|
||||
|
||||
.text
|
||||
.globl relocate_kernel
|
||||
relocate_kernel:
|
||||
ENTRY(relocate_kernel)
|
||||
basr %r13,0 # base address
|
||||
.base:
|
||||
stnsm sys_msk-.base(%r13),0xfb # disable DAT
|
||||
|
@ -112,6 +113,7 @@
|
|||
.byte 0
|
||||
.align 8
|
||||
relocate_kernel_end:
|
||||
.align 8
|
||||
.globl relocate_kernel_len
|
||||
relocate_kernel_len:
|
||||
.quad relocate_kernel_end - relocate_kernel
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
|
||||
/*
|
||||
* moves the new kernel to its destination...
|
||||
* %r2 = pointer to first kimage_entry_t
|
||||
|
@ -23,8 +25,7 @@
|
|||
*/
|
||||
|
||||
.text
|
||||
.globl relocate_kernel
|
||||
relocate_kernel:
|
||||
ENTRY(relocate_kernel)
|
||||
basr %r13,0 # base address
|
||||
.base:
|
||||
stnsm sys_msk-.base(%r13),0xfb # disable DAT
|
||||
|
@ -115,6 +116,7 @@
|
|||
.byte 0
|
||||
.align 8
|
||||
relocate_kernel_end:
|
||||
.align 8
|
||||
.globl relocate_kernel_len
|
||||
relocate_kernel_len:
|
||||
.quad relocate_kernel_end - relocate_kernel
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
|
||||
LC_EXT_NEW_PSW = 0x58 # addr of ext int handler
|
||||
LC_EXT_NEW_PSW_64 = 0x1b0 # addr of ext int handler 64 bit
|
||||
LC_EXT_INT_PARAM = 0x80 # addr of ext int parameter
|
||||
|
@ -260,8 +262,7 @@ _sclp_print:
|
|||
# R2 = 0 on success, 1 on failure
|
||||
#
|
||||
|
||||
.globl _sclp_print_early
|
||||
_sclp_print_early:
|
||||
ENTRY(_sclp_print_early)
|
||||
stm %r6,%r15,24(%r15) # save registers
|
||||
ahi %r15,-96 # create stack frame
|
||||
#ifdef CONFIG_64BIT
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/ptrace.h>
|
||||
|
||||
|
@ -16,9 +17,7 @@
|
|||
# %r6 - destination cpu
|
||||
|
||||
.section .text
|
||||
.align 4
|
||||
.globl smp_switch_to_cpu
|
||||
smp_switch_to_cpu:
|
||||
ENTRY(smp_switch_to_cpu)
|
||||
stm %r6,%r15,__SF_GPRS(%r15)
|
||||
lr %r1,%r15
|
||||
ahi %r15,-STACK_FRAME_OVERHEAD
|
||||
|
@ -33,8 +32,7 @@ smp_switch_to_cpu:
|
|||
brc 2,2b /* busy, try again */
|
||||
3: j 3b
|
||||
|
||||
.globl smp_restart_cpu
|
||||
smp_restart_cpu:
|
||||
ENTRY(smp_restart_cpu)
|
||||
basr %r13,0
|
||||
0: la %r1,.gprregs_addr-0b(%r13)
|
||||
l %r1,0(%r1)
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/ptrace.h>
|
||||
|
||||
|
@ -16,9 +17,7 @@
|
|||
# %r6 - destination cpu
|
||||
|
||||
.section .text
|
||||
.align 4
|
||||
.globl smp_switch_to_cpu
|
||||
smp_switch_to_cpu:
|
||||
ENTRY(smp_switch_to_cpu)
|
||||
stmg %r6,%r15,__SF_GPRS(%r15)
|
||||
lgr %r1,%r15
|
||||
aghi %r15,-STACK_FRAME_OVERHEAD
|
||||
|
@ -31,8 +30,7 @@ smp_switch_to_cpu:
|
|||
brc 2,2b /* busy, try again */
|
||||
3: j 3b
|
||||
|
||||
.globl smp_restart_cpu
|
||||
smp_restart_cpu:
|
||||
ENTRY(smp_restart_cpu)
|
||||
larl %r1,.gprregs
|
||||
lmg %r0,%r15,0(%r1)
|
||||
1: sigp %r0,%r5,__SIGP_SENSE /* Wait for calling CPU */
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
* Michael Holzheu <holzheu@linux.vnet.ibm.com>
|
||||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/thread_info.h>
|
||||
|
@ -22,9 +23,7 @@
|
|||
* This function runs with disabled interrupts.
|
||||
*/
|
||||
.section .text
|
||||
.align 4
|
||||
.globl swsusp_arch_suspend
|
||||
swsusp_arch_suspend:
|
||||
ENTRY(swsusp_arch_suspend)
|
||||
stmg %r6,%r15,__SF_GPRS(%r15)
|
||||
lgr %r1,%r15
|
||||
aghi %r15,-STACK_FRAME_OVERHEAD
|
||||
|
@ -112,8 +111,7 @@ swsusp_arch_suspend:
|
|||
* Then we return to the function that called swsusp_arch_suspend().
|
||||
* swsusp_arch_resume() runs with disabled interrupts.
|
||||
*/
|
||||
.globl swsusp_arch_resume
|
||||
swsusp_arch_resume:
|
||||
ENTRY(swsusp_arch_resume)
|
||||
stmg %r6,%r15,__SF_GPRS(%r15)
|
||||
lgr %r1,%r15
|
||||
aghi %r15,-STACK_FRAME_OVERHEAD
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
# S/390 __udiv_qrnnd
|
||||
|
||||
#include <linux/linkage.h>
|
||||
|
||||
# r2 : &__r
|
||||
# r3 : upper half of 64 bit word n
|
||||
# r4 : lower half of 64 bit word n
|
||||
|
@ -8,8 +10,7 @@
|
|||
# the quotient q is to be returned
|
||||
|
||||
.text
|
||||
.globl __udiv_qrnnd
|
||||
__udiv_qrnnd:
|
||||
ENTRY(__udiv_qrnnd)
|
||||
st %r2,24(%r15) # store pointer to reminder for later
|
||||
lr %r0,%r3 # reload n
|
||||
lr %r1,%r4
|
||||
|
|
Loading…
Reference in New Issue